任务一:K-Means聚类
在篮球运动中,一般情况下,控球后卫与得分后卫的助攻数较多,小前锋的得分数较多,而大前锋与中锋的助攻数与得分数较少。下表为21名篮球运动员每分钟助攻数和每分钟得分数的数据集,请运用K-Means聚类算法将这21名篮球运动员划分为5类,并通过画图判断他们分别属于什么位置。
数据入下(其中:assists_per_minute----每分钟助攻次数;points_per_minute----每分钟得分数):

   assists_per_minute    points_per_minute
1       0.0888              0.5885
2       0.1399              0.8291
3       0.0747              0.4974
4       0.0983              0.5772
5       0.1276              0.5703
6       0.1671              0.5835
7       0.1906              0.5276
8       0.1061              0.5523
9       0.2446              0.4007
10      0.167               0.477
11      0.2485              0.4313
12      0.1227              0.4909
13      0.124               0.5668
14      0.1461              0.5113
15      0.2315              0.3788
16      0.0494              0.559
17      0.1107              0.4799
18      0.2521              0.5735
19      0.1007              0.6318
20      0.1067              0.4326
21      0.1956              0.428
#篮球-聚类分析
# 设置工作目录并读取数据
#导入数据
setwd('D:/basketball')
basketballdata <- read.csv("basketball_data.csv",stringsAsFactors = F) # 数据读取
# 定义一个矩阵
outfile <- matrix(data=NA, nrow = nrow(basketballdata), ncol = 2, byrow = TRUE, dimnames = list(c(1:nrow(basketballdata)),c("assists_per_minute","points_per_minute")))
# 数据变换
outfile[,1] <- basketballdata[,2]
outfile[,2] <- basketballdata[,3]
summary(outfile)#将字符串存储为文件 采用Base64解码
write.csv(outfile,'datachange.csv',row.names = FALSE)
basketballdata <- read.csv('datachange.csv', header = TRUE)
> summary(outfile)#将字符串存储为文件 采用Base64解码assists_per_minute points_per_minuteMin.   :0.0494     Min.   :0.3788   1st Qu.:0.1061     1st Qu.:0.4770   Median :0.1276     Median :0.5276   Mean   :0.1473     Mean   :0.5280   3rd Qu.:0.1906     3rd Qu.:0.5735   Max.   :0.2521     Max.   :0.8291
# 数据去中心化后的标准化
zscoredfile <- scale(basketballdata)
# 数据写出
write.csv(zscoredfile, 'standardizeddata.csv',row.names = FALSE)
inputfile <- read.csv('standardizeddata.csv', header = TRUE)
> zscoredfileassists_per_minute points_per_minute[1,]        -0.97522173       0.617818854[2,]        -0.12294513       3.073831084[3,]        -1.21039003      -0.312117613[4,]        -0.81677500       0.502469984[5,]        -0.32809194       0.432035718[6,]         0.33071287       0.566779531[7,]         0.72266003      -0.003840101[8,]        -0.68668190       0.248294155[9,]         1.62330458      -1.299218123
[10,]         0.32904501      -0.520358052
[11,]         1.68835113      -0.986857465
[12,]        -0.40981710      -0.378468733
[13,]        -0.38813491       0.396308192
[14,]        -0.01953779      -0.170228295
[15,]         1.40481488      -1.522770358
[16,]        -1.63235868       0.316686848
[17,]        -0.60996033      -0.490755244
[18,]         1.74839410       0.464700885
[19,]        -0.77674636       1.059819393
[20,]        -0.67667474      -0.973587241
[21,]         0.80605304      -1.020543419
attr(,"scaled:center")
assists_per_minute  points_per_minute 0.1472714          0.5279762
attr(,"scaled:scale")
assists_per_minute  points_per_minute 0.05995706         0.09796368
# 聚类分析--5个簇心,调用kmeans算法
result <- kmeans(inputfile, 5)
> result
K-means clustering with 5 clusters of sizes 4, 3, 1, 5, 8Cluster means:assists_per_minute points_per_minute
1          1.3806309        -1.2073473
2          0.9339223         0.3425468
3         -0.1229451         3.0738311
4         -0.2773890        -0.5066795
5         -0.8518001         0.4076644Clustering vector:[1] 5 3 5 5 5 2 2 5 1 4 1 4 5 4 1 5 4 2 5 4 1Within cluster sum of squares by cluster:
[1] 0.6757502 1.2570435 0.0000000 1.0699004 2.3074148(between_SS / total_SS =  86.7 %)Available components:[1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss" "betweenss"    "size"         "iter"         "ifault"
>
# 结果输出
type <- result$cluster
type# 查看类别分布
> type# 查看类别分布[1] 5 3 5 5 5 2 2 5 1 4 1 4 5 4 1 5 4 2 5 4 1
>
table(type)  # 查看类别统计
> table(type)  # 查看类别统计
type
1 2 3 4 5
4 3 1 5 8
>
centervec <- result$center
centervec # 查看簇中心点
> centervec # 查看簇中心点assists_per_minute points_per_minute
1          1.3806309        -1.2073473
2          0.9339223         0.3425468
3         -0.1229451         3.0738311
4         -0.2773890        -0.5066795
5         -0.8518001         0.4076644
>
max <- apply(centervec,2,max)
max
> max
assists_per_minute  points_per_minute 1.380631           3.073831
>
min <- apply(centervec,2,min)
min
> min
assists_per_minute  points_per_minute -0.8518001         -1.2073473
>
df = data.frame(rbind(max,min,centervec))
df
> dfassists_per_minute points_per_minute
max          1.3806309         3.0738311
min         -0.8518001        -1.2073473
1            1.3806309        -1.2073473
2            0.9339223         0.3425468
3           -0.1229451         3.0738311
4           -0.2773890        -0.5066795
5           -0.8518001         0.4076644
>
#绘制散点图
# 引入cluster库(clara、fanny)
library(cluster)
# 聚类散点图绘制
# 引入factoextra,cluster库(fviz_cluster)
library(ggplot2)
library(factoextra)
#调用kmeans算法结果---绘图
# 聚类分析--5个簇心,调用kmeans算法
#result <- kmeans(inputfile, 5)
#> type# 查看类别分布
# [1] 5 3 5 5 5 2 2 5 1 4 1 4 5 4 1 5 4 2 5 4 1
#> table(type)  # 查看类别统计
#type
#1 2 3 4 5
#4 3 1 5 8
fviz_cluster(result,basketballdata)

在篮球运动中,一般情况下,
控球后卫与得分后卫的助攻数较多,
小前锋的得分数较多,
而大前锋与中锋的助攻数与得分数较少。
所以由上述结果可知:
第一组(粉色部分)与第二组(棕色部分)的每分钟助攻次数(assists_per_minute)较多,所以对应控球后卫与得分后卫。又因为得分后卫的每分钟得分数(points_per_minute)多于控球后卫,所以第一组(粉色部分)为控球后卫,第二组(棕色部分)为得分后卫。
第三组(绿色部分)的每分钟得分数(points_per_minute)较多,所以对应小前锋
第四组(蓝色部分)和第五组(紫色部分)的每分钟助攻次数(assists_per_minute)及每分钟得分数(points_per_minute)较少,所以对应大前锋与中锋。又因为中锋每分钟得分数(points_per_minute)多于大前锋(大前锋在比赛中多配合,每分钟助攻次数(assists_per_minute)较多),所以,第四组(蓝色部分)为大前锋,第五组(紫色部分)为中锋。
最终结论为:
第一组(粉色部分)为控球后卫
(第一组:9,11,15,21)
第二组(棕色部分)为得分后卫
(第二组:6,7,18)
第三组(绿色部分)为小前锋
(第三组:2)
第四组(蓝色部分)为大前锋
(第四组:10,12,14,17,20)
第五组(紫色部分)为中锋
(第五组:1,3,4,5,8,13,16,19)

任务二:模糊C-Means聚类算法

> # 调用模糊Fuzzy C-Means聚类算法
> fan <- fanny(basketballdata,5)
> fan
Fuzzy Clustering object of class 'fanny' :
m.ship.expon.        2
objective     0.2458662
tolerance        1e-15
iterations          66
converged            1
maxit              500
n                   21
Membership coefficients (in %, rounded):[,1] [,2] [,3] [,4] [,5][1,]   67    6   17    7    3[2,]   25   17   23   22   13[3,]   18   40   18   17    8[4,]   60    7   24    8    3[5,]   13    5   73    7    2[6,]   20   13   32   28    7[7,]   10   13   14   56    8[8,]   30   13   39   13    4[9,]    3    4    3    5   85
[10,]   11   30   13   32   14
[11,]    6   10    7   13   64
[12,]    7   69    8   12    4
[13,]   12    5   74    7    2
[14,]   12   31   17   33    7
[15,]    5    8    6    9   72
[16,]   38   18   23   15    7
[17,]    7   72    7   10    4
[18,]   16   16   19   35   14
[19,]   42   11   26   15    6
[20,]   13   41   14   19   14
[21,]    9   19   11   20   42
Fuzzyness coefficients:
dunn_coeff normalized 0.3778210  0.2222763
Closest hard clustering:[1] 1 1 2 1 3 3 4 3 5 4 5 2 3 4 5 1 2 4 1 2 5Available components:[1] "membership"  "coeff"       "memb.exp"    "clustering"  "k.crisp"     "objective"  [7] "convergence" "diss"        "call"        "silinfo"     "data"
> # 结果输出
> type2 <- fan$cluster
> type2# 查看类别分布[1] 1 1 2 1 3 3 4 3 5 4 5 2 3 4 5 1 2 4 1 2 5
> table(type2)  # 查看类别统计
type2
1 2 3 4 5
5 4 4 4 4
> #调用模糊Fuzzy C-Means聚类算法结果---绘图
> fviz_cluster(fan, basketballdata)
>


任务三:Clara算法

> # 调用Clara算法
> cl <- clara(basketballdata,5)
> cl
Call:    clara(x = basketballdata, k = 5)
Medoids:assists_per_minute points_per_minute
[1,]             0.0983            0.5772
[2,]             0.1399            0.8291
[3,]             0.1227            0.4909
[4,]             0.1906            0.5276
[5,]             0.2446            0.4007
Objective function:  0.0313331
Clustering vector:   int [1:21] 1 2 3 1 1 4 4 1 5 3 5 3 1 3 5 1 3 4 ...
Cluster sizes:           7 1 6 3 4
Best sample:[1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21Available components:[1] "sample"     "medoids"    "i.med"      "clustering" "objective"  "clusinfo"   "diss"       "call"       "silinfo"    "data"
> # 结果输出
> type3 <- cl$cluster
> type3# 查看类别分布[1] 1 2 3 1 1 4 4 1 5 3 5 3 1 3 5 1 3 4 1 3 5
> table(type3)  # 查看类别统计
type3
1 2 3 4 5
7 1 6 3 4
> #调用Clara算法结果---绘图
> fviz_cluster(cl, basketballdata)
>

R语言小代码(聚类练习)相关推荐

  1. R语言小代码6(股票数据分析)

    任务:一:请举例说明R语言如何读取Excel中不同工作表中的文件 创建一个excel文件,给不同的sheet命名:下载readxl包,使用read_xlsx方法,注明路径和sheet名字,就能读取不同 ...

  2. R语言小代码7(流程控制练习)

    任务:计算等额本金还款和等额本息还款 小张贷款100万购买房子,贷款利率为4.9%(年利率),贷款期限20年. 1)用循环执行语句(for或者while),分别计算等额本金还款和等额本息还款的每月偿还 ...

  3. R语言小代码(商品零售购物篮分析)

    任务: 某西饼屋准备对现有的店面重新进行布置,以期能够给用户提供更加友好的体验.现有某西饼屋某天60天订单数据,部分数据如下所示,使用Apriori算法对西饼屋订单进行关联分析. 一.导入数据: se ...

  4. R语言绘制带聚类树的堆叠柱形图

    R语言绘制带聚类树的堆叠柱形图 聚类树与柱形图结合,即可反映样本或分组间的相似性,又能展示样本内的元素组成信息. 例如下图是一个在扩增子测序微生物群落分析中常见的统计图类型,在测序公司给的报告中通常都 ...

  5. R语言时间序列代码整理

    R语言时间序列代码整理 时间序列: data<-read.csv('/Users/ji_fanyang/Desktop/test2.csv') myseries<- ts(data[1], ...

  6. R语言统计代码运行耗时实战:计算代码运行时间、使用proc.time函数计算代码运行时间

    R语言统计代码运行耗时实战:计算代码运行时间.使用proc.time函数计算代码运行时间 目录

  7. ++代码实现 感知机的原理_决策树ID3原理及R语言python代码实现(西瓜书)

    决策树ID3原理及R语言python代码实现(西瓜书) 摘要: 决策树是机器学习中一种非常常见的分类与回归方法,可以认为是if-else结构的规则.分类决策树是由节点和有向边组成的树形结构,节点表示特 ...

  8. R语言编写代码的方式

    大部分的代码都是基于控制台的交互式操作,但是对于那些要重复好多次的程序片段,将其保存为一段R程序文件是一个不错的选择.通常,R程序以ASCII格式保存,扩展名为".R". 可以在类 ...

  9. r语言向量代码如何创建函数c,R中向量基本操作:创建、运算、访问

    本文含有: 向量的创建与运算 两个方便创建向量的函数:rep()与seq() 如何访问向量中的元素 首先先明白几个要点: R区分大小写,向量A和向量a是两个不同的向量: R可以识别负数,如5+-2可以 ...

  10. r语言调用dll出现错误载入表里没有c字符名,R语言(示例代码)

    1.R语言介绍 R和RStudio 是与计算机进行对话的两个工具 RStudio 是话筒 R是沟通所用的语言 R的由来:基于S语言,由新西兰奥克兰大学的Robert Gentleman和Ross Ih ...

最新文章

  1. linux nginx php 目录权限,Nginx环境中配置网站目录权限设置
  2. 学python对学c++有帮助吗_2020,你该学习Python还是C++
  3. 基于Python+Django的Kubernetes集群管理平台
  4. Cloud for Customer UI checkbox控件在PC和mobile端的不同显示
  5. Windows Azure Marketplace增加对六种语言和HTML5应用程序的支持
  6. android4.0支持m3u8格式,【报Bug】安卓下无法播放M3U8格式音频,报错
  7. 卫星系统采用的轨道类型
  8. vim 函数列表插件
  9. android icon 圆角半径,iOS和安卓APP启动图标的尺寸和圆角值详解
  10. Dragonfly成为CNCF孵化项目,我们与基金会首位华人TOC聊了聊
  11. Material Design之AppBarLayout总结
  12. dns服务期搭建使用_DNS添加反向查找区域
  13. virtualbox版oracle RAC环境搭建
  14. Flash开发iOS应用全攻略(三)——如何使用iOS开发者授权以及如何申请证书
  15. MySql 学习笔记-Mysql架构介绍与查询sql执行流程
  16. 图片滚动js 实现图片无缝滚动
  17. 闲谈IPv6-v4/v6协议转换报文的checksum无关性
  18. C语言实现24点小游戏,C语言解24点游戏程序
  19. c语言程序设计的例题,C语言程序设计例题与习题--详细介绍
  20. MIPI 系列之 DSI

热门文章

  1. Co-Grounding Networks with Semantic Attention for Referring Expression Comprehension in Videos
  2. V831——二维码识别
  3. 团队管理--领导力的重要性
  4. android 360短信拦截,Android版360卫士更威武
  5. shell 中三种引号的用法及区别
  6. linux运维是做什么的
  7. Qt自带示例演示程序
  8. javascript笔记 狂神说
  9. C++ exception with description “bad optional access“ thrown in the test body.
  10. 万能地图下载器矢量标注功能特性