在工作实际场景经常涉及将人群或者物件按照某些指定特性进行分类,传统的思路是基于规则进行分组统计,但是越来越多的情景是难以用定量的规则来区分组别的,因此非监督的聚类分析算法为这些场景提供一个很好的思路。本人因为从事医疗相关行业,就以性别和年龄的简单示例来对人群进行分类,跳出以往的按照固定年龄段统计分类人群的思路,这里我们展示如何从数据样本中主动获取年龄和性别分组的组别范围,从而完成分类。

这里以一份1008名不同性别年龄的有门诊备案的数据为例,数据文件为personinfo_data.csv,其链接:https://pan.baidu.com/s/1jeyD8RaQ3Z0v-J05UaRufA  提取码:nwr0

直接上代码:

# coding=utf-8
"""
-------------------------------------------------File Name:     KmeansDescription :       使用K-Means算法聚类personinfo数据Author :       cheng.gmdate:          2019-04-09
-------------------------------------------------Change Activity:2019-04-09:
-------------------------------------------------
"""
import  sys
reload(sys)
sys.setdefaultencoding('utf-8')
__author__ = 'cheng.gm'
import pandas as pd
import numpy as np
from sklearn.cluster import KMeans
import matplotlib.pyplot as pltinputfile = '../resources/personinfo_data.csv'  # personinfo数据
outputfile = '../resources/result_data.csv'  # 保存结果的文件名
k = 3  # 聚类的类别
iteration = 1000  # 聚类最大循环次数
data = pd.read_csv(inputfile)  # 读取数据
# 检查数据中是否有缺失值,Flase:表示对应特征的特征值中无缺失值;True:表示有缺失值
np.isnan(data).any()
# 删除有缺失值的行
data.dropna(inplace=True)
# data = 1.0 * (data - data.mean()) / data.std()  # 数据标准化model = KMeans(n_clusters=k, max_iter = iteration)  # 分为k类, 并发数4
model.fit(data)  # 开始聚类
# 简单打印结果
r1 = pd.Series(model.labels_).value_counts()  # 统计各个类别的数目(降序)
print('num of type',r1)
'''
1    537
0    359
2    112
'''
r2 = pd.DataFrame(model.cluster_centers_)  # 找出聚类中心
print('center of cluster',r2)
'''
0  1.403900  49.796657
1  1.450652  29.521415
2  1.410714  83.062500
'''
labels = model.labels_
print('labels',labels)
'''
array([0, 1, 1, ..., 0, 2, 1])
'''
r = pd.concat([r2, r1], axis=1)  # 横向连接(0是纵向), 得到聚类中心对应的类别下的数目
r.columns = list(data.columns) + [u'类别数目']  # 重命名表头
print(r)
# 详细输出原始数据及其类别
'''SEX        AGE  类别数目
0  1.403900  49.796657   359
1  1.450652  29.521415   537
2  1.410714  83.062500   112
'''r = pd.concat([data, pd.Series(model.labels_, index=data.index)], axis=1)  # 详细
# 输出每个样本对应的类别
r.columns = list(data.columns) + [u'聚类类别']  # 重命名表头r.to_csv(outputfile)  # 保存结果(每个个体进行分类)#接Kmeans.py# tsne = TSNE()
# tsne.fit_transform(data) #进行数据降维
# tsne = pd.DataFrame(tsne.embedding_, index = data.index) #转换数据格式
#
# plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
# plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
# #不同类别用不同颜色和样式绘图
# d = tsne[r[u'聚类类别'] == 0]
# plt.plot(d[0], d[1], 'r.')
# d = tsne[r[u'聚类类别'] == 1]
# plt.plot(d[0], d[1], 'go')
# d = tsne[r[u'聚类类别'] == 2]
# plt.plot(d[0], d[1], 'b*')
# plt.show()mark = ['or', 'ob', 'og', 'ok', '^r', '+r', 'sr', 'dr', '<r', 'pr']
#这里'or'代表中的'o'代表画圈,'r'代表颜色为红色,后面的依次类推
color = 0
j = 0
print data
print data['AGE'][0]
print data['SEX'][0]
plt.axis([-1,3,0,100])    #设置坐标范围
for i in labels:plt.plot(data['SEX'][j], data['AGE'][j], mark[i], markersize = 5)j +=1
plt.show()

绘制结果如下所示

