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