用聚类分析来分析各省的经济结构

K-means是十大数据挖掘算法之一,属于聚类分析。这个算法需要预先给定分类的个数。然后算法随机选出几个点,然后以这几个点为基础,对剩下的每个点,找出距离其最近的一个基础点,把这个点归入那个类别。然后对每个类别,计算其均值(重心),然后以每个类的均值为新的基础点,进行新一轮计算。对每个点计算其所在的类。直到新一轮迭代每个点所属的类不再变化为止,或者迭代到指定次数停止。

基于k-means(k均值聚类)又发展出了k-中心点聚类。这个算法与k-均值聚类的差别在与迭代时类中心点的选取不是类的均值,而是选出类中与其余样本距离之和最小的点为新的基础点。

在R中,K-均值算法的函数为kmeans,该函数的基本格式为

function (x, centers, iter.max = 10L, nstart = 1L, algorithm = c("Hartigan-Wong", 
    "Lloyd", "Forgy", "MacQueen"), trace = FALSE) 

其中x为要进行聚类分析的数据,centers是预先指定的分类数,iter.max是指定最大迭代次数。

下面以中国2014年度的各省的地区生产总值作为聚类的数据,用rstatscn来获取数据,如下所示,其中包含的指标有总产值以及各产业增加值,如果以这几个指标作为标准来进行分类,基本上可以反映出各省的经济结构

> cz1=statscnQueryData('A0201','fsnd')
> cz1
                                         2014年   2013年   2012年   2011年
地区生产总值(亿元)                     21330.83 19800.81 17879.40 16251.93
第一产业增加值(亿元)                     159.00   159.64   150.20   136.27
第二产业增加值(亿元)                    4545.51  4292.56  4059.27  3752.48
第三产业增加值(亿元)                   16626.32 15348.61 13669.93 12363.18
农林牧渔业增加值(亿元)                   161.32   161.83   150.20   136.27
工业增加值(亿元)                        3746.77  3566.43  3294.32  3048.79
建筑业增加值(亿元)                       907.39   831.55   764.95   703.69
批发和零售业增加值(亿元)                2447.68  2340.74  2229.77  2139.65
批发和零售贸易餐饮业增加值(亿元)           0.00     0.00     0.00     0.00
交通运输、仓储和邮政业增加值(亿元)       948.10   871.76   816.31   808.95
交通运输、仓储和邮电通信业增加值(亿元)     0.00     0.00     0.00     0.00
住宿和餐饮业增加值(亿元)                   0.00   374.75   373.06   348.42
金融业增加值(亿元)                         0.00  2943.13  2536.91  2215.41
房地产业增加值(亿元)                       0.00  1339.52  1244.17  1074.93
其他行业增加值(亿元)                       0.00  7371.10  6469.71  5775.82
人均地区生产总值(元/人)                99994.52 94647.88 87474.74 81658.00

下面以另一种方式来查询数据库,获得各省2014年的各指标数据。

> cz=statscnQueryData('A0201','fsnd',rowcode='reg',colcode='zb')
> head(cz)
             地区生产总值 第一产业增加值 第二产业增加值 第三产业增加值
北京市           21330.83         159.00        4545.51       16626.32
天津市           15722.47         199.84        7731.38        7791.25
河北省           29421.15        3447.46       15020.17       10953.52
山西省           12759.44         788.14        6343.29        5628.01
内蒙古自治区     17769.51        1627.17        9119.79        7022.55
辽宁省           28626.58        2285.75       14384.64       11956.19
             农林牧渔业增加值 工业增加值 建筑业增加值 批发和零售业增加值
北京市                 161.32    3746.77       907.39            2447.68
天津市                 201.53    7083.39       682.52            1981.10
河北省                3576.48   13330.66      1702.70            2282.25
山西省                 827.45    5521.01       825.66             990.04
内蒙古自治区          1651.06    7904.40      1217.62            1806.28
辽宁省                2403.17   12656.83      1875.69            2588.13
             批发和零售贸易餐饮业增加值 交通运输、仓储和邮政业增加值
北京市                                0                       948.10
天津市                                0                       753.19
河北省                                0                      2490.10
山西省                                0                       797.13
内蒙古自治区                          0                      1379.83
辽宁省                                0                      1486.07
             交通运输、仓储和邮电通信业增加值 住宿和餐饮业增加值 金融业增加值
