目录
前言
一、数据集介绍
二、读取数据,去重
三、夺冠球队进失球率展示
1. 计算进球数、进球率及场次
2. 计算失球数、失球率及场次
3. 夺冠国家进失球率矩阵图
四、夺冠球队顺逆风球情况
1. 构造胜负关系
2. 主、客队胜负类别可视化
3. 顺、逆风球球队柱图
4. 夺冠国家胜负类别可视化
五、其余可视化部分展示
前言
本次只是针对世界杯比赛比分汇总表做了两个专题分析展示,一个是夺冠球队进失球率,一个是夺冠球队顺逆风球情况
一、数据集介绍
赛事数据链接:世界杯数据可视化分析赛题与数据-天池大赛-阿里云天池
本次数据分析项目包括3张来自FIFA官方数据整理的基础数据表
世界杯成绩信息表:WorldCupsSummary
包含了所有21届世界杯赛事(1930-2018)的比赛主办国、前四名队伍、总参赛队伍、总进球数、现场观众人数等汇总信息,包括如下字段:
Year: 举办年份
HostCountry: 举办国家
Winner: 冠军队伍
Second: 亚军队伍
Third: 季军队伍
Fourth: 第四名队伍
GoalsScored: 总进球数
QualifiedTeams: 总参赛队伍数
MatchesPlayed: 总比赛场数
Attendance: 现场观众总人数
HostContinent: 举办国所在洲
WinnerContinent: 冠军国家队所在洲
世界杯比赛比分汇总表:WorldCupMatches.csv
包含了所有21届世界杯赛事(1930-2014)单场比赛的信息,包括比赛时间、比赛主客队、比赛进球数、比赛裁判等信息。包括如下字段:
Year: 比赛(所属世界杯)举办年份
Datetime: 比赛具体日期
Stage: 比赛所属阶段,包括 小组赛(GroupX)、16进8(Quarter-Final)、半决赛(Semi-Final)、决赛(Final)等
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: 客队名字缩写
世界杯球员信息表:WorldCupPlayers.csv
RoundID: 比赛所处阶段ID,同比赛信息表的RoundID字段
MatchID: 比赛ID
Team Initials: 队伍名
Coach Name: 教练名
Line-up: 首发/替补
Shirt Number: 球衣号码
Player Name: 队员名
Position: 比赛角色,包括:C=Captain, GK=Goalkeeper
Event: 比赛事件,包括进球、红/黄牌等
二、读取数据,去重
import pandas as pd
df=pd.read_csv("/WorldCupMatches.csv")
df.shape
# (852, 19)
df[df.duplicated()] # 筛选重复值 16个重复值
df=df.drop_duplicates() #删除重复项
df.shape
#(836, 19)
三、夺冠球队进失球率展示
1. 计算进球数、进球率及场次
# 主队进球数
data1=pd.DataFrame(df.groupby("Home Team Name")["Home Team Goals"].agg(["count",'sum']).sort_values('sum',ascending=False).reset_index())
data1.rename(columns={'Home Team Name': '球队','count': '场次','sum':'进球数'}, inplace=True)
# 客队进球数
data2=pd.DataFrame(df.groupby("Away Team Name")["Away Team Goals"].agg(["count",'sum']).sort_values('sum',ascending=False).reset_index())
data2.rename(columns={'Away Team Name': '球队','count': '场次','sum':'进球数'}, inplace=True)
# 合并
data3=data1.merge(data2,on="球队",how="outer")
data3=data3.fillna(0) # 因为部分球队没有作为主队出场过,所以合并后会有NaN,用0填充
data3
data3["总场次"]=data3["场次_x"]+data3["场次_y"]
data3["总进球数"]=data3["进球数_x"]+data3["进球数_y"]
data3["进球率"]=(data3["总进球数"]/data3["总场次"]).round(2)
data3.sort_values("进球率",ascending=False)[:10]
球队
场次_x
进球数_x
场次_y
进球数_y
总场次
总进球数
进球率
Hungary
18
73
14
14
32
87
2.72
Brazil
78
176
26
45
104
221
2.12
Germany FR
43
99
19
32
62
131
2.11
Germany
32
66
12
27
44
93
2.11
Turkey
2
10
8
10