7.2 球类水平聚类分析 3D绘图

1.聚类分析

2.聚类的基本使用

2.1 思路

1.生成有2个特征,分布有3个中心的假数据
2.用散点图展示
3.训练预测并展示

2.2 实现

2.2.1导包

import numpy as np
import pandas as pd
from pandas import Series, DataFrame

import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

2.2.2 生成数据并展示

from sklearn.datasets import make_blobs
X, y = make_blobs(n_samples=150, n_features=2, centers=3, cluster_std=1.5, random_state=2) # 150个数据,2个特征,3个中心,方差为1.5, 随机种子为2.

展示
sns.set()
plt.scatter(X[:,0], X[:,1], c=y, cmap=plt.cm.Accent_r)

image.png

2.2.3 建模 KMeans聚类

from sklearn.cluster import KMeans
n_clusters=8 聚类的个数, 设置为一个整型数字
如何去确定你的聚类个数: 根据业务需求
km = KMeans(n_clusters=3) # 聚为3类,一般3维以上很难展示出来。


image.png

训练并预测
y_ = km.fit_predict(X)

展示结果

plt.figure(figsize=(12,4))

ax1 = plt.subplot(1,2,1)
ax2 = plt.subplot(1,2,2)

ax1.scatter(X[:,0], X[:,1], c=y, cmap=plt.cm.Accent)
ax2.scatter(X[:,0], X[:,1], c=y_, cmap=plt.cm.Accent)
ax2.scatter(cluster_centers[:,0], cluster_centers[:,1], color='red', marker='*', s=[200,800, 2000])

ax1.set_title('True')
ax2.set_title('Kmeans')

plt.show()

获取聚类中心

cluster_centers = km.cluster_centers_

3.球队综合实力聚类分析

3.1 导入数据

data = pd.read_csv('./data/AsiaZoo.txt', header=None)

data.columns = ["国家","2006世界杯","2010世界杯","2007亚洲杯"]

image.png

3.2 3D展示

from mpl_toolkits.mplot3d import Axes3D
plt.rcParams # 找到设置的项的名字
sns.set_style(style='white')# darkgrid, whitegrid, dark, white, ticks 设置图像背景格式

plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置中文展示
plt.rcParams['axes.unicode_minus'] = False #设置负数显示

绘图展示
plt.figure(figsize=(10,6))
ax = plt.subplot(projection = '3d') # 设置子画布

ax.scatter3D(data['2006世界杯'], data['2010世界杯'], data['2007亚洲杯'], s=200, c= y_, alpha=1) # 设置颜色按y_分类显示,alpha设置透明度,s设置点的大小。
ax.set_xlabel('2006世界杯') # 子画布的名称设置要用set_xlabel
ax.set_ylabel('2010世界杯')
ax.set_zlabel('2007亚洲杯')
plt.show()

image.png

3.3 准备X,建模

image.png

X = data.iloc[:,1:]
X


image.png

建模
km = KMeans(n_clusters=3) # 设置3个聚类中心
y_ = km.fit_predict(X) #训练并预测数据

image.png

3.4查看哪些球队被划分成一组

两层for循环。

data['类别'] = y_
for _, indexes in data.groupby('类别').groups.items():
countrys = data.loc[indexes, '国家']
for country in countrys:
print(country, end=' ')
print()

image.png

data.groups可以得到一组字典,进行遍历,得到索引,用索引对data进行访问。


image.png

你可能感兴趣的:(7.2 球类水平聚类分析 3D绘图)