前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用Python对印度超级联赛进行数据分析实战

用Python对印度超级联赛进行数据分析实战

作者头像
数据STUDIO
发布2021-10-27 10:20:25
4590
发布2021-10-27 10:20:25
举报
文章被收录于专栏:数据STUDIO数据STUDIO

大家好,我是云朵君!

众所周知,我们生活在一个信息时代,数据在其中发挥着关键作用。可以毫不夸张地说,如果你拥有数据,你就拥有一切。

但是获得数据后会发生什么?这取决于你得到什么样的数据。你可能手头上有某种数据,必须对其进行分析才能获得有价值的信息。如果你在某个广告公司工作,那么你也必须在那里进行数据分析。通过分析他们的数据,你可以为公司提供一些有价值的信息和策略。

用Python进行数据分析,几乎是如今我们数据分析师必备的技能之一。我们平时学习了不少有关Python的基础知识,但使用Python进行数据分析实战比较少。今天云朵君就和大家一起学习结合使用 Pandas、NumPy、Seaborn 和 Matplotlib 库等对印度超级联赛数据 (IPL, 2008-2020) 进行可视化数据分析!看看我们能从这些数据中得到哪些有趣的信息。

印度超级联赛 (IPL) 是世界上最大的板球联赛。我们用 2008 年到 2020 年的 IPL 比赛数据(来源Kaggle,文末有免费获取方法)进行数据分析。如果你对IPL不是很了解,不用担心,重点掌握数据分析方法,你完全可以换个数据集,使用这些方法分析一遍。

导入库

代码语言:javascript
复制
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

%matplotlib inline

分析数据

本次数据分析所有代码均是在 Jupyter Notebook 中运行,在其中使用下面代码加载数据。

代码语言:javascript
复制
match=pd.read_csv('./Dataset/matches.csv')
delivery=pd.read_csv('./Dataset/deliveries.csv')

简单查看下正在处理的数据:

代码语言:javascript
复制
match.head(5) 
delivery.head(5)

从数据结果可以看出, 2008 年的第一场比赛是 KKR vs RCB 。M Chinnaswamy体育场的比赛是 KKR 获胜了,而本场比赛的最佳球员是BB McCullum。

如果你想查看数据表最后五行数据,可通过match.tail(5)查看。

有关 2008 年至 2020 年间比赛数据的更多信息。可以使用info()函数查看

代码语言:javascript
复制
match.info() #816 
delivery.info() #193468

参赛队伍名单

代码语言:javascript
复制
all_teams = match['team1'].tolist() + match['team2'].tolist() 
all_teams = list(set(all_teams)) 
all_teams

由此我们获得了 2008 年至 2020 年期间参加过比赛的球队名单。如果你是职业 IPL 等铁杆粉丝,那么你应该会在名单上会发现一些细节内容,如该名单中包含一些后来没有参加比赛的旧球队名称,尽管如此,也不要忽略他们在 IPL 历史上还是贡献的不少有价值的信息。

每个场地的比赛数量

代码语言:javascript
复制
sns.countplot('venue', data=match) 
plt.xticks(rotation='vertical')

结果所示的是IPL(2008-2020)每个场地的比赛数量。如你所见,伊甸园是 IPL 球迷最喜欢的场地,在那里举办了近 80 场比赛。

各队参加的比赛

代码语言:javascript
复制
x = match['team1'].value_counts() 
y = match['team2'].value_counts() 
(x+y).plot(kind='barh')

IPL(2008-2020)各队的比赛

我们计算第一列中每支球队的价值,并将第二支球队的每支球队的数量相加,以获得所需的输出。例如,如果 CSK 在第一队参加了 90 次,在第二队参加了 85 次,那么图表中会显示总共 175 场比赛。你可以看到 Mumbai Indians 在 IPL 中的比赛次数最多。

每支球队赢得的比赛

代码语言:javascript
复制
x=pd.DataFrame({"Winner":match['winner']}).value_counts()
print(x)
代码语言:javascript
复制
Winner                     
Mumbai Indians                 120
Chennai Super Kings            106
Kolkata Knight Riders           99
Royal Challengers Bangalore     91
Kings XI Punjab                 88
Rajasthan Royals                81
Delhi Daredevils                67
Sunrisers Hyderabad             66
Deccan Chargers                 29
Delhi Capitals                  19
Gujarat Lions                   13
Pune Warriors                   12
Rising Pune Supergiant          10
Kochi Tuskers Kerala             6
Rising Pune Supergiants          5
dtype: int64

从以上结果可以看到 Mumbai Indians 赢得最多的比赛,其次是 CSK 和其他球队。如果你想以图形形式绘制此结果,可以通过sns.countplot()函数绘制,如下图所示。

代码语言:javascript
复制
sns.countplot('winner', data=match) 
plt.xticks(rotation='vertical')

IPL(2008-2020) 每支球队赢得的比赛次数

全场最佳球员TOP 5

如果你是球队的管理人员并且这些球员受到重创(这是比赛中常有的事情),那么你必须密切关注这些球员,因为这些球员是获得了最多的比赛最佳球员。

那么如何找到这些最有价值的球员呢?,我们可以尝试如下方式。

