当前位置:   article > 正文

R:世界杯数据可视化--WorldCupMatches_世界杯数据可视化分析

世界杯数据可视化分析

作为全球最受欢迎的体育运动,自然会吸引全世界无数球迷的目光。本文将对世界杯历史数据进行可视化分析。数据集是FIFA官方数据整理的基础数据表,本文数据集来源于天池。本文将对数据集WorldCupMatches进行数据可视化。该数据集包含了1930-2014年共20届世界杯赛事信息,涉及的信息可见“变量介绍”部分。

一   变量介绍

  • Year: 比赛(所属世界杯)举办年份
  • Datetime:比赛具体日期
  • Stage:比赛所属阶段,包括小组赛、16进8、半决赛、决赛等
  • Stadium:比赛体育场
  • City:比赛举办城市
  • Home Team Name:主队名
  • Away Team Name:客队名
  • Home Team Goals:主队进球数
  • Away Team Goals:客队进球数
  • Attendance:现场观众数
  • Half-time Home Goals:上半场主队进球数
  • Half-time Away Goals:上半场客队进球数
  • Referee:主裁
  • Assistant 1:助理裁判1
  • Assistant 2:助理裁判2
  • RoundID:比赛所处阶段ID,和Stage字段对应
  • MatchID:比赛ID
  • Home Team Initials:主队名字缩写
  • Away Team Initials:客队名字缩写

 二   数据分析

2.1 每年现场观众人数最多比赛

  1. opar=par(no.readonly=TRUE)
  2. par(pin=c(7,10),mar=c(4.5,7,2,6))
  3. bar5 <- barplot(c2$max_attendance,horiz=TRUE,
  4. axes=F,col="#E64B35CC",
  5. cex.names=0.8, #名称大小,即日期大小
  6. space=0, #每个条的宽度。值越大越细,值越小越粗
  7. main="历届比赛中最受欢迎的场次",cex.main=1.5,
  8. xlim=c(0,190000),xlab="现场观众人数(单位:万)",ylab="年份")
  9. axis(side=1,at=seq(0,190000,19000),labels=seq(0,19,1.9))
  10. axis(side=2,at=0.5:20.5,labels=c2$Year,las=2)
  11. text(rep(0,length(c2$Year)),bar5,
  12. labels=paste0("比赛队伍:",c2$team,"\n","现场观众人数:",c2$max_attendance),pos=4,cex=1)
  13. par(opar)

 2.2 历届比赛中观众人数最多的比赛

  1. opar=par(no.readonly=TRUE)
  2. par(pin=c(7,8),mar=c(4,13,1,2))
  3. bar6 <- barplot(new_order_WorldCupMatches$Attendance,horiz=T,
  4. axes=F,names.arg="",space=0,
  5. col=brewer.pal(n,"Set3"),cex.main=1.5,
  6. xlim=c(0,190000),
  7. main="历史最受欢迎的前十场比赛",xlab="现场观众人数")
  8. axis(side=1,at=seq(0,190000,19000),las=1,font=1,
  9. cex.axis=1,lwd=2,line=0)
  10. axis(side=2,at=0.5:9.5,labels=new_order_WorldCupMatches$team,
  11. las=2,cex.axis=1,font=2)
  12. lab1 <- paste("team:",new_order_WorldCupMatches$team,"\n",
  13. new_order_WorldCupMatches$new_Datetime,"\n",
  14. new_order_WorldCupMatches$new_Stadium,"\n",
  15. "Attendance:",new_order_WorldCupMatches$Attendance,"人",sep="")
  16. text(rep(0,n),bar6,labels=lab1,pos=4,cex=0.8)
  17. par(opar)

