首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

《Python数据挖掘及大数据分析》第四讲 Kmeans聚类代码实现、作业及优化

这篇文章直接给出上次关于Kmeans聚类的篮球远动员数据分析案例,同时介绍这次作业同学们完成的图例,最后介绍Matplotlib包绘图的优化知识。

希望这篇文章对你有所帮助,尤其是刚刚接触数据挖掘以及大数据的同学,同时准备尝试以案例为主的方式进行讲解。如果文章中存在不足或错误的地方,还请海涵~

一. 案例实现

篮球运动员数据,每分钟助攻和每分钟得分数。通过该数据集判断一个篮球运动员属于什么位置(控位、分位、中锋等)。完整数据集包括5个特征,每分钟助攻数、运动员身高、运动员出场时间、运动员年龄和每分钟得分数。

完整代码:

‍运行结果:

从图中可以看到聚集成三类,红色比较厉害,得分很高;中间蓝色是一类,普通球员;右小角绿色是一类,助攻高得分低,是控位。

‍代码分析:

fromsklearn.clusterimportKMeans

表示在sklearn中处理kmeans聚类问题,用到 sklearn.cluster.KMeans 这个类。

X = [[164,62],[156,50],...]

X是数据集,包括2列20行,即20个球员的助攻数和得分数。

clf = KMeans(n_clusters=3)

表示输出完整Kmeans函数,包括很多省略参数,将数据集分成类簇数为3的聚类。

y_pred =clf.fit_predict(X)

输出聚类预测结果,对X聚类,20行数据,每个y_pred对应X的一行或一个孩子,聚成3类,类标为0、1、2。

print(y_pred)

输出结果:[0 2 0 0 0 0 0 0 1 0 1 0 0 0 1 0 0 0 0 0 1]

importmatplotlib.pyplot as plt

matplotlib.pyplot是用来画图的方法,matplotlib是可视化包。

x = [n[0]forninX]

y = [n[1]forninX]

获取第1列的值, 使用for循环获取 ,n[0]表示X第一列。

获取第2列的值,使用for循环获取 ,n[1]表示X第2列。

plt.scatter(x, y, c=y_pred, marker='o')

绘制散点图(scatter),横轴为x,获取的第1列数据;纵轴为y,获取的第2列数据;c=y_pred对聚类的预测结果画出散点图,marker='o'说明用点表示图形。

plt.title("Kmeans-Basketball Data")

表示图形的标题为Kmeans-heightweight Data。

plt.xlabel("assists_per_minute")

表示图形x轴的标题。

plt.ylabel("points_per_minute")

表示图形y轴的标题。

plt.legend(["Rank"])

设置右上角图例。

plt.show()

表示显示图形。

二. 学生图例

下面简单展示学生做的作业及分析,感觉还是不错,毕竟才上几节课而且第一次作业,希望后面的作业更加精彩吧。因为学生的专业分布不同,所以尽量让学生设计他们专业的内容。

eg 遗传学身高体重数据

第一列表示孩子的身高,单位cm;第二列表示孩子的体重,单位kg。从上图可以看出,数据集被分为了三类。绿色为一类、蓝色为一类,红色为一类。

eg 微博数据集

第一列代表微博中某条信息的转发量,第二列代表微博中某条信息的评论数。从上图可以看出,总共分为3类,共三种颜色,绿色一层说明该信息转发量与评论数都很高。

eg 上市公司财务报表

第一列表示公司利润率;第二列表示公司资产规模。从上图可以看出,总共分为4类,共四种颜色。暗红色为资产规模最大,依次至蓝色资产规模减小。

eg 世界各国家人均面积与土地面积

第一列表示各国家的人均面积(人/ 平方公里);第二列表示各国家的土地面积(万平方公里)。从上图可以看出,总共分为3类,共三种颜色。红色表示的国家相对来说最拥挤,可能是孟加拉这样土地面积少且人口众多的国家;蓝色就是地广人稀的代表,比如俄罗斯、美国、、墨西哥、巴西;绿色表示人口密度分布比较平均的国家。

eg employee salaries数据集

第一列表示员工工资;第二列表示员工年龄数。从上图可以看出,总共分为5类,共5种颜色。总体呈现正相关性,年龄越大,工资越高;除个别外,总体正线性关系。

eg 学生英语成绩数据集

第一列表示学生英语平时成绩;第二列表示学生英语期末成绩。从上图可以看出,总共分为4类,共四种颜色。黄色一层,平时成绩和末考成绩都很高,属于“学霸”级别的人物;其次,蓝色一层和红色一层;最后,天蓝色一层,暂且称之为“学渣”。

三. Matplotlib绘图优化

Matplotlib代码的优化:

1.第一部分代码是定义X数组,实际中是读取文件进行的,如何实现读取文件中数据再转换为矩阵进行聚类呢?

2.第二部分是绘制图形,希望绘制不同的颜色及类型,使用legend()绘制图标。

数据集包括96个运动员的数据,源自:

KEEL-dataset - Basketball data set

现需要获取第一列每分钟助攻数、第五列每分钟得分数存于矩阵中。

代码如下:

输出结果如下图所示:三个层次很明显,而且右上角也标注。

四. Spyder常见问题

下面是常见遇到的几个问题:

1.Spyder软件如果Editor编辑框不在,如何调出来。

2.会缺少一些第三方包,如lda,如何导入。使用cd ..去到C盘根目录,cd去到Anaconda的Scripts目录下,输入"pip install selenium"安装selenium相应的包,"pip install lda"安装lda包。

学生告诉我另一个更方便的方法:

3.运行时报错,缺少Console,点击如下。

4.如果Spyder安装点击没有反应,重新安装也没有反应,建议在运行下试试。

实在不行卸载再重装:pip uninstall spyder

pip install spyder

5.Spyder如何显示绘制Matplotlib中文。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180531G17KJ700?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券