diff --git a/sergeev_evgenii_lab_4/clusters.png b/sergeev_evgenii_lab_4/clusters.png new file mode 100644 index 0000000..66538e9 Binary files /dev/null and b/sergeev_evgenii_lab_4/clusters.png differ diff --git a/sergeev_evgenii_lab_4/lab4.py b/sergeev_evgenii_lab_4/lab4.py new file mode 100644 index 0000000..74a203c --- /dev/null +++ b/sergeev_evgenii_lab_4/lab4.py @@ -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) diff --git a/sergeev_evgenii_lab_4/readme.md b/sergeev_evgenii_lab_4/readme.md new file mode 100644 index 0000000..23ee0fb --- /dev/null +++ b/sergeev_evgenii_lab_4/readme.md @@ -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. Создает картинку разделения клиентов по кластерам +### Результаты тестирования +По результатам тестирования, можно сказать следующее: + +Вывод: +* Клиенты разделяются на различные группы по признакам +* Это может оказать помощь в изменении предоставляемых услуг +* Например, клиенты с семьями выбирают такие-то номера, богатые клиенты - другие +