@agpwhy
2021-06-14T07:27:58.000000Z
字数 1577
阅读 335
上次师兄正好给我了个任务,让我做一个相关性热图,而且要求是不对称的。这个我之前没做过,但经过一番波折还是完成了。
这个还蛮有意思,需要稍微有一些编程的基础,最起码得知道怎么做循环。如果有感兴趣又没太看懂的,下次我可以简单讲下循环。
由于数据是课题组的,我就拿一个公共数据来瞅瞅
08年NBA我还是蛮有印象的,22连胜的火箭,初代三巨头夺冠的绿军,科比当年痛失冠军也是很让人唏嘘(虽然我是科黑)。不过正好手头有比较好的数据,我们就拿那年排名靠前的50名NBA选手的数据搞个热图瞅瞅。更全的NBA数据可以上这里去搜 https://www.kaggle.com/nathanlauga/nba-games
library(ggplot2)
library(GGally)
library(corrplot)
nba = read.csv("http://datasets.flowingdata.com/ppg2008.csv")
都是些熟悉的老名字了。暴露年龄了。希望今年大帝能够重振中锋荣光吧,约基奇数据好看,可惜没机会夺冠了。
闲话少扯,回顾数据。
这个数据比较简单,一共是21项数据,第一列是名字,这个不是数值不能计算相关性,就去除掉(或者写到行名)
row <- nba[,1]
nba <- nba[,-1]
rownames(nba) <- row
数据一共有20项,其中前12项和得分比较相关,后8项和得分不是直接相关,那我们就做一下12*8的相关性热图矩阵。
y <- matrix(NA,12,8)
先搞个空的矩阵
for (i in 1:12){
for (j in 13:20){
y[i,j-12]=cor(nba[,i],nba[,j],method="pearson")
}
j = 13
}
再填上矩阵(这里用的是pearson相关系数,可以改成“kendall”,或者“spearman“,具体要看统计学教材了,我不是专家)
类似的,计算下p值。
z <- matrix(NA,12,8)
for (i in 1:12){
for (j in 13:20){
a = cor.test(nba[,i],nba[,j],method="pearson")
z[i,j-12]=a$p.value
}
j = 13
}
整理下两个矩阵的行名,列名
names <- names(nba)
colnames(y) = names[13:20]
rownames(y) = names[1:12]
colnames(z) = names[13:20]
rownames(z) = names[1:12]
这是弄好相关性矩阵的样子
先搞下调色盘
library(RColorBrewer)
coul = colorRampPalette(c("darkblue","white","darkred"))(20)
再搞下这些代码
corrplot(y,
col= coul,
tl.srt = 0,
tl.cex= 1,
tl.col ="black",
tl.offset = 0.5,
cl.lim=c(-1,1),
cl.align.text = "l",
cl.length = 5,
cl.ratio = 0.1,
cl.cex = 0.8,
addgrid.col = "white",
method = "color",
p.mat = z,
insig="label_sig",sig.level = c(0.001,0.01,0.05),
pch.cex = 2,
is.corr = FALSE,
mar = c(0,0,2,2),
xpd=T
)
【部分内容来自https://www.jianshu.com/p/6f66fd7a5faa】
投篮命中率和篮板数/盖帽数这么强相关可能是投篮命中率高的内线多有关。这种数据放在今天,是不是会有其他的变化呢?可惜手头没有小球年代的数据。我就抛个砖,欢迎大家献玉。