北京市                                      0                  0            0
天津市                                      0                  0            0
河北省                                      0                  0            0
山西省                                      0                  0            0
内蒙古自治区                                0                  0            0
辽宁省                                      0                  0            0
             房地产业增加值 其他行业增加值 人均地区生产总值
北京市                    0              0         99994.52
天津市                    0              0        105201.50
河北省                    0              0         39984.28
山西省                    0              0         35064.20
内蒙古自治区              0              0         71043.65
辽宁省                    0              0         65201.18

返回的数据框是各省2014年的数据。因此对数据框cz而言,每个省作为一个采样点。以个指标来对这些采样点进行分类,假设我们打算把所有的分为4类,那么

> clust=kmeans(cz,4)
> clust
K-means clustering with 4 clusters of sizes 3, 4, 12, 12

Cluster means:
  地区生产总值 第一产业增加值 第二产业增加值 第三产业增加值 农林牧渔业增加值
1    20204.747       161.0333       6813.893      13229.820         163.8233
2    58115.163      3344.6550      27586.020      27184.487        3469.7850
3     8901.677      1211.2942       3944.932       3745.450        1243.5825
4    23697.703      2494.6425      11958.088       9244.972        2571.4558
  工业增加值 建筑业增加值 批发和零售业增加值 批发和零售贸易餐饮业增加值
1   6064.333     805.0033          2746.0300                          0
2  24584.167    3050.7900          6880.1725                          0
3   3192.825     771.5883           711.2042                          0
4  10303.508    1701.0733          1839.3900                          0
  交通运输、仓储和邮政业增加值 交通运输、仓储和邮电通信业增加值
1                     915.2500                                0
2                    2262.4200                                0
3                     438.5675                                0
4                    1186.5758                                0
  住宿和餐饮业增加值 金融业增加值 房地产业增加值 其他行业增加值
1                  0            0              0              0
2                  0            0              0              0
3                  0            0              0              0
4                  0            0              0              0
  人均地区生产总值
1        100846.19
2         69793.05
3         34364.48
4         48224.09

Clustering vector:
          北京市           天津市           河北省           山西省 
               1                1                4                3 
    内蒙古自治区           辽宁省           吉林省         黑龙江省 
               4                4                4                3 
          上海市           江苏省           浙江省           安徽省 
               1                2                2                4 
          福建省           江西省           山东省           河南省 
               4                3                2                4 
          湖北省           湖南省           广东省   广西壮族自治区 
               4                4                2                3 
          海南省           重庆市           四川省           贵州省 
               3                4                4                3 
          云南省       西藏自治区           陕西省           甘肃省 
               3                3                4                3 
          青海省   宁夏回族自治区 新疆维吾尔自治区 
               3                3                3 

Within cluster sum of squares by cluster:
[1]  127664834 1061313254  925679304 2495352972
 (between_SS / total_SS =  84.2 %)

Available components:

[1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
[6] "betweenss"    "size"         "iter"         "ifault"      

从结果看,北京天津上海三个直辖市被分为一类,江苏浙江广东山东被分为一类,这四个省份工业相对领先。其余的类,可以画在地图上来看。
各省经济结构分类

从这个地图上看,各省份的分类和地理位置是相关的。但是又三个异类,一个是山西和江西,一个是福建。山西和江西虽地处中国腹地,但是和西部的几个省份经济结构相似。还有一个福建,虽然临海,但是相对于它上面和下面的几个临海省份来说,他算是个异类。

另外,画图的代码如下

#读取省份名字和拼音的对应关系
> pnames=read.table('prov.txt',head=T,sep=",")
#将每个省份的类别放到cz的数据框中,by=0表示通过rownames来合并数据框
> czg=merge(cz,as.data.frame(clust$cluster),by=0)
> colnames(czg)[1]="name"
#将每个省的拼音放到数据框中,因为后面画图时,每个省是以拼音来指定的
> czgn=merge(czg,pnames)
#为每个省给定一个颜色,颜色以类别为基础,给出4个深浅不同的红色。
> czgn$color=rgb(czgn$group/4.0,0,0)
#调用cnmap来画图, cnmap是一个还没有发布的画图包。
> cnmap(czgn$pinyin,czgn$color)


本文地址: http://www.bagualu.net/wordpress/archives/5011 转载请注明




发表评论

电子邮件地址不会被公开。 必填项已用*标注