Merge pull request 'volkov_rafael_lab_4 is done' (#252) from volkov_rafael_lab_4 into main
Reviewed-on: http://student.git.athene.tech/Alexey/IIS_2023_1/pulls/252
This commit is contained in:
commit
a299dc3c18
51
volkov_rafael_lab_4/app.py
Normal file
51
volkov_rafael_lab_4/app.py
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
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
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
app = Flask(__name__)
|
||||||
|
|
||||||
|
# Загрузка данных из файла bgg_dataset.csv
|
||||||
|
data = pd.read_csv("bgg_dataset.csv", delimiter=";")
|
||||||
|
|
||||||
|
# Обработка данных: преобразование строк в числа и замена ',' на '.'
|
||||||
|
data['Rating Average'] = data['Rating Average'].str.replace(',', '.').astype(float)
|
||||||
|
data['Complexity Average'] = data['Complexity Average'].str.replace(',', '.').astype(float)
|
||||||
|
data['Year Published'] = pd.to_numeric(data['Year Published'], errors='coerce') # Если есть строки, которые не являются числами, они будут заменены на NaN
|
||||||
|
|
||||||
|
# Замена пропущенных значений средними значениями по столбцам
|
||||||
|
features = data[['Year Published', 'Users Rated', 'Rating Average', 'BGG Rank', 'Owned Users', 'Complexity Average']]
|
||||||
|
features = features.fillna(features.mean())
|
||||||
|
|
||||||
|
# Проверка наличия бесконечных значений
|
||||||
|
if not features.applymap(np.isfinite).all().all():
|
||||||
|
raise ValueError("Data contains infinite values")
|
||||||
|
|
||||||
|
# Вычисление матрицы расстояний и построение кластеров с использованием модели linkage
|
||||||
|
linkage_matrix = linkage(features, method='ward')
|
||||||
|
|
||||||
|
@app.route('/')
|
||||||
|
def index():
|
||||||
|
# Создание изображения кластеризации
|
||||||
|
sns.set(style='white')
|
||||||
|
g = sns.clustermap(features, row_linkage=linkage_matrix, col_cluster=False, figsize=(18, 12))
|
||||||
|
|
||||||
|
# Сохранение изображения в буфер
|
||||||
|
img_buffer = io.BytesIO()
|
||||||
|
g.savefig(img_buffer, format='png')
|
||||||
|
img_buffer.seek(0)
|
||||||
|
|
||||||
|
# Преобразование изображения в base64 строку
|
||||||
|
img_base64 = base64.b64encode(img_buffer.read()).decode()
|
||||||
|
|
||||||
|
# Освобождение ресурсов
|
||||||
|
plt.close(g.fig)
|
||||||
|
|
||||||
|
return render_template('index.html', cluster_image=img_base64)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app.run(port=5000, debug=True)
|
20344
volkov_rafael_lab_4/bgg_dataset.csv
Normal file
20344
volkov_rafael_lab_4/bgg_dataset.csv
Normal file
File diff suppressed because it is too large
Load Diff
36
volkov_rafael_lab_4/readme.md
Normal file
36
volkov_rafael_lab_4/readme.md
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
Общее задание:
|
||||||
|
Использовать метод кластеризации к данным из курсовой работы, самостоятельно сформулировав задачу.
|
||||||
|
Интерпретировать результаты и оценить, насколько хорошо он подходит для решения сформулированной вами задачи.
|
||||||
|
|
||||||
|
Задание по вариантам:
|
||||||
|
модель linkage
|
||||||
|
Датасет: Board Games
|
||||||
|
Ссылки:
|
||||||
|
https://www.kaggle.com/datasets/andrewmvd/board-games
|
||||||
|
|
||||||
|
Задача для кластарезации:
|
||||||
|
Кластеризация игр на основе их характеристик: 'Year Published', 'Users Rated', 'Rating Average', 'BGG Rank', 'Owned Users', 'Complexity Average'
|
||||||
|
Запуск через файл app.py
|
||||||
|
|
||||||
|
Технологии:
|
||||||
|
|
||||||
|
Flask: Фреймворк для создания веб-приложений на языке Python.
|
||||||
|
Pandas: Библиотека для анализа и обработки данных.
|
||||||
|
SciPy: Набор библиотек для научных вычислений в Python, включая функцию linkage для кластеризации.
|
||||||
|
Seaborn и Matplotlib: Библиотеки для визуализации данных.
|
||||||
|
Описание работы программы:
|
||||||
|
|
||||||
|
Загрузка данных: Программа загружает данные из файла 'bgg_dataset.csv', представленного в виде таблицы с различными параметрами игр (год выпуска, количество оценок пользователей, средний рейтинг и т.д.).
|
||||||
|
|
||||||
|
Обработка данных: Производится обработка данных, включая преобразование строк в числа, замену ',' на '.' и обработку пропущенных значений.
|
||||||
|
|
||||||
|
Кластеризация и построение дендрограммы: Применяется кластеризация методом linkage на основе выбранных параметров игр. Полученная матрица расстояний используется для построения дендрограммы с помощью библиотеки Seaborn.
|
||||||
|
|
||||||
|
Отображение в веб-приложении: Результат визуализации (дендрограмма) сохраняется в формате изображения и отображается в веб-приложении, созданном с использованием Flask.
|
||||||
|
|
||||||
|
Входные данные:
|
||||||
|
|
||||||
|
Файл 'bgg_dataset.csv' с данными об играх, включающими столбцы Year Published, Users Rated, Rating Average, BGG Rank, Owned Users, Complexity Average.
|
||||||
|
Выходные данные:
|
||||||
|
|
||||||
|
Веб-страница с отображенной дендрограммой, представляющей кластеризацию игр на основе выбранных параметров.
|
11
volkov_rafael_lab_4/templates/index.html
Normal file
11
volkov_rafael_lab_4/templates/index.html
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Cluster Analysis</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Cluster Analysis</h1>
|
||||||
|
<img src="data:image/png;base64,{{ cluster_image }}" alt="Cluster Analysis">
|
||||||
|
</body>
|
||||||
|
</html>
|
Loading…
Reference in New Issue
Block a user