Merge pull request 'done sergeev_evgenii_lab_4' (#146) from sergeev_evgenii_lab_4 into main

Reviewed-on: http://student.git.athene.tech/Alexey/IIS_2023_1/pulls/146
This commit is contained in:
Alexey 2023-12-07 15:08:52 +04:00
commit 908a9c9d2a
3 changed files with 73 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 KiB

View File

@ -0,0 +1,49 @@
import pandas as pd
import numpy as np
from sklearn.cluster import DBSCAN
from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
# Загружаю данные
df = pd.read_csv("hotel_bookings_raw.csv", delimiter=',')
# Объявляю объект для преобразования строковых значений в числовые
label_encoder = LabelEncoder()
# Признаки, по которым будет проходить кластеризация
features = ['lead_time', 'stays_in_weekend_nights', 'adults', 'children', 'babies', 'adr']
# Применяю к каждому столбцу признака преобразования
for f in features:
df[f] = label_encoder.fit_transform(df[f])
# Создаю объект для стандартизации данных
scaler = StandardScaler()
# Стандартизую признаки
scaled_features = scaler.fit_transform(df[features])
# Создаю объект для метода кластеризации DBSCAN
# Это алгоритм кластеризации,
# основанной на плотности —
# если дан набор точек в
# некотором пространстве, алгоритм
# группирует вместе точки, которые тесно расположены
# (точки со многими близкими соседями[en]), помечая как выбросы
# точки, которые находятся одиноко в областях с малой плотностью
# (ближайшие соседи которых лежат далеко). DBSCAN является одним
# из наиболее часто используемых алгоритмов кластеризации, и наиболее часто упоминается в научной литературе
dbscan = DBSCAN(eps=0.3, min_samples=5)
# Кластеризую данные по этим признакам
clusters = dbscan.fit_predict(scaled_features)
# Создаю график
plt.scatter(df[features[0]], df[features[1]], c=clusters)
plt.title('Метод кластеризации - DBSCAN')
plt.xlabel('Время до заезда')
plt.ylabel('Забронировано ночей в выходные дни')
# Сохранение графика в файл .png
plt.savefig('clusters.png', dpi=300)

View File

@ -0,0 +1,24 @@
# Лабораторная работа 4. Кластеризация
## Задание
Использовать метод кластеризации по варианту (24 == 4) для данных из таблицы 1, самостоятельно сформулировав задачу.
Интерпретировать результаты и оценить, насколько хорошо она подходит для решения сформулированной мной задачи.
Ссылка на мой датасет: https://www.kaggle.com/datasets/mlardi/hotel-booking-demand-with-economic-indicators
## Задача
В данном случае я определил задачу как кластеризацию клиентов по их характеристикам.
### Запуск программы
Файл lab4.py содержит и запускает программу.
### Описание программы
Программа состоит из двух частей:
1. Она считывает файл с данными о двух отелях: City Hotel и Resort Hotel. Содержит множество различных метрик
2. Далее определяет необходимые признаки для характеристики клиентов
3. Создает картинку разделения клиентов по кластерам
### Результаты тестирования
По результатам тестирования, можно сказать следующее:
Вывод:
* Клиенты разделяются на различные группы по признакам
* Это может оказать помощь в изменении предоставляемых услуг
* Например, клиенты с семьями выбирают такие-то номера, богатые клиенты - другие