Python中做聚类分析

Python与算法 Haran 8年前 (2016-09-07) 10336次浏览 0个评论

数据集 ex14.csv 是关于中国各个省份的三项指标数值。
请根据这些指标数值,将各个省份分为3类,并尝试归纳出各个类别的特点
查看数据图形分布:

# coding=utf-8

import os
import pandas as pd
from sklearn.cluster import AgglomerativeClustering
from sklearn.cluster import KMeans
from sklearn.cluster import DBSCAN
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# from __future__ import division

os.chdir(u'E:\BaiduYunDownload\第14周')

ex14 = pd.read_csv('ex14.csv',header = 0,index_col = 0,parse_dates = True,encoding='gb18030')
ex14.head()
ex14.index
查看图形
fig = plt.figure()
ax3D = fig.add_subplot(111, projection='3d')
ax3D.scatter(ex14['DXBZ'],ex14['CZBZ'],ex14['WMBZ'],marker='o')
ax3D.set_xlabel('DXBZ')
ax3D.set_ylabel('CZBZ')
ax3D.set_zlabel('WMBZ')
plt.show()

Python中做聚类分析
1、 Cluster
‘ward’距离法:

# cluster
for linkage in ('ward', 'average', 'complete'):
    clustering = AgglomerativeClustering(linkage=linkage, n_clusters=3)
    clustering.fit(ex14)
    cluster_pred = clustering.fit_predict(ex14)
    print 'clusters :',cluster_pred
    ex14[u'类型']=cluster_pred
    print ex14
    fig = plt.figure()
    ax3D = fig.add_subplot(111, projection='3d')
    ax3D.scatter(ex14['DXBZ'],ex14['CZBZ'],ex14['WMBZ'],c=cluster_pred,marker='o')
    ax3D.set_xlabel('DXBZ')
    ax3D.set_ylabel('CZBZ')
    ax3D.set_zlabel('WMBZ')
    plt.show()
'ward'距离法:

clusters : [0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 2 0 1 1 1 0]
     DXBZ   CZBZ   WMBZ  类型
北京   9.30  30.55   8.70   0
天津   4.67  29.38   8.92   0
河北   0.96  24.69  15.21   0
山西   1.38  29.24  11.30   0
内蒙古  1.48  25.47  15.39   0
辽宁   2.60  32.32   8.81   0
吉林   2.15  26.31  10.49   0
黑龙江  2.14  28.46  10.87   0
上海   6.53  31.59  11.04   0
江苏   1.47  26.43  17.23   0
浙江   1.17  23.74  17.46   0
安徽   0.88  19.97  24.43   1
福建   1.23  16.87  15.63   0
江西   0.99  18.84  16.22   0
山东   0.98  25.18  16.87   0
河南   0.85  26.55  16.15   0
湖北   1.57  23.16  15.79   0
湖南   1.14  22.57  12.10   0
广东   1.34  23.04  10.45   0
广西   0.79  19.14  10.61   0
海南   1.24  22.53  13.97   0
四川   0.96  21.65  16.24   0
贵州   0.78  14.65  24.27   1
云南   0.81  13.85  25.44   1
西藏   0.57   3.85  44.43   2
陕西   1.67  24.36  17.62   0
甘肃   1.10  16.85  27.93   1
青海   1.49  17.76  27.70   1
宁夏   1.61  20.27  22.06   1
新疆   1.85  20.66  12.75   0

分成三类,一类是西藏,一类是安徽,贵州,云南,甘肃,青海,宁夏,一类是剩余的其他
第一类是DXBZ偏低, CZBZ偏低,WMBZ 偏高,分在第二类是WMBZ偏高
‘average’距离法:

'average'距离法:

clusters : [0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 2 2 1 0 2 2 2 0]
     DXBZ   CZBZ   WMBZ  类型
北京   9.30  30.55   8.70   0
天津   4.67  29.38   8.92   0
河北   0.96  24.69  15.21   0
山西   1.38  29.24  11.30   0
内蒙古  1.48  25.47  15.39   0
辽宁   2.60  32.32   8.81   0
吉林   2.15  26.31  10.49   0
黑龙江  2.14  28.46  10.87   0
上海   6.53  31.59  11.04   0
江苏   1.47  26.43  17.23   0
浙江   1.17  23.74  17.46   0
安徽   0.88  19.97  24.43   2
福建   1.23  16.87  15.63   0
江西   0.99  18.84  16.22   0
山东   0.98  25.18  16.87   0
河南   0.85  26.55  16.15   0
湖北   1.57  23.16  15.79   0
湖南   1.14  22.57  12.10   0
广东   1.34  23.04  10.45   0
广西   0.79  19.14  10.61   0
海南   1.24  22.53  13.97   0
四川   0.96  21.65  16.24   0
贵州   0.78  14.65  24.27   2
云南   0.81  13.85  25.44   2
西藏   0.57   3.85  44.43   1
陕西   1.67  24.36  17.62   0
甘肃   1.10  16.85  27.93   2
青海   1.49  17.76  27.70   2
宁夏   1.61  20.27  22.06   2
新疆   1.85  20.66  12.75   0