浅谈使用KMeans进行性别与年龄的聚类分析相关推荐

  1. 我的家乡网页设计_Graphic Design|康石石浅谈LOGO设计在作品集中的创作方法

    写在前面的话 平面设计范畴极广,其领域不仅限于常见的版式设计.海报设计.LOGO设计.VI设计.书籍装帧.广告设计.网页设计.在艺术留学申请过程中,学习平面设计的同学们需依据目标院校对作品集项目及页数 ...

  2. python类中方法的执行顺序-浅谈Python的方法解析顺序(MRO)

    方法解析顺序, Method Resolution Order 从一段代码开始 考虑下面的情况: class A(object): def foo(self): print('A.foo()') cl ...

  3. python方法解析顺序_浅谈Python的方法解析顺序(MRO)

    方法解析顺序, Method Resolution Order 从一段代码开始 考虑下面的情况: class A(object): def foo(self): print('A.foo()') cl ...

  4. 浅谈人工智能的伦理问题

    浅谈人工智能的伦理问题 资料整理,仅供参考 引言 2018  年3月 18日晚上 10 点左右,伊莱恩·赫兹伯格(Elaine Herzberg)骑着自行车穿过亚利桑那州坦佩市的一条街道,突然间被一辆 ...

  5. 浅谈软件测试行业的现状和前景

    浅谈软件测试行业的现状和前景 摘要:软件测试在整个软件开发中占据了一半或一半以上的工作量,而且具有很高的组织管理和技术难度.搞好软件测试,是保证软件质量的关键步骤,是分析软件可靠性的重要依据. 关键词 ...

  6. 自己动手写一个推荐系统,推荐系统小结,推荐系统:总体介绍、推荐算法、性能比较, 漫谈“推荐系统”, 浅谈矩阵分解在推荐系统中的应用...

    自己动手写一个推荐系统 废话: 最近朋友在学习推荐系统相关,说是实现完整的推荐系统,于是我们三不之一会有一些讨论和推导,想想索性整理出来. 在文中主要以工程中做推荐系统的流程着手,穿插一些经验之谈,并 ...

  7. 让数据站住脚-浅谈用户研究中的信度与效度

    让数据站住脚-浅谈用户研究中的信度与效度 在用户研究工作中,如何让自己的数据和结论更有说服力,是很重要的问题.最近将自己积累的用研信度和效度的笔记整理一下,罗列在文中,希望对大家有所帮助. 一.调查的 ...

  8. 关于密码的那些事儿—浅谈密码的设计与管理

    这是整理于2011年底的一份报告材料. 介绍1.背景 2011年底,国内遭遇网络安全的"崩盘".从CSDN用户数据被爆库,到天涯用户信息被刷库,到众多社交网站.论坛用户数据被拖库, ...

  9. 人工智能-浅谈人工智能

    1 浅谈人工智能 1.1 人工智能的概述 人工智能(Artificial Intelligence),英文缩写为AI.它是研究.开发用于模拟.延伸和扩展人的智能的理论.方法.技术及应用系统的一门新的技 ...

最新文章

  1. 为什么你应该停止阅读新闻?
  2. Python3 列表list合并的4种方法
  3. 一个数独引发的惨案:零知识证明(Zero-Knowledge Proof)
  4. 分类算法—Performance指标
  5. 【HTTP 2】 序言
  6. jdk1.6 改 jdk1.7或jdk1.8(改回也可以)(图文详解)
  7. spring AOP源码分析(一)
  8. mqtt协议详解_IoT物联网设备上云技术方案详解
  9. LeetCode 124. 二叉树中的最大路径和(DFS)
  10. nexus4恢复原生系统_深度好文!新浪微博架构师详析微博云原生技术的思考与实践...
  11. [转载] python随笔2(列表的增删改查)
  12. 计算机文献检索试题及答案,文献检索试题及答案.doc
  13. 微信小程序 上传本地图片
  14. 2018年湘潭大学程序设计竞赛 - 题解
  15. 名帖13 邓石如 篆书《白氏草堂记》六条屏
  16. 使用iBatis中报 java.sql.SQLException: 无效的列类型异常
  17. 怎样搭建企业内部wiki
  18. 怎么用计算机打出一个开关,键盘开关是哪一个键 关机的方法介绍
  19. 小陈学js Arguments
  20. 终端(terminal)打印彩色文字

热门文章

  1. 远程主机强迫关闭一个现有连接-=-解决办法
  2. python爬取微信好友头像_使用python itchat包爬取微信好友头像形成矩形头像集的方法...
  3. Excel的常用快捷键
  4. kaldi中文语音识别thchs30模型训练
  5. JSON Viewer有个大bug导致不得不放弃掉
  6. 【Soul网关探秘】微内核架构及实现
  7. 第一次软工作业(数独)
  8. import image的坑
  9. java spring 中 每小时一次_spring 定时任务的 执行时间设置规则
  10. 股票振幅榜查询易语言代码