2.3 历届比赛不同阶段现场观众人数比例变化

  1. # 将变量new_stage转换为有序因子
  2. new_WorldCupMatches$new_stage <- factor(new_WorldCupMatches$new_stage,
  3. levels=c("Group","Round of 16","Quarter-finals","Semi-finals","Third place","Final"))
  4. bar7 <- ggplot(new_WorldCupMatches,aes(x=factor(Year),y=Attendance,fill=new_stage))+
  5. geom_bar(stat="identity",position="stack")+
  6. scale_fill_brewer(palette="Set1")+
  7. # scale_fill_discrete(breaks=c("Group","Round of 16","Quarter-finals","Semi-finals","Third place","Final"))+ #调整图例顺序
  8. scale_y_continuous(limits=c(0,3600000),breaks=seq(0,3600000,600000),labels=seq(0,36,6)) +
  9. labs(title="历届比赛不同比赛阶段现场观众总人数",x="年份",y="现场观众人数(单位:百万)")+
  10. theme(legend.position=c(0.15,0.9),
  11. legend.title=element_blank(), #移除图例中的标题
  12. legend.background = element_rect(fill=rgb(1,1,1,alpha=0.001),colour=NA), #不显示图例背景色
  13. legend.text=element_text(size=12), #设置图例中文本大小
  14. plot.title = element_text(hjust=0.5, #标题居中
  15. size=16), #大小。face表示字体
  16. axis.text.x=element_text(size=13,angle=90,hjust=1,vjust=0.5)) #设置x轴刻度标签居中
  17. bar8 <- ggplot(new_WorldCupMatches,aes(x=factor(Year),y=Attendance,fill=new_stage))+
  18. geom_bar(stat="identity",position="fill")+
  19. scale_fill_brewer(palette="Set1")+
  20. # scale_fill_discrete(breaks=c("Group","Round of 16","Quarter-finals","Semi-finals","Third place","Final"))+
  21. scale_y_continuous(labels=seq(0,100,25))+
  22. labs(title="历届比赛不同阶段的现场观众人数比例",x="年份",y="现场观众人数比例(单位:%)")+
  23. theme(legend.position="none", #移除图例
  24. plot.title=element_text(hjust=0.5,size=16),
  25. axis.text.x=element_text(size=13,angle=90,hjust=1,vjust=0.5))
  26. grid.arrange(bar7,bar8,ncol=2) #将两幅图整合为一幅图

2.4 体育场中的观众人数排名

  1. ggplot(top10_statt,aes(x=reorder(stadium,attendance),y=attendance,fill=stadium))+
  2. geom_bar(stat="identity")+
  3. scale_fill_manual(values = colorRampPalette(brewer.pal(5, "Blues"))(colourCount),
  4. breaks=top10_statt$stadium)+
  5. geom_text(aes(x=stadium,y=5000,label=paste0("City:",city)),hjust=0,size=5)+ #fontface="bold"字体加粗
  6. labs(title="世界杯比赛中平均观众人数排名前十名的体育场",y="现场观众人数",x="体育场")+
  7. theme(plot.title=element_text(hjust=0.5,size=20,face="bold"),
  8. axis.title.x=element_text(size=15),
  9. axis.text=element_text(size=13),
  10. axis.title.y=element_text(size=18),
  11. legend.title=element_blank())+
  12. coord_flip()

2.5 主办世界杯比赛次数前十的城市

  1. city <- data.frame(table(new_WorldCupMatches$City))
  2. names(city)[1] <- "city"
  3. city <- city[order(-city$Freq),]
  4. ggplot(city[1:10,],aes(x=reorder(city,Freq),y=Freq))+
  5. geom_segment(aes(x=reorder(city,Freq),xend=reorder(city,Freq),y=0,yend=Freq),colour="grey50")+
  6. geom_point(size=5,color="red")+
  7. scale_y_continuous(limits=c(0,25),breaks=seq(0,25,5),labels=seq(0,25,5))+
  8. theme_bw()+
  9. labs(title="主办比赛次数排名前十的城市",x="主办城市",y="主办次数")+
  10. theme(panel.grid.major.x = element_blank(),
  11. plot.title=element_text(hjust=0.5,size=20,face="bold"))

