I can’t sit still and see another man slaving and working. I want to get up and superintend, and walk round with my hands in my pockets, and tell him what to do. It is my energetic nature. I can’t help it.
It always does seem to me that I am doing more work than I should do. It is not that I object to the work, mind you; I like work: it fascinates me. I can sit and look at it for hours. I love to keep it by me: the idea of getting rid of it nearly breaks my heart.
Let your boat of life be light, packed with only what you need – a homely home and simple pleasures, one or two friends, worth the name, someone to love and someone to love you, a cat, a dog, and a pipe or two, enough to eat and enough to wear, and a little more than enough to drink; for thirst is a dangerous thing.
Three Men in a boat by Jerome K Jerome
Introduction
Cricpy, the python avatar of my R package was born about a 9 months back see Introducing cricpy:A python package to analyze performances of cricketers. Cricpy, like its R twin, can analyze performance of batsmen & bowlers in Test, ODI and T20 formats. About a week and a half back, I added team analytics to my R package cricketr see Cricketr adds team analytics to its repertoire!!!. If cricketr has team analysis functions, then can cricpy be far behind? So, I have included the same 8 functions which can perform Team analytics into cricpy also. Team performance analysis can be done for Test, ODI and T20 matches.
This package uses the statistics info available in ESPN Cricinfo Statsguru. The current version of this package can handle all formats of the game including Test, ODI and Twenty20 cricket.
You should be able to install the package using pip install cricpy. Please be mindful of ESPN Cricinfo Terms of Use
There are 5 functions which are used internally 1) getTeamData b) getTeamNumber c) getMatchType d) getTeamDataHomeAway e) cleanTeamData
and the external functions which a) teamWinLossStatusVsOpposition b) teamWinLossStatusAtGrounds c) plotTimelineofhttps://drive.google.com/file/d/1l4nQsRZ0C2FyPosigZmo0t-kC2xZZ_wl/view?usp=sharingWinsLosses
All the above functions are common to Test, ODI and T20 teams
The data for a particular Team can be obtained with the getTeamDataHomeAway() function from the package. This will return a dataframe of the team’s win/loss status at home and away venues over a period of time. This can be saved as a CSV file. Once this is done, you can use this CSV file for all subsequent analysis
This post has been published at Rpubs at teamAnalyticsCricpy You can download the PDF version of this post at teamAnalyticsCricpy
As before you can get the help for any of the cricpy functions as below
import cricpy.analytics as ca
help(ca.teamWinLossStatusAtGrounds)
## Help on function teamWinLossStatusAtGrounds in module cricpy.analytics:
##
## teamWinLossStatusAtGrounds(file, teamName, opposition=['all'], homeOrAway=['all'], matchType='Test', plot=False)
## Compute the wins/losses/draw/tied etc for a Team in Test, ODI or T20 at venues
##
## Description
##
## This function computes the won,lost,draw,tied or no result for a team against other teams in home/away or neutral venues and either returns a dataframe or plots it for grounds
##
## Usage
##
## teamWinLossStatusAtGrounds(file,teamName,opposition=["all"],homeOrAway=["all"],
## matchType="Test",plot=FALSE)
## Arguments
##
## file
## The CSV file for which the plot is required
## teamName
## The name of the team for which plot is required
## opposition
## Opposition is a vector namely ["all")] or ["Australia", "India", "England"]
## homeOrAway
## This parameter is a vector which is either ["all")] or a vector of venues ["home","away","neutral"]
## matchType
## Match type - Test, ODI or T20
## plot
## If plot=FALSE then a data frame is returned, If plot=TRUE then a plot is generated
## Value
##
## None
##
## Note
##
## Maintainer: Tinniam V Ganesh tvganesh.85@gmail.com
##
## Author(s)
##
## Tinniam V Ganesh
##
## References
##
## http://www.espncricinfo.com/ci/content/stats/index.html
## https://gigadom.in/
## See Also
##
## teamWinLossStatusVsOpposition teamWinLossStatusAtGrounds plotTimelineofWinsLosses
##
## Examples
##
## ## Not run:
## #Get the team data for India for Tests
##
## df =getTeamDataHomeAway(teamName="India",file="indiaOD.csv",matchType="ODI")
## ca.teamWinLossStatusAtGrounds("india.csv",teamName="India",opposition=c("Australia","England","India"),
## homeOrAway=c("home","away"),plot=TRUE)
##
## ## End(Not run)
1. Get team data
1a. Test
The teams in Test cricket are included below
- Afghanistan 2.Bangladesh 3. England 4. World 5. India 6. Ireland 7. New Zealand 8. Pakistan 9. South Africa 10.Sri Lanka 11. West Indies 12.Zimbabwe
You can use this for the teamName paramater. This will return a dataframe and also save the file as a CSV , if save=True
Note: – Since I have already got the data as CSV files I am not executing the lines below
import cricpy.analytics as ca
# Get the data for the teams. Save as CSV
#indiaTest= ca.getTeamDataHomeAway(dir=".",teamView="bat",matchType="Test",file="indiaTest.csv",save=True,teamName="India")
#ca.getTeamDataHomeAway(teamName="South Africa", matchType="Test", file="southafricaTest.csv", save=True)
#ca.getTeamDataHomeAway(teamName="West Indies", matchType="Test", file="westindiesTest.csv", save=True)
#newzealandTest = ca.getTeamDataHomeAway(matchType="Test",file="newzealandTest.csv",save=True,teamName="New Zealand")
1b. ODI
The ODI teams in the world are below. The data for these teams can be got by names as shown below
- Afghanistan 2. Africa XI 3. Asia XI 4.Australia 5.Bangladesh
- Bermuda 7. England 8. ICC World X1 9. India 11.Ireland 12. New Zealand 13. Pakistan 14. South Africa 15.Sri Lanka 17. West Indies 18. Zimbabwe 19 Canada 21. East Africa 22. Hong Kong 23.Ireland 24. Kenya 25. Namibia 26.Nepal 27.Netherlands 28. Oman 29.Papua New Guinea 30. Scotland 31 United Arab Emirates 32. United States of America
import cricpy.analytics as ca
#indiaODI= ca.getTeamDataHomeAway(dir=".",matchType="ODI",file="indiaODI.csv",save=True,teamName="India")
#englandODI = ca.getTeamDataHomeAway(matchType="ODI",file="englandODI.csv",save=True,teamName="England")
#westindiesODI = ca.getTeamDataHomeAway(matchType="ODI",file="westindiesODI.csv",save=True,teamName="West Indies")
#irelandODI <- ca.getTeamDataHomeAway(matchType="ODI",file="irelandODI.csv",save=True,teamName="Ireland")
1c T20
The T20 teams in the world are
- Afghanistan 2. Australia 3. Bahrain 4. Bangladesh 5. Belgium 6. Belize
- Bermuda 8.Botswana 9. Canada 11. Costa Rica 12. Germany 13. Ghana
- Guernsey 15. Hong Kong 16. ICC World X1 17.India 18. Ireland 19.Italy
- Jersey 21. Kenya 22.Kuwait 23.Maldives 24.Malta 25.Mexico 26.Namibia
27.Nepal 28.Netherlands 29. New Zealand 30.Nigeria 31.Oman 32. Pakistan
33.Panama 34.Papua New Guinea 35. Philippines 36.Qatar 37.Saudi Arabia
38.Scotland 39.South Africa 40.Spain 41.Sri Lanka 42.Uganda 43.United Arab Emirates United States of America 44.Vanuatu 45.West Indies
import cricpy.analytics as ca
#southafricaT20 = ca.getTeamDataHomeAway(matchType="T20",file="southafricaT20.csv",save=True,teamName="South Africa")
#srilankaT20 = ca.getTeamDataHomeAway(matchType="T20",file="srilankaT20.csv",save=True,teamName="Sri Lanka")
#canadaT20 = ca.getTeamDataHomeAway(matchType="T20",file="canadaT20.csv",save=True,teamName="Canada")
#afghanistanT20 = ca.getTeamDataHomeAway(matchType="T20",file="afghanistanT20.csv",save=True,teamName="Afghanistan")
2 Analysis of Test matches
The functions below perform analysis of Test teams
2a. Wins vs Loss against opposition
This function performs analysis of Test teams against other teams at home/away or neutral venue. Note:- The opposition can be a list of opposition teams. Similarly homeOrAway can also be a list of home/away/neutral venues.
import cricpy.analytics as ca
# Get the performance of Indian test team against all teams at all venues as a dataframe
df =ca.teamWinLossStatusVsOpposition("indiaTest.csv",teamName="India",opposition=["all"], homeOrAway=["all"], matchType="Test", plot=False)
print(df)
## ha away home
## Opposition Result
## Afghanistan won 0.0 1.0
## Australia draw 20.0 23.0
## lost 58.0 26.0
## tied 0.0 2.0
## won 13.0 39.0
## Bangladesh draw 3.0 0.0
## won 9.0 2.0
## England draw 35.0 48.0
## lost 68.0 26.0
## won 13.0 33.0
## New Zealand draw 18.0 28.0
## lost 16.0 4.0
## won 10.0 28.0
## Pakistan draw 29.0 34.0
## lost 14.0 10.0
## won 2.0 13.0
## South Africa draw 13.0 3.0
## lost 20.0 10.0
## won 6.0 15.0
## Sri Lanka draw 11.0 14.0
## lost 14.0 0.0
## won 16.0 13.0
## West Indies draw 39.0 35.0
## lost 32.0 28.0
## won 13.0 21.0
## Zimbabwe draw 1.0 1.0
## lost 4.0 0.0
## won 5.0 6.0
# Plot the performance of Indian Test team against all teams at all venues
ca.teamWinLossStatusVsOpposition("indiaTest.csv",teamName="India",opposition=["all"],homeOrAway=["all"],matchType="Test",plot=True)
# Get the performance of Australia against India, England and New Zealand at all venues in Tests
df =ca.teamWinLossStatusVsOpposition("southafricaTest.csv",teamName="South Africa",opposition=["India","England","New Zealand"],homeOrAway=["all"],matchType="Test",plot=False)
print(df)
#Plot the performance of Australia against England, India and New Zealand only at home (Australia)
## ha away home
## Opposition Result
## England draw 43 55
## lost 60 62
## won 26 34
## India draw 5 14
## lost 16 6
## won 7 19
## New Zealand draw 20 7
## lost 2 6
## won 14 29
ca.teamWinLossStatusVsOpposition("southafricaTest.csv",teamName="South Africa",opposition=["India","England","New Zealand"],homeOrAway=["home","away"],matchType="Test",plot=True)
2b Wins vs losses of Test teams against opposition at different venues
import cricpy.analytics as ca
# Get the performance of Pakistan against India, West Indies, South Africa at all venues in Tests and show performances at the venues
df = ca.teamWinLossStatusAtGrounds("westindiesTest.csv",teamName="West Indies",opposition=["India","Sri Lanka","South Africa"],homeOrAway=["all"],matchType="Test",plot=False)
print(df)
# Plot the performance of New Zealand Test team against England, Sri Lanka and Bangladesh at all grounds playes
## ha away home
## Ground Result
## Ahmedabad won 2.0 0.0
## Basseterre draw 0.0 3.0
## Bengaluru draw 2.0 0.0
## won 2.0 0.0
## Bridgetown draw 0.0 6.0
## lost 0.0 6.0
## won 0.0 14.0
## Cape Town draw 2.0 0.0
## lost 6.0 0.0
## Centurion lost 6.0 0.0
## Chennai draw 4.0 0.0
## lost 8.0 0.0
## won 3.0 0.0
## Colombo (PSS) lost 2.0 0.0
## Colombo (RPS) draw 2.0 0.0
## Colombo (SSC) lost 4.0 0.0
## Delhi draw 6.0 0.0
## lost 2.0 0.0
## won 3.0 0.0
## Durban lost 6.0 0.0
## Galle draw 1.0 0.0
## lost 4.0 0.0
## Georgetown draw 0.0 10.0
## Gros Islet draw 0.0 5.0
## lost 0.0 2.0
## Hyderabad (Deccan) lost 2.0 0.0
## Johannesburg lost 4.0 0.0
## Kandy lost 4.0 0.0
## Kanpur draw 1.0 0.0
## won 3.0 0.0
## Kingston draw 0.0 8.0
## lost 0.0 4.0
## won 0.0 15.0
## Kingstown draw 0.0 2.0
## Kolkata draw 7.0 0.0
## lost 6.0 0.0
## won 3.0 0.0
## Mohali won 2.0 0.0
## Moratuwa draw 1.0 0.0
## Mumbai draw 7.0 0.0
## lost 6.0 0.0
## won 2.0 0.0
## Mumbai (BS) draw 5.0 0.0
## won 2.0 0.0
## Nagpur draw 2.0 0.0
## North Sound lost 0.0 2.0
## Pallekele draw 1.0 0.0
## Port Elizabeth draw 1.0 0.0
## lost 2.0 0.0
## won 2.0 0.0
## Port of Spain draw 0.0 12.0
## lost 0.0 12.0
## won 0.0 10.0
## Providence lost 0.0 2.0
## Rajkot lost 2.0 0.0
## Roseau draw 0.0 2.0
## St John's draw 0.0 6.0
## lost 0.0 2.0
## won 0.0 2.0
ca. teamWinLossStatusAtGrounds("newzealandTest.csv",teamName="New Zealand",opposition=["England","Sri Lanka","Bangladesh"],homeOrAway=["all"],matchType="Test",plot=True)
2c. Plot the time line of wins vs losses of Test teams against opposition at different venues during an interval
import cricpy.analytics as ca
# Plot the time line of wins/losses of India against Australia, West Indies, South Africa in away/neutral venues
#from 2000-01-01 to 2017-01-01
ca.plotTimelineofWinsLosses("indiaTest.csv",teamName="India",opposition=["Australia","West Indies","South Africa"],
homeOrAway=["away","neutral"], startDate="2000-01-01",endDate="2017-01-01")
#Plot the time line of wins/losses of Indian Test team from 1970 onwards
ca.plotTimelineofWinsLosses("indiaTest.csv",teamName="India",startDate="1970-01-01",endDate="2017-01-01")
3 ODI
The functions below perform analysis of ODI teams listed above
3a. Wins vs Loss against opposition ODI teams
This function performs analysis of ODI teams against other teams at home/away or neutral venue. Note:- The opposition can be a vector of opposition teams. Similarly homeOrAway can also be a vector of home/away/neutral venues.
import cricpy.analytics as ca
# Get the performance of West Indies in ODIs against all other ODI teams at all venues and retirn as a dataframe
df = ca.teamWinLossStatusVsOpposition("westindiesODI.csv",teamName="West Indies",opposition=["all"],homeOrAway=["all"],matchType="ODI",plot=False)
print(df)
# Plot the performance of West Indies in ODIs against Sri Lanka, India at all venues
## ha away home neutral
## Opposition Result
## Afghanistan lost 0.0 1.0 2.0
## won 0.0 1.0 0.0
## Australia lost 41.0 25.0 8.0
## n/r 3.0 0.0 0.0
## tied 1.0 2.0 0.0
## won 35.0 18.0 7.0
## Bangladesh lost 6.0 5.0 3.0
## n/r 1.0 0.0 1.0
## won 10.0 8.0 3.0
## Bermuda won 0.0 0.0 1.0
## Canada won 2.0 1.0 1.0
## England lost 22.0 17.0 12.0
## n/r 0.0 3.0 0.0
## won 15.0 23.0 6.0
## India lost 27.0 14.0 18.0
## n/r 0.0 1.0 0.0
## tied 1.0 0.0 1.0
## won 27.0 20.0 15.0
## Ireland lost 0.0 0.0 1.0
## won 2.0 3.0 2.0
## Kenya lost 0.0 0.0 1.0
## won 3.0 0.0 2.0
## Netherlands won 0.0 0.0 2.0
## New Zealand lost 19.0 5.0 3.0
## n/r 2.0 0.0 2.0
## won 10.0 15.0 5.0
## P.N.G. won 0.0 0.0 1.0
## Pakistan lost 11.0 15.0 34.0
## tied 1.0 2.0 0.0
## won 14.0 16.0 41.0
## Scotland won 0.0 0.0 3.0
## South Africa lost 20.0 17.0 7.0
## n/r 1.0 0.0 0.0
## tied 0.0 0.0 1.0
## won 5.0 7.0 3.0
## Sri Lanka lost 9.0 5.0 11.0
## n/r 2.0 1.0 0.0
## won 3.0 5.0 20.0
## U.A.E. won 0.0 0.0 2.0
## Zimbabwe lost 4.0 1.0 5.0
## n/r 0.0 1.0 0.0
## tied 1.0 0.0 0.0
## won 9.0 15.0 12.0
ca.teamWinLossStatusVsOpposition("westindiesODI.csv",teamName="West Indies",opposition=["Sri Lanka", "India"],homeOrAway=["all"],matchType="ODI",plot=True)
#Plot the performance of Ireland in ODIs against Zimbabwe, Kenya, bermuda, UAE, Oman and Scotland at all venues
ca.teamWinLossStatusVsOpposition("irelandODI.csv",teamName="Ireland",opposition=["Zimbabwe","Kenya","Bermuda","U.A.E.","Oman","Scotland"],homeOrAway=["all"],matchType="ODI",plot=True)
3b Wins vs losses of ODI teams against opposition at different venues
import cricpy.analytics as ca
# Plot the performance of England ODI team against Bangladesh, West Indies and Australia at all venues
ca.teamWinLossStatusAtGrounds("englandODI.csv",teamName="England",opposition=["West Indies"],homeOrAway=["all"],matchType="ODI",plot=True)
#Plot the performance of India against South Africa, West Indies and Australia at 'home' venues
ca.teamWinLossStatusAtGrounds("indiaODI.csv",teamName="India",opposition=["South Africa"],homeOrAway=["home"],matchType="ODI",plot=True)
3c. Plot the time line of wins vs losses of ODI teams against opposition at different venues during an interval
import cricpy.analytics as ca
#Plot the time line of wins/losses of Bangladesh ODI team between 2015 and 2019 against all other teams and at
# all venues
ca.plotTimelineofWinsLosses("bangladeshOD.csv",teamName="Bangladesh",startDate="2015-01-01",endDate="2019-01-01",matchType="ODI")
#Plot the time line of wins/losses of India ODI against Sri Lanka, Bangladesh from 2016 to 2019
ca.plotTimelineofWinsLosses("indiaODI.csv",teamName="India",opposition=["Sri Lanka","Bangladesh"],startDate="2016-01-01",endDate="2019-01-01",matchType="ODI")
4 Twenty 20
The functions below perform analysis of Twenty 20 teams listed above
4a. Wins vs Loss against opposition ODI teams
This function performs analysis of T20 teams against other T20 teams at home/away or neutral venue. Note:- The opposition can be a list of opposition teams. Similarly homeOrAway can also be a list of home/away/neutral venues.
import cricpy.analytics as ca
# Get the performance of South Africa T20 team against England, India and Sri Lanka at home grounds at England
df = ca.teamWinLossStatusVsOpposition("southafricaT20.csv",teamName="South Africa",opposition=["England","India","Sri Lanka"], homeOrAway=["home"], matchType="T20", plot=False)
print(df)
#Plot the performance of South Africa T20 against England, India and Sri Lanka at all venues
## ha home
## Opposition Result
## England lost 1
## won 4
## India lost 5
## won 2
## Sri Lanka lost 2
## tied 1
## won 3
ca.teamWinLossStatusVsOpposition("southafricaT20.csv",teamName="South Africa", opposition=["England","India","Sri Lanka"],homeOrAway=["all"],matchType="T20",plot=True)
#Plot the performance of Afghanistan T20 teams against all oppositions
ca.teamWinLossStatusVsOpposition("afghanistanT20.csv",teamName="Afghanistan",opposition=["all"],homeOrAway=["all"],matchType="T20",plot=True)
4b Wins vs losses of T20 teams against opposition at different venues
# Compute the performance of Canada against all opposition at all venues and show by grounds. Return as dataframe
df =ca.teamWinLossStatusAtGrounds("canadaT20.csv",teamName="Canada",opposition=["all"],homeOrAway=["all"],matchType="T20",plot=False)
print(df)
# Plot the performance of Sri Lanka T20 team against India and Bangladesh in different venues at home/away and neutral
## ha home neutral
## Ground Result
## Abu Dhabi lost 0.0 1.0
## Belfast lost 0.0 1.0
## won 0.0 2.0
## Colombo (SSC) lost 0.0 1.0
## won 0.0 1.0
## Dubai (DSC) lost 0.0 5.0
## ICCA Dubai lost 0.0 2.0
## won 0.0 1.0
## King City (NW) lost 3.0 0.0
## tied 1.0 0.0
## Sharjah lost 0.0 1.0
ca.teamWinLossStatusAtGrounds("srilankaT20.csv",teamName="Sri Lanka",opposition=["India", "Bangladesh"], homeOrAway=["all"], matchType="T20", plot=True)
4c. Plot the time line of wins vs losses of T20 teams against opposition at different venues during an interval
#Plot the time line of Sri Lanka T20 team agaibst all opposition
ca.plotTimelineofWinsLosses("srilankaT20.csv",teamName="Sri Lanka",opposition=["Australia", "Pakistan"], startDate="2013-01-01", endDate="2019-01-01", matchType="T20")
# Plot the time line of South Africa T20 between 2010 and 2015 against West Indies and Pakistan
ca.plotTimelineofWinsLosses("southafricaT20.csv",teamName="South Africa",opposition=["West Indies", "Pakistan"], startDate="2010-01-01", endDate="2015-01-01", matchType="T20")
Conclusion
With the above additional functions cricpy can now analyze batsmen, bowlers and teams in all formats of the game (Test, ODI and T20).
Have fun with cricpy!!!
You may also like
- My book ‘Deep Learning from first principles:Second Edition’ now on Amazon
- Practical Machine Learning with R and Python – Part 3
- Big Data-4: Webserver log analysis with RDDs, Pyspark, SparkR and SparklyR
- Revisiting World Bank data analysis with WDI and gVisMotionChart
- The Clash of the Titans in Test and ODI cricket
- Simulating the domino effect in Android using Box2D and AndEngine
- Presentation on Wireless Technologies – Part 1 8.De-blurring revisited with Wiener filter using OpenCV
- Cloud Computing – Design Considerations
To see all posts click Index of posts
13 thoughts on “Cricpy adds team analytics to its arsenal!!”