Untitled

mail@pastecode.io avatar
unknown
plain_text
2 years ago
1.7 kB
164
Indexable
Never
import pandas as pd
import itertools

from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
import seaborn as sns
import matplotlib.pyplot as plt


# определим функцию отрисовки графиков попарных признаков для кластеров
def show_clusters_on_plot(df, x_name,y_name, cluster_name):
    plt.figure(figsize = (5,5))
    sns.scatterplot(x=df[x_name], y=df[y_name],
           hue=df[cluster_name], palette='Paired'
       )
    plt.title('{} vs {}'.format(x_name, y_name))
    plt.show()

# читаем данные
travel = pd.read_csv('/datasets/tripadvisor_review_case.csv')
print(travel.shape)

# стандартизируем данные
sc = StandardScaler()
x_sc = sc.fit_transform(travel)

# задаём модель k_means с числом кластеров 3 и фиксируем значение random_state
km = KMeans(n_clusters=3, random_state=0)
# прогнозируем кластеры для наблюдений (алгоритм присваивает им номера от 0 до 2)
labels = km.fit_predict(x_sc)

# сохраняем метки кластера в поле датасета
travel['cluster_km'] = labels

# выводим статистику по средним значениям признаков по кластеру
clusters = travel.groupby(['cluster_km']).mean()
print(clusters)

# отрисуем графики для попарных сочетаний признаков с разметкой по кластерам
col_pairs = list(itertools.combinations(travel.drop('cluster_km', axis=1).columns, 2))
for pair in col_pairs:
    show_clusters_on_plot(travel, pair[0], pair[1], 'cluster_km')