2.6 各国作为主队、客队参加比赛次数,及其总次数 

  1. ggplot(country_fre01,aes(x=country,y=count,color=group))+
  2. geom_point()+
  3. facet_wrap(~group,scale="free")+
  4. geom_hline(data=t6,aes(yintercept=t5),linetype="dotdash",color="gray50")+
  5. geom_segment(aes(x=country,xend=country,y=0,yend=count))+
  6. labs(title="各国参加世界杯比赛的次数")+
  7. theme(axis.text.x=element_text(angle=90,hjust=1,vjust=0.5),
  8. legend.position = "none",
  9. plot.title=element_text(hjust=0.5,size=20,face="bold"))+
  10. coord_flip()

 2.7 各国参加21届世界杯的次数

  1. ggplot(count_co[1:10,],aes(x=reorder(country,-Freq),y=Freq,fill=country))+
  2. geom_bar(stat="identity")+
  3. scale_fill_manual(values=colorRampPalette(brewer.pal(5,"RdYlBu"))(10),
  4. breaks=count_co$country)+
  5. scale_y_continuous(limits=c(0,30),breaks=seq(0,30,5),labels=seq(0,30,5))+
  6. geom_hline(yintercept=14,color="red",linetype="dotdash")+
  7. labs(title="21届世界杯比赛中参加次数最多的前十名国家",x="国家",y="次数")+
  8. theme(legend.position = "none",
  9. axis.title=element_text(size=16),
  10. axis.text = element_text(size=15),
  11. plot.title=element_text(hjust=0.5,size=20,face="bold"))

 2.8 主客队胜负情况

  1. ggplot(win_lose_res,aes(x="",y=pro,fill=Var1))+
  2. geom_bar(stat="identity",position="stack",width=0.5)+
  3. coord_polar(theta="y")+
  4. scale_fill_brewer(palette="Set2")+
  5. labs(title="主客队胜负及平局比例",x="",y="")+ #将x、y轴的标签取消
  6. theme_bw()+
  7. theme(legend.position = "top",
  8. legend.title=element_blank(),
  9. plot.title=element_text(hjust=0.5,size=20),
  10. panel.border=element_blank(),
  11. panel.grid=element_blank(),
  12. axis.ticks=element_blank(),
  13. axis.text.x=element_blank())+
  14. geom_text(aes(label= paste0(Var1,"\n",round(100*pro,2),"%")),
  15. position=position_stack(vjust=0.5),size=4)

 2.9 各国的胜局、负局及平局次数

  1. ggplot(wld,aes(x=country_or,y=Freq,color=group))+
  2. geom_point(size=3)+
  3. geom_segment(aes(x=country_or,xend=country_or,y=0,yend=Freq))+
  4. scale_x_reordered()+
  5. facet_wrap(.~group,scales="free")+ #此处不能使用facet_grid()
  6. geom_hline(data=t7,aes(yintercept=ablin),linetype="dotdash")+
  7. labs(title="各国取得胜负及平局的次数",x="country")+
  8. theme_bw()+
  9. theme(axis.text.x=element_text(angle=90,hjust=1,vjust=0.5),
  10. plot.title=element_text(size=20,hjust=0.5,face="plain"),
  11. legend.position="none")+
  12. coord_flip()

2.10 进球数最多的国家

  1. ggplot(sum_goal[order(-sum_goal$x),][1:20,],aes(reorder(country,x),x))+
  2. geom_segment(aes(x=reorder(country,x),xend=reorder(country,x),y=0,yend=x),color="gray50")+
  3. geom_point(size=4,color="red")+
  4. scale_y_continuous(expand=c(0,0),limits=c(0,250),breaks=seq(0,250,50))+
  5. gghighlight(x>100,label_key = x)+
  6. labs(title="21届世界杯中进球总数最多的国家(前二十名)",x="country",y="count")+
  7. theme(plot.title=element_text(size=20,hjust=0.5,face="plain"),
  8. panel.grid.major.x = element_blank(),
  9. panel.grid.minor = element_blank(),
  10. axis.title=element_text(size=15),
  11. axis.text=element_text(size=10))+
  12. coord_flip()

2.11 夺冠队伍的进失球率矩阵图 

  1. w_hag <- subset(hag,hag$国家 %in% unique(WorldCupsSummary$Winner))
  2. w_hags <- subset(hags,hags$国家 %in% unique(WorldCupsSummary$Winner))
  3. w_haga <- merge(w_hag,w_hags,by="国家") #进球率与失球率
  4. ggplot(data=w_haga,aes(x=进球率,y=失球率))+
  5. geom_point(aes(color=国家,size=进球率*失球率),alpha=0.5)+
  6. scale_size(range=c(15,35))+
  7. scale_x_continuous(limits=c(1.15,2.3))+
  8. scale_y_continuous(limits=c(0.85,1.45))+
  9. geom_vline(xintercept=1.7)+
  10. geom_hline(yintercept=1.2)+
  11. labs(x="低<————— 进球率 —————>高",y="低<————— 失球率 —————>高",
  12. title="夺冠队伍的进失球矩阵分析图")+
  13. geom_text(aes(x=进球率,y=失球率,label=国家),size=w_haga$失球率*5)+
  14. theme_minimal()+
  15. theme(legend.position="none",
  16. plot.title=element_text(hjust=0.5,size=20,face="plain"))+
  17. coord_equal(ratio=1)

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号