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)