Сдал лабу, это пипец

This commit is contained in:
ElEgEv 2023-10-12 17:46:05 +04:00
parent 046f7619ba
commit 89b63e0cd6
8 changed files with 217 additions and 70 deletions

View File

@ -10,14 +10,29 @@ def analysCustomersDataFrame(df: pandas.DataFrame):
table_three = df.query("Size == 'Big'").groupby('Size') table_three = df.query("Size == 'Big'").groupby('Size')
minMaxMean_one = table_one.agg({'Daily_Customer_Count': ['min', 'max', 'mean']}).round(2).reset_index() minMaxMean_one = table_one.agg({'Daily_Customer_Count': ['min', 'max', 'mean']}).round(2).reset_index()
minMaxMean_one.columns = minMaxMean_one.columns.droplevel()
minMaxMean_two = table_two.agg({'Daily_Customer_Count': ['min', 'max', 'mean']}).round(2).reset_index() minMaxMean_two = table_two.agg({'Daily_Customer_Count': ['min', 'max', 'mean']}).round(2).reset_index()
minMaxMean_two.columns = minMaxMean_two.columns.droplevel()
minMaxMean_two = minMaxMean_two.iloc[:, 1:4]
minMaxMean_three = table_three.agg({'Daily_Customer_Count': ['min', 'max', 'mean']}).round(2).reset_index() minMaxMean_three = table_three.agg({'Daily_Customer_Count': ['min', 'max', 'mean']}).round(2).reset_index()
minMaxMean_three.columns = minMaxMean_three.columns.droplevel()
minMaxMean_three = minMaxMean_three.iloc[:, 1:4]
totalTable = pd.merge(minMaxMean_one, minMaxMean_two, left_index=True, right_index=True) df1 = pd.DataFrame()
df1['small'] = minMaxMean_one['min']
df1['average'] = minMaxMean_two['min']
df1['big'] = minMaxMean_three['min']
totalTable = pd.merge(totalTable, minMaxMean_three, left_index=True, right_index=True) df2 = pd.DataFrame()
df2['small'] = minMaxMean_one['max']
df2['average'] = minMaxMean_two['max']
df2['big'] = minMaxMean_three['max']
# for data in roundedListShops.items(): df3 = pd.DataFrame()
# roundedListShops.loc[data[0], 'Store_Area'] = (data[1].astype("Int64")/100)*100 df3['small'] = minMaxMean_one['mean']
df3['average'] = minMaxMean_two['mean']
df3['big'] = minMaxMean_three['mean']
totalTable = [df1, df2, df3]
return totalTable return totalTable

View File

@ -10,14 +10,29 @@ def analysSalesDataFrame(df: pandas.DataFrame):
table_three = df.query("Size == 'Big'").groupby('Size') table_three = df.query("Size == 'Big'").groupby('Size')
minMaxMean_one = table_one.agg({'Store_Sales': ['min', 'max', 'mean']}).round(2).reset_index() minMaxMean_one = table_one.agg({'Store_Sales': ['min', 'max', 'mean']}).round(2).reset_index()
minMaxMean_one.columns = minMaxMean_one.columns.droplevel()
minMaxMean_two = table_two.agg({'Store_Sales': ['min', 'max', 'mean']}).round(2).reset_index() minMaxMean_two = table_two.agg({'Store_Sales': ['min', 'max', 'mean']}).round(2).reset_index()
minMaxMean_two.columns = minMaxMean_two.columns.droplevel()
minMaxMean_two = minMaxMean_two.iloc[:, 1:4]
minMaxMean_three = table_three.agg({'Store_Sales': ['min', 'max', 'mean']}).round(2).reset_index() minMaxMean_three = table_three.agg({'Store_Sales': ['min', 'max', 'mean']}).round(2).reset_index()
minMaxMean_three.columns = minMaxMean_three.columns.droplevel()
minMaxMean_three = minMaxMean_three.iloc[:, 1:4]
totalTable = pd.merge(minMaxMean_one, minMaxMean_two, left_index=True, right_index=True) df1 = pd.DataFrame()
df1['small'] = minMaxMean_one['min']
df1['average'] = minMaxMean_two['min']
df1['big'] = minMaxMean_three['min']
totalTable = pd.merge(totalTable, minMaxMean_three, left_index=True, right_index=True) df2 = pd.DataFrame()
df2['small'] = minMaxMean_one['max']
df2['average'] = minMaxMean_two['max']
df2['big'] = minMaxMean_three['max']
# for data in roundedListShops.items(): df3 = pd.DataFrame()
# roundedListShops.loc[data[0], 'Store_Area'] = (data[1].astype("Int64")/100)*100 df3['small'] = minMaxMean_one['mean']
df3['average'] = minMaxMean_two['mean']
df3['big'] = minMaxMean_three['mean']
totalTable = [df1, df2, df3]
return totalTable return totalTable

