<jupyter_start><jupyter_text>ライブラリのインポート<jupyter_code>import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.cluster import KMeans
from sklearn import preprocessing
from IPython.display import HTML, display
#出力結果に対してフィルタリング・ページング
%load_ext google.colab.data_table
sns.set() #seabornのデフォルトスタイルを適用<jupyter_output><empty_output><jupyter_text>データを読み込む- データの概要  - Satisfaction(満足度)   - 離散変数   - 範囲(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)  - Loyalty(ロイヤリティ)   - 直近一年間での購入履歴+ほかの要因   - 標準化済み   - 連続変数   - 範囲(-2.5 ~ 2.5)<jupyter_code>!gdown --id 1AApA-jqAFSXyZ80kgLQSk_gVkz6nq2Eh #Google driveからデータをダウンロード
data = pd.read_csv('3.12. Example.csv')
display(data)
display(data.describe(include='all'))
display(data.info())<jupyter_output>Downloading...
From: https://drive.google.com/uc?id=1AApA-jqAFSXyZ80kgLQSk_gVkz6nq2Eh
To: /content/3.12. Example.csv

  0% 0.00/283 [00:00<?, ?B/s]
100% 283/283 [00:00<00:00, 542kB/s]<jupyter_text>可視化<jupyter_code>sns.scatterplot(data=data, x='Satisfaction', y='Loyalty')<jupyter_output><empty_output><jupyter_text>クラスター分析に使うデータの指定<jupyter_code>Xs = []<jupyter_output><empty_output><jupyter_text>標準化していない<jupyter_code>Xs.append(data)<jupyter_output><empty_output><jupyter_text>標準化した<jupyter_code>Xs.append(preprocessing.scale(data))<jupyter_output><empty_output><jupyter_text>クラスター分析 クラスター数を求める(WCSS)<jupyter_code>labels = ['Not Standardized', 'Standardized']
fig, ax = plt.subplots(1, 2, figsize=(10, 10))
plt.subplots_adjust(wspace=0.4, hspace=0.6)
for index, (X, label) in enumerate(zip(Xs, labels)):
  wcss = []
  num_cluter = range(1,10)

  for i in num_cluter:
    kmeans = KMeans(n_clusters=i)
    kmeans.fit(X)
    wcss_iter = kmeans.inertia_
    wcss.append(wcss_iter)
  
  #エルボー法
  ax[index].plot(num_cluter, wcss)
  ax[index].set_title(label)
  ax[index].set_xlabel('Number of clusters')
  ax[index].set_ylabel('WCSS')
  ax[index].set_xlim([0, 10])
  ax[index].xaxis.set_ticks(np.arange(0, 10, 1)) #y軸目盛間隔を調整<jupyter_output><empty_output><jupyter_text>結果 標準化してない- 想定したクラスターではない- 満足度のみをもとにクラスタリングされたことが予想される(満足度の幅がロイヤリティより広いため)<jupyter_code>pred = KMeans(n_clusters=3).fit_predict(Xs[0])
data['Cluster'] = pred
sns.scatterplot(data=data, x='Satisfaction', y='Loyalty', hue="Cluster", palette="deep")<jupyter_output><empty_output><jupyter_text>標準化した<jupyter_code>pred = KMeans(n_clusters=3).fit_predict(Xs[1])
data['Cluster'] = pred
sns.scatterplot(data=data, x='Satisfaction', y='Loyalty', hue="Cluster", palette="deep")<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1523545706371191, 'fraction_numerical': 0.03403244954491492, 'mean_word_length': 7.598639455782313, 'pattern_counts': {'":': 0, '<': 38, '<?xml version=': 0, '>': 36, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 1, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '9', 'dir': 'jupyter-structured-clean-dedup', 'id': '659410', 'license': 'MIT', 'n_tokens_mistral': 1339, 'n_tokens_neox': 1272, 'n_words': 144, 'path': 'k_means.ipynb', 'repo_name': 'kentayamada-dev/machine-learning', 'size': '2527'}