上一篇我们较为系统地介绍了Python与R在系统聚类上的方法和不同,明白人都能看出来用R进行系统聚类比Python要方便不少,但是光介绍方法是没用的,要经过实战来强化学习的过程,本文就基于R对2016年我国各主要城市第一、二、三产业GDP的量为三个不同特征,对这些城市进行系统聚类+分析;

数据来源:http://data.stats.gov.cn/easyquery.htm?cn=E0105

数据内容:

36个样本,3个变量,分别在三个xls文件中

分析目的:

为这些城市通过产业结构进行分类

实战开始!

一、数据的预处理

通过观察下载的数据,我对这三个数据集依次进行了读入-去缺省值-内联合并,具体代码如下:

> rm(list=ls())
> library(readxl)
> setwd('C:\\Users\\windows\\Desktop')
> data1 <- na.omit(read_xls('主要城市年度数据第一产业.xls',skip=3))
> names(data1)[2] = '第一产业'
> data2 <- na.omit(read_xls('主要城市年度数据第二产业.xls',skip=3))
> names(data2)[2] = '第二产业'
> data3 <- na.omit(read_xls('主要城市年度数据第三产业.xls',skip=3))
> names(data3)[2] = '第三产业'
> k <- merge(data1,data2,by='地区')
> data <- merge(k,data3,by='地区')
> head(data)
地区 第一产业 第二产业 第三产业
1 北京 129.79 4944.44 20594.90
2 成都 474.94 5232.02 6463.27
3 大连 462.78 2793.69 3473.86
4 福州 492.25 2590.43 3114.96
5 广州 239.28 5751.59 13556.57
6 贵阳 137.14 1218.79 1801.77

二、基于欧氏距离的系统聚类

> #根据欧式距离进行聚类
> input <- as.matrix(data[,2:4])
> d <- dist(input,'euclidean')
> hc <- hclust(d,"single")
> plot(hc,labels = data[,1],sub='主要城市GDP分类发展水平聚类(欧式距离)')

得到树状聚类图如下:

可以看出,如果以这三种产业GDP组成样本点的点间欧氏距离进行聚类,全国主要城市可分为:

  1.北京上海代表的超大城市

  2.广州代表的特大城市

  3.重庆天津深圳代表的二线中的领跑城市

  4.剩下城市代表的广大二三线普通城市

三、基于马氏距离的系统聚类

马氏距离的优点是既排除了各指标间的相关性干扰,又消除了各指标的量纲,通过对这三种变量间相关系数矩阵的求解(如下),可以看出变量间存在着相关甚至高度相关(高达0.8):

> cor(data[,2:4])
第一产业 第二产业 第三产业
第一产业 1.00000000 0.3753064 0.07944717
第二产业 0.37530643 1.0000000 0.80548349
第三产业 0.07944717 0.8054835 1.00000000

利用09中提到的计算马氏距离dist的自定义函数,进行聚类,过程如下:

> #自定义马氏距离矩阵计算函数
> MS <- function(input){
+ l <- length(input[,1])
+ ms <- matrix(0,nrow=l,ncol=l)
+ cov <- cov(input)
+ for(i in 1:l){
+ for(j in 1:l){
+ ms[i,j] = t(input[i,]-input[j,])%*%solve(cov)%*%(input[i,]-input[j,])
+ }
+ }
+ return(as.dist(ms))
+ }
> #根据马氏距离来进行聚类
> input <- as.matrix(data[,2:4])
> d <- MS(input)
> hc <- hclust(d,"single")
> plot(hc,labels = data[,1],sub='主要城市GDP分类发展水平聚(马氏距离)')

得到的树状聚类图如下:

可以看出,与基于欧氏距离的聚类过程相比发生了很大不同,也揭示了很多更深层次的关系:

  1.重庆独一类的省规模的超级城市

  2.北京独一类的特殊地位城市

  3.深圳天津代表的一线末尾或二线顶级城市

  4.上海、广州、哈尔滨三座独特的地方领头城市

  5.剩下所有的二线城市

以上便是这次简单的系统聚类的全过程,如有欠缺或错误之处,望提出宝贵意见

