done lab4
This commit is contained in:
parent
b3e1e38eeb
commit
440a8d78cf
BIN
sergeev_evgenii_lab_4/clusters.png
Normal file
BIN
sergeev_evgenii_lab_4/clusters.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 217 KiB |
49
sergeev_evgenii_lab_4/lab4.py
Normal file
49
sergeev_evgenii_lab_4/lab4.py
Normal 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)
|
24
sergeev_evgenii_lab_4/readme.md
Normal file
24
sergeev_evgenii_lab_4/readme.md
Normal 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. Создает картинку разделения клиентов по кластерам
|
||||||
|
### Результаты тестирования
|
||||||
|
По результатам тестирования, можно сказать следующее:
|
||||||
|
|
||||||
|
Вывод:
|
||||||
|
* Клиенты разделяются на различные группы по признакам
|
||||||
|
* Это может оказать помощь в изменении предоставляемых услуг
|
||||||
|
* Например, клиенты с семьями выбирают такие-то номера, богатые клиенты - другие
|
||||||
|
|
Loading…
Reference in New Issue
Block a user