代码语言:javascript
复制
temp_data=match['player_of_match'].value_counts().head() 
print(temp_data) 
sns.barplot(x=temp_data.index,y=temp_data.values,data=match)plt.title("Top 5 MoM") 
plt.xticks(rotation=90) 
plt.xlabel("Match Count") 
plt.ylabel("Player") 
plt.show()
代码语言:javascript
复制
AB de Villiers    23
CH Gayle          22
RG Sharma         18
DA Warner         17
MS Dhoni          17
Name: player_of_match, dtype: int64

IPL(2008-2020)最佳击球手

结果中你有喜欢的球员出现在上面的名单中吗?

IPL中的顶级击球手

想想我们如何得到这部分数据?我们必须找出跑垒次数最多的球员。因而必须从击球手的得分数据及其跑垒次数来总结。其实这个逻辑挺简单的。

代码语言:javascript
复制
top_batsman=delivery.groupby('batsman')['batsman_runs'
                                       ].agg('sum').reset_index().sort_values('batsman_runs', 
                                                                              ascending=False).head(10)
top_batsman.set_index('batsman', inplace=True)
top_batsman.plot(kind='bar')

IPL(2008-2020)顶级击球手

我们从数据中选出了排名前十的击球手,并对他们的跑垒次数进行了总结。并将此信息绘制成图。

从结果中可以看出,科利国王(V Kohli)位居榜首,其次是苏雷什·雷纳 (SK Raina) 和其他击球手。

投球次数最多的投球手

对在 IPL 比赛中投球的前 10 名投球手分组,并总结了最终出口的投球。

代码语言:javascript
复制
delivery.groupby('bowler')['total_runs'].agg('sum'
                                            ).reset_index().sort_values('total_runs',
                                                                        ascending=False).head(10)

具有团队智慧的投球手

假设你在和CSK比赛,你必须找出在前几年和这支球队的比赛中哪个投球手的表现很好。要找出投球手的团队表现分析,可以通过如下方法:

代码语言:javascript
复制
mask=delivery['bowler']=='PP Chawla' 
delivery[mask].groupby('batting_team')['total_runs'].agg('sum').plot(kind='bar')

PP Chawla 对 IPL 球队的保龄球表现

以 PP Chawla 为例,这位投球手在 2020 年之前的 IPL 历史中贡献了最多的跑分。最终计算了 PP Chawla 给对手球队的总跑分。

很明显,如果你的团队中有 PP Chawla,那么不要让他与 MI、CSK、RCB、RR 和 DC 比赛。

IPL中每支球队的过分击球表现

代码语言:javascript
复制
Delivery6=delivery[mask] 
delivery6=delivery6[['batting_team','over','batsman_runs']] 
x=delivery6.pivot_table(values='batsman_runs',
                        index='batting_team',
                        columns='over',
                        aggfunc='count')
sns.heatmap(x, cmap='summer')

这里使用数据透视表,然后计算击球队击球手的跑动情况,并将数据转换为热图,如下所示:

IPL(2008-2020)每支球队的过智击球表现

从结果可以看出,如果你与MI或CSK比赛,那么你必须从一开始就使用最佳阵容。MI的击球手在第二局和第三局都保持静默,但之后他们进入狂暴模式对抗对手。并且CSK和RCB也是如此。

从数据结果看,这些数据不仅对投球队有帮助,对击球队也有帮助。如果你是一个团队经理,你看到你的团队在deadline时表现不佳,那么你可能应该在下一次下注中专注于购买一个优秀队员。正如上面的热图所示,除了CSK 和 MI,大多数球队在比赛末尾时期都落后了。

我想这就是MI和CSK是IPL中最热的两个球队的原因了。

IPL 中六分球数最多的前 10 名球员

代码语言:javascript
复制
temp_df = delivery.groupby('batsman')['batsman_runs'].agg(lambda x:(x==6).sum()).reset_index().sort_values(by='batsman_runs', ascending=False).head(10).reset_index(drop=True)
temp_df
sns.barplot(x=temp_df['batsman'],y=temp_df['batsman_runs'],data=temp_df)

plt.title("Most sixes")
plt.xticks(rotation=90)
plt.xlabel("Batsman")
plt.ylabel("Number of 6's")
plt.show()

IPL(2008-2020)中六分球数最多的前10名球员

IPL中投球手大多数是三柱球

代码语言:javascript
复制
temp_df = delivery.groupby('bowler')['is_wicket'].agg('sum').reset_index().sort_values(by='is_wicket', ascending=False).reset_index(drop=True).head(10)
sns.barplot(x=temp_df['bowler'],y=temp_df['is_wicket'],data=temp_df)

plt.title("Most wickets by a bowler")
plt.xticks(rotation=90)
plt.xlabel("Bowler")
plt.ylabel("Number of wickets")
plt.show()

END

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-10-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据STUDIO 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导入库
  • 分析数据
    • 参赛队伍名单
      • 每个场地的比赛数量
        • 各队参加的比赛
          • 每支球队赢得的比赛
            • 全场最佳球员TOP 5
              • IPL中的顶级击球手
                • 投球次数最多的投球手
                  • 具有团队智慧的投球手
                    • IPL中每支球队的过分击球表现
                      • IPL 中六分球数最多的前 10 名球员
                        • IPL中投球手大多数是三柱球
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档