#https://c.biancheng.net/view/alx3djp.html
from sklearn.cluster import KMeans
"""
数据集:
X表示二维矩阵数据,篮球运动员比赛数据
总共20行,每行两列数据
第一列表示球员每分钟助攻数:x1
第二列表示球员每分钟得分数:x2
"""
X = [[0.0888,0.5885],[0.1399,0.8291],[0.0747,0.4974],[0.0983,0.5772],[0.1276,0.5703],
[0.1671,0.5835],[0.1906,0.5276],[0.1061,0.5523],[0.2446,0.4007],[0.1670,0.4770],
[0.2485,0.4313],[0.1227,0.4909],[0.1240,0.5668],[0.1461,0.5113],[0.2315,0.3788],
[0.0494,0.5590],[0.1107,0.4799],[0.2521,0.2735],[0.1007,0.6318],[0.1067,0.4326],
[0.1456,0.8280]]
"""
k均值聚类
clf = KMeans(n_clusters = 3)表示类簇数为3,聚成3类数据,clf即赋值为KMeans
y_pred = clf.fit_predict(X)载入数据集X,并且将聚类的结果赋值给y_pred
"""
clf = KMeans(n_clusters =3)
#聚类算法,参数n_clusters = 3,聚成3类
y_pred = clf.fit_predict(X)
#直接对数据进行聚类,聚类不需要进行预测
#输出完整k均值函数,包括很多省略参数
print('k均值模型:\n',clf)
#输出聚类预测结果,20行数据,每个y_pred对应X一行或一个球员,聚成3类,类标为0、1、2
print('聚类结果:\n',y_pred)

"""
可视化绘图
"""
import matplotlib.pyplot as plt
#显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']

#获取第一列和第二列数据使用for循环获取n[0]表示X第一列
x1 = [n[0]for n in X]
x2 = [n[1]for n in X]
#绘制散点图——参数:x横轴y纵轴c = y_pred聚类预测结果marker类型o表示圆点 * 表示
#星形x表示点
plt.scatter(x1,x2,c = y_pred,marker = 'x')
#绘制标题
plt.title("k均值篮球数据")
#绘制x轴和y轴坐标
plt.xlabel("x1")
plt.ylabel("x2")
#显示图形
plt.show()