View File

@ -10,14 +10,29 @@ def analysSalesCustomersDataFrame(df: pandas.DataFrame):
table_three = df.query("SaleCustomer == 'Big'").groupby('SaleCustomer') table_three = df.query("SaleCustomer == 'Big'").groupby('SaleCustomer')
minMaxMean_one = table_one.agg({'Store_Sales': ['min', 'max', 'mean']}).round(2).reset_index() minMaxMean_one = table_one.agg({'Store_Sales': ['min', 'max', 'mean']}).round(2).reset_index()
minMaxMean_one.columns = minMaxMean_one.columns.droplevel()
minMaxMean_two = table_two.agg({'Store_Sales': ['min', 'max', 'mean']}).round(2).reset_index() minMaxMean_two = table_two.agg({'Store_Sales': ['min', 'max', 'mean']}).round(2).reset_index()
minMaxMean_two.columns = minMaxMean_two.columns.droplevel()
minMaxMean_two = minMaxMean_two.iloc[:, 1:4]
minMaxMean_three = table_three.agg({'Store_Sales': ['min', 'max', 'mean']}).round(2).reset_index() minMaxMean_three = table_three.agg({'Store_Sales': ['min', 'max', 'mean']}).round(2).reset_index()
minMaxMean_three.columns = minMaxMean_three.columns.droplevel()
minMaxMean_three = minMaxMean_three.iloc[:, 1:4]
totalTable = pd.merge(minMaxMean_one, minMaxMean_two, left_index=True, right_index=True) df1 = pd.DataFrame()
df1['small'] = minMaxMean_one['min']
df1['average'] = minMaxMean_two['min']
df1['big'] = minMaxMean_three['min']
totalTable = pd.merge(totalTable, minMaxMean_three, left_index=True, right_index=True) df2 = pd.DataFrame()
df2['small'] = minMaxMean_one['max']
df2['average'] = minMaxMean_two['max']
df2['big'] = minMaxMean_three['max']
# for data in roundedListShops.items(): df3 = pd.DataFrame()
# roundedListShops.loc[data[0], 'Store_Area'] = (data[1].astype("Int64")/100)*100 df3['small'] = minMaxMean_one['mean']
df3['average'] = minMaxMean_two['mean']
df3['big'] = minMaxMean_three['mean']
totalTable = [df1, df2, df3]
return totalTable return totalTable

View File

@ -2,7 +2,6 @@ import pandas
import pandas as pd import pandas as pd
#или как analysDataFrame(df)->pandas.DataFrame: #или как analysDataFrame(df)->pandas.DataFrame:
def analysItemsDataFrame(df: pandas.DataFrame): def analysItemsDataFrame(df: pandas.DataFrame):
df['Size'] = df['Store_Area'].apply(lambda x: 'Small' if x <= 1100 else ('Average' if 1100 < x <= 1800 else 'Big')) df['Size'] = df['Store_Area'].apply(lambda x: 'Small' if x <= 1100 else ('Average' if 1100 < x <= 1800 else 'Big'))
@ -12,14 +11,29 @@ def analysItemsDataFrame(df: pandas.DataFrame):
table_three = df.query("Size == 'Big'").groupby('Size') table_three = df.query("Size == 'Big'").groupby('Size')
minMaxMean_one = table_one.agg({'Items_Available': ['min', 'max', 'mean']}).round(2).reset_index() minMaxMean_one = table_one.agg({'Items_Available': ['min', 'max', 'mean']}).round(2).reset_index()
minMaxMean_one.columns = minMaxMean_one.columns.droplevel()
minMaxMean_two = table_two.agg({'Items_Available': ['min', 'max', 'mean']}).round(2).reset_index() minMaxMean_two = table_two.agg({'Items_Available': ['min', 'max', 'mean']}).round(2).reset_index()
minMaxMean_two.columns = minMaxMean_two.columns.droplevel()
minMaxMean_two = minMaxMean_two.iloc[:, 1:4]
minMaxMean_three = table_three.agg({'Items_Available': ['min', 'max', 'mean']}).round(2).reset_index() minMaxMean_three = table_three.agg({'Items_Available': ['min', 'max', 'mean']}).round(2).reset_index()
minMaxMean_three.columns = minMaxMean_three.columns.droplevel()
minMaxMean_three = minMaxMean_three.iloc[:, 1:4]
totalTable = pd.merge(minMaxMean_one, minMaxMean_two, left_index=True, right_index=True) df1 = pd.DataFrame()
df1['small'] = minMaxMean_one['min']
df1['average'] = minMaxMean_two['min']
df1['big'] = minMaxMean_three['min']
totalTable = pd.merge(totalTable, minMaxMean_three, left_index=True, right_index=True) df2 = pd.DataFrame()
df2['small'] = minMaxMean_one['max']
df2['average'] = minMaxMean_two['max']
df2['big'] = minMaxMean_three['max']
# for data in roundedListShops.items(): df3 = pd.DataFrame()
# roundedListShops.loc[data[0], 'Store_Area'] = (data[1].astype("Int64")/100)*100 df3['small'] = minMaxMean_one['mean']
df3['average'] = minMaxMean_two['mean']
df3['big'] = minMaxMean_three['mean']
totalTable = [df1, df2, df3]
return totalTable return totalTable

