Merge pull request 'Лабораторная работа 4' (#236) from orlov_artem_lab_4 into main

Reviewed-on: http://student.git.athene.tech/Alexey/IIS_2023_1/pulls/236
This commit is contained in:
Alexey 2023-12-07 15:23:00 +04:00
commit 695a1a3f39
4 changed files with 2493 additions and 0 deletions

56
orlov_artem_lab_4/app.py Normal file
View File

@ -0,0 +1,56 @@
from flask import Flask, render_template
import pandas as pd
from sklearn.manifold import TSNE
from sklearn.preprocessing import LabelEncoder
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
from io import BytesIO
import base64
app = Flask(__name__)
@app.route('/')
def index():
# Load the dataset
df = pd.read_csv('top_240_restaurants_recommended_in_los_angeles_2.csv')
# Select the columns for clustering
columns_for_clustering = ['Rank', 'StarRating', 'NumberOfReviews', 'Style']
# Encode the 'Style' column
label_encoder = LabelEncoder()
df['Style_encoded'] = label_encoder.fit_transform(df['Style'])
# Select the columns for clustering
data_for_clustering = df[['Rank', 'StarRating', 'NumberOfReviews', 'Style_encoded']]
# Perform t-SNE for dimensionality reduction
tsne = TSNE(n_components=2, random_state=42)
tsne_result = tsne.fit_transform(data_for_clustering)
# Perform k-means clustering
kmeans = KMeans(n_clusters=3, random_state=42)
df['Cluster'] = kmeans.fit_predict(data_for_clustering)
# Add t-SNE results to the DataFrame
df['tsne_1'] = tsne_result[:, 0]
df['tsne_2'] = tsne_result[:, 1]
# Save the figure to a BytesIO object
plt.scatter(df['tsne_1'], df['tsne_2'], c=df['Cluster'], cmap='viridis')
plt.title('t-SNE Clustering')
plt.xlabel('t-SNE Component 1')
plt.ylabel('t-SNE Component 2')
plt.tight_layout()
img_data = BytesIO()
plt.savefig(img_data, format='png')
img_data.seek(0)
# Convert the BytesIO object to base64 for embedding in HTML
img_base64 = base64.b64encode(img_data.getvalue()).decode('utf-8')
# Render the HTML template with the embedded image
return render_template('index.html', img_base64=img_base64)
if __name__ == '__main__':
app.run(debug=True)

View File

@ -0,0 +1,43 @@
Общее задание:
Использовать метод кластеризации к данным из курсовой работы, самостоятельно сформулировав задачу.
Интерпретировать результаты и оценить, насколько хорошо он подходит для решения сформулированной вами задачи.
Задание по вариантам:
Тема: Анализ данных Top 240 Recommended Restaurants in L.A. 2023
Ссылка на датасет:
https://www.kaggle.com/datasets/lorentzyeung/top-240-recommended-restaurants-in-la-2023?resource=download&select=top+240+restaurants+recommanded+in+los+angeles+2.csv
Задача для кластарезации: кластеризация ресторанов по их мировому рейтингу, звездному рейтингу, количеству отзывов и стилю
Запуск приложения: запуск файла app.py
Использованные технологии:
Flask: Веб-фреймворк для создания веб-приложений на Python.
pandas: Библиотека для работы с данными, предоставляющая структуры данных и инструменты анализа.
scikit-learn: Библиотека для машинного обучения в Python, включающая реализацию t-SNE и k-средних.
matplotlib: Библиотека для создания графиков и визуализации данных.
BytesIO: Инструмент для работы с байтовыми данными как с файлом в памяти.
base64: Кодирование и декодирование данных в формате base64.
Описание работы программы:
Чтение данных: Данные о ресторанах загружаются из CSV-файла.
Кодирование категориальных данных: Столбец 'Style' кодируется числовыми значениями с использованием LabelEncoder.
Выбор данных для кластеризации: Выбираются нужные столбцы для анализа и кластеризации ('Rank', 'StarRating', 'NumberOfReviews', 'Style_encoded').
t-SNE для уменьшения размерности: Применяется алгоритм t-SNE для уменьшения размерности данных до двух компонент.
KMeans для кластеризации: Применяется алгоритм k-средних для кластеризации данных.
Визуализация результатов: Результаты кластеризации отображаются на графике рассеяния.
Встраивание графика в HTML: График сохраняется в формате PNG и встраивается в HTML как изображение в формате base64.
Отправка результатов веб-приложению: Результаты передаются веб-приложению для отображения.
Пример входных данных:
Данные из файлов "top_240_restaurants_recommended_in_los_angeles_2.csv"
Rank,StarRating,NumberOfReviews,Style
1,4.4,2672,American (New)
2,4.3,1701,Cocktail Bars; Gastropubs
3,4.2,2557,Latin American; Korean; Noodles
Пример выходных данных:
График рассеяния, на котором каждая точка представляет ресторан, окрашенный в соответствии с кластером, к которому он отнесен.
Веб-страница, на которой отображается график.

View File

@ -0,0 +1,12 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>t-SNE Clustering</title>
</head>
<body>
<h1>t-SNE Clustering Results</h1>
<img src="data:image/png;base64,{{ img_base64 }}" alt="t-SNE Clustering">
</body>
</html>

File diff suppressed because one or more lines are too long