From 671161347e329a39d210a214b7920dc213393228 Mon Sep 17 00:00:00 2001 From: ElEgEv <112943269+ElEgEv@users.noreply.github.com> Date: Thu, 28 Sep 2023 20:48:51 +0400 Subject: [PATCH] Lab work 2. --- LabWork01/AnalysCustomers.py | 23 ++++++++++++++++ LabWork01/AnalysSales.py | 23 ++++++++++++++++ LabWork01/AnalysSalesCustomers.py | 23 ++++++++++++++++ LabWork01/DataFrameAnalys.py | 25 +++++++++++++++++ LabWork01/FuncLoad.py | 3 -- LabWork01/LoadDB.py | 25 ++++++++++++----- LabWork01/templates/main_page.html | 44 ++++++++++++++++++++++++++++++ 7 files changed, 156 insertions(+), 10 deletions(-) create mode 100644 LabWork01/AnalysCustomers.py create mode 100644 LabWork01/AnalysSales.py create mode 100644 LabWork01/AnalysSalesCustomers.py create mode 100644 LabWork01/DataFrameAnalys.py diff --git a/LabWork01/AnalysCustomers.py b/LabWork01/AnalysCustomers.py new file mode 100644 index 0000000..339f5a1 --- /dev/null +++ b/LabWork01/AnalysCustomers.py @@ -0,0 +1,23 @@ +import pandas +import pandas as pd + +def analysCustomersDataFrame(df: pandas.DataFrame): + + df['Size'] = df['Store_Area'].apply(lambda x: 'Small' if x <= 1100 else ('Average' if 1100 < x <= 1800 else 'Big')) + + table_one = df.query("Size == 'Small'").groupby('Size') + table_two = df.query("Size == 'Average'").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_two = table_two.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() + + totalTable = pd.merge(minMaxMean_one, minMaxMean_two, left_index=True, right_index=True) + + totalTable = pd.merge(totalTable, minMaxMean_three, left_index=True, right_index=True) + + # for data in roundedListShops.items(): + # roundedListShops.loc[data[0], 'Store_Area'] = (data[1].astype("Int64")/100)*100 + + return totalTable \ No newline at end of file diff --git a/LabWork01/AnalysSales.py b/LabWork01/AnalysSales.py new file mode 100644 index 0000000..77a9fdb --- /dev/null +++ b/LabWork01/AnalysSales.py @@ -0,0 +1,23 @@ +import pandas +import pandas as pd + +def analysSalesDataFrame(df: pandas.DataFrame): + + df['Size'] = df['Store_Area'].apply(lambda x: 'Small' if x <= 1100 else ('Average' if 1100 < x <= 1800 else 'Big')) + + table_one = df.query("Size == 'Small'").groupby('Size') + table_two = df.query("Size == 'Average'").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_two = table_two.agg({'Store_Sales': ['min', 'max', 'mean']}).round(2).reset_index() + minMaxMean_three = table_three.agg({'Store_Sales': ['min', 'max', 'mean']}).round(2).reset_index() + + totalTable = pd.merge(minMaxMean_one, minMaxMean_two, left_index=True, right_index=True) + + totalTable = pd.merge(totalTable, minMaxMean_three, left_index=True, right_index=True) + + # for data in roundedListShops.items(): + # roundedListShops.loc[data[0], 'Store_Area'] = (data[1].astype("Int64")/100)*100 + + return totalTable \ No newline at end of file diff --git a/LabWork01/AnalysSalesCustomers.py b/LabWork01/AnalysSalesCustomers.py new file mode 100644 index 0000000..af7015e --- /dev/null +++ b/LabWork01/AnalysSalesCustomers.py @@ -0,0 +1,23 @@ +import pandas +import pandas as pd + +def analysSalesCustomersDataFrame(df: pandas.DataFrame): + + df['SaleCustomer'] = df['Daily_Customer_Count'].apply(lambda x: 'Small' if x <= 200 else ('Average' if 200 < x <= 800 else 'Big')) + + table_one = df.query("SaleCustomer == 'Small'").groupby('SaleCustomer') + table_two = df.query("SaleCustomer == 'Average'").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_two = table_two.agg({'Store_Sales': ['min', 'max', 'mean']}).round(2).reset_index() + minMaxMean_three = table_three.agg({'Store_Sales': ['min', 'max', 'mean']}).round(2).reset_index() + + totalTable = pd.merge(minMaxMean_one, minMaxMean_two, left_index=True, right_index=True) + + totalTable = pd.merge(totalTable, minMaxMean_three, left_index=True, right_index=True) + + # for data in roundedListShops.items(): + # roundedListShops.loc[data[0], 'Store_Area'] = (data[1].astype("Int64")/100)*100 + + return totalTable \ No newline at end of file diff --git a/LabWork01/DataFrameAnalys.py b/LabWork01/DataFrameAnalys.py new file mode 100644 index 0000000..0601d13 --- /dev/null +++ b/LabWork01/DataFrameAnalys.py @@ -0,0 +1,25 @@ +import pandas +import pandas as pd + +#или как analysDataFrame(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')) + + table_one = df.query("Size == 'Small'").groupby('Size') + table_two = df.query("Size == 'Average'").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_two = table_two.agg({'Items_Available': ['min', 'max', 'mean']}).round(2).reset_index() + minMaxMean_three = table_three.agg({'Items_Available': ['min', 'max', 'mean']}).round(2).reset_index() + + totalTable = pd.merge(minMaxMean_one, minMaxMean_two, left_index=True, right_index=True) + + totalTable = pd.merge(totalTable, minMaxMean_three, left_index=True, right_index=True) + + # for data in roundedListShops.items(): + # roundedListShops.loc[data[0], 'Store_Area'] = (data[1].astype("Int64")/100)*100 + + return totalTable \ No newline at end of file diff --git a/LabWork01/FuncLoad.py b/LabWork01/FuncLoad.py index 10dec80..08a34b0 100644 --- a/LabWork01/FuncLoad.py +++ b/LabWork01/FuncLoad.py @@ -1,7 +1,4 @@ -import csv -import numpy as np import pandas as pd -from LabWork01.Shop import Shop def createDataFrame(): df = pd.read_csv('../res/Stores.csv') diff --git a/LabWork01/LoadDB.py b/LabWork01/LoadDB.py index e8a40a3..cf63338 100644 --- a/LabWork01/LoadDB.py +++ b/LabWork01/LoadDB.py @@ -1,4 +1,9 @@ from flask import Flask, redirect, url_for, request, render_template + +from LabWork01.AnalysCustomers import analysCustomersDataFrame +from LabWork01.AnalysSales import analysSalesDataFrame +from LabWork01.AnalysSalesCustomers import analysSalesCustomersDataFrame +from LabWork01.DataFrameAnalys import analysItemsDataFrame from LabWork01.FuncLoad import createDataFrame app = Flask(__name__) @@ -14,7 +19,7 @@ countNull = listShops.isnull().sum() @app.route("/") def home(): - return render_template('main_page.html', context=[], listTypes=listTypes, countNull=countNull, firstRow=1, secondRow=4, firstColumn=1, secondColumn=4) + return render_template('main_page.html', context=[], tableAnalys=[], titles=[''], listTypes=listTypes, countNull=countNull, firstRow=1, secondRow=4, firstColumn=1, secondColumn=4) @app.route("/showDiapason", methods=['GET','POST']) def numtext(): @@ -61,17 +66,23 @@ def numtext(): #функция для проведения анализа данных @app.route("/analysis", methods=['GET', 'POST']) def analysis(): + firstAnalys = analysItemsDataFrame(listShops) - roundedListShops = listShops + secondAnalys = analysCustomersDataFrame(listShops) - for data in roundedListShops.items(): - roundedListShops.loc[data[0], 'Store_Area'] = (data[1].astype("Int64")/100)*100 + thirdAnalys = analysSalesDataFrame(listShops) - #groupingByArea = listShops.groupby(['Store_Area']/100*100).agg({'Items_Available': ['mean']}) + fourthAnalys = analysSalesCustomersDataFrame(listShops) - print(roundedListShops) + print(firstAnalys) - return home() + return render_template('main_page.html', context=[], tableAnalysOne=[firstAnalys.to_html()], + tableAnalysTwo=[secondAnalys.to_html()], + tableAnalysThree=[thirdAnalys.to_html()], + tableAnalysFour=[fourthAnalys.to_html()], + titles=[''], + listTypes=listTypes, countNull=countNull, firstRow=1, + secondRow=4, firstColumn=1, secondColumn=4) if __name__=="__main__": app.run(debug=True) diff --git a/LabWork01/templates/main_page.html b/LabWork01/templates/main_page.html index e6c1225..74ba7df 100644 --- a/LabWork01/templates/main_page.html +++ b/LabWork01/templates/main_page.html @@ -52,5 +52,49 @@ {% endfor %} +
+

+ Результаты первого анализа +

+

+ {% for table in tableAnalysOne %} +

{{ titles[loop.index] }}

+ {{ table|safe }} + {% endfor %} + +
+
+

+ Результаты второго анализа +

+

+ {% for table in tableAnalysTwo %} +

{{ titles[loop.index] }}

+ {{ table|safe }} + {% endfor %} + +
+
+

+ Результаты третьего анализа +

+

+ {% for table in tableAnalysThree %} +

{{ titles[loop.index] }}

+ {{ table|safe }} + {% endfor %} + +
+
+

+ Результаты четвёртого анализа +

+

+ {% for table in tableAnalysFour %} +

{{ titles[loop.index] }}

+ {{ table|safe }} + {% endfor %} + +
\ No newline at end of file