クラスタリング分析の実践ノート

1. 必要なライブラリのインポートとデータの読み込み


import pandas as pd
import numpy as np
from scipy import stats
from sklearn.cluster import KMeans
from scipy.spatial.distance import cdist
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns

file_path = '1999年全国31个省份城镇居民家庭平均每人全年消费性支出数据.csv'  
data = pd.read_csv(file_path, encoding='gbk')  
data.head()

data.info()

2. データの前処理


data.isnull().any()
データに欠損値が見られなかったため、欠損値補完の工程は省略します。

3. データの標準化


X = data.iloc[:, 1:] 
X.head()

scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
print(np.round(X_scaled, 2))

4. エルボー法によるクラスタ数の推定


K = range(1, 11)

distortions = []
for k in K:
    kmeans = KMeans(n_clusters=k)
    kmeans.fit(X_scaled)
    distortions.append(
        sum(np.min(cdist(X_scaled, kmeans.cluster_centers_, 'euclidean'), axis=1)) / X_scaled.shape[0]
    )

plt.plot(K, distortions, 'bx--')
plt.title('Elbow Method')
plt.xlabel('クラスタ数')
plt.ylabel('Inertia')
plt.show()

5. KMeansによるクラスタリング


best_k = 2
kmeans = KMeans(n_clusters=best_k, random_state=42)
kmeans.fit(X_scaled)
labels = kmeans.labels_

data['クラスタ'] = labels
data.head()

6. 結果の可視化


sns.scatterplot(x='食品', y='医疗', hue='クラスタ', data=data, palette='viridis', s=70)
plt.title('KMeans クラスタリング結果')
plt.xlabel('食品')
plt.ylabel('医療')
plt.legend()
plt.show()

タグ: KMeans クラスタリング データ前処理 Scikit-learn 可視化

5月13日 01:51 投稿