View File

@ -1,11 +1,10 @@
import os import os
import glob
import pandas as pd import pandas as pd
import matplotlib import matplotlib
matplotlib.use('Agg') matplotlib.use('Agg')
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
def createGraphics(df: pd.DataFrame): def createGraphics(df: list[pd.DataFrame], nameFile):
# для сохранения диаграммы в конкретной папке # для сохранения диаграммы в конкретной папке
script_dir = os.path.dirname(__file__) script_dir = os.path.dirname(__file__)
results_dir = os.path.join(script_dir, '../static/') results_dir = os.path.join(script_dir, '../static/')
@ -13,34 +12,13 @@ def createGraphics(df: pd.DataFrame):
if not os.path.isdir(results_dir): if not os.path.isdir(results_dir):
os.makedirs(results_dir) os.makedirs(results_dir)
# ax = plt.gca() for i in range(len(df)):
# dataFrame = df[i]
# df.plot(kind='line', x='Store_Area', y='Items_Available', color='red', ax=ax) dataFrame.plot.bar()
# df.plot(kind='line', x='Store_Area', y='Daily_Customer_Count', color='yellow', ax=ax) plt.xlabel('Здесь чё-то')
plt.ylabel('Тоже чё-то')
df.plot(x="Items_Available", y="Store_Area", kind="bar") plt.title('Диаграмма про чё-то')
plt.savefig(results_dir + nameFile + str(i) + '.jpg')
plt.savefig(results_dir + 'file' + str(1) + '.jpg')
plt.close() plt.close()
df.boxplot(column=['Store_Area', 'Items_Available', 'Daily_Customer_Count'])
plt.savefig(results_dir + 'file' + str(2) + '.jpg')
plt.close()
df.boxplot(column=['Store_Sales'])
plt.savefig(results_dir + 'file' + str(3) + '.jpg')
plt.close()
# # сразу загружаем все созданные png файлы
# results_dir = os.path.join(script_dir, 'static/*')
#
# files = glob.glob(results_dir)
#
# return files
return True return True

View File

@ -0,0 +1,47 @@
import os
import numpy as np
import pandas as pd
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
def createCusGraphics(df: pd.DataFrame, newDf: pd.DataFrame):
# для сохранения диаграммы в конкретной папке
script_dir = os.path.dirname(__file__)
results_dir = os.path.join(script_dir, '../static/')
if not os.path.isdir(results_dir):
os.makedirs(results_dir)
df.rename(columns={'small': 'small_1', 'average': 'average_1', 'big': 'big_1'}, inplace=True)
newDf.rename(columns={'small': 'small_2', 'average': 'average_2', 'big': 'big_2'}, inplace=True)
# Объединяем две группы в один DataFrame
merged_df = pd.concat([df, newDf], axis=1, ignore_index=False)
# Создаем массив с индексами для каждой компании
index = np.arange(len(merged_df))
print(merged_df)
# Задаем ширину каждого столбца
bar_width = 0.2
# Построение столбчатой гистограммы с увеличенным расстоянием между столбцами
plt.bar(index, merged_df['small_1'], bar_width, label='Min 1', color='b')
plt.bar(index + bar_width, merged_df['average_1'], bar_width, label='Mean 1', color='g')
plt.bar(index + 2 * bar_width, merged_df['big_1'], bar_width, label='Max 1', color='r')
plt.bar(index + 3 * bar_width, merged_df['small_2'], bar_width, label='Min 2', color='c')
plt.bar(index + 4 * bar_width, merged_df['average_2'], bar_width, label='Mean 2', color='m')
plt.bar(index + 5 * bar_width, merged_df['big_2'], bar_width, label='Max 2', color='y')
# Устанавливаем подписи на оси x
plt.xlabel('Company')
plt.ylabel('Valuation')
plt.title('Company Valuation Comparison')
plt.xticks(index + 2.5 * bar_width, merged_df.index)
# Добавляем легенду
plt.legend()
plt.savefig(results_dir + 'CustomJPG' + str(0) + '.jpg')
plt.close()
return True

