Introducing cricpy:A python package to analyze performances of cricketers
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Full many a gem of purest ray serene,
The dark unfathomed caves of ocean bear;
Full many a flower is born to blush unseen,
And waste its sweetness on the desert air.
Thomas Gray, An Elegy Written In A Country Churchyard
Introduction
It is finally here! cricpy, the python avatar , of my R package cricketr is now ready to rock-n-roll! My R package cricketr had its genesis about 3 and some years ago and went through a couple of enhancements. During this time I have always thought about creating an equivalent python package like cricketr. Now I have finally done it.
So here it is. My python package ‘cricpy!!!’
This package uses the statistics info available in ESPN Cricinfo Statsguru. The current version of this package supports only Test cricket
You should be able to install the package using pip install cricpy and use the many functions available in the package. Please mindful of the ESPN Cricinfo Terms of Use
This post is also hosted on Rpubs at Introducing cricpy. You can also download the pdf version of this post at cricpy.pdf
Do check out my post on R package cricketr at Re-introducing cricketr! : An R package to analyze performances of cricketers
If you are passionate about cricket, and love analyzing cricket performances, then check out my 2 racy books on cricket! In my books, I perform detailed yet compact analysis of performances of both batsmen, bowlers besides evaluating team & match performances in Tests , ODIs, T20s & IPL. You can buy my books on cricket from Amazon at $12.99 for the paperback and $4.99/$6.99 respectively for the kindle versions. The books can be accessed at Cricket analytics with cricketr and Beaten by sheer pace-Cricket analytics with yorkr A must read for any cricket lover! Check it out!!
This package uses the statistics info available in ESPN Cricinfo Statsguru. T
The cricpy package
The cricpy package has several functions that perform several different analyses on both batsman and bowlers. The package has functions that plot percentage frequency runs or wickets, runs likelihood for a batsman, relative run/strike rates of batsman and relative performance/economy rate for bowlers are available.
Other interesting functions include batting performance moving average, forecasting, performance of a player against different oppositions, contribution to wins and losses etc.
The data for a particular player can be obtained with the getPlayerData() function. To do this you will need to go to ESPN CricInfo Player and type in the name of the player for e.g Rahul Dravid, Virat Kohli, Alastair Cook etc. This will bring up a page which have the profile number for the player e.g. for Rahul Dravid this would be http://www.espncricinfo.com/india/content/player/28114.html. Hence, Dravid’s profile is 28114. This can be used to get the data for Rahul Dravid as shown below
The cricpy package is almost a clone of my R package cricketr. The signature of all the python functions are identical with that of its R avatar namely ‘cricketr’, with only the necessary variations between Python and R. It may be useful to look at my post R vs Python: Different similarities and similar differences. In fact if you are familiar with one of the languages you can look up the package in the other and you will notice the parallel constructs. You can fork/clone the package at Github cricpy
The following 2 examples show the similarity between cricketr and cricpy packages
1a.Importing cricketr – R
Importing cricketr in R
#install.packages("cricketr") library(cricketr)
2a. Importing cricpy – Python
# Install the package # Do a pip install cricpy # Import cricpy import cricpy # You could either do #1. import cricpy.analytics as ca #ca.batsman4s("../dravid.csv","Rahul Dravid") # Or #2. from cricpy.analytics import * #batsman4s("../dravid.csv","Rahul Dravid")
I would recommend using option 1 namely ca.batsman4s() as I may add an advanced analytics module in the future to cricpy.
2 Invoking functions
You can seen how the 2 calls are identical for both the R package cricketr and the Python package cricpy
2a. Invoking functions with R package ‘cricketr’
library(cricketr) batsman4s("../dravid.csv","Rahul Dravid")
2b. Invoking functions with Python package ‘cricpy’
import cricpy.analytics as ca ca.batsman4s("../dravid.csv","Rahul Dravid")
3a. Getting help from cricketr – R
#help("batsman4s")
3b. Getting help from cricpy – Python
help(ca.batsman4s)
The details below will introduce the different functions that are available in cricpy.
3. Get the player data for a player using the function getPlayerData()
Important Note This needs to be done only once for a player. This function stores the player’s data in the specified CSV file (for e.g. dravid.csv as above) which can then be reused for all other functions). Once we have the data for the players many analyses can be done. This post will use the stored CSV file obtained with a prior getPlayerData for all subsequent analyses
import cricpy.analytics as ca #dravid =ca.getPlayerData(28114,dir="..",file="dravid.csv",type="batting",homeOrAway=[1,2], result=[1,2,4]) #acook =ca.getPlayerData(11728,dir="..",file="acook.csv",type="batting",homeOrAway=[1,2], result=[1,2,4]) import cricpy.analytics as ca #lara =ca.getPlayerData(52337,dir="..",file="lara.csv",type="batting",homeOrAway=[1,2], result=[1,2,4])253802 #kohli =ca.getPlayerData(253802,dir="..",file="kohli.csv",type="batting",homeOrAway=[1,2], result=[1,2,4])
4 Rahul Dravid’s performance – Basic Analyses
The 3 plots below provide the following for Rahul Dravid
- Frequency percentage of runs in each run range over the whole career
- Mean Strike Rate for runs scored in the given range
- A histogram of runs frequency percentages in runs ranges
import cricpy.analytics as ca import matplotlib.pyplot as plt ca.batsmanRunsFreqPerf("../dravid.csv","Rahul Dravid")
ca.batsmanMeanStrikeRate("../dravid.csv","Rahul Dravid")
ca.batsmanRunsRanges("../dravid.csv","Rahul Dravid")
5. More analyses
import cricpy.analytics as ca ca.batsman4s("../dravid.csv","Rahul Dravid")
ca.batsman6s("../dravid.csv","Rahul Dravid")
ca.batsmanDismissals("../dravid.csv","Rahul Dravid")
6. 3D scatter plot and prediction plane
The plots below show the 3D scatter plot of Dravid Runs versus Balls Faced and Minutes at crease. A linear regression plane is then fitted between Runs and Balls Faced + Minutes at crease
import cricpy.analytics as ca ca.battingPerf3d("../dravid.csv","Rahul Dravid")
7. Average runs at different venues
The plot below gives the average runs scored by Dravid at different grounds. The plot also the number of innings at each ground as a label at x-axis. It can be seen Dravid did great in Rawalpindi, Leeds, Georgetown overseas and , Mohali and Bangalore at home
import cricpy.analytics as ca ca.batsmanAvgRunsGround("../dravid.csv","Rahul Dravid")
8. Average runs against different opposing teams
This plot computes the average runs scored by Dravid against different countries. Dravid has an average of 50+ in England, New Zealand, West Indies and Zimbabwe.
import cricpy.analytics as ca ca.batsmanAvgRunsOpposition("../dravid.csv","Rahul Dravid")
9 . Highest Runs Likelihood
The plot below shows the Runs Likelihood for a batsman. For this the performance of Sachin is plotted as a 3D scatter plot with Runs versus Balls Faced + Minutes at crease. K-Means. The centroids of 3 clusters are computed and plotted. In this plot Dravid’s highest tendencies are computed and plotted using K-Means
import cricpy.analytics as ca ca.batsmanRunsLikelihood("../dravid.csv","Rahul Dravid")
10. A look at the Top 4 batsman – Rahul Dravid, Alastair Cook, Brian Lara and Virat Kohli
The following batsmen have been very prolific in test cricket and will be used for teh analyses
- Rahul Dravid :Average:52.31,100’s – 36, 50’s – 63
- Alastair Cook : Average: 45.35, 100’s – 33, 50’s – 57
- Brian Lara : Average: 52.88, 100’s – 34 , 50’s – 48
- Virat Kohli: Average: 54.57 ,100’s – 24 , 50’s – 19
The following plots take a closer at their performances. The box plots show the median the 1st and 3rd quartile of the runs
11. Box Histogram Plot
This plot shows a combined boxplot of the Runs ranges and a histogram of the Runs Frequency
import cricpy.analytics as ca ca.batsmanPerfBoxHist("../dravid.csv","Rahul Dravid")
ca.batsmanPerfBoxHist("../acook.csv","Alastair Cook")
ca.batsmanPerfBoxHist("../lara.csv","Brian Lara")
ca.batsmanPerfBoxHist("../kohli.csv","Virat Kohli")
12. Contribution to won and lost matches
The plot below shows the contribution of Dravid, Cook, Lara and Kohli in matches won and lost. It can be seen that in matches where India has won Dravid and Kohli have scored more and must have been instrumental in the win
For the 2 functions below you will have to use the getPlayerDataSp() function as shown below. I have commented this as I already have these files
import cricpy.analytics as ca #dravidsp = ca.getPlayerDataSp(28114,tdir=".",tfile="dravidsp.csv",ttype="batting") #acooksp = ca.getPlayerDataSp(11728,tdir=".",tfile="acooksp.csv",ttype="batting") #larasp = ca.getPlayerDataSp(52337,tdir=".",tfile="larasp.csv",ttype="batting") #kohlisp = ca.getPlayerDataSp(253802,tdir=".",tfile="kohlisp.csv",ttype="batting") import cricpy.analytics as ca ca.batsmanContributionWonLost("../dravidsp.csv","Rahul Dravid")
ca.batsmanContributionWonLost("../acooksp.csv","Alastair Cook")
ca.batsmanContributionWonLost("../larasp.csv","Brian Lara")
ca.batsmanContributionWonLost("../kohlisp.csv","Virat Kohli")
13. Performance at home and overseas
From the plot below it can be seen
Dravid has a higher median overseas than at home.Cook, Lara and Kohli have a lower median of runs overseas than at home.
This function also requires the use of getPlayerDataSp() as shown above
import cricpy.analytics as ca ca.batsmanPerfHomeAway("../dravidsp.csv","Rahul Dravid")
ca.batsmanPerfHomeAway("../acooksp.csv","Alastair Cook")
ca.batsmanPerfHomeAway("../larasp.csv","Brian Lara")
ca.batsmanPerfHomeAway("../kohlisp.csv","Virat Kohli")
14 Moving Average of runs in career
Take a look at the Moving Average across the career of the Top 4 (ignore the dip at the end of all plots. Need to check why this is so!). Lara’s performance seems to have been quite good before his retirement(wonder why retired so early!). Kohli’s performance has been steadily improving over the years
import cricpy.analytics as ca ca.batsmanMovingAverage("../dravid.csv","Rahul Dravid")
ca.batsmanMovingAverage("../acook.csv","Alastair Cook")
ca.batsmanMovingAverage("../lara.csv","Brian Lara")
ca.batsmanMovingAverage("../kohli.csv","Virat Kohli")
15 Cumulative Average runs of batsman in career
This function provides the cumulative average runs of the batsman over the career. Dravid averages around 48, Cook around 44, Lara around 50 and Kohli shows a steady improvement in his cumulative average. Kohli seems to be getting better with time.
import cricpy.analytics as ca ca.batsmanCumulativeAverageRuns("../dravid.csv","Rahul Dravid")
ca.batsmanCumulativeAverageRuns("../acook.csv","Alastair Cook")
ca.batsmanCumulativeAverageRuns("../lara.csv","Brian Lara")
ca.batsmanCumulativeAverageRuns("../kohli.csv","Virat Kohli")
16 Cumulative Average strike rate of batsman in career
Lara has a terrific strike rate of 52+. Cook has a better strike rate over Dravid. Kohli’s strike rate has improved over the years.
import cricpy.analytics as ca ca.batsmanCumulativeStrikeRate("../dravid.csv","Rahul Dravid")
ca.batsmanCumulativeStrikeRate("../acook.csv","Alastair Cook")
ca.batsmanCumulativeStrikeRate("../lara.csv","Brian Lara")
ca.batsmanCumulativeStrikeRate("../kohli.csv","Virat Kohli")
17 Future Runs forecast
Here are plots that forecast how the batsman will perform in future. Currently ARIMA has been used for the forecast. (To do: Perform Holt-Winters forecast!)
import cricpy.analytics as ca ca.batsmanPerfForecast("../dravid.csv","Rahul Dravid") ## ARIMA Model Results ## ============================================================================== ## Dep. Variable: D.runs No. Observations: 284 ## Model: ARIMA(5, 1, 0) Log Likelihood -1522.837 ## Method: css-mle S.D. of innovations 51.488 ## Date: Sun, 28 Oct 2018 AIC 3059.673 ## Time: 09:47:39 BIC 3085.216 ## Sample: 07-04-1996 HQIC 3069.914 ## - 01-24-2012 ## ================================================================================ ## coef std err z P>|z| [0.025 0.975] ## -------------------------------------------------------------------------------- ## const -0.1336 0.884 -0.151 0.880 -1.867 1.599 ## ar.L1.D.runs -0.7729 0.058 -13.322 0.000 -0.887 -0.659 ## ar.L2.D.runs -0.6234 0.071 -8.753 0.000 -0.763 -0.484 ## ar.L3.D.runs -0.5199 0.074 -7.038 0.000 -0.665 -0.375 ## ar.L4.D.runs -0.3490 0.071 -4.927 0.000 -0.488 -0.210 ## ar.L5.D.runs -0.2116 0.058 -3.665 0.000 -0.325 -0.098 ## Roots ## ============================================================================= ## Real Imaginary Modulus Frequency ## ----------------------------------------------------------------------------- ## AR.1 0.5789 -1.1743j 1.3093 -0.1771 ## AR.2 0.5789 +1.1743j 1.3093 0.1771 ## AR.3 -1.3617 -0.0000j 1.3617 -0.5000 ## AR.4 -0.7227 -1.2257j 1.4230 -0.3348 ## AR.5 -0.7227 +1.2257j 1.4230 0.3348 ## ----------------------------------------------------------------------------- ## 0 ## count 284.000000 ## mean -0.306769 ## std 51.632947 ## min -106.653589 ## 25% -33.835148 ## 50% -8.954253 ## 75% 21.024763 ## max 223.152901 ## ## C:\Users\Ganesh\ANACON~1\lib\site-packages\statsmodels\tsa\kalmanf\kalmanfilter.py:646: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`. ## if issubdtype(paramsdtype, float): ## C:\Users\Ganesh\ANACON~1\lib\site-packages\statsmodels\tsa\kalmanf\kalmanfilter.py:650: FutureWarning: Conversion of the second argument of issubdtype from `complex` to `np.complexfloating` is deprecated. In future, it will be treated as `np.complex128 == np.dtype(complex).type`. ## elif issubdtype(paramsdtype, complex): ## C:\Users\Ganesh\ANACON~1\lib\site-packages\statsmodels\tsa\kalmanf\kalmanfilter.py:577: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`. ## if issubdtype(paramsdtype, float):
18 Relative Batsman Cumulative Average Runs
The plot below compares the Relative cumulative average runs of the batsman for each of the runs ranges of 10 and plots them. The plot indicate the following Range 30 – 100 innings – Lara leads followed by Dravid Range 100+ innings – Kohli races ahead of the rest
import cricpy.analytics as ca frames = ["../dravid.csv","../acook.csv","../lara.csv","../kohli.csv"] names = ["Dravid","A Cook","Brian Lara","V Kohli"] ca.relativeBatsmanCumulativeAvgRuns(frames,names)
19. Relative Batsman Strike Rate
The plot below gives the relative Runs Frequency Percetages for each 10 run bucket. The plot below show
Brian Lara towers over the Dravid, Cook and Kohli. However you will notice that Kohli’s strike rate is going up
import cricpy.analytics as ca frames = ["../dravid.csv","../acook.csv","../lara.csv","../kohli.csv"] names = ["Dravid","A Cook","Brian Lara","V Kohli"] ca.relativeBatsmanCumulativeStrikeRate(frames,names)
20. 3D plot of Runs vs Balls Faced and Minutes at Crease
The plot is a scatter plot of Runs vs Balls faced and Minutes at Crease. A prediction plane is fitted
import cricpy.analytics as ca ca.battingPerf3d("../dravid.csv","Rahul Dravid")
ca.battingPerf3d("../acook.csv","Alastair Cook")
ca.battingPerf3d("../lara.csv","Brian Lara")
ca.battingPerf3d("../kohli.csv","Virat Kohli")
21. Predicting Runs given Balls Faced and Minutes at Crease
A multi-variate regression plane is fitted between Runs and Balls faced +Minutes at crease.
import cricpy.analytics as ca import numpy as np import pandas as pd BF = np.linspace( 10, 400,15) Mins = np.linspace( 30,600,15) newDF= pd.DataFrame({'BF':BF,'Mins':Mins}) dravid = ca.batsmanRunsPredict("../dravid.csv",newDF,"Dravid") print(dravid) ## BF Mins Runs ## 0 10.000000 30.000000 0.519667 ## 1 37.857143 70.714286 13.821794 ## 2 65.714286 111.428571 27.123920 ## 3 93.571429 152.142857 40.426046 ## 4 121.428571 192.857143 53.728173 ## 5 149.285714 233.571429 67.030299 ## 6 177.142857 274.285714 80.332425 ## 7 205.000000 315.000000 93.634552 ## 8 232.857143 355.714286 106.936678 ## 9 260.714286 396.428571 120.238805 ## 10 288.571429 437.142857 133.540931 ## 11 316.428571 477.857143 146.843057 ## 12 344.285714 518.571429 160.145184 ## 13 372.142857 559.285714 173.447310 ## 14 400.000000 600.000000 186.749436
The fitted model is then used to predict the runs that the batsmen will score for a given Balls faced and Minutes at crease.
22 Analysis of Top 3 wicket takers
The following 3 bowlers have had an excellent career and will be used for the analysis
- Glenn McGrath:Wickets: 563, Average = 21.64, Economy Rate – 2.49
- Kapil Dev : Wickets: 434, Average = 29.64, Economy Rate – 2.78
- James Anderson: Wickets: 564, Average = 28.64, Economy Rate – 2.88
How do Glenn McGrath, Kapil Dev and James Anderson compare with one another with respect to wickets taken and the Economy Rate. The next set of plots compute and plot precisely these analyses.
23. Get the bowler’s data
This plot below computes the percentage frequency of number of wickets taken for e.g 1 wicket x%, 2 wickets y% etc and plots them as a continuous line
import cricpy.analytics as ca #mcgrath =ca.getPlayerData(6565,dir=".",file="mcgrath.csv",type="bowling",homeOrAway=[1,2], result=[1,2,4]) #kapil =ca.getPlayerData(30028,dir=".",file="kapil.csv",type="bowling",homeOrAway=[1,2], result=[1,2,4]) #anderson =ca.getPlayerData(8608,dir=".",file="anderson.csv",type="bowling",homeOrAway=[1,2], result=[1,2,4])
24. Wicket Frequency Plot
This plot below plots the frequency of wickets taken for each of the bowlers
import cricpy.analytics as ca ca.bowlerWktsFreqPercent("../mcgrath.csv","Glenn McGrath")
ca.bowlerWktsFreqPercent("../kapil.csv","Kapil Dev")
ca.bowlerWktsFreqPercent("../anderson.csv","James Anderson")
25. Wickets Runs plot
The plot below create a box plot showing the 1st and 3rd quartile of runs conceded versus the number of wickets taken
import cricpy.analytics as ca ca.bowlerWktsRunsPlot("../mcgrath.csv","Glenn McGrath")
ca.bowlerWktsRunsPlot("../kapil.csv","Kapil Dev")
ca.bowlerWktsRunsPlot("../anderson.csv","James Anderson")
26 Average wickets at different venues
The plot gives the average wickets taken by Muralitharan at different venues. McGrath best performances are at Centurion, Lord’s and Port of Spain averaging about 4 wickets. Kapil Dev’s does good at Kingston and Wellington. Anderson averages 4 wickets at Dunedin and Nagpur
import cricpy.analytics as ca ca.bowlerAvgWktsGround("../mcgrath.csv","Glenn McGrath")
ca.bowlerAvgWktsGround("../kapil.csv","Kapil Dev")
ca.bowlerAvgWktsGround("../anderson.csv","James Anderson")
27 Average wickets against different opposition
The plot gives the average wickets taken by Muralitharan against different countries. The x-axis also includes the number of innings against each team
import cricpy.analytics as ca ca.bowlerAvgWktsOpposition("../mcgrath.csv","Glenn McGrath")
ca.bowlerAvgWktsOpposition("../kapil.csv","Kapil Dev")
ca.bowlerAvgWktsOpposition("../anderson.csv","James Anderson")
28 Wickets taken moving average
From the plot below it can be see James Anderson has had a solid performance over the years averaging about wickets
import cricpy.analytics as ca ca.bowlerMovingAverage("../mcgrath.csv","Glenn McGrath")
ca.bowlerMovingAverage("../kapil.csv","Kapil Dev")
ca.bowlerMovingAverage("../anderson.csv","James Anderson")
29 Cumulative average wickets taken
The plots below give the cumulative average wickets taken by the bowlers. mcGrath plateaus around 2.4 wickets, Kapil Dev’s performance deteriorates over the years. Anderson holds on rock steady around 2 wickets
import cricpy.analytics as ca ca.bowlerCumulativeAvgWickets("../mcgrath.csv","Glenn McGrath")
ca.bowlerCumulativeAvgWickets("../kapil.csv","Kapil Dev")
ca.bowlerCumulativeAvgWickets("../anderson.csv","James Anderson")
30 Cumulative average economy rate
The plots below give the cumulative average economy rate of the bowlers. McGrath’s was very expensive early in his career conceding about 2.8 runs per over which drops to around 2.5 runs towards the end. Kapil Dev’s economy rate drops from 3.6 to 2.8. Anderson is probably more expensive than the other 2.
import cricpy.analytics as ca ca.bowlerCumulativeAvgEconRate("../mcgrath.csv","Glenn McGrath")
ca.bowlerCumulativeAvgEconRate("../kapil.csv","Kapil Dev")
ca.bowlerCumulativeAvgEconRate("../anderson.csv","James Anderson")
31 Future Wickets forecast
import cricpy.analytics as ca ca.bowlerPerfForecast("../mcgrath.csv","Glenn McGrath") ## ARIMA Model Results ## ============================================================================== ## Dep. Variable: D.Wickets No. Observations: 236 ## Model: ARIMA(5, 1, 0) Log Likelihood -480.815 ## Method: css-mle S.D. of innovations 1.851 ## Date: Sun, 28 Oct 2018 AIC 975.630 ## Time: 09:28:32 BIC 999.877 ## Sample: 11-12-1993 HQIC 985.404 ## - 01-02-2007 ## =================================================================================== ## coef std err z P>|z| [0.025 0.975] ## ----------------------------------------------------------------------------------- ## const 0.0037 0.033 0.113 0.910 -0.061 0.068 ## ar.L1.D.Wickets -0.9432 0.064 -14.708 0.000 -1.069 -0.818 ## ar.L2.D.Wickets -0.7254 0.086 -8.469 0.000 -0.893 -0.558 ## ar.L3.D.Wickets -0.4827 0.093 -5.217 0.000 -0.664 -0.301 ## ar.L4.D.Wickets -0.3690 0.085 -4.324 0.000 -0.536 -0.202 ## ar.L5.D.Wickets -0.1709 0.064 -2.678 0.008 -0.296 -0.046 ## Roots ## ============================================================================= ## Real Imaginary Modulus Frequency ## ----------------------------------------------------------------------------- ## AR.1 0.5630 -1.2761j 1.3948 -0.1839 ## AR.2 0.5630 +1.2761j 1.3948 0.1839 ## AR.3 -0.8433 -1.0820j 1.3718 -0.3554 ## AR.4 -0.8433 +1.0820j 1.3718 0.3554 ## AR.5 -1.5981 -0.0000j 1.5981 -0.5000 ## ----------------------------------------------------------------------------- ## 0 ## count 236.000000 ## mean -0.005142 ## std 1.856961 ## min -3.457002 ## 25% -1.433391 ## 50% -0.080237 ## 75% 1.446149 ## max 5.840050
32 Get player data special
As discussed above the next 2 charts require the use of getPlayerDataSp()
import cricpy.analytics as ca #mcgrathsp =ca.getPlayerDataSp(6565,tdir=".",tfile="mcgrathsp.csv",ttype="bowling") #kapilsp =ca.getPlayerDataSp(30028,tdir=".",tfile="kapilsp.csv",ttype="bowling") #andersonsp =ca.getPlayerDataSp(8608,tdir=".",tfile="andersonsp.csv",ttype="bowling")
33 Contribution to matches won and lost
The plot below is extremely interesting Glenn McGrath has been more instrumental in Australia winning than Kapil and Anderson as seems to have taken more wickets when Australia won.
import cricpy.analytics as ca ca.bowlerContributionWonLost("../mcgrathsp.csv","Glenn McGrath")
ca.bowlerContributionWonLost("../kapilsp.csv","Kapil Dev")
ca.bowlerContributionWonLost("../andersonsp.csv","James Anderson")
34 Performance home and overseas
McGrath and Kapil Dev have performed better overseas than at home. Anderson has performed about the same home and overseas
import cricpy.analytics as ca ca.bowlerPerfHomeAway("../mcgrathsp.csv","Glenn McGrath")
ca.bowlerPerfHomeAway("../kapilsp.csv","Kapil Dev")
ca.bowlerPerfHomeAway("../andersonsp.csv","James Anderson")
35 Relative cumulative average economy rate of bowlers
The Relative cumulative economy rate shows that McGrath has the best economy rate followed by Kapil Dev and then Anderson.
import cricpy.analytics as ca frames = ["../mcgrath.csv","../kapil.csv","../anderson.csv"] names = ["Glenn McGrath","Kapil Dev","James Anderson"] ca.relativeBowlerCumulativeAvgEconRate(frames,names)
36 Relative Economy Rate against wickets taken
McGrath has been economical regardless of the number of wickets taken. Kapil Dev has been slightly more expensive when he takes more wickets
import cricpy.analytics as ca frames = ["../mcgrath.csv","../kapil.csv","../anderson.csv"] names = ["Glenn McGrath","Kapil Dev","James Anderson"] ca.relativeBowlingER(frames,names)
37 Relative cumulative average wickets of bowlers in career
The plot below shows that McGrath has the best overall cumulative average wickets. Kapil’s leads Anderson till about 150 innings after which Anderson takes over
import cricpy.analytics as ca frames = ["../mcgrath.csv","../kapil.csv","../anderson.csv"] names = ["Glenn McGrath","Kapil Dev","James Anderson"] ca.relativeBowlerCumulativeAvgWickets(frames,names)
Key Findings
The plots above capture some of the capabilities and features of my cricpy package. Feel free to install the package and try it out. Please do keep in mind ESPN Cricinfo’s Terms of Use.
Here are the main findings from the analysis above
Key insights
1. Brian Lara is head and shoulders above the rest in the overall strike rate
2. Kohli performance has been steadily improving over the years and with the way he is going he will shatter all records.
3. Kohli and Dravid have scored more in matches where India has won than the other two.
4. Dravid has performed very well overseas
5. The cumulative average runs has Kohli just edging out the other 3. Kohli is probably midway in his career but considering that his moving average is improving strongly, we can expect great things of him with the way he is going.
6. McGrath has had some great performances overseas
7. Mcgrath has the best economy rate and has contributed significantly to Australia’s wins.
8.In the cumulative average wickets race McGrath leads the pack. Kapil leads Anderson till about 150 matches after which Anderson takes over.
The code for cricpy can be accessed at Github at cricpy
Do let me know if you run into issues.
Conclusion
I have long wanted to make a python equivalent of cricketr and I have been able to make it. cricpy is still work in progress. I have add the necessary functions for ODI and Twenty20. Go ahead give ‘cricpy’ a spin!!
Stay tuned!
You may also like
1. My book “Deep Learning from first principles” now on Amazon
2. My book ‘Practical Machine Learning in R and Python: Second edition’ on Amazon
3. Introducing QCSimulator: A 5-qubit quantum computing simulator in R
4. De-blurring revisited with Wiener filter using OpenCV
5. Spicing up a IBM Bluemix cloud app with MongoDB and NodeExpress
6. Sixer – R package cricketr’s new Shiny avatar
7. Simulating an Edge Shape in Android
To see all posts click Index of Posts
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.