分成三类,一类是西藏,一类是安徽,贵州,云南,甘肃,青海,宁夏,一类是剩余的其他
第一类是DXBZ偏低, CZBZ偏低,WMBZ 偏高,分在第二类是WMBZ偏高+

‘complete’距离法:

'complete'距离法
clusters : [0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 2 2 1 0 2 2 2 0]
     DXBZ   CZBZ   WMBZ  类型
北京   9.30  30.55   8.70   0
天津   4.67  29.38   8.92   0
河北   0.96  24.69  15.21   0
山西   1.38  29.24  11.30   0
内蒙古  1.48  25.47  15.39   0
辽宁   2.60  32.32   8.81   0
吉林   2.15  26.31  10.49   0
黑龙江  2.14  28.46  10.87   0
上海   6.53  31.59  11.04   0
江苏   1.47  26.43  17.23   0
浙江   1.17  23.74  17.46   0
安徽   0.88  19.97  24.43   2
福建   1.23  16.87  15.63   0
江西   0.99  18.84  16.22   0
山东   0.98  25.18  16.87   0
河南   0.85  26.55  16.15   0
湖北   1.57  23.16  15.79   0
湖南   1.14  22.57  12.10   0
广东   1.34  23.04  10.45   0
广西   0.79  19.14  10.61   0
海南   1.24  22.53  13.97   0
四川   0.96  21.65  16.24   0
贵州   0.78  14.65  24.27   2
云南   0.81  13.85  25.44   2
西藏   0.57   3.85  44.43   1
陕西   1.67  24.36  17.62   0
甘肃   1.10  16.85  27.93   2
青海   1.49  17.76  27.70   2
宁夏   1.61  20.27  22.06   2
新疆   1.85  20.66  12.75   0

分成三类,一类是西藏,一类是安徽,贵州,云南,甘肃,青海,宁夏,一类是剩余的其他
第一类是DXBZ偏低, CZBZ偏低,WMBZ 偏高,分在第二类是WMBZ偏高
2、K-menas

# kmeans

kmeans = KMeans(n_clusters=3)
kmeans.fit(ex14)
kmeans_pred = kmeans.fit_predict(ex14)
print 'kmeans cluster:',kmeans_pred
ex14[u'类型']=kmeans_pred
print ex14
fig = plt.figure()
ax3D = fig.add_subplot(111, projection='3d')
ax3D.scatter(ex14['DXBZ'],ex14['CZBZ'],ex14['WMBZ'],c=kmeans_pred,marker='o')
ax3D.set_xlabel('DXBZ')
ax3D.set_ylabel('CZBZ')
ax3D.set_zlabel('WMBZ')
plt.show()
kmeans cluster: [0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 2 0 1 1 1 0]
     DXBZ   CZBZ   WMBZ  类型
北京   9.30  30.55   8.70   0
天津   4.67  29.38   8.92   0
河北   0.96  24.69  15.21   0
山西   1.38  29.24  11.30   0
内蒙古  1.48  25.47  15.39   0
辽宁   2.60  32.32   8.81   0
吉林   2.15  26.31  10.49   0
黑龙江  2.14  28.46  10.87   0
上海   6.53  31.59  11.04   0
江苏   1.47  26.43  17.23   0
浙江   1.17  23.74  17.46   0
安徽   0.88  19.97  24.43   1
福建   1.23  16.87  15.63   0
江西   0.99  18.84  16.22   0
山东   0.98  25.18  16.87   0
河南   0.85  26.55  16.15   0
湖北   1.57  23.16  15.79   0
湖南   1.14  22.57  12.10   0
广东   1.34  23.04  10.45   0
广西   0.79  19.14  10.61   0
海南   1.24  22.53  13.97   0
四川   0.96  21.65  16.24   0
贵州   0.78  14.65  24.27   1
云南   0.81  13.85  25.44   1
西藏   0.57   3.85  44.43   2
陕西   1.67  24.36  17.62   0
甘肃   1.10  16.85  27.93   1
青海   1.49  17.76  27.70   1
宁夏   1.61  20.27  22.06   1
新疆   1.85  20.66  12.75   0.

分成三类,一类是西藏,一类是安徽,贵州,云南,甘肃,青海,宁夏,一类是剩余的其他
第一类是DXBZ偏低, CZBZ偏低,WMBZ 偏高,分在第二类是WMBZ偏高
聚类后的分类图:

Python中做聚类分析


如有疑问,可以在文章底部留言或邮件(haran.huang@ichdata.com) 我~
喜欢 (7)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址