From 84e0f7d61e7517d9e261070c1b359af3404d9cbd Mon Sep 17 00:00:00 2001
From: sarthaxtic <128150513+sarthaxtic@users.noreply.github.com>
Date: Thu, 31 Oct 2024 13:15:25 +0530
Subject: [PATCH 1/5] Create data.ipynb
---
.../IPL Winner Prediction/data.ipynb | 3475 +++++++++++++++++
1 file changed, 3475 insertions(+)
create mode 100644 Prediction Models/IPL Winner Prediction/data.ipynb
diff --git a/Prediction Models/IPL Winner Prediction/data.ipynb b/Prediction Models/IPL Winner Prediction/data.ipynb
new file mode 100644
index 00000000..2881228f
--- /dev/null
+++ b/Prediction Models/IPL Winner Prediction/data.ipynb
@@ -0,0 +1,3475 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 39,
+ "id": "aabfc9b7",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import numpy as np\n",
+ "import pandas as pd"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 40,
+ "id": "079ed1b4",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "match = pd.read_csv('matches.csv')\n",
+ "delivery = pd.read_csv('deliveries.csv')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 41,
+ "id": "bfadbf7d",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " id | \n",
+ " Season | \n",
+ " city | \n",
+ " date | \n",
+ " team1 | \n",
+ " team2 | \n",
+ " toss_winner | \n",
+ " toss_decision | \n",
+ " result | \n",
+ " dl_applied | \n",
+ " winner | \n",
+ " win_by_runs | \n",
+ " win_by_wickets | \n",
+ " player_of_match | \n",
+ " venue | \n",
+ " umpire1 | \n",
+ " umpire2 | \n",
+ " umpire3 | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 1 | \n",
+ " IPL-2017 | \n",
+ " Hyderabad | \n",
+ " 05-04-2017 | \n",
+ " Sunrisers Hyderabad | \n",
+ " Royal Challengers Bangalore | \n",
+ " Royal Challengers Bangalore | \n",
+ " field | \n",
+ " normal | \n",
+ " 0 | \n",
+ " Sunrisers Hyderabad | \n",
+ " 35 | \n",
+ " 0 | \n",
+ " Yuvraj Singh | \n",
+ " Rajiv Gandhi International Stadium, Uppal | \n",
+ " AY Dandekar | \n",
+ " NJ Llong | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 2 | \n",
+ " IPL-2017 | \n",
+ " Pune | \n",
+ " 06-04-2017 | \n",
+ " Mumbai Indians | \n",
+ " Rising Pune Supergiant | \n",
+ " Rising Pune Supergiant | \n",
+ " field | \n",
+ " normal | \n",
+ " 0 | \n",
+ " Rising Pune Supergiant | \n",
+ " 0 | \n",
+ " 7 | \n",
+ " SPD Smith | \n",
+ " Maharashtra Cricket Association Stadium | \n",
+ " A Nand Kishore | \n",
+ " S Ravi | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 3 | \n",
+ " IPL-2017 | \n",
+ " Rajkot | \n",
+ " 07-04-2017 | \n",
+ " Gujarat Lions | \n",
+ " Kolkata Knight Riders | \n",
+ " Kolkata Knight Riders | \n",
+ " field | \n",
+ " normal | \n",
+ " 0 | \n",
+ " Kolkata Knight Riders | \n",
+ " 0 | \n",
+ " 10 | \n",
+ " CA Lynn | \n",
+ " Saurashtra Cricket Association Stadium | \n",
+ " Nitin Menon | \n",
+ " CK Nandan | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 4 | \n",
+ " IPL-2017 | \n",
+ " Indore | \n",
+ " 08-04-2017 | \n",
+ " Rising Pune Supergiant | \n",
+ " Kings XI Punjab | \n",
+ " Kings XI Punjab | \n",
+ " field | \n",
+ " normal | \n",
+ " 0 | \n",
+ " Kings XI Punjab | \n",
+ " 0 | \n",
+ " 6 | \n",
+ " GJ Maxwell | \n",
+ " Holkar Cricket Stadium | \n",
+ " AK Chaudhary | \n",
+ " C Shamshuddin | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 5 | \n",
+ " IPL-2017 | \n",
+ " Bangalore | \n",
+ " 08-04-2017 | \n",
+ " Royal Challengers Bangalore | \n",
+ " Delhi Daredevils | \n",
+ " Royal Challengers Bangalore | \n",
+ " bat | \n",
+ " normal | \n",
+ " 0 | \n",
+ " Royal Challengers Bangalore | \n",
+ " 15 | \n",
+ " 0 | \n",
+ " KM Jadhav | \n",
+ " M Chinnaswamy Stadium | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " id Season city date team1 \\\n",
+ "0 1 IPL-2017 Hyderabad 05-04-2017 Sunrisers Hyderabad \n",
+ "1 2 IPL-2017 Pune 06-04-2017 Mumbai Indians \n",
+ "2 3 IPL-2017 Rajkot 07-04-2017 Gujarat Lions \n",
+ "3 4 IPL-2017 Indore 08-04-2017 Rising Pune Supergiant \n",
+ "4 5 IPL-2017 Bangalore 08-04-2017 Royal Challengers Bangalore \n",
+ "\n",
+ " team2 toss_winner toss_decision \\\n",
+ "0 Royal Challengers Bangalore Royal Challengers Bangalore field \n",
+ "1 Rising Pune Supergiant Rising Pune Supergiant field \n",
+ "2 Kolkata Knight Riders Kolkata Knight Riders field \n",
+ "3 Kings XI Punjab Kings XI Punjab field \n",
+ "4 Delhi Daredevils Royal Challengers Bangalore bat \n",
+ "\n",
+ " result dl_applied winner win_by_runs \\\n",
+ "0 normal 0 Sunrisers Hyderabad 35 \n",
+ "1 normal 0 Rising Pune Supergiant 0 \n",
+ "2 normal 0 Kolkata Knight Riders 0 \n",
+ "3 normal 0 Kings XI Punjab 0 \n",
+ "4 normal 0 Royal Challengers Bangalore 15 \n",
+ "\n",
+ " win_by_wickets player_of_match venue \\\n",
+ "0 0 Yuvraj Singh Rajiv Gandhi International Stadium, Uppal \n",
+ "1 7 SPD Smith Maharashtra Cricket Association Stadium \n",
+ "2 10 CA Lynn Saurashtra Cricket Association Stadium \n",
+ "3 6 GJ Maxwell Holkar Cricket Stadium \n",
+ "4 0 KM Jadhav M Chinnaswamy Stadium \n",
+ "\n",
+ " umpire1 umpire2 umpire3 \n",
+ "0 AY Dandekar NJ Llong NaN \n",
+ "1 A Nand Kishore S Ravi NaN \n",
+ "2 Nitin Menon CK Nandan NaN \n",
+ "3 AK Chaudhary C Shamshuddin NaN \n",
+ "4 NaN NaN NaN "
+ ]
+ },
+ "execution_count": 41,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "match.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 42,
+ "id": "d4616531",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(756, 18)"
+ ]
+ },
+ "execution_count": 42,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "match.shape"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 43,
+ "id": "b9576f6a",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " match_id | \n",
+ " inning | \n",
+ " batting_team | \n",
+ " bowling_team | \n",
+ " over | \n",
+ " ball | \n",
+ " batsman | \n",
+ " non_striker | \n",
+ " bowler | \n",
+ " is_super_over | \n",
+ " ... | \n",
+ " bye_runs | \n",
+ " legbye_runs | \n",
+ " noball_runs | \n",
+ " penalty_runs | \n",
+ " batsman_runs | \n",
+ " extra_runs | \n",
+ " total_runs | \n",
+ " player_dismissed | \n",
+ " dismissal_kind | \n",
+ " fielder | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " Sunrisers Hyderabad | \n",
+ " Royal Challengers Bangalore | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " DA Warner | \n",
+ " S Dhawan | \n",
+ " TS Mills | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " Sunrisers Hyderabad | \n",
+ " Royal Challengers Bangalore | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " DA Warner | \n",
+ " S Dhawan | \n",
+ " TS Mills | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " Sunrisers Hyderabad | \n",
+ " Royal Challengers Bangalore | \n",
+ " 1 | \n",
+ " 3 | \n",
+ " DA Warner | \n",
+ " S Dhawan | \n",
+ " TS Mills | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 4 | \n",
+ " 0 | \n",
+ " 4 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " Sunrisers Hyderabad | \n",
+ " Royal Challengers Bangalore | \n",
+ " 1 | \n",
+ " 4 | \n",
+ " DA Warner | \n",
+ " S Dhawan | \n",
+ " TS Mills | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " Sunrisers Hyderabad | \n",
+ " Royal Challengers Bangalore | \n",
+ " 1 | \n",
+ " 5 | \n",
+ " DA Warner | \n",
+ " S Dhawan | \n",
+ " TS Mills | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 2 | \n",
+ " 2 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
5 rows × 21 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " match_id inning batting_team bowling_team over \\\n",
+ "0 1 1 Sunrisers Hyderabad Royal Challengers Bangalore 1 \n",
+ "1 1 1 Sunrisers Hyderabad Royal Challengers Bangalore 1 \n",
+ "2 1 1 Sunrisers Hyderabad Royal Challengers Bangalore 1 \n",
+ "3 1 1 Sunrisers Hyderabad Royal Challengers Bangalore 1 \n",
+ "4 1 1 Sunrisers Hyderabad Royal Challengers Bangalore 1 \n",
+ "\n",
+ " ball batsman non_striker bowler is_super_over ... bye_runs \\\n",
+ "0 1 DA Warner S Dhawan TS Mills 0 ... 0 \n",
+ "1 2 DA Warner S Dhawan TS Mills 0 ... 0 \n",
+ "2 3 DA Warner S Dhawan TS Mills 0 ... 0 \n",
+ "3 4 DA Warner S Dhawan TS Mills 0 ... 0 \n",
+ "4 5 DA Warner S Dhawan TS Mills 0 ... 0 \n",
+ "\n",
+ " legbye_runs noball_runs penalty_runs batsman_runs extra_runs \\\n",
+ "0 0 0 0 0 0 \n",
+ "1 0 0 0 0 0 \n",
+ "2 0 0 0 4 0 \n",
+ "3 0 0 0 0 0 \n",
+ "4 0 0 0 0 2 \n",
+ "\n",
+ " total_runs player_dismissed dismissal_kind fielder \n",
+ "0 0 NaN NaN NaN \n",
+ "1 0 NaN NaN NaN \n",
+ "2 4 NaN NaN NaN \n",
+ "3 0 NaN NaN NaN \n",
+ "4 2 NaN NaN NaN \n",
+ "\n",
+ "[5 rows x 21 columns]"
+ ]
+ },
+ "execution_count": 43,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "delivery.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 44,
+ "id": "be21b391",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "total_score_df = delivery.groupby(['match_id','inning']).sum()['total_runs'].reset_index()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 45,
+ "id": "cbf8c553",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "total_score_df = total_score_df[total_score_df['inning'] == 1]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 46,
+ "id": "0e59930d",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " match_id | \n",
+ " inning | \n",
+ " total_runs | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 207 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 2 | \n",
+ " 1 | \n",
+ " 184 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 3 | \n",
+ " 1 | \n",
+ " 183 | \n",
+ "
\n",
+ " \n",
+ " 6 | \n",
+ " 4 | \n",
+ " 1 | \n",
+ " 163 | \n",
+ "
\n",
+ " \n",
+ " 8 | \n",
+ " 5 | \n",
+ " 1 | \n",
+ " 157 | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 1518 | \n",
+ " 11347 | \n",
+ " 1 | \n",
+ " 143 | \n",
+ "
\n",
+ " \n",
+ " 1520 | \n",
+ " 11412 | \n",
+ " 1 | \n",
+ " 136 | \n",
+ "
\n",
+ " \n",
+ " 1522 | \n",
+ " 11413 | \n",
+ " 1 | \n",
+ " 171 | \n",
+ "
\n",
+ " \n",
+ " 1524 | \n",
+ " 11414 | \n",
+ " 1 | \n",
+ " 155 | \n",
+ "
\n",
+ " \n",
+ " 1526 | \n",
+ " 11415 | \n",
+ " 1 | \n",
+ " 152 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
756 rows × 3 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " match_id inning total_runs\n",
+ "0 1 1 207\n",
+ "2 2 1 184\n",
+ "4 3 1 183\n",
+ "6 4 1 163\n",
+ "8 5 1 157\n",
+ "... ... ... ...\n",
+ "1518 11347 1 143\n",
+ "1520 11412 1 136\n",
+ "1522 11413 1 171\n",
+ "1524 11414 1 155\n",
+ "1526 11415 1 152\n",
+ "\n",
+ "[756 rows x 3 columns]"
+ ]
+ },
+ "execution_count": 46,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "total_score_df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 47,
+ "id": "78c81c64",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "match_df = match.merge(total_score_df[['match_id','total_runs']],left_on='id',right_on='match_id')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 48,
+ "id": "6dad8a91",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " id | \n",
+ " Season | \n",
+ " city | \n",
+ " date | \n",
+ " team1 | \n",
+ " team2 | \n",
+ " toss_winner | \n",
+ " toss_decision | \n",
+ " result | \n",
+ " dl_applied | \n",
+ " winner | \n",
+ " win_by_runs | \n",
+ " win_by_wickets | \n",
+ " player_of_match | \n",
+ " venue | \n",
+ " umpire1 | \n",
+ " umpire2 | \n",
+ " umpire3 | \n",
+ " match_id | \n",
+ " total_runs | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 1 | \n",
+ " IPL-2017 | \n",
+ " Hyderabad | \n",
+ " 05-04-2017 | \n",
+ " Sunrisers Hyderabad | \n",
+ " Royal Challengers Bangalore | \n",
+ " Royal Challengers Bangalore | \n",
+ " field | \n",
+ " normal | \n",
+ " 0 | \n",
+ " Sunrisers Hyderabad | \n",
+ " 35 | \n",
+ " 0 | \n",
+ " Yuvraj Singh | \n",
+ " Rajiv Gandhi International Stadium, Uppal | \n",
+ " AY Dandekar | \n",
+ " NJ Llong | \n",
+ " NaN | \n",
+ " 1 | \n",
+ " 207 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 2 | \n",
+ " IPL-2017 | \n",
+ " Pune | \n",
+ " 06-04-2017 | \n",
+ " Mumbai Indians | \n",
+ " Rising Pune Supergiant | \n",
+ " Rising Pune Supergiant | \n",
+ " field | \n",
+ " normal | \n",
+ " 0 | \n",
+ " Rising Pune Supergiant | \n",
+ " 0 | \n",
+ " 7 | \n",
+ " SPD Smith | \n",
+ " Maharashtra Cricket Association Stadium | \n",
+ " A Nand Kishore | \n",
+ " S Ravi | \n",
+ " NaN | \n",
+ " 2 | \n",
+ " 184 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 3 | \n",
+ " IPL-2017 | \n",
+ " Rajkot | \n",
+ " 07-04-2017 | \n",
+ " Gujarat Lions | \n",
+ " Kolkata Knight Riders | \n",
+ " Kolkata Knight Riders | \n",
+ " field | \n",
+ " normal | \n",
+ " 0 | \n",
+ " Kolkata Knight Riders | \n",
+ " 0 | \n",
+ " 10 | \n",
+ " CA Lynn | \n",
+ " Saurashtra Cricket Association Stadium | \n",
+ " Nitin Menon | \n",
+ " CK Nandan | \n",
+ " NaN | \n",
+ " 3 | \n",
+ " 183 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 4 | \n",
+ " IPL-2017 | \n",
+ " Indore | \n",
+ " 08-04-2017 | \n",
+ " Rising Pune Supergiant | \n",
+ " Kings XI Punjab | \n",
+ " Kings XI Punjab | \n",
+ " field | \n",
+ " normal | \n",
+ " 0 | \n",
+ " Kings XI Punjab | \n",
+ " 0 | \n",
+ " 6 | \n",
+ " GJ Maxwell | \n",
+ " Holkar Cricket Stadium | \n",
+ " AK Chaudhary | \n",
+ " C Shamshuddin | \n",
+ " NaN | \n",
+ " 4 | \n",
+ " 163 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 5 | \n",
+ " IPL-2017 | \n",
+ " Bangalore | \n",
+ " 08-04-2017 | \n",
+ " Royal Challengers Bangalore | \n",
+ " Delhi Daredevils | \n",
+ " Royal Challengers Bangalore | \n",
+ " bat | \n",
+ " normal | \n",
+ " 0 | \n",
+ " Royal Challengers Bangalore | \n",
+ " 15 | \n",
+ " 0 | \n",
+ " KM Jadhav | \n",
+ " M Chinnaswamy Stadium | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 5 | \n",
+ " 157 | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 751 | \n",
+ " 11347 | \n",
+ " IPL-2019 | \n",
+ " Mumbai | \n",
+ " 05-05-2019 | \n",
+ " Kolkata Knight Riders | \n",
+ " Mumbai Indians | \n",
+ " Mumbai Indians | \n",
+ " field | \n",
+ " normal | \n",
+ " 0 | \n",
+ " Mumbai Indians | \n",
+ " 0 | \n",
+ " 9 | \n",
+ " HH Pandya | \n",
+ " Wankhede Stadium | \n",
+ " Nanda Kishore | \n",
+ " O Nandan | \n",
+ " S Ravi | \n",
+ " 11347 | \n",
+ " 143 | \n",
+ "
\n",
+ " \n",
+ " 752 | \n",
+ " 11412 | \n",
+ " IPL-2019 | \n",
+ " Chennai | \n",
+ " 07-05-2019 | \n",
+ " Chennai Super Kings | \n",
+ " Mumbai Indians | \n",
+ " Chennai Super Kings | \n",
+ " bat | \n",
+ " normal | \n",
+ " 0 | \n",
+ " Mumbai Indians | \n",
+ " 0 | \n",
+ " 6 | \n",
+ " AS Yadav | \n",
+ " M. A. Chidambaram Stadium | \n",
+ " Nigel Llong | \n",
+ " Nitin Menon | \n",
+ " Ian Gould | \n",
+ " 11412 | \n",
+ " 136 | \n",
+ "
\n",
+ " \n",
+ " 753 | \n",
+ " 11413 | \n",
+ " IPL-2019 | \n",
+ " Visakhapatnam | \n",
+ " 08-05-2019 | \n",
+ " Sunrisers Hyderabad | \n",
+ " Delhi Capitals | \n",
+ " Delhi Capitals | \n",
+ " field | \n",
+ " normal | \n",
+ " 0 | \n",
+ " Delhi Capitals | \n",
+ " 0 | \n",
+ " 2 | \n",
+ " RR Pant | \n",
+ " ACA-VDCA Stadium | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 11413 | \n",
+ " 171 | \n",
+ "
\n",
+ " \n",
+ " 754 | \n",
+ " 11414 | \n",
+ " IPL-2019 | \n",
+ " Visakhapatnam | \n",
+ " 10-05-2019 | \n",
+ " Delhi Capitals | \n",
+ " Chennai Super Kings | \n",
+ " Chennai Super Kings | \n",
+ " field | \n",
+ " normal | \n",
+ " 0 | \n",
+ " Chennai Super Kings | \n",
+ " 0 | \n",
+ " 6 | \n",
+ " F du Plessis | \n",
+ " ACA-VDCA Stadium | \n",
+ " Sundaram Ravi | \n",
+ " Bruce Oxenford | \n",
+ " Chettithody Shamshuddin | \n",
+ " 11414 | \n",
+ " 155 | \n",
+ "
\n",
+ " \n",
+ " 755 | \n",
+ " 11415 | \n",
+ " IPL-2019 | \n",
+ " Hyderabad | \n",
+ " 12-05-2019 | \n",
+ " Mumbai Indians | \n",
+ " Chennai Super Kings | \n",
+ " Mumbai Indians | \n",
+ " bat | \n",
+ " normal | \n",
+ " 0 | \n",
+ " Mumbai Indians | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " JJ Bumrah | \n",
+ " Rajiv Gandhi Intl. Cricket Stadium | \n",
+ " Nitin Menon | \n",
+ " Ian Gould | \n",
+ " Nigel Llong | \n",
+ " 11415 | \n",
+ " 152 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
756 rows × 20 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " id Season city date team1 \\\n",
+ "0 1 IPL-2017 Hyderabad 05-04-2017 Sunrisers Hyderabad \n",
+ "1 2 IPL-2017 Pune 06-04-2017 Mumbai Indians \n",
+ "2 3 IPL-2017 Rajkot 07-04-2017 Gujarat Lions \n",
+ "3 4 IPL-2017 Indore 08-04-2017 Rising Pune Supergiant \n",
+ "4 5 IPL-2017 Bangalore 08-04-2017 Royal Challengers Bangalore \n",
+ ".. ... ... ... ... ... \n",
+ "751 11347 IPL-2019 Mumbai 05-05-2019 Kolkata Knight Riders \n",
+ "752 11412 IPL-2019 Chennai 07-05-2019 Chennai Super Kings \n",
+ "753 11413 IPL-2019 Visakhapatnam 08-05-2019 Sunrisers Hyderabad \n",
+ "754 11414 IPL-2019 Visakhapatnam 10-05-2019 Delhi Capitals \n",
+ "755 11415 IPL-2019 Hyderabad 12-05-2019 Mumbai Indians \n",
+ "\n",
+ " team2 toss_winner toss_decision \\\n",
+ "0 Royal Challengers Bangalore Royal Challengers Bangalore field \n",
+ "1 Rising Pune Supergiant Rising Pune Supergiant field \n",
+ "2 Kolkata Knight Riders Kolkata Knight Riders field \n",
+ "3 Kings XI Punjab Kings XI Punjab field \n",
+ "4 Delhi Daredevils Royal Challengers Bangalore bat \n",
+ ".. ... ... ... \n",
+ "751 Mumbai Indians Mumbai Indians field \n",
+ "752 Mumbai Indians Chennai Super Kings bat \n",
+ "753 Delhi Capitals Delhi Capitals field \n",
+ "754 Chennai Super Kings Chennai Super Kings field \n",
+ "755 Chennai Super Kings Mumbai Indians bat \n",
+ "\n",
+ " result dl_applied winner win_by_runs \\\n",
+ "0 normal 0 Sunrisers Hyderabad 35 \n",
+ "1 normal 0 Rising Pune Supergiant 0 \n",
+ "2 normal 0 Kolkata Knight Riders 0 \n",
+ "3 normal 0 Kings XI Punjab 0 \n",
+ "4 normal 0 Royal Challengers Bangalore 15 \n",
+ ".. ... ... ... ... \n",
+ "751 normal 0 Mumbai Indians 0 \n",
+ "752 normal 0 Mumbai Indians 0 \n",
+ "753 normal 0 Delhi Capitals 0 \n",
+ "754 normal 0 Chennai Super Kings 0 \n",
+ "755 normal 0 Mumbai Indians 1 \n",
+ "\n",
+ " win_by_wickets player_of_match \\\n",
+ "0 0 Yuvraj Singh \n",
+ "1 7 SPD Smith \n",
+ "2 10 CA Lynn \n",
+ "3 6 GJ Maxwell \n",
+ "4 0 KM Jadhav \n",
+ ".. ... ... \n",
+ "751 9 HH Pandya \n",
+ "752 6 AS Yadav \n",
+ "753 2 RR Pant \n",
+ "754 6 F du Plessis \n",
+ "755 0 JJ Bumrah \n",
+ "\n",
+ " venue umpire1 \\\n",
+ "0 Rajiv Gandhi International Stadium, Uppal AY Dandekar \n",
+ "1 Maharashtra Cricket Association Stadium A Nand Kishore \n",
+ "2 Saurashtra Cricket Association Stadium Nitin Menon \n",
+ "3 Holkar Cricket Stadium AK Chaudhary \n",
+ "4 M Chinnaswamy Stadium NaN \n",
+ ".. ... ... \n",
+ "751 Wankhede Stadium Nanda Kishore \n",
+ "752 M. A. Chidambaram Stadium Nigel Llong \n",
+ "753 ACA-VDCA Stadium NaN \n",
+ "754 ACA-VDCA Stadium Sundaram Ravi \n",
+ "755 Rajiv Gandhi Intl. Cricket Stadium Nitin Menon \n",
+ "\n",
+ " umpire2 umpire3 match_id total_runs \n",
+ "0 NJ Llong NaN 1 207 \n",
+ "1 S Ravi NaN 2 184 \n",
+ "2 CK Nandan NaN 3 183 \n",
+ "3 C Shamshuddin NaN 4 163 \n",
+ "4 NaN NaN 5 157 \n",
+ ".. ... ... ... ... \n",
+ "751 O Nandan S Ravi 11347 143 \n",
+ "752 Nitin Menon Ian Gould 11412 136 \n",
+ "753 NaN NaN 11413 171 \n",
+ "754 Bruce Oxenford Chettithody Shamshuddin 11414 155 \n",
+ "755 Ian Gould Nigel Llong 11415 152 \n",
+ "\n",
+ "[756 rows x 20 columns]"
+ ]
+ },
+ "execution_count": 48,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "match_df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "id": "46d110b1",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array(['Sunrisers Hyderabad', 'Mumbai Indians', 'Gujarat Lions',\n",
+ " 'Rising Pune Supergiant', 'Royal Challengers Bangalore',\n",
+ " 'Kolkata Knight Riders', 'Delhi Daredevils', 'Kings XI Punjab',\n",
+ " 'Chennai Super Kings', 'Rajasthan Royals', 'Deccan Chargers',\n",
+ " 'Kochi Tuskers Kerala', 'Pune Warriors', 'Rising Pune Supergiants',\n",
+ " 'Delhi Capitals'], dtype=object)"
+ ]
+ },
+ "execution_count": 16,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "match_df['team1'].unique()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 49,
+ "id": "9f048dbf",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "teams = [\n",
+ " 'Sunrisers Hyderabad',\n",
+ " 'Mumbai Indians',\n",
+ " 'Royal Challengers Bangalore',\n",
+ " 'Kolkata Knight Riders',\n",
+ " 'Kings XI Punjab',\n",
+ " 'Chennai Super Kings',\n",
+ " 'Rajasthan Royals',\n",
+ " 'Delhi Capitals'\n",
+ "]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 50,
+ "id": "4ca212ee",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "match_df['team1'] = match_df['team1'].str.replace('Delhi Daredevils','Delhi Capitals')\n",
+ "match_df['team2'] = match_df['team2'].str.replace('Delhi Daredevils','Delhi Capitals')\n",
+ "\n",
+ "match_df['team1'] = match_df['team1'].str.replace('Deccan Chargers','Sunrisers Hyderabad')\n",
+ "match_df['team2'] = match_df['team2'].str.replace('Deccan Chargers','Sunrisers Hyderabad')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 51,
+ "id": "ec3d2992",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "match_df = match_df[match_df['team1'].isin(teams)]\n",
+ "match_df = match_df[match_df['team2'].isin(teams)]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 52,
+ "id": "456148f0",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(641, 20)"
+ ]
+ },
+ "execution_count": 52,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "match_df.shape"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 56,
+ "id": "82af99c7",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "match_df = match_df[match_df['dl_applied'] == 0]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 59,
+ "id": "bb7e68ce",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "match_df = match_df[['match_id','city','winner','total_runs']]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 61,
+ "id": "cfa8b802",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "delivery_df = match_df.merge(delivery,on='match_id')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 64,
+ "id": "bb9e3301",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "delivery_df = delivery_df[delivery_df['inning'] == 2]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 68,
+ "id": "ed062c89",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " match_id | \n",
+ " city | \n",
+ " winner | \n",
+ " total_runs_x | \n",
+ " inning | \n",
+ " batting_team | \n",
+ " bowling_team | \n",
+ " over | \n",
+ " ball | \n",
+ " batsman | \n",
+ " ... | \n",
+ " bye_runs | \n",
+ " legbye_runs | \n",
+ " noball_runs | \n",
+ " penalty_runs | \n",
+ " batsman_runs | \n",
+ " extra_runs | \n",
+ " total_runs_y | \n",
+ " player_dismissed | \n",
+ " dismissal_kind | \n",
+ " fielder | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 125 | \n",
+ " 1 | \n",
+ " Hyderabad | \n",
+ " Sunrisers Hyderabad | \n",
+ " 207 | \n",
+ " 2 | \n",
+ " Royal Challengers Bangalore | \n",
+ " Sunrisers Hyderabad | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " CH Gayle | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 126 | \n",
+ " 1 | \n",
+ " Hyderabad | \n",
+ " Sunrisers Hyderabad | \n",
+ " 207 | \n",
+ " 2 | \n",
+ " Royal Challengers Bangalore | \n",
+ " Sunrisers Hyderabad | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " Mandeep Singh | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 127 | \n",
+ " 1 | \n",
+ " Hyderabad | \n",
+ " Sunrisers Hyderabad | \n",
+ " 207 | \n",
+ " 2 | \n",
+ " Royal Challengers Bangalore | \n",
+ " Sunrisers Hyderabad | \n",
+ " 1 | \n",
+ " 3 | \n",
+ " Mandeep Singh | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 128 | \n",
+ " 1 | \n",
+ " Hyderabad | \n",
+ " Sunrisers Hyderabad | \n",
+ " 207 | \n",
+ " 2 | \n",
+ " Royal Challengers Bangalore | \n",
+ " Sunrisers Hyderabad | \n",
+ " 1 | \n",
+ " 4 | \n",
+ " Mandeep Singh | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 2 | \n",
+ " 0 | \n",
+ " 2 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 129 | \n",
+ " 1 | \n",
+ " Hyderabad | \n",
+ " Sunrisers Hyderabad | \n",
+ " 207 | \n",
+ " 2 | \n",
+ " Royal Challengers Bangalore | \n",
+ " Sunrisers Hyderabad | \n",
+ " 1 | \n",
+ " 5 | \n",
+ " Mandeep Singh | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 4 | \n",
+ " 0 | \n",
+ " 4 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 149573 | \n",
+ " 11415 | \n",
+ " Hyderabad | \n",
+ " Mumbai Indians | \n",
+ " 152 | \n",
+ " 2 | \n",
+ " Chennai Super Kings | \n",
+ " Mumbai Indians | \n",
+ " 20 | \n",
+ " 2 | \n",
+ " RA Jadeja | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 149574 | \n",
+ " 11415 | \n",
+ " Hyderabad | \n",
+ " Mumbai Indians | \n",
+ " 152 | \n",
+ " 2 | \n",
+ " Chennai Super Kings | \n",
+ " Mumbai Indians | \n",
+ " 20 | \n",
+ " 3 | \n",
+ " SR Watson | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 2 | \n",
+ " 0 | \n",
+ " 2 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 149575 | \n",
+ " 11415 | \n",
+ " Hyderabad | \n",
+ " Mumbai Indians | \n",
+ " 152 | \n",
+ " 2 | \n",
+ " Chennai Super Kings | \n",
+ " Mumbai Indians | \n",
+ " 20 | \n",
+ " 4 | \n",
+ " SR Watson | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " SR Watson | \n",
+ " run out | \n",
+ " KH Pandya | \n",
+ "
\n",
+ " \n",
+ " 149576 | \n",
+ " 11415 | \n",
+ " Hyderabad | \n",
+ " Mumbai Indians | \n",
+ " 152 | \n",
+ " 2 | \n",
+ " Chennai Super Kings | \n",
+ " Mumbai Indians | \n",
+ " 20 | \n",
+ " 5 | \n",
+ " SN Thakur | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 2 | \n",
+ " 0 | \n",
+ " 2 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 149577 | \n",
+ " 11415 | \n",
+ " Hyderabad | \n",
+ " Mumbai Indians | \n",
+ " 152 | \n",
+ " 2 | \n",
+ " Chennai Super Kings | \n",
+ " Mumbai Indians | \n",
+ " 20 | \n",
+ " 6 | \n",
+ " SN Thakur | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " SN Thakur | \n",
+ " lbw | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
72413 rows × 24 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " match_id city winner total_runs_x inning \\\n",
+ "125 1 Hyderabad Sunrisers Hyderabad 207 2 \n",
+ "126 1 Hyderabad Sunrisers Hyderabad 207 2 \n",
+ "127 1 Hyderabad Sunrisers Hyderabad 207 2 \n",
+ "128 1 Hyderabad Sunrisers Hyderabad 207 2 \n",
+ "129 1 Hyderabad Sunrisers Hyderabad 207 2 \n",
+ "... ... ... ... ... ... \n",
+ "149573 11415 Hyderabad Mumbai Indians 152 2 \n",
+ "149574 11415 Hyderabad Mumbai Indians 152 2 \n",
+ "149575 11415 Hyderabad Mumbai Indians 152 2 \n",
+ "149576 11415 Hyderabad Mumbai Indians 152 2 \n",
+ "149577 11415 Hyderabad Mumbai Indians 152 2 \n",
+ "\n",
+ " batting_team bowling_team over ball \\\n",
+ "125 Royal Challengers Bangalore Sunrisers Hyderabad 1 1 \n",
+ "126 Royal Challengers Bangalore Sunrisers Hyderabad 1 2 \n",
+ "127 Royal Challengers Bangalore Sunrisers Hyderabad 1 3 \n",
+ "128 Royal Challengers Bangalore Sunrisers Hyderabad 1 4 \n",
+ "129 Royal Challengers Bangalore Sunrisers Hyderabad 1 5 \n",
+ "... ... ... ... ... \n",
+ "149573 Chennai Super Kings Mumbai Indians 20 2 \n",
+ "149574 Chennai Super Kings Mumbai Indians 20 3 \n",
+ "149575 Chennai Super Kings Mumbai Indians 20 4 \n",
+ "149576 Chennai Super Kings Mumbai Indians 20 5 \n",
+ "149577 Chennai Super Kings Mumbai Indians 20 6 \n",
+ "\n",
+ " batsman ... bye_runs legbye_runs noball_runs penalty_runs \\\n",
+ "125 CH Gayle ... 0 0 0 0 \n",
+ "126 Mandeep Singh ... 0 0 0 0 \n",
+ "127 Mandeep Singh ... 0 0 0 0 \n",
+ "128 Mandeep Singh ... 0 0 0 0 \n",
+ "129 Mandeep Singh ... 0 0 0 0 \n",
+ "... ... ... ... ... ... ... \n",
+ "149573 RA Jadeja ... 0 0 0 0 \n",
+ "149574 SR Watson ... 0 0 0 0 \n",
+ "149575 SR Watson ... 0 0 0 0 \n",
+ "149576 SN Thakur ... 0 0 0 0 \n",
+ "149577 SN Thakur ... 0 0 0 0 \n",
+ "\n",
+ " batsman_runs extra_runs total_runs_y player_dismissed \\\n",
+ "125 1 0 1 NaN \n",
+ "126 0 0 0 NaN \n",
+ "127 0 0 0 NaN \n",
+ "128 2 0 2 NaN \n",
+ "129 4 0 4 NaN \n",
+ "... ... ... ... ... \n",
+ "149573 1 0 1 NaN \n",
+ "149574 2 0 2 NaN \n",
+ "149575 1 0 1 SR Watson \n",
+ "149576 2 0 2 NaN \n",
+ "149577 0 0 0 SN Thakur \n",
+ "\n",
+ " dismissal_kind fielder \n",
+ "125 NaN NaN \n",
+ "126 NaN NaN \n",
+ "127 NaN NaN \n",
+ "128 NaN NaN \n",
+ "129 NaN NaN \n",
+ "... ... ... \n",
+ "149573 NaN NaN \n",
+ "149574 NaN NaN \n",
+ "149575 run out KH Pandya \n",
+ "149576 NaN NaN \n",
+ "149577 lbw NaN \n",
+ "\n",
+ "[72413 rows x 24 columns]"
+ ]
+ },
+ "execution_count": 68,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "delivery_df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 69,
+ "id": "3a2aed14",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ ":1: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ " delivery_df['current_score'] = delivery_df.groupby('match_id').cumsum()['total_runs_y']\n"
+ ]
+ }
+ ],
+ "source": [
+ "delivery_df['current_score'] = delivery_df.groupby('match_id').cumsum()['total_runs_y']"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 71,
+ "id": "a37ab264",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ ":1: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ " delivery_df['runs_left'] = delivery_df['total_runs_x'] - delivery_df['current_score']\n"
+ ]
+ }
+ ],
+ "source": [
+ "delivery_df['runs_left'] = delivery_df['total_runs_x'] - delivery_df['current_score']"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 73,
+ "id": "91142ecc",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ ":1: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ " delivery_df['balls_left'] = 126 - (delivery_df['over']*6 + delivery_df['ball'])\n"
+ ]
+ }
+ ],
+ "source": [
+ "delivery_df['balls_left'] = 126 - (delivery_df['over']*6 + delivery_df['ball'])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 74,
+ "id": "e49251b7",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " match_id | \n",
+ " city | \n",
+ " winner | \n",
+ " total_runs_x | \n",
+ " inning | \n",
+ " batting_team | \n",
+ " bowling_team | \n",
+ " over | \n",
+ " ball | \n",
+ " batsman | \n",
+ " ... | \n",
+ " penalty_runs | \n",
+ " batsman_runs | \n",
+ " extra_runs | \n",
+ " total_runs_y | \n",
+ " player_dismissed | \n",
+ " dismissal_kind | \n",
+ " fielder | \n",
+ " current_score | \n",
+ " runs_left | \n",
+ " balls_left | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 125 | \n",
+ " 1 | \n",
+ " Hyderabad | \n",
+ " Sunrisers Hyderabad | \n",
+ " 207 | \n",
+ " 2 | \n",
+ " Royal Challengers Bangalore | \n",
+ " Sunrisers Hyderabad | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " CH Gayle | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 1 | \n",
+ " 206 | \n",
+ " 119 | \n",
+ "
\n",
+ " \n",
+ " 126 | \n",
+ " 1 | \n",
+ " Hyderabad | \n",
+ " Sunrisers Hyderabad | \n",
+ " 207 | \n",
+ " 2 | \n",
+ " Royal Challengers Bangalore | \n",
+ " Sunrisers Hyderabad | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " Mandeep Singh | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 1 | \n",
+ " 206 | \n",
+ " 118 | \n",
+ "
\n",
+ " \n",
+ " 127 | \n",
+ " 1 | \n",
+ " Hyderabad | \n",
+ " Sunrisers Hyderabad | \n",
+ " 207 | \n",
+ " 2 | \n",
+ " Royal Challengers Bangalore | \n",
+ " Sunrisers Hyderabad | \n",
+ " 1 | \n",
+ " 3 | \n",
+ " Mandeep Singh | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 1 | \n",
+ " 206 | \n",
+ " 117 | \n",
+ "
\n",
+ " \n",
+ " 128 | \n",
+ " 1 | \n",
+ " Hyderabad | \n",
+ " Sunrisers Hyderabad | \n",
+ " 207 | \n",
+ " 2 | \n",
+ " Royal Challengers Bangalore | \n",
+ " Sunrisers Hyderabad | \n",
+ " 1 | \n",
+ " 4 | \n",
+ " Mandeep Singh | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 2 | \n",
+ " 0 | \n",
+ " 2 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 3 | \n",
+ " 204 | \n",
+ " 116 | \n",
+ "
\n",
+ " \n",
+ " 129 | \n",
+ " 1 | \n",
+ " Hyderabad | \n",
+ " Sunrisers Hyderabad | \n",
+ " 207 | \n",
+ " 2 | \n",
+ " Royal Challengers Bangalore | \n",
+ " Sunrisers Hyderabad | \n",
+ " 1 | \n",
+ " 5 | \n",
+ " Mandeep Singh | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 4 | \n",
+ " 0 | \n",
+ " 4 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 7 | \n",
+ " 200 | \n",
+ " 115 | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 149573 | \n",
+ " 11415 | \n",
+ " Hyderabad | \n",
+ " Mumbai Indians | \n",
+ " 152 | \n",
+ " 2 | \n",
+ " Chennai Super Kings | \n",
+ " Mumbai Indians | \n",
+ " 20 | \n",
+ " 2 | \n",
+ " RA Jadeja | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 152 | \n",
+ " 0 | \n",
+ " 4 | \n",
+ "
\n",
+ " \n",
+ " 149574 | \n",
+ " 11415 | \n",
+ " Hyderabad | \n",
+ " Mumbai Indians | \n",
+ " 152 | \n",
+ " 2 | \n",
+ " Chennai Super Kings | \n",
+ " Mumbai Indians | \n",
+ " 20 | \n",
+ " 3 | \n",
+ " SR Watson | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 2 | \n",
+ " 0 | \n",
+ " 2 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 154 | \n",
+ " -2 | \n",
+ " 3 | \n",
+ "
\n",
+ " \n",
+ " 149575 | \n",
+ " 11415 | \n",
+ " Hyderabad | \n",
+ " Mumbai Indians | \n",
+ " 152 | \n",
+ " 2 | \n",
+ " Chennai Super Kings | \n",
+ " Mumbai Indians | \n",
+ " 20 | \n",
+ " 4 | \n",
+ " SR Watson | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " SR Watson | \n",
+ " run out | \n",
+ " KH Pandya | \n",
+ " 155 | \n",
+ " -3 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " 149576 | \n",
+ " 11415 | \n",
+ " Hyderabad | \n",
+ " Mumbai Indians | \n",
+ " 152 | \n",
+ " 2 | \n",
+ " Chennai Super Kings | \n",
+ " Mumbai Indians | \n",
+ " 20 | \n",
+ " 5 | \n",
+ " SN Thakur | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 2 | \n",
+ " 0 | \n",
+ " 2 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 157 | \n",
+ " -5 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 149577 | \n",
+ " 11415 | \n",
+ " Hyderabad | \n",
+ " Mumbai Indians | \n",
+ " 152 | \n",
+ " 2 | \n",
+ " Chennai Super Kings | \n",
+ " Mumbai Indians | \n",
+ " 20 | \n",
+ " 6 | \n",
+ " SN Thakur | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " SN Thakur | \n",
+ " lbw | \n",
+ " NaN | \n",
+ " 157 | \n",
+ " -5 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
72413 rows × 27 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " match_id city winner total_runs_x inning \\\n",
+ "125 1 Hyderabad Sunrisers Hyderabad 207 2 \n",
+ "126 1 Hyderabad Sunrisers Hyderabad 207 2 \n",
+ "127 1 Hyderabad Sunrisers Hyderabad 207 2 \n",
+ "128 1 Hyderabad Sunrisers Hyderabad 207 2 \n",
+ "129 1 Hyderabad Sunrisers Hyderabad 207 2 \n",
+ "... ... ... ... ... ... \n",
+ "149573 11415 Hyderabad Mumbai Indians 152 2 \n",
+ "149574 11415 Hyderabad Mumbai Indians 152 2 \n",
+ "149575 11415 Hyderabad Mumbai Indians 152 2 \n",
+ "149576 11415 Hyderabad Mumbai Indians 152 2 \n",
+ "149577 11415 Hyderabad Mumbai Indians 152 2 \n",
+ "\n",
+ " batting_team bowling_team over ball \\\n",
+ "125 Royal Challengers Bangalore Sunrisers Hyderabad 1 1 \n",
+ "126 Royal Challengers Bangalore Sunrisers Hyderabad 1 2 \n",
+ "127 Royal Challengers Bangalore Sunrisers Hyderabad 1 3 \n",
+ "128 Royal Challengers Bangalore Sunrisers Hyderabad 1 4 \n",
+ "129 Royal Challengers Bangalore Sunrisers Hyderabad 1 5 \n",
+ "... ... ... ... ... \n",
+ "149573 Chennai Super Kings Mumbai Indians 20 2 \n",
+ "149574 Chennai Super Kings Mumbai Indians 20 3 \n",
+ "149575 Chennai Super Kings Mumbai Indians 20 4 \n",
+ "149576 Chennai Super Kings Mumbai Indians 20 5 \n",
+ "149577 Chennai Super Kings Mumbai Indians 20 6 \n",
+ "\n",
+ " batsman ... penalty_runs batsman_runs extra_runs \\\n",
+ "125 CH Gayle ... 0 1 0 \n",
+ "126 Mandeep Singh ... 0 0 0 \n",
+ "127 Mandeep Singh ... 0 0 0 \n",
+ "128 Mandeep Singh ... 0 2 0 \n",
+ "129 Mandeep Singh ... 0 4 0 \n",
+ "... ... ... ... ... ... \n",
+ "149573 RA Jadeja ... 0 1 0 \n",
+ "149574 SR Watson ... 0 2 0 \n",
+ "149575 SR Watson ... 0 1 0 \n",
+ "149576 SN Thakur ... 0 2 0 \n",
+ "149577 SN Thakur ... 0 0 0 \n",
+ "\n",
+ " total_runs_y player_dismissed dismissal_kind fielder \\\n",
+ "125 1 NaN NaN NaN \n",
+ "126 0 NaN NaN NaN \n",
+ "127 0 NaN NaN NaN \n",
+ "128 2 NaN NaN NaN \n",
+ "129 4 NaN NaN NaN \n",
+ "... ... ... ... ... \n",
+ "149573 1 NaN NaN NaN \n",
+ "149574 2 NaN NaN NaN \n",
+ "149575 1 SR Watson run out KH Pandya \n",
+ "149576 2 NaN NaN NaN \n",
+ "149577 0 SN Thakur lbw NaN \n",
+ "\n",
+ " current_score runs_left balls_left \n",
+ "125 1 206 119 \n",
+ "126 1 206 118 \n",
+ "127 1 206 117 \n",
+ "128 3 204 116 \n",
+ "129 7 200 115 \n",
+ "... ... ... ... \n",
+ "149573 152 0 4 \n",
+ "149574 154 -2 3 \n",
+ "149575 155 -3 2 \n",
+ "149576 157 -5 1 \n",
+ "149577 157 -5 0 \n",
+ "\n",
+ "[72413 rows x 27 columns]"
+ ]
+ },
+ "execution_count": 74,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "delivery_df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 75,
+ "id": "5ee97c37",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ ":1: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ " delivery_df['player_dismissed'] = delivery_df['player_dismissed'].fillna(\"0\")\n",
+ ":2: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ " delivery_df['player_dismissed'] = delivery_df['player_dismissed'].apply(lambda x:x if x == \"0\" else \"1\")\n",
+ ":3: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ " delivery_df['player_dismissed'] = delivery_df['player_dismissed'].astype('int')\n",
+ ":5: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ " delivery_df['wickets'] = 10 - wickets\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " match_id | \n",
+ " city | \n",
+ " winner | \n",
+ " total_runs_x | \n",
+ " inning | \n",
+ " batting_team | \n",
+ " bowling_team | \n",
+ " over | \n",
+ " ball | \n",
+ " batsman | \n",
+ " ... | \n",
+ " batsman_runs | \n",
+ " extra_runs | \n",
+ " total_runs_y | \n",
+ " player_dismissed | \n",
+ " dismissal_kind | \n",
+ " fielder | \n",
+ " current_score | \n",
+ " runs_left | \n",
+ " balls_left | \n",
+ " wickets | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 125 | \n",
+ " 1 | \n",
+ " Hyderabad | \n",
+ " Sunrisers Hyderabad | \n",
+ " 207 | \n",
+ " 2 | \n",
+ " Royal Challengers Bangalore | \n",
+ " Sunrisers Hyderabad | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " CH Gayle | \n",
+ " ... | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 1 | \n",
+ " 206 | \n",
+ " 119 | \n",
+ " 10 | \n",
+ "
\n",
+ " \n",
+ " 126 | \n",
+ " 1 | \n",
+ " Hyderabad | \n",
+ " Sunrisers Hyderabad | \n",
+ " 207 | \n",
+ " 2 | \n",
+ " Royal Challengers Bangalore | \n",
+ " Sunrisers Hyderabad | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " Mandeep Singh | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 1 | \n",
+ " 206 | \n",
+ " 118 | \n",
+ " 10 | \n",
+ "
\n",
+ " \n",
+ " 127 | \n",
+ " 1 | \n",
+ " Hyderabad | \n",
+ " Sunrisers Hyderabad | \n",
+ " 207 | \n",
+ " 2 | \n",
+ " Royal Challengers Bangalore | \n",
+ " Sunrisers Hyderabad | \n",
+ " 1 | \n",
+ " 3 | \n",
+ " Mandeep Singh | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 1 | \n",
+ " 206 | \n",
+ " 117 | \n",
+ " 10 | \n",
+ "
\n",
+ " \n",
+ " 128 | \n",
+ " 1 | \n",
+ " Hyderabad | \n",
+ " Sunrisers Hyderabad | \n",
+ " 207 | \n",
+ " 2 | \n",
+ " Royal Challengers Bangalore | \n",
+ " Sunrisers Hyderabad | \n",
+ " 1 | \n",
+ " 4 | \n",
+ " Mandeep Singh | \n",
+ " ... | \n",
+ " 2 | \n",
+ " 0 | \n",
+ " 2 | \n",
+ " 0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 3 | \n",
+ " 204 | \n",
+ " 116 | \n",
+ " 10 | \n",
+ "
\n",
+ " \n",
+ " 129 | \n",
+ " 1 | \n",
+ " Hyderabad | \n",
+ " Sunrisers Hyderabad | \n",
+ " 207 | \n",
+ " 2 | \n",
+ " Royal Challengers Bangalore | \n",
+ " Sunrisers Hyderabad | \n",
+ " 1 | \n",
+ " 5 | \n",
+ " Mandeep Singh | \n",
+ " ... | \n",
+ " 4 | \n",
+ " 0 | \n",
+ " 4 | \n",
+ " 0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 7 | \n",
+ " 200 | \n",
+ " 115 | \n",
+ " 10 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
5 rows × 28 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " match_id city winner total_runs_x inning \\\n",
+ "125 1 Hyderabad Sunrisers Hyderabad 207 2 \n",
+ "126 1 Hyderabad Sunrisers Hyderabad 207 2 \n",
+ "127 1 Hyderabad Sunrisers Hyderabad 207 2 \n",
+ "128 1 Hyderabad Sunrisers Hyderabad 207 2 \n",
+ "129 1 Hyderabad Sunrisers Hyderabad 207 2 \n",
+ "\n",
+ " batting_team bowling_team over ball \\\n",
+ "125 Royal Challengers Bangalore Sunrisers Hyderabad 1 1 \n",
+ "126 Royal Challengers Bangalore Sunrisers Hyderabad 1 2 \n",
+ "127 Royal Challengers Bangalore Sunrisers Hyderabad 1 3 \n",
+ "128 Royal Challengers Bangalore Sunrisers Hyderabad 1 4 \n",
+ "129 Royal Challengers Bangalore Sunrisers Hyderabad 1 5 \n",
+ "\n",
+ " batsman ... batsman_runs extra_runs total_runs_y \\\n",
+ "125 CH Gayle ... 1 0 1 \n",
+ "126 Mandeep Singh ... 0 0 0 \n",
+ "127 Mandeep Singh ... 0 0 0 \n",
+ "128 Mandeep Singh ... 2 0 2 \n",
+ "129 Mandeep Singh ... 4 0 4 \n",
+ "\n",
+ " player_dismissed dismissal_kind fielder current_score runs_left \\\n",
+ "125 0 NaN NaN 1 206 \n",
+ "126 0 NaN NaN 1 206 \n",
+ "127 0 NaN NaN 1 206 \n",
+ "128 0 NaN NaN 3 204 \n",
+ "129 0 NaN NaN 7 200 \n",
+ "\n",
+ " balls_left wickets \n",
+ "125 119 10 \n",
+ "126 118 10 \n",
+ "127 117 10 \n",
+ "128 116 10 \n",
+ "129 115 10 \n",
+ "\n",
+ "[5 rows x 28 columns]"
+ ]
+ },
+ "execution_count": 75,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "delivery_df['player_dismissed'] = delivery_df['player_dismissed'].fillna(\"0\")\n",
+ "delivery_df['player_dismissed'] = delivery_df['player_dismissed'].apply(lambda x:x if x == \"0\" else \"1\")\n",
+ "delivery_df['player_dismissed'] = delivery_df['player_dismissed'].astype('int')\n",
+ "wickets = delivery_df.groupby('match_id').cumsum()['player_dismissed'].values\n",
+ "delivery_df['wickets'] = 10 - wickets\n",
+ "delivery_df.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 78,
+ "id": "030b9c43",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " match_id | \n",
+ " city | \n",
+ " winner | \n",
+ " total_runs_x | \n",
+ " inning | \n",
+ " batting_team | \n",
+ " bowling_team | \n",
+ " over | \n",
+ " ball | \n",
+ " batsman | \n",
+ " ... | \n",
+ " batsman_runs | \n",
+ " extra_runs | \n",
+ " total_runs_y | \n",
+ " player_dismissed | \n",
+ " dismissal_kind | \n",
+ " fielder | \n",
+ " current_score | \n",
+ " runs_left | \n",
+ " balls_left | \n",
+ " wickets | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 125 | \n",
+ " 1 | \n",
+ " Hyderabad | \n",
+ " Sunrisers Hyderabad | \n",
+ " 207 | \n",
+ " 2 | \n",
+ " Royal Challengers Bangalore | \n",
+ " Sunrisers Hyderabad | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " CH Gayle | \n",
+ " ... | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 1 | \n",
+ " 206 | \n",
+ " 119 | \n",
+ " 10 | \n",
+ "
\n",
+ " \n",
+ " 126 | \n",
+ " 1 | \n",
+ " Hyderabad | \n",
+ " Sunrisers Hyderabad | \n",
+ " 207 | \n",
+ " 2 | \n",
+ " Royal Challengers Bangalore | \n",
+ " Sunrisers Hyderabad | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " Mandeep Singh | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 1 | \n",
+ " 206 | \n",
+ " 118 | \n",
+ " 10 | \n",
+ "
\n",
+ " \n",
+ " 127 | \n",
+ " 1 | \n",
+ " Hyderabad | \n",
+ " Sunrisers Hyderabad | \n",
+ " 207 | \n",
+ " 2 | \n",
+ " Royal Challengers Bangalore | \n",
+ " Sunrisers Hyderabad | \n",
+ " 1 | \n",
+ " 3 | \n",
+ " Mandeep Singh | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 1 | \n",
+ " 206 | \n",
+ " 117 | \n",
+ " 10 | \n",
+ "
\n",
+ " \n",
+ " 128 | \n",
+ " 1 | \n",
+ " Hyderabad | \n",
+ " Sunrisers Hyderabad | \n",
+ " 207 | \n",
+ " 2 | \n",
+ " Royal Challengers Bangalore | \n",
+ " Sunrisers Hyderabad | \n",
+ " 1 | \n",
+ " 4 | \n",
+ " Mandeep Singh | \n",
+ " ... | \n",
+ " 2 | \n",
+ " 0 | \n",
+ " 2 | \n",
+ " 0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 3 | \n",
+ " 204 | \n",
+ " 116 | \n",
+ " 10 | \n",
+ "
\n",
+ " \n",
+ " 129 | \n",
+ " 1 | \n",
+ " Hyderabad | \n",
+ " Sunrisers Hyderabad | \n",
+ " 207 | \n",
+ " 2 | \n",
+ " Royal Challengers Bangalore | \n",
+ " Sunrisers Hyderabad | \n",
+ " 1 | \n",
+ " 5 | \n",
+ " Mandeep Singh | \n",
+ " ... | \n",
+ " 4 | \n",
+ " 0 | \n",
+ " 4 | \n",
+ " 0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 7 | \n",
+ " 200 | \n",
+ " 115 | \n",
+ " 10 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
5 rows × 28 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " match_id city winner total_runs_x inning \\\n",
+ "125 1 Hyderabad Sunrisers Hyderabad 207 2 \n",
+ "126 1 Hyderabad Sunrisers Hyderabad 207 2 \n",
+ "127 1 Hyderabad Sunrisers Hyderabad 207 2 \n",
+ "128 1 Hyderabad Sunrisers Hyderabad 207 2 \n",
+ "129 1 Hyderabad Sunrisers Hyderabad 207 2 \n",
+ "\n",
+ " batting_team bowling_team over ball \\\n",
+ "125 Royal Challengers Bangalore Sunrisers Hyderabad 1 1 \n",
+ "126 Royal Challengers Bangalore Sunrisers Hyderabad 1 2 \n",
+ "127 Royal Challengers Bangalore Sunrisers Hyderabad 1 3 \n",
+ "128 Royal Challengers Bangalore Sunrisers Hyderabad 1 4 \n",
+ "129 Royal Challengers Bangalore Sunrisers Hyderabad 1 5 \n",
+ "\n",
+ " batsman ... batsman_runs extra_runs total_runs_y \\\n",
+ "125 CH Gayle ... 1 0 1 \n",
+ "126 Mandeep Singh ... 0 0 0 \n",
+ "127 Mandeep Singh ... 0 0 0 \n",
+ "128 Mandeep Singh ... 2 0 2 \n",
+ "129 Mandeep Singh ... 4 0 4 \n",
+ "\n",
+ " player_dismissed dismissal_kind fielder current_score runs_left \\\n",
+ "125 0 NaN NaN 1 206 \n",
+ "126 0 NaN NaN 1 206 \n",
+ "127 0 NaN NaN 1 206 \n",
+ "128 0 NaN NaN 3 204 \n",
+ "129 0 NaN NaN 7 200 \n",
+ "\n",
+ " balls_left wickets \n",
+ "125 119 10 \n",
+ "126 118 10 \n",
+ "127 117 10 \n",
+ "128 116 10 \n",
+ "129 115 10 \n",
+ "\n",
+ "[5 rows x 28 columns]"
+ ]
+ },
+ "execution_count": 78,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "delivery_df.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 79,
+ "id": "f9fe60c7",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ ":2: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ " delivery_df['crr'] = (delivery_df['current_score']*6)/(120 - delivery_df['balls_left'])\n"
+ ]
+ }
+ ],
+ "source": [
+ "# crr = runs/overs\n",
+ "delivery_df['crr'] = (delivery_df['current_score']*6)/(120 - delivery_df['balls_left'])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 80,
+ "id": "7d484dea",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ ":1: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ " delivery_df['rrr'] = (delivery_df['runs_left']*6)/delivery_df['balls_left']\n"
+ ]
+ }
+ ],
+ "source": [
+ "delivery_df['rrr'] = (delivery_df['runs_left']*6)/delivery_df['balls_left']"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 82,
+ "id": "730c19d4",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def result(row):\n",
+ " return 1 if row['batting_team'] == row['winner'] else 0"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 84,
+ "id": "a49caf70",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ ":1: SettingWithCopyWarning: \n",
+ "A value is trying to be set on a copy of a slice from a DataFrame.\n",
+ "Try using .loc[row_indexer,col_indexer] = value instead\n",
+ "\n",
+ "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
+ " delivery_df['result'] = delivery_df.apply(result,axis=1)\n"
+ ]
+ }
+ ],
+ "source": [
+ "delivery_df['result'] = delivery_df.apply(result,axis=1)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 89,
+ "id": "2999909b",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "final_df = delivery_df[['batting_team','bowling_team','city','runs_left','balls_left','wickets','total_runs_x','crr','rrr','result']]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 92,
+ "id": "fb242ffd",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "final_df = final_df.sample(final_df.shape[0])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 93,
+ "id": "3dc0b91d",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " batting_team | \n",
+ " bowling_team | \n",
+ " city | \n",
+ " runs_left | \n",
+ " balls_left | \n",
+ " wickets | \n",
+ " total_runs_x | \n",
+ " crr | \n",
+ " rrr | \n",
+ " result | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 82780 | \n",
+ " Delhi Daredevils | \n",
+ " Royal Challengers Bangalore | \n",
+ " Delhi | \n",
+ " 123 | \n",
+ " 79 | \n",
+ " 7 | \n",
+ " 183 | \n",
+ " 8.780488 | \n",
+ " 9.341772 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " batting_team bowling_team city runs_left \\\n",
+ "82780 Delhi Daredevils Royal Challengers Bangalore Delhi 123 \n",
+ "\n",
+ " balls_left wickets total_runs_x crr rrr result \n",
+ "82780 79 7 183 8.780488 9.341772 0 "
+ ]
+ },
+ "execution_count": 93,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "final_df.sample()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 102,
+ "id": "dfec0834",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "final_df.dropna(inplace=True)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 110,
+ "id": "bafcba9c",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "final_df = final_df[final_df['balls_left'] != 0]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 111,
+ "id": "54edf23b",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "X = final_df.iloc[:,:-1]\n",
+ "y = final_df.iloc[:,-1]\n",
+ "from sklearn.model_selection import train_test_split\n",
+ "X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=1)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 112,
+ "id": "3aa219a5",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " batting_team | \n",
+ " bowling_team | \n",
+ " city | \n",
+ " runs_left | \n",
+ " balls_left | \n",
+ " wickets | \n",
+ " total_runs_x | \n",
+ " crr | \n",
+ " rrr | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 57047 | \n",
+ " Royal Challengers Bangalore | \n",
+ " Chennai Super Kings | \n",
+ " Bangalore | \n",
+ " 120 | \n",
+ " 109 | \n",
+ " 9 | \n",
+ " 128 | \n",
+ " 4.363636 | \n",
+ " 6.605505 | \n",
+ "
\n",
+ " \n",
+ " 139340 | \n",
+ " Kolkata Knight Riders | \n",
+ " Royal Challengers Bangalore | \n",
+ " Bengaluru | \n",
+ " 132 | \n",
+ " 75 | \n",
+ " 9 | \n",
+ " 210 | \n",
+ " 10.400000 | \n",
+ " 10.560000 | \n",
+ "
\n",
+ " \n",
+ " 42239 | \n",
+ " Mumbai Indians | \n",
+ " Chennai Super Kings | \n",
+ " Chennai | \n",
+ " 128 | \n",
+ " 92 | \n",
+ " 10 | \n",
+ " 165 | \n",
+ " 7.928571 | \n",
+ " 8.347826 | \n",
+ "
\n",
+ " \n",
+ " 125767 | \n",
+ " Sunrisers Hyderabad | \n",
+ " Chennai Super Kings | \n",
+ " Hyderabad | \n",
+ " 129 | \n",
+ " 69 | \n",
+ " 7 | \n",
+ " 186 | \n",
+ " 6.705882 | \n",
+ " 11.217391 | \n",
+ "
\n",
+ " \n",
+ " 128443 | \n",
+ " Mumbai Indians | \n",
+ " Royal Challengers Bangalore | \n",
+ " Bengaluru | \n",
+ " 134 | \n",
+ " 89 | \n",
+ " 7 | \n",
+ " 173 | \n",
+ " 7.548387 | \n",
+ " 9.033708 | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 67579 | \n",
+ " Deccan Chargers | \n",
+ " Kings XI Punjab | \n",
+ " Hyderabad | \n",
+ " 160 | \n",
+ " 109 | \n",
+ " 9 | \n",
+ " 170 | \n",
+ " 5.454545 | \n",
+ " 8.807339 | \n",
+ "
\n",
+ " \n",
+ " 30775 | \n",
+ " Deccan Chargers | \n",
+ " Kings XI Punjab | \n",
+ " Johannesburg | \n",
+ " 111 | \n",
+ " 107 | \n",
+ " 10 | \n",
+ " 134 | \n",
+ " 10.615385 | \n",
+ " 6.224299 | \n",
+ "
\n",
+ " \n",
+ " 35251 | \n",
+ " Kolkata Knight Riders | \n",
+ " Chennai Super Kings | \n",
+ " Kolkata | \n",
+ " 85 | \n",
+ " 47 | \n",
+ " 4 | \n",
+ " 164 | \n",
+ " 6.493151 | \n",
+ " 10.851064 | \n",
+ "
\n",
+ " \n",
+ " 53800 | \n",
+ " Deccan Chargers | \n",
+ " Kolkata Knight Riders | \n",
+ " Hyderabad | \n",
+ " 58 | \n",
+ " 28 | \n",
+ " 6 | \n",
+ " 169 | \n",
+ " 7.239130 | \n",
+ " 12.428571 | \n",
+ "
\n",
+ " \n",
+ " 84954 | \n",
+ " Rajasthan Royals | \n",
+ " Sunrisers Hyderabad | \n",
+ " Hyderabad | \n",
+ " 97 | \n",
+ " 72 | \n",
+ " 9 | \n",
+ " 136 | \n",
+ " 4.875000 | \n",
+ " 8.083333 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
57073 rows × 9 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " batting_team bowling_team \\\n",
+ "57047 Royal Challengers Bangalore Chennai Super Kings \n",
+ "139340 Kolkata Knight Riders Royal Challengers Bangalore \n",
+ "42239 Mumbai Indians Chennai Super Kings \n",
+ "125767 Sunrisers Hyderabad Chennai Super Kings \n",
+ "128443 Mumbai Indians Royal Challengers Bangalore \n",
+ "... ... ... \n",
+ "67579 Deccan Chargers Kings XI Punjab \n",
+ "30775 Deccan Chargers Kings XI Punjab \n",
+ "35251 Kolkata Knight Riders Chennai Super Kings \n",
+ "53800 Deccan Chargers Kolkata Knight Riders \n",
+ "84954 Rajasthan Royals Sunrisers Hyderabad \n",
+ "\n",
+ " city runs_left balls_left wickets total_runs_x crr \\\n",
+ "57047 Bangalore 120 109 9 128 4.363636 \n",
+ "139340 Bengaluru 132 75 9 210 10.400000 \n",
+ "42239 Chennai 128 92 10 165 7.928571 \n",
+ "125767 Hyderabad 129 69 7 186 6.705882 \n",
+ "128443 Bengaluru 134 89 7 173 7.548387 \n",
+ "... ... ... ... ... ... ... \n",
+ "67579 Hyderabad 160 109 9 170 5.454545 \n",
+ "30775 Johannesburg 111 107 10 134 10.615385 \n",
+ "35251 Kolkata 85 47 4 164 6.493151 \n",
+ "53800 Hyderabad 58 28 6 169 7.239130 \n",
+ "84954 Hyderabad 97 72 9 136 4.875000 \n",
+ "\n",
+ " rrr \n",
+ "57047 6.605505 \n",
+ "139340 10.560000 \n",
+ "42239 8.347826 \n",
+ "125767 11.217391 \n",
+ "128443 9.033708 \n",
+ "... ... \n",
+ "67579 8.807339 \n",
+ "30775 6.224299 \n",
+ "35251 10.851064 \n",
+ "53800 12.428571 \n",
+ "84954 8.083333 \n",
+ "\n",
+ "[57073 rows x 9 columns]"
+ ]
+ },
+ "execution_count": 112,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "X_train"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 113,
+ "id": "45c6fffa",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from sklearn.compose import ColumnTransformer\n",
+ "from sklearn.preprocessing import OneHotEncoder\n",
+ "\n",
+ "trf = ColumnTransformer([\n",
+ " ('trf',OneHotEncoder(sparse=False,drop='first'),['batting_team','bowling_team','city'])\n",
+ "]\n",
+ ",remainder='passthrough')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 132,
+ "id": "9be108ac",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from sklearn.linear_model import LogisticRegression\n",
+ "from sklearn.ensemble import RandomForestClassifier\n",
+ "from sklearn.pipeline import Pipeline"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 145,
+ "id": "92dfbfcb",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "pipe = Pipeline(steps=[\n",
+ " ('step1',trf),\n",
+ " ('step2',LogisticRegression(solver='liblinear'))\n",
+ "])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 146,
+ "id": "12679868",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Pipeline(steps=[('step1',\n",
+ " ColumnTransformer(remainder='passthrough',\n",
+ " transformers=[('trf',\n",
+ " OneHotEncoder(drop='first',\n",
+ " sparse=False),\n",
+ " ['batting_team',\n",
+ " 'bowling_team', 'city'])])),\n",
+ " ('step2', LogisticRegression(solver='liblinear'))])"
+ ]
+ },
+ "execution_count": 146,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "pipe.fit(X_train,y_train)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 147,
+ "id": "cf3fde3b",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "y_pred = pipe.predict(X_test)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 148,
+ "id": "b43ea121",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0.8031396734178989"
+ ]
+ },
+ "execution_count": 148,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "from sklearn.metrics import accuracy_score\n",
+ "accuracy_score(y_test,y_pred)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 152,
+ "id": "01205f46",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([0.16705404, 0.83294596])"
+ ]
+ },
+ "execution_count": 152,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "pipe.predict_proba(X_test)[10]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 153,
+ "id": "cf6fbd69",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def match_summary(row):\n",
+ " print(\"Batting Team-\" + row['batting_team'] + \" | Bowling Team-\" + row['bowling_team'] + \" | Target- \" + str(row['total_runs_x']))\n",
+ " "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 159,
+ "id": "41c62b45",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def match_progression(x_df,match_id,pipe):\n",
+ " match = x_df[x_df['match_id'] == match_id]\n",
+ " match = match[(match['ball'] == 6)]\n",
+ " temp_df = match[['batting_team','bowling_team','city','runs_left','balls_left','wickets','total_runs_x','crr','rrr']].dropna()\n",
+ " temp_df = temp_df[temp_df['balls_left'] != 0]\n",
+ " result = pipe.predict_proba(temp_df)\n",
+ " temp_df['lose'] = np.round(result.T[0]*100,1)\n",
+ " temp_df['win'] = np.round(result.T[1]*100,1)\n",
+ " temp_df['end_of_over'] = range(1,temp_df.shape[0]+1)\n",
+ " \n",
+ " target = temp_df['total_runs_x'].values[0]\n",
+ " runs = list(temp_df['runs_left'].values)\n",
+ " new_runs = runs[:]\n",
+ " runs.insert(0,target)\n",
+ " temp_df['runs_after_over'] = np.array(runs)[:-1] - np.array(new_runs)\n",
+ " wickets = list(temp_df['wickets'].values)\n",
+ " new_wickets = wickets[:]\n",
+ " new_wickets.insert(0,10)\n",
+ " wickets.append(0)\n",
+ " w = np.array(wickets)\n",
+ " nw = np.array(new_wickets)\n",
+ " temp_df['wickets_in_over'] = (nw - w)[0:temp_df.shape[0]]\n",
+ " \n",
+ " print(\"Target-\",target)\n",
+ " temp_df = temp_df[['end_of_over','runs_after_over','wickets_in_over','lose','win']]\n",
+ " return temp_df,target\n",
+ " "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 173,
+ "id": "d3238e65",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Target- 178\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " end_of_over | \n",
+ " runs_after_over | \n",
+ " wickets_in_over | \n",
+ " lose | \n",
+ " win | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 10459 | \n",
+ " 1 | \n",
+ " 4 | \n",
+ " 0 | \n",
+ " 54.1 | \n",
+ " 45.9 | \n",
+ "
\n",
+ " \n",
+ " 10467 | \n",
+ " 2 | \n",
+ " 8 | \n",
+ " 0 | \n",
+ " 48.9 | \n",
+ " 51.1 | \n",
+ "
\n",
+ " \n",
+ " 10473 | \n",
+ " 3 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 55.8 | \n",
+ " 44.2 | \n",
+ "
\n",
+ " \n",
+ " 10479 | \n",
+ " 4 | \n",
+ " 7 | \n",
+ " 1 | \n",
+ " 67.8 | \n",
+ " 32.2 | \n",
+ "
\n",
+ " \n",
+ " 10485 | \n",
+ " 5 | \n",
+ " 12 | \n",
+ " 0 | \n",
+ " 57.5 | \n",
+ " 42.5 | \n",
+ "
\n",
+ " \n",
+ " 10491 | \n",
+ " 6 | \n",
+ " 13 | \n",
+ " 0 | \n",
+ " 45.1 | \n",
+ " 54.9 | \n",
+ "
\n",
+ " \n",
+ " 10497 | \n",
+ " 7 | \n",
+ " 9 | \n",
+ " 0 | \n",
+ " 39.3 | \n",
+ " 60.7 | \n",
+ "
\n",
+ " \n",
+ " 10505 | \n",
+ " 8 | \n",
+ " 15 | \n",
+ " 0 | \n",
+ " 25.8 | \n",
+ " 74.2 | \n",
+ "
\n",
+ " \n",
+ " 10511 | \n",
+ " 9 | \n",
+ " 7 | \n",
+ " 0 | \n",
+ " 23.7 | \n",
+ " 76.3 | \n",
+ "
\n",
+ " \n",
+ " 10518 | \n",
+ " 10 | \n",
+ " 17 | \n",
+ " 0 | \n",
+ " 12.8 | \n",
+ " 87.2 | \n",
+ "
\n",
+ " \n",
+ " 10524 | \n",
+ " 11 | \n",
+ " 9 | \n",
+ " 1 | \n",
+ " 17.9 | \n",
+ " 82.1 | \n",
+ "
\n",
+ " \n",
+ " 10530 | \n",
+ " 12 | \n",
+ " 9 | \n",
+ " 0 | \n",
+ " 14.6 | \n",
+ " 85.4 | \n",
+ "
\n",
+ " \n",
+ " 10536 | \n",
+ " 13 | \n",
+ " 8 | \n",
+ " 0 | \n",
+ " 12.6 | \n",
+ " 87.4 | \n",
+ "
\n",
+ " \n",
+ " 10542 | \n",
+ " 14 | \n",
+ " 8 | \n",
+ " 0 | \n",
+ " 10.8 | \n",
+ " 89.2 | \n",
+ "
\n",
+ " \n",
+ " 10548 | \n",
+ " 15 | \n",
+ " 5 | \n",
+ " 1 | \n",
+ " 18.9 | \n",
+ " 81.1 | \n",
+ "
\n",
+ " \n",
+ " 10555 | \n",
+ " 16 | \n",
+ " 8 | \n",
+ " 1 | \n",
+ " 27.1 | \n",
+ " 72.9 | \n",
+ "
\n",
+ " \n",
+ " 10561 | \n",
+ " 17 | \n",
+ " 8 | \n",
+ " 2 | \n",
+ " 53.0 | \n",
+ " 47.0 | \n",
+ "
\n",
+ " \n",
+ " 10567 | \n",
+ " 18 | \n",
+ " 6 | \n",
+ " 1 | \n",
+ " 68.4 | \n",
+ " 31.6 | \n",
+ "
\n",
+ " \n",
+ " 10573 | \n",
+ " 19 | \n",
+ " 8 | \n",
+ " 2 | \n",
+ " 88.3 | \n",
+ " 11.7 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " end_of_over runs_after_over wickets_in_over lose win\n",
+ "10459 1 4 0 54.1 45.9\n",
+ "10467 2 8 0 48.9 51.1\n",
+ "10473 3 1 0 55.8 44.2\n",
+ "10479 4 7 1 67.8 32.2\n",
+ "10485 5 12 0 57.5 42.5\n",
+ "10491 6 13 0 45.1 54.9\n",
+ "10497 7 9 0 39.3 60.7\n",
+ "10505 8 15 0 25.8 74.2\n",
+ "10511 9 7 0 23.7 76.3\n",
+ "10518 10 17 0 12.8 87.2\n",
+ "10524 11 9 1 17.9 82.1\n",
+ "10530 12 9 0 14.6 85.4\n",
+ "10536 13 8 0 12.6 87.4\n",
+ "10542 14 8 0 10.8 89.2\n",
+ "10548 15 5 1 18.9 81.1\n",
+ "10555 16 8 1 27.1 72.9\n",
+ "10561 17 8 2 53.0 47.0\n",
+ "10567 18 6 1 68.4 31.6\n",
+ "10573 19 8 2 88.3 11.7"
+ ]
+ },
+ "execution_count": 173,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "temp_df,target = match_progression(delivery_df,74,pipe)\n",
+ "temp_df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 174,
+ "id": "256b9c2d",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Text(0.5, 1.0, 'Target-178')"
+ ]
+ },
+ "execution_count": 174,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "