一个用R语言进行聚类分析的例子

在网上(http://www.rdatamining.com/ )找到了一个用R语言进行聚类分析的例子, 在整个例子中做了一些中文解释说明. 数据集用的是iris。

第一步:对数据集进行初步统计分析
检查数据的维度
> dim(iris)
[1] 150   5

显示数据集中的列名
> names(iris)
[1] “Sepal.Length” “Sepal.Width”  “Petal.Length” “Petal.Width”  “Species”     

显示数据集的内部结构
> str(iris)
‘data.frame':   150 obs. of  5 variables:
$ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 …
$ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 …
$ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 …
$ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 …
$ Species     : Factor w/ 3 levels “setosa”,”versicolor”,..: 1 1 1 1 1 1 1 1 1 1 …

显示数据集的属性
> attributes(iris)
$names –就是数据集的列名
[1] “Sepal.Length” “Sepal.Width”  “Petal.Length” “Petal.Width”  “Species”     

$row.names –个人理解就是每行数据的标号
  [1]   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20
[21]  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40
[41]  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60
[61]  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80
[81]  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96  97  98  99 100
[101] 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
[121] 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
[141] 141 142 143 144 145 146 147 148 149 150

$class –表示类别
[1] “data.frame”

查看数据集的前五项数据情况
> iris[1:5,]
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa

查看数据集中属性Sepal.Length前10行数据
> iris[1:10, "Sepal.Length"]
[1] 5.1 4.9 4.7 4.6 5.0 5.4 4.6 5.0 4.4 4.9

同上
> iris$Sepal.Length[1:10]
[1] 5.1 4.9 4.7 4.6 5.0 5.4 4.6 5.0 4.4 4.9

显示数据集中每个变量的分布情况
> summary(iris)
  Sepal.Length    Sepal.Width     Petal.Length    Petal.Width          Species  
Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100   setosa    :50  
1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300   versicolor:50  
Median :5.800   Median :3.000   Median :4.350   Median :1.300   virginica :50  
Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199                  
3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800                  
Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500                  

显示iris数据集列Species中各个值出现频次
> table(iris$Species)

    setosa versicolor  virginica 
        50         50         50 

根据列Species画出饼图
> pie(table(iris$Species))

算出列Sepal.Length的所有值的方差
> var(iris$Sepal.Length)
[1] 0.6856935

算出列iris$Sepal.Length和iris$Petal.Length的协方差
> cov(iris$Sepal.Length, iris$Petal.Length)
[1] 1.274315

算出列iris$Sepal.Length和iris$Petal.Length的相关系数, 从结果看这两个值是强相关。
> cor(iris$Sepal.Length, iris$Petal.Length)
[1] 0.8717538

画出列iris$Sepal.Length分布柱状图
> hist(iris$Sepal.Length)

画出列iris$Sepal.Length的密度函数图
> plot(density(iris$Sepal.Length))

画出列iris$Sepal.Length和iris$Sepal.Width的散点图           
> plot(iris$Sepal.Length, iris$Sepal.Width)

绘出矩阵各列的散布图
> plot(iris)
or
> pairs(iris)

第二步:使用knn包进行Kmean聚类分析

将数据集进行备份,将列newiris$Species置为空,将此数据集作为测试数据集
> newiris <- iris
> newiris$Species <- NULL

在数据集newiris上运行Kmean聚类分析, 将聚类结果保存在kc中。在kmean函数中,将需要生成聚类数设置为3
> (kc <- kmeans(newiris, 3)) 
K-means clustering with 3 clusters of sizes 38, 50, 62: K-means算法产生了3个聚类,大小分别为38,50,62. 

Cluster means: 每个聚类中各个列值生成的最终平均值
  Sepal.Length Sepal.Width Petal.Length Petal.Width
1     5.006000    3.428000     1.462000    0.246000
2     5.901613    2.748387     4.393548    1.433871
3     6.850000    3.073684     5.742105    2.071053

Clustering vector: 每行记录所属的聚类(2代表属于第二个聚类,1代表属于第一个聚类,3代表属于第三个聚类)
  [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[37] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
[73] 2 2 2 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 2 3 3 3 3 2 3
[109] 3 3 3 3 3 2 2 3 3 3 3 2 3 2 3 2 3 3 2 2 3 3 3 3 3 2 3 3 3 3 2 3 3 3 2 3
[145] 3 3 2 3 3 2

Within cluster sum of squares by cluster: 每个聚类内部的距离平方和   
[1] 15.15100 39.82097 23.87947
(between_SS / total_SS =  88.4 %) 组间的距离平方和占了整体距离平方和的的88.4%,也就是说各个聚类间的距离做到了最大

Available components: 运行kmeans函数返回的对象所包含的各个组成部分
[1] “cluster”      “centers”      “totss”        “withinss”    
[5] “tot.withinss” “betweenss”    “size”  
(“cluster”是一个整数向量,用于表示记录所属的聚类  
“centers”是一个矩阵,表示每聚类中各个变量的中心点
“totss”表示所生成聚类的总体距离平方和
“withinss”表示各个聚类组内的距离平方和
“tot.withinss”表示聚类组内的距离平方和总量
“betweenss”表示聚类组间的聚类平方和总量
“size”表示每个聚类组中成员的数量)

创建一个连续表,在三个聚类中分别统计各种花出现的次数
> table(iris$Species, kc$cluster)           
              1  2  3
  setosa      0 50  0
  versicolor  2  0 48
  virginica  36  0 14

根据最后的聚类结果画出散点图,数据为结果集中的列”Sepal.Length”和”Sepal.Width”,颜色为用1,2,3表示的缺省颜色
> plot(newiris[c("Sepal.Length", "Sepal.Width")], col = kc$cluster)
在图上标出每个聚类的中心点
〉points(kc$centers[,c("Sepal.Length", "Sepal.Width")], col = 1:3, pch = 8, cex=2)

时间: 2024-11-09 00:45:15

一个用R语言进行聚类分析的例子的相关文章

《R语言数据分析与挖掘实战》——导读

前 言 为什么要写这本书 LinkedIn对全球超过3.3亿用户的工作经历和技能进行分析后得出,目前最受关注的25项技能中,对数据挖掘人才的需求排名第一.那么数据挖掘是什么? 数据挖掘是从大量数据(包括文本)中挖掘出隐含的.先前未知的.对决策有潜在价值的关系.模式和趋势,并用这些知识和规则建立用于决策支持的模型,提供预测性决策支持的方法.工具和过程.数据挖掘有助于企业发现业务的发展趋势,揭示已知的事实,预测未知的结果,因此"数据挖掘"已成为企业保持竞争力的必要方法. 但跟国外相比,我国

《R语言与数据挖掘最佳实践和经典案例》—— 第3章 数 据 探 索

第3章 数 据 探 索 本章将介绍一个使用R进行数据探索的例子.首先,我们查看R对象的维度.结构和数据.其次,介绍基础统计以及各种图表,例如饼图.直方图.再次,演示不同变量的探索性分析,包括分组分布.分组盒图.散布图和配对的散布图矩阵,同样也将给出等级图.等高图以及3D散布图的例子.最后,演示如何将这些图表保存到各种不同格式的文件中.

R语言商业支持发展之路或许可行

数据的爆炸性增长给企业带来了压力,同时也催生了数据驱动业务的发展理念,企业等各种组织不得不重视数据统计和分析的作用,为统计计算和图形化而生的R语言迎合了这一庞大的需求,为了帮助企业更好地掌握和利用R语言,应对大数据时代统计编程的需求,Revolution Analytics推出了新工具包,以支持R语言. David Smith是Revolution Analytics的社区总监和新开源解决方案组的领头人,他指出:"许多公司投入大量资金收集数据,这在过去是从未有过的,而收集数据只是第一步,分析数据

《机器学习与R语言(原书第2版)》一3.2 例子—用kNN算法诊断乳腺癌

本节书摘来自华章出版社<机器学习与R语言(原书第2版)>一书中的第3章,第3.2节,美] 布雷特·兰茨(Brett Lantz) 著,李洪成 许金炜 李舰 译更多章节内容可以访问"华章计算机"公众号查看. 3.2 例子-用kNN算法诊断乳腺癌 定期的乳腺癌检查使得疾病在引起明显的症状之前就得到诊断与治疗.早期的检测过程包括检查乳腺组织的异常肿块.如果发现一个肿块,那么就需要进行细针抽吸活检,即利用一根空心针从肿块中提取细胞的一个小样品,然后临床医生在显微镜下检查细胞,从而确

《R语言编程艺术》——1.2 第一个R会话

1.2 第一个R会话 用数字1.2.4生成一个简单的数据集(用R的说法就是"向量"),将其命名为x: R语言的标准赋值运算符是<-.也可以用=,不过并不建议用它,因为在有些特殊的情况下它会失灵.注意,变量的类型并不是固定不变的.在这里,我们把一个向量赋值给x,也许之后会把其他类型的值赋给它.我们会在1.4节介绍向量和其他类型.c表示"连接"(英文是concatenate).在这里,我们把数字1.2.4连接起来.更精确地说,连接的是分别包含三个数字的三个一元向量

R语言,在本地的Rstudio上,读入数据左上多了一个x?请教各位,谢谢!

问题描述 R语言,在本地的Rstudio上,读入数据左上多了一个x?请教各位,谢谢! 这条命令左上角多了x,其它都行,读出来class是数据框,挺规整 my_data <- read.table("D:Data.txt", head=T,sep="t") #######现在发现转化成numeric时,产生的NA数和行数一样多,我估计没写row.names=1的结果就是把第一列全纳入数据框了.... 本来是用这条,更不行.上条代码至少没报错(但事实证明有后果).

r语言-对一个向量的划分,求C语言或R语言实现

问题描述 对一个向量的划分,求C语言或R语言实现 1C 向量U={123456}利用R1属性划分为:U/R1={{123}{456}}利用R2属性划分为:U/R2={{12}{3456}}利用R3属性划分为:U/R3={{1234}{56}}最后得到划分的交集:U/R={{12}{3}{4}{56}}

《R语言数据分析》----第1章 你好,数据! 1.1 导入一个大小合适的文本文件

第1章 你好,数据! 大多数R项目都必须从数据导入到R的会话中开始,由于R语言能够支持多种文件格式和数据库后台,因此可以使用相当多的数据导入方法.本章,我们不会再讨论基础的数据结构,因为你应该已经对它们非常熟悉了.本章的重点将放在大数据集的导入以及处理一些特殊的文件类型. 如果读者希望对标准工具做一个粗略的回顾,复习一下普通类型数据导入的方法,可以参考官方有关CRAN介绍的手册,地址为:http://cran.r-project.org/doc/manuals/R-intro.html#Read

r语言-请教R语言的一个数据统计问题

问题描述 请教R语言的一个数据统计问题 一个数据集中,包含"月份","手机号码"等字段.数据中包含多个月,且每个月有些手机号码会重复出现.现在想在原数据集增加一个字段"当月重复出现次数",等于[每条记录中手机号码在当月出现次数].请问在R中如何实现?谢谢! 解决方案 <项目一>请教一个关于获取post json数据的问题