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:
commit
695a1a3f39
56
orlov_artem_lab_4/app.py
Normal file
56
orlov_artem_lab_4/app.py
Normal 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)
|
43
orlov_artem_lab_4/readme.md
Normal file
43
orlov_artem_lab_4/readme.md
Normal 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
|
||||||
|
|
||||||
|
Пример выходных данных:
|
||||||
|
График рассеяния, на котором каждая точка представляет ресторан, окрашенный в соответствии с кластером, к которому он отнесен.
|
||||||
|
Веб-страница, на которой отображается график.
|
12
orlov_artem_lab_4/templates/index.html
Normal file
12
orlov_artem_lab_4/templates/index.html
Normal 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
Loading…
Reference in New Issue
Block a user