49 lines
1.8 KiB
Python
49 lines
1.8 KiB
Python
|
from flask import Flask, render_template
|
|||
|
import pandas as pd
|
|||
|
from scipy.cluster.hierarchy import linkage, dendrogram
|
|||
|
import seaborn as sns
|
|||
|
import io
|
|||
|
import base64
|
|||
|
|
|||
|
app = Flask(__name__)
|
|||
|
|
|||
|
# Загрузка данных из файла games.csv
|
|||
|
data = pd.read_csv('games.csv')
|
|||
|
|
|||
|
# Загрузка данных из файла games.csv
|
|||
|
data = pd.read_csv('games.csv')
|
|||
|
|
|||
|
# Реализация кластеризации dendrogram
|
|||
|
def generate_dendrogram_image():
|
|||
|
# Выбираем интересующие нас переменные для кластеризации
|
|||
|
features = data[['genres', 'price', 'platform', 'developer']]
|
|||
|
|
|||
|
# Преобразовываем категориальные переменные в числовые (например, с помощью One-Hot Encoding)
|
|||
|
features = pd.get_dummies(features, columns=['genres', 'price', 'platform', 'developer'])
|
|||
|
|
|||
|
# Вычисляем матрицу расстояний и строим dendrogram с использованием seaborn
|
|||
|
linkage_matrix = linkage(features, method='ward')
|
|||
|
dendrogram_data = dendrogram(linkage_matrix, no_plot=True)
|
|||
|
|
|||
|
# Создаем изображение dendrogram с использованием seaborn
|
|||
|
sns.set(style='white')
|
|||
|
g = sns.clustermap(features, row_linkage=linkage_matrix, col_cluster=False, figsize=(24, 16))
|
|||
|
|
|||
|
# Сохраняем изображение в буфер
|
|||
|
img_buffer = io.BytesIO()
|
|||
|
g.savefig(img_buffer, format='png')
|
|||
|
img_buffer.seek(0)
|
|||
|
|
|||
|
# Преобразуем изображение в base64 строку
|
|||
|
img_base64 = base64.b64encode(img_buffer.read()).decode()
|
|||
|
|
|||
|
return img_base64
|
|||
|
|
|||
|
@app.route('/')
|
|||
|
def index():
|
|||
|
dendrogram_image = generate_dendrogram_image()
|
|||
|
return render_template('dendrogram.html', dendrogram_image=dendrogram_image)
|
|||
|
|
|||
|
if __name__ == '__main__':
|
|||
|
app.run(port=5000)
|