225 lines
9.8 KiB
Python
225 lines
9.8 KiB
Python
import os
|
||
import secrets
|
||
from flask import Flask, request, render_template, session
|
||
from matplotlib import pyplot as plt
|
||
|
||
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
|
||
from LabWork01.LabWork3.AddData import addData
|
||
from LabWork01.LabWork3.CreateGraphics import createGraphics
|
||
from LabWork01.LabWork3.CustomGraphics import createCusGraphics
|
||
from LabWork01.LabWork3.DeletePng import deleteAllPng
|
||
from LabWork01.LabWork4.SiteSearch import SiteSearch
|
||
from LabWork01.LabWork5.Сreate_plot import create_plot_jpg
|
||
from LabWork01.LabWork6.Tree import getStringTree
|
||
|
||
app = Flask(__name__)
|
||
|
||
# Для работы session
|
||
secret = secrets.token_urlsafe(32)
|
||
app.secret_key = secret
|
||
|
||
#сразу загружаем весь док, чтобы потом просто прыгать по нему
|
||
listShops = createDataFrame()
|
||
|
||
#список типов данных по столбцам
|
||
listTypes = listShops.dtypes.to_list()
|
||
|
||
#формируем записи о кол-ве пустых ячеек в каждом столбце
|
||
countNull = listShops.isnull().sum()
|
||
|
||
# для фильтра Блума
|
||
search_engine = SiteSearch()
|
||
search_engine.add("https://www.kaggle.com/datasets/ankanhore545/100-highest-valued-unicorns", ["Company", "Valuation", "Country", "State", "City", "Industries", "Founded Year", "Name of Founders", "Total Funding", "Number of Employees"])
|
||
search_engine.add("https://www.kaggle.com/datasets/ilyaryabov/tesla-insider-trading", ["Insider Trading", "Relationship", "Date", "Transaction", "Cost", "Shares", "Value", "Shares Total", "SEC Form 4"])
|
||
search_engine.add("https://www.kaggle.com/datasets/sameepvani/nasa-nearest-earth-objects", ["NASA", "est_diameter_min", "est_diameter_max", "relative_velocity", "miss_distance", "orbiting_body", "sentry_object", "absolute_magnitude", "hazardous"])
|
||
search_engine.add("https://www.kaggle.com/datasets/surajjha101/stores-area-and-sales-data", ["Store", "Area", "Available", "Daily", "Customer", "Sales"])
|
||
search_engine.add("https://www.kaggle.com/datasets/uciml/pima-indians-diabetes-database", ["Health", "Diabetes", "India"])
|
||
search_engine.add("https://www.kaggle.com/datasets/mirichoi0218/insurance", ["age", "sex", "bmi"])
|
||
search_engine.add("https://www.kaggle.com/datasets/muhammedtausif/world-population-by-countries", ["Country", "Population", "Continent", "Capital", "Yearly Change", "Land Area", "Fertility","Density"])
|
||
search_engine.add("https://www.kaggle.com/datasets/deepcontractor/car-price-prediction-challenge", ["car", "price", "manufacturer"])
|
||
search_engine.add("https://www.kaggle.com/datasets/surajjha101/forbes-billionaires-data-preprocessed", ["Name", "Networth", "Source"])
|
||
search_engine.add("https://www.kaggle.com/datasets/fedesoriano/stroke-prediction-dataset", [ "heart_disease" , "bmi", "stroke" ])
|
||
|
||
|
||
@app.route("/", methods=['GET','POST'])
|
||
def home():
|
||
return render_template('main_page.html', context=[], main_img=[], messages=[], image_names=[], tableAnalys=[], titles=[''], listTypes=listTypes, countNull=countNull, firstRow=1, secondRow=4, firstColumn=1, secondColumn=4)
|
||
|
||
@app.route("/showDiapason", methods=['GET','POST'])
|
||
def numtext():
|
||
data = request.args
|
||
|
||
#получаем срез и таблицы по введёным параметрам
|
||
newListShops = listShops.iloc[int(data['firstRow'])-1:int(data['secondRow']), int(data['firstColumn']):int(data['secondColumn'])+1]
|
||
|
||
_range = range(int(data['firstColumn']), int(data['secondColumn'])+1)
|
||
|
||
#список списков для шаблона
|
||
totalList = []
|
||
|
||
print(countNull[1])
|
||
|
||
#формирование 4-х списков для шаблонизатора
|
||
if 1 in _range:
|
||
listStoreArea = newListShops['Store_Area'].to_list()
|
||
|
||
totalList.append(listStoreArea)
|
||
|
||
if 2 in _range:
|
||
listItemsAvailable = newListShops['Items_Available'].to_list()
|
||
|
||
totalList.append(listItemsAvailable)
|
||
|
||
if 3 in _range:
|
||
listDailyCustomerCount = newListShops['Daily_Customer_Count'].to_list()
|
||
|
||
totalList.append(listDailyCustomerCount)
|
||
|
||
if 4 in _range:
|
||
listStoreSales = newListShops['Store_Sales'].to_list()
|
||
|
||
totalList.append(listStoreSales)
|
||
|
||
if int(data['firstRow']) and int(data['secondRow']) and int(data['firstColumn']) and int(data['secondColumn']):
|
||
return render_template('main_page.html', context=totalList, main_img=[], messages=[], image_names=[], listTypes=listTypes, countNull=countNull,
|
||
firstColumn=int(data['firstColumn']), secondColumn=int(data['secondColumn']),
|
||
firstRow=int(data['firstRow']), secondRow=int(data['secondRow']))
|
||
|
||
return home()
|
||
|
||
#функция для проведения анализа данных
|
||
@app.route("/analysis", methods=['GET', 'POST'])
|
||
def analysis():
|
||
firstAnalys = analysItemsDataFrame(listShops)
|
||
secondAnalys = analysCustomersDataFrame(listShops)
|
||
thirdAnalys = analysSalesDataFrame(listShops)
|
||
fourthAnalys = analysSalesCustomersDataFrame(listShops)
|
||
|
||
# удаляем все текущие диаграммы
|
||
deleteAllPng()
|
||
|
||
# начинаем создавать диаграммы
|
||
createGraphics(firstAnalys, 'firstAn')
|
||
createGraphics(secondAnalys, 'secondAn')
|
||
createGraphics(thirdAnalys, 'thirdAn')
|
||
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,
|
||
messages=[],
|
||
titles=[''],
|
||
listTypes=listTypes, countNull=countNull, firstRow=1,
|
||
secondRow=4, firstColumn=1, secondColumn=4)
|
||
|
||
@app.route('/findURL', methods=['GET'])
|
||
def get_page_findURL():
|
||
return render_template('findURL.html', find=False, notFind=False)
|
||
|
||
@app.route('/findURL', methods=['POST'])
|
||
def findURL():
|
||
word = request.form["word"]
|
||
if (search_engine.contains(word)):
|
||
session["new_word"] = word
|
||
return render_template('findURL.html', find=True, notFind=False)
|
||
return render_template('findURL.html', find=False, notFind=True)
|
||
|
||
@app.route('/showFindLinks', methods=['POST'])
|
||
def get_page_showFindURL():
|
||
word = session.get("new_word", None)
|
||
|
||
links = search_engine.find_url(word)
|
||
word_links = []
|
||
for item in links:
|
||
word_links.append({item, word})
|
||
|
||
return render_template('showLinks.html', links=links)
|
||
|
||
# 5-я лабораторная
|
||
@app.route('/createPlotImage', methods=['GET', 'POST'])
|
||
def get_plot_image():
|
||
|
||
# 99%
|
||
# main_df = listShops.loc[listShops['Store_ID'] <= listShops.shape[0]*0.9]
|
||
|
||
# 1%
|
||
# support_df = listShops.loc[listShops['Store_ID'] > listShops.shape[0]*0.9]
|
||
|
||
messages = create_plot_jpg(listShops, "myPlot")
|
||
|
||
myPlotJpg = ['myPlot.jpg']
|
||
|
||
return render_template('main_page.html', context=[], image_names_start=[],
|
||
image_names_addition=[],
|
||
tableAnalysOne=[],
|
||
tableAnalysTwo=[],
|
||
tableAnalysThree=[],
|
||
tableAnalysFour=[],
|
||
main_img=myPlotJpg,
|
||
messages=messages,
|
||
titles=[''],
|
||
listTypes=listTypes, countNull=countNull, firstRow=1,
|
||
secondRow=4, firstColumn=1, secondColumn=4)
|
||
|
||
@app.route('/createTree', methods=['GET'])
|
||
def get_data_Tree():
|
||
DataTree = getStringTree().split('\n')
|
||
|
||
return render_template('tree_page.html', DataTree=DataTree)
|
||
|
||
if __name__=="__main__":
|
||
app.run(debug=True)
|
||
|