美文网首页数据可视化
NBA球员数据简单探索分析(simple NBA EDA)

NBA球员数据简单探索分析(simple NBA EDA)

作者: 小明的数据分析笔记本 | 来源:发表于2018-04-30 18:49 被阅读35次

    又在kaggle上找到了一个有趣的NBA数据分析的案例,原文基于python实现,而且代码不是很长,非常好的学习素材,但是在重复原文身高分布直方图的过程中遇到了一些问题,暂时还没有找到原因,下面记录的是自己用R语言实现的过程

    (学英语学英语 Exploratory Data Analysis EDA 探索性数据分析)

    数据集可直接在kaggle下载Simple NBA EDA | Kaggle,数据集包含3922位球员,8个变量,分别是:X序号,Player(姓名),height(身高cm),weight(体重kg),collage(大学),born(出生的年份),birth_city(出生的城市),birth_state(出生的州)

    #查看当前所在路径

    getwd()

    #更改到数据集所在路径

    setwd("../Python_practice/a_kind_of/kaggle_pratice/")

    #读入数据

    players<-read.csv("Players.csv")

    #查看数据维度

    dim(players)

    #数据集的列名

    colnames(players)

    #删除缺失数据所在的行

    players<-na.omit(players)

    函数is.na()可以用来检测是否存在缺失值,比如

    y<-c(1,2,3,NA)

    is.na(y)

    返回的结果为c(FALSE,FALSE,FALSE,TRUE)

    用which()函数输出那个一个位置是TRUE,比如

    which(is.na(y))

    返回结果为 4

    函数complete.cases()可用来识别矩阵或者数据框中没有缺失值的行,如果每行都包含完整的数据则返回TRUE;如果每行有一个或者多个缺失数据则返回FALSE。函数na.omit()可以删除所含缺失数据所在的行。

    接下来用以身高为横坐标,体重为纵坐标画一幅简单的散点图,添加中位数辅助线,并分别为身高最高和最矮,体重最重和最轻添加数据标签。

    p1<-ggplot(players,aes(x=height,y=weight))+geom_point(col="blue")+

      geom_vline(xintercept=median(players$height),linetype="dashed")+

      geom_hline(yintercept=median(players$weight),linetype="dashed")+

      theme_bw()+

      labs(title="NBA Players Height&Weight",x="Height(cm)",y="Weight(Kg)")

    添加数据标签

    X<-c(which(players$height==min(players$height)),

        which(players$height==max(players$height)),

        which(players$weight==min(players$weight)),

        which(players$weight==max(players$weight)))

    df<-players[X,]

    #使用ggrepel添加数据标签

    library(ggrepel)

    p2<-p1+

      geom_point(data=df,aes(x=df$height,y=df$weight),color="red")+

      geom_text_repel(data=df,aes(label=df$Player))

    由上图我们可以看出最矮的球员是小虫博格斯,最轻,最重,最高的球员这几个名字还真没有听过。。。

    NBA球员身高体重分布直方图

    p3<-ggplot(players,aes(height))+

      geom_histogram(binwidth=5,fill="blue")+

      geom_vline(xintercept=mean(players$height),linetype="dashed")+

      theme_bw()+labs(x="Height in Cm",y="")+

      scale_y_continuous(expand=c(0,0))+

      geom_point(aes(x=200,y=800),col="white")

    p3

    p4<-ggplot(players,aes(weight))+

      geom_histogram(binwidth=5,fill="green")+

      geom_vline(xintercept=mean(players$weight),linetype="dashed")+

      theme_bw()+labs(x="Weight in kg",y="")+

      scale_y_continuous(expand=c(0,0))+

      geom_point(aes(x=100,y=750),col="white")

    p4

    library(ggtree)

    multiplot(p3,p4,ncol=2)

    PS:柱状图如何根据高低排序暂时们还没有找到解决办法!

    collages giving maximum players(向NBA输送最多球员的大学)

    df_1<-table(players$collage)

    df_1<-as.data.frame(df_1)

    df_2<-df_1[which(df_1$Freq>40),]

    df_2

    ggplot(df_2,aes(x=Var1,y=Freq))+geom_col(fill="blue")+

      theme(axis.text.x=element_text(angle=45,vjust=1,hjust=1))+

      ylab("")+xlab("")+

      geom_text(aes(label=Freq),vjust=-0.5)

    杜克大学,加州大学洛杉矶分校(UCLA),北卡,堪萨斯,肯塔基等等都是响当当的篮球名校,接下来还探索了球员出生地所在的州的分布情况,内容和统计球员所在的大学差不多,内容就不再重复。

    补充:

    之前有一个问题是怎样让柱状图画的时候从大到小排序,找到一篇教程How to plot factors in a specified order in ggplot

    代码:

    set.seed(357)#设置随机数种子,保证每次随机生成的数据一致

    x<-data.frame(name=as.factor(sample(letters,10)),val=runif(10))#生成数据集,sample()是取样函数,runif()生成均匀分布的随机数

    library(ggplot2) #加载

    ggplot(x,aes(x=name,y=val))+geom_bar(stat="identity")+theme_bw()

    直接画结果是这样的

    如果想要从小到大的顺序的话

    x$name<-factor(x$name,level=x$name[order(x$val)]))

    ggplot(x,aes(x=name,y=val))+geom_bar(stat="identity")+theme_bw()

    结果就变成这样似的

    另一种方法reorder()

    ggplot(x,aes(x=reorder(name,val),y=val))+geom_bar(stat="identity")+theme_bar()

    效果和上面一样,如果想要从大到小排序该怎么做呢???第一种level的方法应该可以实现,用reorder()不知道该怎么做,又出现一个问题,另外geom_bar()函数里的stat参数到底是干什么用的呀???

    相关文章

      网友评论

        本文标题:NBA球员数据简单探索分析(simple NBA EDA)

        本文链接:https://www.haomeiwen.com/subject/feuzlftx.html