View File

@ -1,4 +1,7 @@
import os
from flask import Flask, redirect, url_for, request, render_template from flask import Flask, redirect, url_for, request, render_template
from matplotlib import pyplot as plt
from LabWork01.AnalysCustomers import analysCustomersDataFrame from LabWork01.AnalysCustomers import analysCustomersDataFrame
from LabWork01.AnalysSales import analysSalesDataFrame from LabWork01.AnalysSales import analysSalesDataFrame
@ -7,6 +10,7 @@ from LabWork01.DataFrameAnalys import analysItemsDataFrame
from LabWork01.FuncLoad import createDataFrame from LabWork01.FuncLoad import createDataFrame
from LabWork01.LabWork3.AddData import addData from LabWork01.LabWork3.AddData import addData
from LabWork01.LabWork3.CreateGraphics import createGraphics from LabWork01.LabWork3.CreateGraphics import createGraphics
from LabWork01.LabWork3.CustomGraphics import createCusGraphics
from LabWork01.LabWork3.DeletePng import deleteAllPng from LabWork01.LabWork3.DeletePng import deleteAllPng
@ -23,17 +27,7 @@ countNull = listShops.isnull().sum()
@app.route("/") @app.route("/")
def home(): def home():
additionListShops = addData(createDataFrame()) return render_template('main_page.html', context=[], main_img=[], image_names=[], tableAnalys=[], titles=[''], listTypes=listTypes, countNull=countNull, firstRow=1, secondRow=4, firstColumn=1, secondColumn=4)
# удаляем текущие диаграммы
deleteAllPng()
# создаём новые диаграммы
createGraphics(additionListShops)
image_names = ['file1.jpg', 'file2.jpg', 'file3.jpg']
return render_template('main_page.html', context=[], image_names=image_names, tableAnalys=[], titles=[''], listTypes=listTypes, countNull=countNull, firstRow=1, secondRow=4, firstColumn=1, secondColumn=4)
@app.route("/showDiapason", methods=['GET','POST']) @app.route("/showDiapason", methods=['GET','POST'])
def numtext(): def numtext():
@ -71,7 +65,7 @@ def numtext():
totalList.append(listStoreSales) totalList.append(listStoreSales)
if int(data['firstRow']) and int(data['secondRow']) and int(data['firstColumn']) and int(data['secondColumn']): if int(data['firstRow']) and int(data['secondRow']) and int(data['firstColumn']) and int(data['secondColumn']):
return render_template('main_page.html', context=totalList, image_names=[], listTypes=listTypes, countNull=countNull, return render_template('main_page.html', context=totalList, main_img=[], image_names=[], listTypes=listTypes, countNull=countNull,
firstColumn=int(data['firstColumn']), secondColumn=int(data['secondColumn']), firstColumn=int(data['firstColumn']), secondColumn=int(data['secondColumn']),
firstRow=int(data['firstRow']), secondRow=int(data['secondRow'])) firstRow=int(data['firstRow']), secondRow=int(data['secondRow']))
@ -81,20 +75,70 @@ def numtext():
@app.route("/analysis", methods=['GET', 'POST']) @app.route("/analysis", methods=['GET', 'POST'])
def analysis(): def analysis():
firstAnalys = analysItemsDataFrame(listShops) firstAnalys = analysItemsDataFrame(listShops)
secondAnalys = analysCustomersDataFrame(listShops) secondAnalys = analysCustomersDataFrame(listShops)
thirdAnalys = analysSalesDataFrame(listShops) thirdAnalys = analysSalesDataFrame(listShops)
fourthAnalys = analysSalesCustomersDataFrame(listShops) fourthAnalys = analysSalesCustomersDataFrame(listShops)
print(firstAnalys) # удаляем все текущие диаграммы
deleteAllPng()
return render_template('main_page.html', context=[], image_names=[], # начинаем создавать диаграммы
tableAnalysOne=[firstAnalys.to_html()], createGraphics(firstAnalys, 'firstAn')
tableAnalysTwo=[secondAnalys.to_html()], createGraphics(secondAnalys, 'secondAn')
tableAnalysThree=[thirdAnalys.to_html()], createGraphics(thirdAnalys, 'thirdAn')
tableAnalysFour=[fourthAnalys.to_html()], createGraphics(fourthAnalys, 'fourthAn')
# дополняем новыми значениями
additionListShops = addData(createDataFrame())
# получаем новые данные
newfirstAnalys = analysItemsDataFrame(additionListShops)
secondAnalys = analysCustomersDataFrame(additionListShops)
thirdAnalys = analysSalesDataFrame(additionListShops)
fourthAnalys = analysSalesCustomersDataFrame(additionListShops)
# создаём новые диаграммы
createGraphics(newfirstAnalys, 'addFirstAn')
createGraphics(secondAnalys, 'addSecondAn')
createGraphics(thirdAnalys, 'addThirdAn')
createGraphics(fourthAnalys, 'addFourthAn')
createCusGraphics(firstAnalys[0], newfirstAnalys[0])
image_names_start = ['firstAn0.jpg', 'firstAn1.jpg', 'firstAn2.jpg',
'secondAn0.jpg', 'secondAn1.jpg', 'secondAn2.jpg',
'thirdAn0.jpg', 'thirdAn1.jpg', 'thirdAn2.jpg',
'fourthAn0.jpg', 'fourthAn1.jpg', 'fourthAn2.jpg']
image_names_addition = ['addFirstAn0.jpg', 'addFirstAn1.jpg', 'addFirstAn2.jpg',
'addSecondAn0.jpg', 'addSecondAn1.jpg', 'addSecondAn2.jpg',
'addThirdAn0.jpg', 'addThirdAn1.jpg', 'addThirdAn2.jpg',
'addFourthAn0.jpg', 'addFourthAn1.jpg', 'addFourthAn2.jpg']
main_img = ['CustomJPG0.jpg']
result = listShops[['Store_Sales']]
# Строим boxplot с использованием Seaborn
plt.title('Valuation Boxplot by Store Sales')
plt.xlabel('Store Sales')
plt.boxplot(result['Store_Sales'])
script_dir = os.path.dirname(__file__)
results_dir = os.path.join(script_dir, 'static/')
plt.savefig(results_dir + 'NewCustomJPG' + str(0) + '.jpg')
newCustomJpg = ['NewCustomJPG0.jpg']
return render_template('main_page.html', context=[], image_names_start=image_names_start,
image_names_addition=image_names_addition,
tableAnalysOne=[],
tableAnalysTwo=[],
tableAnalysThree=[],
tableAnalysFour=[],
main_img=newCustomJpg,
titles=[''], titles=[''],
listTypes=listTypes, countNull=countNull, firstRow=1, listTypes=listTypes, countNull=countNull, firstRow=1,
secondRow=4, firstColumn=1, secondColumn=4) secondRow=4, firstColumn=1, secondColumn=4)

View File

@ -53,7 +53,26 @@
</table> </table>
</div> </div>
<div> <div>
{% for image_name in image_names %} <h3>
Данные до дополнения:
</h3>
{% for image_name in image_names_start %}
<img src="{{ url_for('static', filename=image_name) }}" alt="{{ image_name }}">
{% endfor %}
</div>
<div>
<h3>
Данные после дополнения:
</h3>
{% for image_name in image_names_addition %}
<img src="{{ url_for('static', filename=image_name) }}" alt="{{ image_name }}">
{% endfor %}
</div>
<div>
<h3>
По заданию:
</h3>
{% for image_name in main_img %}
<img src="{{ url_for('static', filename=image_name) }}" alt="{{ image_name }}"> <img src="{{ url_for('static', filename=image_name) }}" alt="{{ image_name }}">
{% endfor %} {% endfor %}
</div> </div>