Untitled
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')