(数据科学学习手札10)系统聚类实战(基于R)的更多相关文章

  1. (数据科学学习手札136)Python中基于joblib实现极简并行计算加速

    本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 我们在日常使用Python进行各种数据计算 ...

  2. (数据科学学习手札47)基于Python的网络数据采集实战(2)

    一.简介 马上大四了,最近在暑期实习,在数据挖掘的主业之外,也帮助同事做了很多网络数据采集的内容,接下来的数篇文章就将一一罗列出来,来续写几个月前开的这个网络数据采集实战的坑. 二.马蜂窝评论数据采集 ...

  3. (数据科学学习手札44)在Keras中训练多层感知机

    一.简介 Keras是有着自主的一套前端控制语法,后端基于tensorflow和theano的深度学习框架,因为其搭建神经网络简单快捷明了的语法风格,可以帮助使用者更快捷的搭建自己的神经网络,堪称深度 ...

  4. (数据科学学习手札75)基于geopandas的空间数据分析——坐标参考系篇

    本文对应代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在上一篇文章中我们对geopandas中的数据结 ...

  5. (数据科学学习手札50)基于Python的网络数据采集-selenium篇(上)

    一.简介 接着几个月之前的(数据科学学习手札31)基于Python的网络数据采集(初级篇),在那篇文章中,我们介绍了关于网络爬虫的基础知识(基本的请求库,基本的解析库,CSS,正则表达式等),在那篇文 ...

  6. (数据科学学习手札36)tensorflow实现MLP

    一.简介 我们在前面的数据科学学习手札34中也介绍过,作为最典型的神经网络,多层感知机(MLP)结构简单且规则,并且在隐层设计的足够完善时,可以拟合任意连续函数,而除了利用前面介绍的sklearn.n ...

  7. (数据科学学习手札32)Python中re模块的详细介绍

    一.简介 关于正则表达式,我在前一篇(数据科学学习手札31)中已经做了详细介绍,本篇将对Python中自带模块re的常用功能进行总结: re作为Python中专为正则表达式相关功能做出支持的模块,提供 ...

  8. (数据科学学习手札69)详解pandas中的map、apply、applymap、groupby、agg

    *从本篇开始所有文章的数据和代码都已上传至我的github仓库:https://github.com/CNFeffery/DataScienceStudyNotes 一.简介 pandas提供了很多方 ...

  9. (数据科学学习手札61)xpath进阶用法

    一.简介 xpath作为对网页.对xml文件进行定位的工具,速度快,语法简洁明了,在网络爬虫解析内容的过程中起到很大的作用,除了xpath的基础用法之外(可参考我之前写的(数据科学学习手札50)基于P ...

随机推荐

  1. Facet constraits error: Spring 4.1 requires Java 1.6 or newer.

    问题来源: 在高版本的myeclipse,同步低版本的myeclipse提交的项目,可能会出现配置不一致. 问题描述: spring4.1不支持jdk1.6 注:在下载项目到本地的时候,myeclip ...

  2. HDU 3336 KMP

    题意:求每一个前缀,跟前缀相同的每个子串. 此题:网上很多都是假程序,不过也AC了,的确我测试几个案例之后的的确确是存在这个问题. 分析:每一个前缀,可以考虑KMP,f失配指针,如何求得它出现了多少次 ...

  3. 【[Violet]樱花】

    就是化柿子 我们求 \[\frac{1}{x}+\frac{1}{y}=\frac{1}{n!}\] 的正整数解的个数 喜闻乐见的化柿子了 \[\frac{x+y}{xy}=\frac{1}{n!}\ ...

  4. React中最基础的jsx语法

    import React, { Component } from 'react'; class App extends Component { render() { return ( <div ...

  5. (第三场) C Shuffle Cards 【STL_rope || splay】

    题目链接:https://www.nowcoder.com/acm/contest/141/C 题目描述 Eddy likes to play cards game since there are a ...

  6. 腾讯2016校招编程题【PHP实现】

    2016腾讯春招的编程题 话不多说,直接上题!!! 给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串.如何删除才能使得回文串最长呢?输出需要删除的字符个数 . 这道题是以回文为载体, ...

  7. 2018.11.4 Hibernate中一对、多对多的关系

    简单总结一下 多表关系 一对多/多对一 O 对象 一的一方使用集合. 多的一方直接引用一的一方. R 关系型数据库 多的一方使用外键引用一的一方主键. M 映射文件 一: 多: 操作: 操作管理级别属 ...

  8. Latex 编辑器安装

    MiKTex + TexStudio 1. 下载安装MiKTex,从http://www.miktex.org/下载basic-miktex-2.9.5872-x64.exe,一路默认安装... 或者 ...

  9. MYSQL添加外键关联

    SELECT * from stu st,course co,score sc where st.sid = sc.sid and sc.cid = co.cid 如果我们要给 sid 做一个约束,即 ...

  10. UGUI防止点击穿透

    if (!IsPointerOverGameObject(Input.mousePosition)) { } public static bool IsPointerOverGameObject(Ve ...