❝この記事では、最も一般的に使用される「4つのグループ(グループ)関係図」を共有します。
❞
目次
7、グループ(グループ)関係図
48、クラスタリング樹状図(樹状図)
クラスタリングによって形成されたグループ内およびグループ間の類似性のレベルを示します。
import scipy.cluster.hierarchy as shc
# Import Data
df = pd.read_csv('./datasets/USArrests.csv')
# Plot
plt.figure(figsize=(12, 8), dpi=80)
plt.title("USArrests Dendograms", fontsize=18)
dend = shc.dendrogram(shc.linkage(df[['Murder', 'Assault', 'UrbanPop',
'Rape']],
method='ward'),
labels=df.State.values,
color_threshold=200)
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)
plt.show()
49.クラスタープロット
クラスタリングを通じて距離を計算し、同じカテゴリを丸で囲みます。
from sklearn.cluster import AgglomerativeClustering
from scipy.spatial import ConvexHull
# Import Data
df = pd.read_csv('./datasets/USArrests.csv')
# Agglomerative Clustering
cluster = AgglomerativeClustering(n_clusters=5,
affinity='euclidean',
linkage='ward')
cluster.fit_predict(df[['Murder', 'Assault', 'UrbanPop', 'Rape']])
# Plot
plt.figure(figsize=(12, 8), dpi=80)
plt.scatter(df.iloc[:, 0], df.iloc[:, 1], c=cluster.labels_, cmap='tab10')
# Encircle
def encircle(x, y, ax=None, **kw):
if not ax: ax = plt.gca()
p = np.c_[x, y]
hull = ConvexHull(p)
poly = plt.Polygon(p[hull.vertices, :], **kw)
ax.add_patch(poly)
# Draw polygon surrounding vertices
encircle(df.loc[cluster.labels_ == 0, 'Murder'],
df.loc[cluster.labels_ == 0, 'Assault'],
ec="k",
fc="#dc2624",
linewidth=0)
encircle(df.loc[cluster.labels_ == 1, 'Murder'],
df.loc[cluster.labels_ == 1, 'Assault'],
ec="k",
fc="#2b4750",
linewidth=0)
encircle(df.loc[cluster.labels_ == 2, 'Murder'],
df.loc[cluster.labels_ == 2, 'Assault'],
ec="k",
fc="#649E7D",
linewidth=0)
encircle(df.loc[cluster.labels_ == 3, 'Murder'],
df.loc[cluster.labels_ == 3, 'Assault'],
ec="k",
fc="#C89F91",
linewidth=0)
encircle(df.loc[cluster.labels_ == 4, 'Murder'],
df.loc[cluster.labels_ == 4, 'Assault'],
ec="k",
fc="#c7cccf",
linewidth=0)
# Decorations
plt.xlabel('Murder')
plt.xticks(fontsize=12)
plt.ylabel('Assault')
plt.yticks(fontsize=12)
plt.title('Agglomerative Clustering of USArrests (5 Groups)', fontsize=18)
plt.show()
50.アンドリュースカーブ
特定のグループ化の特性に基づいて、固有のグループ化があるかどうかを示します。たとえば、次の図では、データセットの列がcylグループを支援できない場合、行は適切に分離されません。
from pandas.plotting import andrews_curves
# Import
df = pd.read_csv("./datasets/mtcars.csv")
df.drop(['cars', 'carname'], axis=1, inplace=True)
# Plot
plt.figure(figsize=(10, 6), dpi=80)
andrews_curves(df, 'cyl', colormap='Set2_r')
# Lighten borders
plt.gca().spines["top"].set_alpha(0)
plt.gca().spines["bottom"].set_alpha(.3)
plt.gca().spines["right"].set_alpha(0)
plt.gca().spines["left"].set_alpha(.3)
plt.title('Andrews Curves of mtcars', fontsize=18)
plt.xlim(-3, 3)
plt.grid(alpha=0.3)
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)
plt.show()
51.平行座標
機能がグループ化に役立つかどうかを示します。機能が分離され、グループが影響を受ける場合、その機能はグループにとって非常に必要です。
from pandas.plotting import parallel_coordinates
# Import Data
df_final = pd.read_csv("./datasets/diamonds_filter.csv")
# Plot
plt.figure(figsize=(11, 7), dpi=80)
parallel_coordinates(df_final, 'cut', colormap='Set2_r')
# Lighten borders
plt.gca().spines["top"].set_alpha(0)
plt.gca().spines["bottom"].set_alpha(.3)
plt.gca().spines["right"].set_alpha(0)
plt.gca().spines["left"].set_alpha(.3)
plt.title('Parallel Coordinated of Diamonds', fontsize=18)
plt.grid(alpha=0.3)
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)
plt.show()