{
"cells": [
{
"cell_type": "code",
"execution_count": 5,
"id": "aabfc9b7",
"metadata": {
"id": "aabfc9b7"
},
"outputs": [],
"source": [
"import numpy as np\n",
"import pandas as pd"
]
},
{
"cell_type": "code",
"source": [
"pip install numpy==1.22.0 pandas==1.5.3\n"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "SFDDgqRzxfTB",
"outputId": "a652677b-ae2d-4052-d971-3990bc6b0186"
},
"id": "SFDDgqRzxfTB",
"execution_count": 4,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Requirement already satisfied: numpy==1.22.0 in /usr/local/lib/python3.10/dist-packages (1.22.0)\n",
"Requirement already satisfied: pandas==1.5.3 in /usr/local/lib/python3.10/dist-packages (1.5.3)\n",
"Requirement already satisfied: python-dateutil>=2.8.1 in /usr/local/lib/python3.10/dist-packages (from pandas==1.5.3) (2.8.2)\n",
"Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/dist-packages (from pandas==1.5.3) (2023.4)\n",
"Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil>=2.8.1->pandas==1.5.3) (1.16.0)\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"!pip show numpy\n",
"!pip show pandas"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "FGPxBWkrxkct",
"outputId": "d01503b5-51fa-43c5-c674-2f20340ee904"
},
"id": "FGPxBWkrxkct",
"execution_count": 7,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Name: numpy\n",
"Version: 1.22.0\n",
"Summary: NumPy is the fundamental package for array computing with Python.\n",
"Home-page: https://www.numpy.org\n",
"Author: Travis E. Oliphant et al.\n",
"Author-email: \n",
"License: BSD\n",
"Location: /usr/local/lib/python3.10/dist-packages\n",
"Requires: \n",
"Required-by: albumentations, altair, arviz, astropy, autograd, blis, bokeh, bqplot, category-encoders, chex, cmdstanpy, contourpy, cudf-cu12, cufflinks, cupy-cuda12x, cvxpy, datascience, db-dtypes, dopamine_rl, ecos, flax, folium, geemap, gensim, gym, h5py, holoviews, hyperopt, ibis-framework, imageio, imbalanced-learn, imgaug, jax, jaxlib, librosa, lightgbm, matplotlib, matplotlib-venn, missingno, mizani, ml-dtypes, mlxtend, moviepy, music21, nibabel, numba, numexpr, opencv-contrib-python, opencv-python, opencv-python-headless, opt-einsum, optax, orbax-checkpoint, osqp, pandas, pandas-gbq, pandas-stubs, patsy, plotnine, prophet, pyarrow, pycocotools, pyerfa, pymc, pytensor, python-louvain, PyWavelets, qdldl, qudida, rmm-cu12, scikit-image, scikit-learn, scipy, scs, seaborn, shapely, sklearn-pandas, soxr, spacy, stanio, statsmodels, tables, tensorboard, tensorflow, tensorflow-datasets, tensorflow-hub, tensorflow-probability, tensorstore, thinc, tifffile, torchtext, torchvision, transformers, wordcloud, xarray, xarray-einstats, xgboost, yellowbrick, yfinance\n",
"Name: pandas\n",
"Version: 1.5.3\n",
"Summary: Powerful data structures for data analysis, time series, and statistics\n",
"Home-page: https://pandas.pydata.org\n",
"Author: The Pandas Development Team\n",
"Author-email: pandas-dev@python.org\n",
"License: BSD-3-Clause\n",
"Location: /usr/local/lib/python3.10/dist-packages\n",
"Requires: numpy, python-dateutil, pytz\n",
"Required-by: altair, arviz, bigframes, bokeh, bqplot, category-encoders, cmdstanpy, cudf-cu12, cufflinks, datascience, db-dtypes, dopamine_rl, fastai, geemap, geopandas, google-colab, gspread-dataframe, holoviews, ibis-framework, mizani, mlxtend, pandas-datareader, pandas-gbq, panel, plotnine, prophet, pymc, seaborn, sklearn-pandas, statsmodels, vega-datasets, xarray, yfinance\n"
]
}
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "079ed1b4",
"metadata": {
"id": "079ed1b4"
},
"outputs": [],
"source": [
"match = pd.read_csv('/content/matches.csv')\n",
"delivery = pd.read_csv('/content/deliveries.csv')"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "bfadbf7d",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 451
},
"id": "bfadbf7d",
"outputId": "d1a2bb15-e98c-44bb-a21a-ffabac7b4aab"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"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 "
],
"text/html": [
"\n",
"
\n",
"
\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",
"
\n",
"
\n",
"
\n"
],
"application/vnd.google.colaboratory.intrinsic+json": {
"type": "dataframe",
"variable_name": "match",
"summary": "{\n \"name\": \"match\",\n \"rows\": 756,\n \"fields\": [\n {\n \"column\": \"id\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 3464,\n \"min\": 1,\n \"max\": 11415,\n \"num_unique_values\": 756,\n \"samples\": [\n 409,\n 98,\n 425\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Season\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 12,\n \"samples\": [\n \"IPL-2018\",\n \"IPL-2016\",\n \"IPL-2017\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"city\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 32,\n \"samples\": [\n \"Sharjah\",\n \"Centurion\",\n \"Kochi\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"date\",\n \"properties\": {\n \"dtype\": \"object\",\n \"num_unique_values\": 546,\n \"samples\": [\n \"26-05-2013\",\n \"20-05-2008\",\n \"10-04-2015\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"team1\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 15,\n \"samples\": [\n \"Rajasthan Royals\",\n \"Kochi Tuskers Kerala\",\n \"Sunrisers Hyderabad\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"team2\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 15,\n \"samples\": [\n \"Chennai Super Kings\",\n \"Pune Warriors\",\n \"Royal Challengers Bangalore\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"toss_winner\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 15,\n \"samples\": [\n \"Rajasthan Royals\",\n \"Kochi Tuskers Kerala\",\n \"Royal Challengers Bangalore\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"toss_decision\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"bat\",\n \"field\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"result\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 3,\n \"samples\": [\n \"normal\",\n \"tie\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"dl_applied\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0,\n \"min\": 0,\n \"max\": 1,\n \"num_unique_values\": 2,\n \"samples\": [\n 1,\n 0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"winner\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 15,\n \"samples\": [\n \"Rajasthan Royals\",\n \"Pune Warriors\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"win_by_runs\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 23,\n \"min\": 0,\n \"max\": 146,\n \"num_unique_values\": 89,\n \"samples\": [\n 53,\n 40\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"win_by_wickets\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 3,\n \"min\": 0,\n \"max\": 10,\n \"num_unique_values\": 11,\n \"samples\": [\n 4,\n 0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"player_of_match\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 226,\n \"samples\": [\n \"JJ Bumrah\",\n \"MA Agarwal\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"venue\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 41,\n \"samples\": [\n \"Barabati Stadium\",\n \"Dr DY Patil Sports Academy\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"umpire1\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 61,\n \"samples\": [\n \"AY Dandekar\",\n \"KN Ananthapadmanabhan\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"umpire2\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 65,\n \"samples\": [\n \"O Nandan\",\n \"Nanda Kishore\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"umpire3\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 25,\n \"samples\": [\n \"Chris Gaffaney\",\n \"Marais Erasmus\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}"
}
},
"metadata": {},
"execution_count": 9
}
],
"source": [
"match.head()"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "d4616531",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "d4616531",
"outputId": "5a409bd2-6f6a-440b-e7f7-93927fb7c8a1"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(756, 18)"
]
},
"metadata": {},
"execution_count": 10
}
],
"source": [
"match.shape"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "b9576f6a",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 429
},
"id": "b9576f6a",
"outputId": "3ea808cf-236d-43a1-d013-c948f6e75ac2"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"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]"
],
"text/html": [
"\n",
" \n",
"
\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",
"
\n",
"
\n",
"
\n"
],
"application/vnd.google.colaboratory.intrinsic+json": {
"type": "dataframe",
"variable_name": "delivery"
}
},
"metadata": {},
"execution_count": 11
}
],
"source": [
"delivery.head()"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "be21b391",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "be21b391",
"outputId": "760b10fd-5c79-4b6b-8317-8b193061dab8"
},
"outputs": [
{
"output_type": "stream",
"name": "stderr",
"text": [
":1: FutureWarning: The default value of numeric_only in DataFrameGroupBy.sum is deprecated. In a future version, numeric_only will default to False. Either specify numeric_only or select only columns which should be valid for the function.\n",
" total_score_df = delivery.groupby(['match_id','inning']).sum()['total_runs'].reset_index()\n"
]
}
],
"source": [
"total_score_df = delivery.groupby(['match_id','inning']).sum()['total_runs'].reset_index()"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "cbf8c553",
"metadata": {
"id": "cbf8c553"
},
"outputs": [],
"source": [
"total_score_df = total_score_df[total_score_df['inning'] == 1]"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "0e59930d",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 423
},
"id": "0e59930d",
"outputId": "31c0886d-c4a5-41d2-8a9c-7e7c81afffe4"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"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]"
],
"text/html": [
"\n",
" \n",
"
\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",
"
\n",
"
\n",
"
\n"
],
"application/vnd.google.colaboratory.intrinsic+json": {
"type": "dataframe",
"variable_name": "total_score_df",
"summary": "{\n \"name\": \"total_score_df\",\n \"rows\": 756,\n \"fields\": [\n {\n \"column\": \"match_id\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 3464,\n \"min\": 1,\n \"max\": 11415,\n \"num_unique_values\": 756,\n \"samples\": [\n 409,\n 98,\n 425\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"inning\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0,\n \"min\": 1,\n \"max\": 1,\n \"num_unique_values\": 1,\n \"samples\": [\n 1\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"total_runs\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 30,\n \"min\": 56,\n \"max\": 263,\n \"num_unique_values\": 150,\n \"samples\": [\n 175\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}"
}
},
"metadata": {},
"execution_count": 14
}
],
"source": [
"total_score_df"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "78c81c64",
"metadata": {
"id": "78c81c64"
},
"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": 16,
"id": "6dad8a91",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 842
},
"id": "6dad8a91",
"outputId": "a851ec52-1f86-4514-c15d-1dfce4b5c91d"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"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]"
],
"text/html": [
"\n",
" \n",
"
\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",
"
\n",
"
\n",
"
\n"
],
"application/vnd.google.colaboratory.intrinsic+json": {
"type": "dataframe",
"variable_name": "match_df",
"summary": "{\n \"name\": \"match_df\",\n \"rows\": 756,\n \"fields\": [\n {\n \"column\": \"id\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 3464,\n \"min\": 1,\n \"max\": 11415,\n \"num_unique_values\": 756,\n \"samples\": [\n 409,\n 98,\n 425\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Season\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 12,\n \"samples\": [\n \"IPL-2018\",\n \"IPL-2016\",\n \"IPL-2017\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"city\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 32,\n \"samples\": [\n \"Sharjah\",\n \"Centurion\",\n \"Kochi\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"date\",\n \"properties\": {\n \"dtype\": \"object\",\n \"num_unique_values\": 546,\n \"samples\": [\n \"26-05-2013\",\n \"20-05-2008\",\n \"10-04-2015\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"team1\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 15,\n \"samples\": [\n \"Rajasthan Royals\",\n \"Kochi Tuskers Kerala\",\n \"Sunrisers Hyderabad\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"team2\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 15,\n \"samples\": [\n \"Chennai Super Kings\",\n \"Pune Warriors\",\n \"Royal Challengers Bangalore\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"toss_winner\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 15,\n \"samples\": [\n \"Rajasthan Royals\",\n \"Kochi Tuskers Kerala\",\n \"Royal Challengers Bangalore\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"toss_decision\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"bat\",\n \"field\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"result\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 3,\n \"samples\": [\n \"normal\",\n \"tie\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"dl_applied\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0,\n \"min\": 0,\n \"max\": 1,\n \"num_unique_values\": 2,\n \"samples\": [\n 1,\n 0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"winner\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 15,\n \"samples\": [\n \"Rajasthan Royals\",\n \"Pune Warriors\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"win_by_runs\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 23,\n \"min\": 0,\n \"max\": 146,\n \"num_unique_values\": 89,\n \"samples\": [\n 53,\n 40\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"win_by_wickets\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 3,\n \"min\": 0,\n \"max\": 10,\n \"num_unique_values\": 11,\n \"samples\": [\n 4,\n 0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"player_of_match\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 226,\n \"samples\": [\n \"JJ Bumrah\",\n \"MA Agarwal\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"venue\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 41,\n \"samples\": [\n \"Barabati Stadium\",\n \"Dr DY Patil Sports Academy\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"umpire1\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 61,\n \"samples\": [\n \"AY Dandekar\",\n \"KN Ananthapadmanabhan\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"umpire2\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 65,\n \"samples\": [\n \"O Nandan\",\n \"Nanda Kishore\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"umpire3\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 25,\n \"samples\": [\n \"Chris Gaffaney\",\n \"Marais Erasmus\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"match_id\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 3464,\n \"min\": 1,\n \"max\": 11415,\n \"num_unique_values\": 756,\n \"samples\": [\n 409,\n 98\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"total_runs\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 30,\n \"min\": 56,\n \"max\": 263,\n \"num_unique_values\": 150,\n \"samples\": [\n 175,\n 159\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}"
}
},
"metadata": {},
"execution_count": 16
}
],
"source": [
"match_df"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "46d110b1",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "46d110b1",
"outputId": "a1a1e3a1-a75c-42f6-b686-23e51b1a656b"
},
"outputs": [
{
"output_type": "execute_result",
"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)"
]
},
"metadata": {},
"execution_count": 17
}
],
"source": [
"match_df['team1'].unique()"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "9f048dbf",
"metadata": {
"id": "9f048dbf"
},
"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": 19,
"id": "4ca212ee",
"metadata": {
"id": "4ca212ee"
},
"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": 20,
"id": "ec3d2992",
"metadata": {
"id": "ec3d2992"
},
"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": 21,
"id": "456148f0",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "456148f0",
"outputId": "46a14d66-2a98-4124-d3e4-9a8f1466f640"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(641, 20)"
]
},
"metadata": {},
"execution_count": 21
}
],
"source": [
"match_df.shape"
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "82af99c7",
"metadata": {
"id": "82af99c7"
},
"outputs": [],
"source": [
"# Check if the column exists before trying to filter on it.\n",
"if 'dl_applied' in match_df.columns:\n",
" match_df = match_df[match_df['dl_applied'] == 0]\n",
"else:\n",
" print(\"Column 'dl_applied' not found in the DataFrame.\")"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "bb7e68ce",
"metadata": {
"id": "bb7e68ce"
},
"outputs": [],
"source": [
"match_df = match_df[['match_id','city','winner','total_runs']]"
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "cfa8b802",
"metadata": {
"id": "cfa8b802"
},
"outputs": [],
"source": [
"delivery_df = match_df.merge(delivery,on='match_id')"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "bb9e3301",
"metadata": {
"id": "bb9e3301"
},
"outputs": [],
"source": [
"delivery_df = delivery_df[delivery_df['inning'] == 2]"
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "ed062c89",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 704
},
"id": "ed062c89",
"outputId": "dda09727-05b3-43bb-d849-a77f9c992733"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"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]"
],
"text/html": [
"\n",
" \n",
"
\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",
"
\n",
"
\n",
"
\n"
],
"application/vnd.google.colaboratory.intrinsic+json": {
"type": "dataframe",
"variable_name": "delivery_df"
}
},
"metadata": {},
"execution_count": 26
}
],
"source": [
"delivery_df"
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "3a2aed14",
"metadata": {
"id": "3a2aed14"
},
"outputs": [],
"source": [
"# Convert 'total_runs_y' to a numeric type (e.g., integer) before applying cumsum\n",
"delivery_df['total_runs_y'] = delivery_df['total_runs_y'].astype(int) # Or float if needed\n",
"\n",
"# Now calculate the cumulative sum\n",
"delivery_df['current_score'] = delivery_df.groupby('match_id')['total_runs_y'].cumsum()"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "a37ab264",
"metadata": {
"id": "a37ab264"
},
"outputs": [],
"source": [
"delivery_df['runs_left'] = delivery_df['total_runs_x'] - delivery_df['current_score']"
]
},
{
"cell_type": "code",
"execution_count": 29,
"id": "91142ecc",
"metadata": {
"id": "91142ecc"
},
"outputs": [],
"source": [
"delivery_df['balls_left'] = 126 - (delivery_df['over']*6 + delivery_df['ball'])"
]
},
{
"cell_type": "code",
"execution_count": 30,
"id": "e49251b7",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 704
},
"id": "e49251b7",
"outputId": "351c5980-6210-49fb-9e22-7741392e52a1"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"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]"
],
"text/html": [
"\n",
" \n",
"
\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",
"
\n",
"
\n",
"
\n"
],
"application/vnd.google.colaboratory.intrinsic+json": {
"type": "dataframe",
"variable_name": "delivery_df"
}
},
"metadata": {},
"execution_count": 30
}
],
"source": [
"delivery_df"
]
},
{
"cell_type": "code",
"execution_count": 31,
"id": "5ee97c37",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 704
},
"id": "5ee97c37",
"outputId": "5499b493-3e92-4453-beca-0ddd62f0e1f1"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
" match_id inning batting_team bowling_team \\\n",
"0 1 1 Sunrisers Hyderabad Royal Challengers Bangalore \n",
"1 1 1 Sunrisers Hyderabad Royal Challengers Bangalore \n",
"2 1 1 Sunrisers Hyderabad Royal Challengers Bangalore \n",
"3 1 1 Sunrisers Hyderabad Royal Challengers Bangalore \n",
"4 1 1 Sunrisers Hyderabad Royal Challengers Bangalore \n",
"... ... ... ... ... \n",
"179073 11415 2 Chennai Super Kings Mumbai Indians \n",
"179074 11415 2 Chennai Super Kings Mumbai Indians \n",
"179075 11415 2 Chennai Super Kings Mumbai Indians \n",
"179076 11415 2 Chennai Super Kings Mumbai Indians \n",
"179077 11415 2 Chennai Super Kings Mumbai Indians \n",
"\n",
" over ball batsman non_striker bowler is_super_over ... \\\n",
"0 1 1 DA Warner S Dhawan TS Mills 0 ... \n",
"1 1 2 DA Warner S Dhawan TS Mills 0 ... \n",
"2 1 3 DA Warner S Dhawan TS Mills 0 ... \n",
"3 1 4 DA Warner S Dhawan TS Mills 0 ... \n",
"4 1 5 DA Warner S Dhawan TS Mills 0 ... \n",
"... ... ... ... ... ... ... ... \n",
"179073 20 2 RA Jadeja SR Watson SL Malinga 0 ... \n",
"179074 20 3 SR Watson RA Jadeja SL Malinga 0 ... \n",
"179075 20 4 SR Watson RA Jadeja SL Malinga 0 ... \n",
"179076 20 5 SN Thakur RA Jadeja SL Malinga 0 ... \n",
"179077 20 6 SN Thakur RA Jadeja SL Malinga 0 ... \n",
"\n",
" bye_runs legbye_runs noball_runs penalty_runs batsman_runs \\\n",
"0 0 0 0 0 0 \n",
"1 0 0 0 0 0 \n",
"2 0 0 0 0 4 \n",
"3 0 0 0 0 0 \n",
"4 0 0 0 0 0 \n",
"... ... ... ... ... ... \n",
"179073 0 0 0 0 1 \n",
"179074 0 0 0 0 2 \n",
"179075 0 0 0 0 1 \n",
"179076 0 0 0 0 2 \n",
"179077 0 0 0 0 0 \n",
"\n",
" extra_runs total_runs player_dismissed dismissal_kind fielder \n",
"0 0 0 NaN NaN NaN \n",
"1 0 0 NaN NaN NaN \n",
"2 0 4 NaN NaN NaN \n",
"3 0 0 NaN NaN NaN \n",
"4 2 2 NaN NaN NaN \n",
"... ... ... ... ... ... \n",
"179073 0 1 NaN NaN NaN \n",
"179074 0 2 NaN NaN NaN \n",
"179075 0 1 SR Watson run out KH Pandya \n",
"179076 0 2 NaN NaN NaN \n",
"179077 0 0 SN Thakur lbw NaN \n",
"\n",
"[179078 rows x 21 columns]"
],
"text/html": [
"\n",
" \n",
"
\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",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" \n",
" \n",
" 179073 \n",
" 11415 \n",
" 2 \n",
" Chennai Super Kings \n",
" Mumbai Indians \n",
" 20 \n",
" 2 \n",
" RA Jadeja \n",
" SR Watson \n",
" SL Malinga \n",
" 0 \n",
" ... \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 1 \n",
" 0 \n",
" 1 \n",
" NaN \n",
" NaN \n",
" NaN \n",
" \n",
" \n",
" 179074 \n",
" 11415 \n",
" 2 \n",
" Chennai Super Kings \n",
" Mumbai Indians \n",
" 20 \n",
" 3 \n",
" SR Watson \n",
" RA Jadeja \n",
" SL Malinga \n",
" 0 \n",
" ... \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 2 \n",
" 0 \n",
" 2 \n",
" NaN \n",
" NaN \n",
" NaN \n",
" \n",
" \n",
" 179075 \n",
" 11415 \n",
" 2 \n",
" Chennai Super Kings \n",
" Mumbai Indians \n",
" 20 \n",
" 4 \n",
" SR Watson \n",
" RA Jadeja \n",
" SL Malinga \n",
" 0 \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",
" 179076 \n",
" 11415 \n",
" 2 \n",
" Chennai Super Kings \n",
" Mumbai Indians \n",
" 20 \n",
" 5 \n",
" SN Thakur \n",
" RA Jadeja \n",
" SL Malinga \n",
" 0 \n",
" ... \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 2 \n",
" 0 \n",
" 2 \n",
" NaN \n",
" NaN \n",
" NaN \n",
" \n",
" \n",
" 179077 \n",
" 11415 \n",
" 2 \n",
" Chennai Super Kings \n",
" Mumbai Indians \n",
" 20 \n",
" 6 \n",
" SN Thakur \n",
" RA Jadeja \n",
" SL Malinga \n",
" 0 \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",
"
179078 rows × 21 columns
\n",
"
\n",
"
\n",
"
\n"
],
"application/vnd.google.colaboratory.intrinsic+json": {
"type": "dataframe",
"variable_name": "delivery"
}
},
"metadata": {},
"execution_count": 31
}
],
"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') # Ensure conversion to integer\n",
"wickets = delivery_df.groupby('match_id')['player_dismissed'].cumsum() # Remove .values, cumsum already returns a Series\n",
"delivery"
]
},
{
"cell_type": "code",
"execution_count": 32,
"id": "030b9c43",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 429
},
"id": "030b9c43",
"outputId": "6bc62058-c398-43cb-aca4-b15850608469"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"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 ... penalty_runs batsman_runs extra_runs total_runs_y \\\n",
"125 CH Gayle ... 0 1 0 1 \n",
"126 Mandeep Singh ... 0 0 0 0 \n",
"127 Mandeep Singh ... 0 0 0 0 \n",
"128 Mandeep Singh ... 0 2 0 2 \n",
"129 Mandeep Singh ... 0 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 \n",
"125 119 \n",
"126 118 \n",
"127 117 \n",
"128 116 \n",
"129 115 \n",
"\n",
"[5 rows x 27 columns]"
],
"text/html": [
"\n",
" \n",
"
\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",
" 0 \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",
" 0 \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",
" 0 \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",
" 0 \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",
" 0 \n",
" NaN \n",
" NaN \n",
" 7 \n",
" 200 \n",
" 115 \n",
" \n",
" \n",
"
\n",
"
5 rows × 27 columns
\n",
"
\n",
"
\n",
"
\n"
],
"application/vnd.google.colaboratory.intrinsic+json": {
"type": "dataframe",
"variable_name": "delivery_df"
}
},
"metadata": {},
"execution_count": 32
}
],
"source": [
"delivery_df.head()"
]
},
{
"cell_type": "code",
"execution_count": 33,
"id": "f9fe60c7",
"metadata": {
"id": "f9fe60c7"
},
"outputs": [],
"source": [
"# crr = runs/overs\n",
"delivery_df['crr'] = (delivery_df['current_score']*6)/(120 - delivery_df['balls_left'])"
]
},
{
"cell_type": "code",
"execution_count": 34,
"id": "7d484dea",
"metadata": {
"id": "7d484dea"
},
"outputs": [],
"source": [
"delivery_df['rrr'] = (delivery_df['runs_left']*6)/delivery_df['balls_left']"
]
},
{
"cell_type": "code",
"execution_count": 35,
"id": "730c19d4",
"metadata": {
"id": "730c19d4"
},
"outputs": [],
"source": [
"def result(row):\n",
" return 1 if row['batting_team'] == row['winner'] else 0"
]
},
{
"cell_type": "code",
"execution_count": 36,
"id": "a49caf70",
"metadata": {
"id": "a49caf70"
},
"outputs": [],
"source": [
"delivery_df['result'] = delivery_df.apply(result,axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 37,
"id": "2999909b",
"metadata": {
"id": "2999909b"
},
"outputs": [],
"source": [
"# Add the 'wickets' Series to the delivery_df DataFrame\n",
"delivery_df['wickets'] = wickets\n",
"\n",
"# Now create the final DataFrame\n",
"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": 38,
"id": "fb242ffd",
"metadata": {
"id": "fb242ffd"
},
"outputs": [],
"source": [
"final_df = final_df.sample(final_df.shape[0])"
]
},
{
"cell_type": "code",
"execution_count": 39,
"id": "3dc0b91d",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 118
},
"id": "3dc0b91d",
"outputId": "908b84ce-4ebe-414a-fef9-f4bf10f007df"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
" batting_team bowling_team city runs_left \\\n",
"135691 Kolkata Knight Riders Sunrisers Hyderabad Kolkata 51 \n",
"\n",
" balls_left wickets total_runs_x crr rrr result \n",
"135691 17 4 189 8.038835 18.0 1 "
],
"text/html": [
"\n",
" \n",
"
\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",
" 135691 \n",
" Kolkata Knight Riders \n",
" Sunrisers Hyderabad \n",
" Kolkata \n",
" 51 \n",
" 17 \n",
" 4 \n",
" 189 \n",
" 8.038835 \n",
" 18.0 \n",
" 1 \n",
" \n",
" \n",
"
\n",
"
\n",
"
\n",
"
\n"
],
"application/vnd.google.colaboratory.intrinsic+json": {
"type": "dataframe",
"summary": "{\n \"name\": \"final_df\",\n \"rows\": 1,\n \"fields\": [\n {\n \"column\": \"batting_team\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 1,\n \"samples\": [\n \"Kolkata Knight Riders\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"bowling_team\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 1,\n \"samples\": [\n \"Sunrisers Hyderabad\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"city\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 1,\n \"samples\": [\n \"Kolkata\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"runs_left\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": null,\n \"min\": 51,\n \"max\": 51,\n \"num_unique_values\": 1,\n \"samples\": [\n 51\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"balls_left\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": null,\n \"min\": 17,\n \"max\": 17,\n \"num_unique_values\": 1,\n \"samples\": [\n 17\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"wickets\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": null,\n \"min\": 4,\n \"max\": 4,\n \"num_unique_values\": 1,\n \"samples\": [\n 4\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"total_runs_x\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": null,\n \"min\": 189,\n \"max\": 189,\n \"num_unique_values\": 1,\n \"samples\": [\n 189\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"crr\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": null,\n \"min\": 8.03883495145631,\n \"max\": 8.03883495145631,\n \"num_unique_values\": 1,\n \"samples\": [\n 8.03883495145631\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"rrr\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": null,\n \"min\": 18.0,\n \"max\": 18.0,\n \"num_unique_values\": 1,\n \"samples\": [\n 18.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"result\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": null,\n \"min\": 1,\n \"max\": 1,\n \"num_unique_values\": 1,\n \"samples\": [\n 1\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}"
}
},
"metadata": {},
"execution_count": 39
}
],
"source": [
"final_df.sample()"
]
},
{
"cell_type": "code",
"execution_count": 40,
"id": "dfec0834",
"metadata": {
"id": "dfec0834"
},
"outputs": [],
"source": [
"final_df.dropna(inplace=True)"
]
},
{
"cell_type": "code",
"execution_count": 41,
"id": "bafcba9c",
"metadata": {
"id": "bafcba9c"
},
"outputs": [],
"source": [
"final_df = final_df[final_df['balls_left'] != 0]"
]
},
{
"cell_type": "code",
"execution_count": 42,
"id": "54edf23b",
"metadata": {
"id": "54edf23b"
},
"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": 43,
"id": "3aa219a5",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 634
},
"id": "3aa219a5",
"outputId": "699970f0-9c51-465c-c3fe-a3b57cbed3af"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
" batting_team bowling_team city \\\n",
"64488 Mumbai Indians Delhi Daredevils Delhi \n",
"85786 Mumbai Indians Chennai Super Kings Delhi \n",
"82269 Sunrisers Hyderabad Chennai Super Kings Hyderabad \n",
"65470 Mumbai Indians Deccan Chargers Mumbai \n",
"135896 Mumbai Indians Delhi Capitals Mumbai \n",
"... ... ... ... \n",
"41310 Deccan Chargers Mumbai Indians Mumbai \n",
"43512 Deccan Chargers Chennai Super Kings Nagpur \n",
"126242 Delhi Daredevils Kings XI Punjab Delhi \n",
"73409 Sunrisers Hyderabad Royal Challengers Bangalore Hyderabad \n",
"101346 Kings XI Punjab Rajasthan Royals Pune \n",
"\n",
" runs_left balls_left wickets total_runs_x crr rrr \n",
"64488 92 45 3 207 9.200000 12.266667 \n",
"85786 103 64 2 192 9.535714 9.656250 \n",
"82269 199 101 1 223 7.578947 11.821782 \n",
"65470 37 48 3 100 5.250000 4.625000 \n",
"135896 121 56 3 219 9.187500 12.964286 \n",
"... ... ... ... ... ... ... \n",
"41310 96 48 5 178 6.833333 12.000000 \n",
"43512 48 36 3 138 6.428571 8.000000 \n",
"126242 111 89 2 157 8.903226 7.483146 \n",
"73409 107 94 2 130 5.307692 6.829787 \n",
"101346 158 117 1 162 8.000000 8.102564 \n",
"\n",
"[57073 rows x 9 columns]"
],
"text/html": [
"\n",
" \n",
"
\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",
" 64488 \n",
" Mumbai Indians \n",
" Delhi Daredevils \n",
" Delhi \n",
" 92 \n",
" 45 \n",
" 3 \n",
" 207 \n",
" 9.200000 \n",
" 12.266667 \n",
" \n",
" \n",
" 85786 \n",
" Mumbai Indians \n",
" Chennai Super Kings \n",
" Delhi \n",
" 103 \n",
" 64 \n",
" 2 \n",
" 192 \n",
" 9.535714 \n",
" 9.656250 \n",
" \n",
" \n",
" 82269 \n",
" Sunrisers Hyderabad \n",
" Chennai Super Kings \n",
" Hyderabad \n",
" 199 \n",
" 101 \n",
" 1 \n",
" 223 \n",
" 7.578947 \n",
" 11.821782 \n",
" \n",
" \n",
" 65470 \n",
" Mumbai Indians \n",
" Deccan Chargers \n",
" Mumbai \n",
" 37 \n",
" 48 \n",
" 3 \n",
" 100 \n",
" 5.250000 \n",
" 4.625000 \n",
" \n",
" \n",
" 135896 \n",
" Mumbai Indians \n",
" Delhi Capitals \n",
" Mumbai \n",
" 121 \n",
" 56 \n",
" 3 \n",
" 219 \n",
" 9.187500 \n",
" 12.964286 \n",
" \n",
" \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" \n",
" \n",
" 41310 \n",
" Deccan Chargers \n",
" Mumbai Indians \n",
" Mumbai \n",
" 96 \n",
" 48 \n",
" 5 \n",
" 178 \n",
" 6.833333 \n",
" 12.000000 \n",
" \n",
" \n",
" 43512 \n",
" Deccan Chargers \n",
" Chennai Super Kings \n",
" Nagpur \n",
" 48 \n",
" 36 \n",
" 3 \n",
" 138 \n",
" 6.428571 \n",
" 8.000000 \n",
" \n",
" \n",
" 126242 \n",
" Delhi Daredevils \n",
" Kings XI Punjab \n",
" Delhi \n",
" 111 \n",
" 89 \n",
" 2 \n",
" 157 \n",
" 8.903226 \n",
" 7.483146 \n",
" \n",
" \n",
" 73409 \n",
" Sunrisers Hyderabad \n",
" Royal Challengers Bangalore \n",
" Hyderabad \n",
" 107 \n",
" 94 \n",
" 2 \n",
" 130 \n",
" 5.307692 \n",
" 6.829787 \n",
" \n",
" \n",
" 101346 \n",
" Kings XI Punjab \n",
" Rajasthan Royals \n",
" Pune \n",
" 158 \n",
" 117 \n",
" 1 \n",
" 162 \n",
" 8.000000 \n",
" 8.102564 \n",
" \n",
" \n",
"
\n",
"
57073 rows × 9 columns
\n",
"
\n",
"
\n",
"
\n"
],
"application/vnd.google.colaboratory.intrinsic+json": {
"type": "dataframe",
"variable_name": "X_train",
"summary": "{\n \"name\": \"X_train\",\n \"rows\": 57073,\n \"fields\": [\n {\n \"column\": \"batting_team\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 10,\n \"samples\": [\n \"Kolkata Knight Riders\",\n \"Sunrisers Hyderabad\",\n \"Rajasthan Royals\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"bowling_team\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 10,\n \"samples\": [\n \"Royal Challengers Bangalore\",\n \"Chennai Super Kings\",\n \"Mumbai Indians\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"city\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 29,\n \"samples\": [\n \"Indore\",\n \"Ahmedabad\",\n \"Mohali\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"runs_left\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 50,\n \"min\": -16,\n \"max\": 248,\n \"num_unique_values\": 254,\n \"samples\": [\n 206,\n 117,\n 153\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"balls_left\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 33,\n \"min\": -2,\n \"max\": 119,\n \"num_unique_values\": 121,\n \"samples\": [\n 95,\n 16,\n 56\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"wickets\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 2,\n \"min\": 0,\n \"max\": 10,\n \"num_unique_values\": 11,\n \"samples\": [\n 0,\n 3,\n 9\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"total_runs_x\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 29,\n \"min\": 65,\n \"max\": 250,\n \"num_unique_values\": 142,\n \"samples\": [\n 232,\n 170,\n 95\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"crr\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 2.2750805067157467,\n \"min\": 0.0,\n \"max\": 42.0,\n \"num_unique_values\": 5313,\n \"samples\": [\n 8.225806451612904,\n 10.88659793814433,\n 4.645161290322581\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"rrr\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 14.14860217304409,\n \"min\": -510.0,\n \"max\": 678.0,\n \"num_unique_values\": 8548,\n \"samples\": [\n 11.493975903614459,\n 29.47826086956522,\n 11.866666666666667\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}"
}
},
"metadata": {},
"execution_count": 43
}
],
"source": [
"X_train"
]
},
{
"cell_type": "code",
"execution_count": 44,
"id": "45c6fffa",
"metadata": {
"id": "45c6fffa"
},
"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": 45,
"id": "9be108ac",
"metadata": {
"id": "9be108ac"
},
"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": 46,
"id": "92dfbfcb",
"metadata": {
"id": "92dfbfcb"
},
"outputs": [],
"source": [
"pipe = Pipeline(steps=[\n",
" ('step1',trf),\n",
" ('step2',LogisticRegression(solver='liblinear'))\n",
"])"
]
},
{
"cell_type": "code",
"execution_count": 47,
"id": "12679868",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 245
},
"id": "12679868",
"outputId": "826f4fa5-fa60-4e0a-e2cb-f3079e381635"
},
"outputs": [
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.10/dist-packages/sklearn/preprocessing/_encoders.py:868: FutureWarning: `sparse` was renamed to `sparse_output` in version 1.2 and will be removed in 1.4. `sparse_output` is ignored unless you leave `sparse` to its default value.\n",
" warnings.warn(\n"
]
},
{
"output_type": "execute_result",
"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'))])"
],
"text/html": [
"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'))]) In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org. Pipeline 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'))]) "
]
},
"metadata": {},
"execution_count": 47
}
],
"source": [
"pipe.fit(X_train,y_train)"
]
},
{
"cell_type": "code",
"execution_count": 48,
"id": "cf3fde3b",
"metadata": {
"id": "cf3fde3b"
},
"outputs": [],
"source": [
"y_pred = pipe.predict(X_test)"
]
},
{
"cell_type": "code",
"execution_count": 49,
"id": "b43ea121",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "b43ea121",
"outputId": "e60f3bba-4636-4914-b251-00f35e1a41e8"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"0.7987245076739785"
]
},
"metadata": {},
"execution_count": 49
}
],
"source": [
"from sklearn.metrics import accuracy_score\n",
"accuracy_score(y_test,y_pred)"
]
},
{
"cell_type": "code",
"execution_count": 50,
"id": "01205f46",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "01205f46",
"outputId": "ed532931-5c10-407b-d56c-4d77829869eb"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([0.11028987, 0.88971013])"
]
},
"metadata": {},
"execution_count": 50
}
],
"source": [
"pipe.predict_proba(X_test)[10]"
]
},
{
"cell_type": "code",
"execution_count": 51,
"id": "cf6fbd69",
"metadata": {
"id": "cf6fbd69"
},
"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": 52,
"id": "41c62b45",
"metadata": {
"id": "41c62b45"
},
"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": 53,
"id": "d3238e65",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 662
},
"id": "d3238e65",
"outputId": "3556213a-5988-4b94-e3e7-8a1fb26eec0b"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Target- 178\n"
]
},
{
"output_type": "execute_result",
"data": {
"text/plain": [
" end_of_over runs_after_over wickets_in_over lose win\n",
"10459 1 4 10 57.4 42.6\n",
"10467 2 8 0 52.3 47.7\n",
"10473 3 1 0 59.2 40.8\n",
"10479 4 7 -1 70.7 29.3\n",
"10485 5 12 0 60.8 39.2\n",
"10491 6 13 0 48.5 51.5\n",
"10497 7 9 0 42.5 57.5\n",
"10505 8 15 0 28.4 71.6\n",
"10511 9 7 0 26.2 73.8\n",
"10518 10 17 0 14.3 85.7\n",
"10524 11 9 -1 19.9 80.1\n",
"10530 12 9 0 16.4 83.6\n",
"10536 13 8 0 14.1 85.9\n",
"10542 14 8 0 12.1 87.9\n",
"10548 15 5 -1 21.2 78.8\n",
"10555 16 8 -1 30.0 70.0\n",
"10561 17 8 -2 56.4 43.6\n",
"10567 18 6 -1 71.3 28.7\n",
"10573 19 8 -2 89.6 10.4"
],
"text/html": [
"\n",
" \n",
"
\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",
" 10 \n",
" 57.4 \n",
" 42.6 \n",
" \n",
" \n",
" 10467 \n",
" 2 \n",
" 8 \n",
" 0 \n",
" 52.3 \n",
" 47.7 \n",
" \n",
" \n",
" 10473 \n",
" 3 \n",
" 1 \n",
" 0 \n",
" 59.2 \n",
" 40.8 \n",
" \n",
" \n",
" 10479 \n",
" 4 \n",
" 7 \n",
" -1 \n",
" 70.7 \n",
" 29.3 \n",
" \n",
" \n",
" 10485 \n",
" 5 \n",
" 12 \n",
" 0 \n",
" 60.8 \n",
" 39.2 \n",
" \n",
" \n",
" 10491 \n",
" 6 \n",
" 13 \n",
" 0 \n",
" 48.5 \n",
" 51.5 \n",
" \n",
" \n",
" 10497 \n",
" 7 \n",
" 9 \n",
" 0 \n",
" 42.5 \n",
" 57.5 \n",
" \n",
" \n",
" 10505 \n",
" 8 \n",
" 15 \n",
" 0 \n",
" 28.4 \n",
" 71.6 \n",
" \n",
" \n",
" 10511 \n",
" 9 \n",
" 7 \n",
" 0 \n",
" 26.2 \n",
" 73.8 \n",
" \n",
" \n",
" 10518 \n",
" 10 \n",
" 17 \n",
" 0 \n",
" 14.3 \n",
" 85.7 \n",
" \n",
" \n",
" 10524 \n",
" 11 \n",
" 9 \n",
" -1 \n",
" 19.9 \n",
" 80.1 \n",
" \n",
" \n",
" 10530 \n",
" 12 \n",
" 9 \n",
" 0 \n",
" 16.4 \n",
" 83.6 \n",
" \n",
" \n",
" 10536 \n",
" 13 \n",
" 8 \n",
" 0 \n",
" 14.1 \n",
" 85.9 \n",
" \n",
" \n",
" 10542 \n",
" 14 \n",
" 8 \n",
" 0 \n",
" 12.1 \n",
" 87.9 \n",
" \n",
" \n",
" 10548 \n",
" 15 \n",
" 5 \n",
" -1 \n",
" 21.2 \n",
" 78.8 \n",
" \n",
" \n",
" 10555 \n",
" 16 \n",
" 8 \n",
" -1 \n",
" 30.0 \n",
" 70.0 \n",
" \n",
" \n",
" 10561 \n",
" 17 \n",
" 8 \n",
" -2 \n",
" 56.4 \n",
" 43.6 \n",
" \n",
" \n",
" 10567 \n",
" 18 \n",
" 6 \n",
" -1 \n",
" 71.3 \n",
" 28.7 \n",
" \n",
" \n",
" 10573 \n",
" 19 \n",
" 8 \n",
" -2 \n",
" 89.6 \n",
" 10.4 \n",
" \n",
" \n",
"
\n",
"
\n",
"
\n",
"
\n"
],
"application/vnd.google.colaboratory.intrinsic+json": {
"type": "dataframe",
"variable_name": "temp_df",
"summary": "{\n \"name\": \"temp_df\",\n \"rows\": 19,\n \"fields\": [\n {\n \"column\": \"end_of_over\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 5,\n \"min\": 1,\n \"max\": 19,\n \"num_unique_values\": 19,\n \"samples\": [\n 1,\n 6,\n 12\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"runs_after_over\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 3,\n \"min\": 1,\n \"max\": 17,\n \"num_unique_values\": 11,\n \"samples\": [\n 13,\n 4,\n 5\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"wickets_in_over\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 2,\n \"min\": -2,\n \"max\": 10,\n \"num_unique_values\": 4,\n \"samples\": [\n 0,\n -2,\n 10\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"lose\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 23.312713947092202,\n \"min\": 12.1,\n \"max\": 89.6,\n \"num_unique_values\": 19,\n \"samples\": [\n 57.4,\n 48.5,\n 16.4\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"win\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 23.312713947092202,\n \"min\": 10.4,\n \"max\": 87.9,\n \"num_unique_values\": 19,\n \"samples\": [\n 42.6,\n 51.5,\n 83.6\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}"
}
},
"metadata": {},
"execution_count": 53
}
],
"source": [
"temp_df,target = match_progression(delivery_df,74,pipe)\n",
"temp_df"
]
},
{
"cell_type": "code",
"execution_count": 54,
"id": "256b9c2d",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 351
},
"id": "256b9c2d",
"outputId": "3831dfb2-e24c-4f7c-81bc-25406b42a8cc"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Target-178')"
]
},
"metadata": {},
"execution_count": 54
},
{
"output_type": "display_data",
"data": {
"text/plain": [
""
],
"image/png": "iVBORw0KGgoAAAANSUhEUgAABaIAAAKqCAYAAADIaSkdAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3hU5dbG4WfSSEJI6L33Lr33DgrSFFAEFQEFRRBRUVSaDRFQUVRQRCmKBQGR3nvv0nvvKaQnM98f+8gnzp6QQGan/e7r4vLwrndmHj1KZtbs/S6bw+FwCAAAAAAAAAAAN/FI6QAAAAAAAAAAgPSNRjQAAAAAAAAAwK1oRAMAAAAAAAAA3IpGNAAAAAAAAADArWhEAwAAAAAAAADcikY0AAAAAAAAAMCtaEQDAAAAAAAAANyKRjQAAAAAAAAAwK1oRAMAAAAAAAAA3IpGNAAAAAAAAADArWhEAwAAIE2y2WyJ+rVmzZqUjnqXTZs2aeTIkQoODk70Y37++Wf17NlTpUqVks1mU5MmTUz3Pf300wn+s7hw4cKdvXa7XV999ZWqVKmigIAA5cmTR23bttWmTZse8O8QAAAAcOaV0gEAAACA+/Hjjz/e9fsffvhBy5cvd1ovV66clbHuadOmTRo1apSefvppZc2aNVGPmTJlinbu3KmaNWvqxo0bLvf1799fLVq0uGvN4XDo+eefV9GiRVWgQIE768OGDdOECRPUs2dPDRgwQMHBwfr666/VuHFjbdy4UbVq1bqvvz8AAADADI1oAAAApEk9e/a86/dbtmzR8uXLndbvh8PhUFRUlPz8/B74uZLDjz/+qAIFCsjDw0MVK1Z0ua9u3bqqW7fuXWsbNmxQRESEnnzyyTtrcXFxmjJlirp27XpX4/6xxx5T8eLFNWvWLBrRAAAASFYczQEAAIB0a/r06WrWrJly586tTJkyqXz58poyZYrTvqJFi+qRRx7R0qVLVaNGDfn5+enrr7+WJJ05c0YdOnRQ5syZlTt3bg0ZMkRLly41PfZj69atatOmjYKCguTv73/n6uJ/jBw5UsOGDZMkFStW7M6RGadPn07w76NQoULy8Li/t+6zZ8+WzWbTE088cWctNjZWkZGRypMnz117c+fOLQ8Pj1TTgAcAAED6wRXRAAAASLemTJmiChUqqEOHDvLy8tLChQs1YMAA2e12DRw48K69R44cUY8ePdS/f3/17dtXZcqUUXh4uJo1a6ZLly7p5ZdfVt68eTV79mytXr3a6bVWrVqltm3bqnr16nr33Xfl4eFxpxG+fv161apVS507d9bRo0c1Z84cTZw4UTlz5pQk5cqVyy1//7GxsZo7d67q1aunokWL3ln38/NT7dq19f3336tu3bpq2LChgoODNWbMGGXLlk39+vVzSx4AAABkXDSiAQAAkG6tXbv2rqt7X3zxRbVp00YTJkxwakQfP35cS5YsUevWre+sTZgwQSdPntQff/yhRx99VJJxDnPVqlXveuw/5zA3bdpUixcvls1mu7O3QoUKGjFihJYtW6bKlSurWrVqmjNnjjp27HhXc9gdli5dqhs3btx1LMc/Zs6cqW7dut11lEnx4sW1ceNGFS9e3K25AAAAkPFwNAcAAADSrX83oUNCQnT9+nU1btxYJ0+eVEhIyF17ixUrdlcTWpKWLFmiAgUKqEOHDnfWfH191bdv37v27dmzR8eOHdMTTzyhGzdu6Pr167p+/brCw8PVvHlzrVu3Tna73Q1/hwmbPXu2vL299fjjjzvVsmTJogoVKmjgwIH6/fff9eWXXyouLk4dO3bU9evXLc8KAACA9I0rogEAAJBubdy4Ue+++642b96siIiIu2ohISEKCgq68/tixYo5Pf7MmTMqUaLEnSuc/1GyZMm7fn/s2DFJUu/evV1mCQkJUbZs2VzWb968qZiYmDu/9/PzuytfUt2+fVvz589X69atlSNHjrtqcXFxatGihZo0aaLPP//8znqLFi1UoUIFffzxx/roo4/u+7UBAACA/6IRDQAAgHTpxIkTat68ucqWLasJEyaoUKFC8vHx0V9//aWJEyc6XaH8IAP6/nmujz/+WFWqVDHdExAQkOBzdO7cWWvXrr3z+969e+v777+/70x//PGHIiIiTI/lWLdunQ4cOKAJEybctV6qVCmVK1furgGLAAAAQHKgEQ0AAIB0aeHChYqOjtaCBQtUuHDhO+tmgwZdKVKkiP7++285HI67roo+fvz4XftKlCghSQoMDFSLFi0SfM7/Xl39j08++US3bt268/v8+fMnOqeZWbNmKSAg4K5jRf5x5coVSVJ8fLxTLTY2VnFxcQ/02gAAAMB/cUY0AAAA0iVPT09JxiDBf4SEhGj69OmJfo7WrVvrwoULWrBgwZ21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\n"
},
"metadata": {}
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"plt.figure(figsize=(18,8))\n",
"plt.plot(temp_df['end_of_over'],temp_df['wickets_in_over'],color='yellow',linewidth=3)\n",
"plt.plot(temp_df['end_of_over'],temp_df['win'],color='#00a65a',linewidth=4)\n",
"plt.plot(temp_df['end_of_over'],temp_df['lose'],color='red',linewidth=4)\n",
"plt.bar(temp_df['end_of_over'],temp_df['runs_after_over'])\n",
"plt.title('Target-' + str(target))"
]
},
{
"cell_type": "code",
"execution_count": 55,
"id": "5731378e",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "5731378e",
"outputId": "60891b1a-b758-4485-b7f9-82e014c18491"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"['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']"
]
},
"metadata": {},
"execution_count": 55
}
],
"source": [
"teams"
]
},
{
"cell_type": "code",
"execution_count": 56,
"id": "fb7e305d",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "fb7e305d",
"outputId": "b9540df9-3c1d-4746-83d3-60a0d3403299"
},
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array(['Hyderabad', 'Bangalore', 'Mumbai', 'Indore', 'Kolkata', 'Delhi',\n",
" 'Chandigarh', 'Jaipur', 'Chennai', 'Cape Town', 'Port Elizabeth',\n",
" 'Durban', 'Centurion', 'East London', 'Johannesburg', 'Kimberley',\n",
" 'Bloemfontein', 'Ahmedabad', 'Cuttack', 'Nagpur', 'Dharamsala',\n",
" 'Visakhapatnam', 'Pune', 'Raipur', 'Ranchi', 'Abu Dhabi',\n",
" 'Sharjah', nan, 'Mohali', 'Bengaluru'], dtype=object)"
]
},
"metadata": {},
"execution_count": 56
}
],
"source": [
"delivery_df['city'].unique()"
]
},
{
"cell_type": "code",
"source": [
"!pip install category_encoders\n",
"import category_encoders as ce\n",
"\n",
"def transform_new_data(new_data):\n",
" # Assuming you want to use a specific encoder like OneHotEncoder\n",
" encoder = ce.OneHotEncoder(cols=['city']) # Replace 'city' with the actual column name\n",
" encoder.fit(new_data) # Fit the encoder to your data\n",
" transformed_data = encoder.transform(new_data)\n",
" return transformed_data\n",
"\n",
"# Example of transforming new data\n",
"new_data = pd.DataFrame({'city': ['Abu Dhabi', 'New York']})\n",
"transformed_new_data = transform_new_data(new_data)\n"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "7nDHbpX3qugB",
"outputId": "eecf14d8-d853-4cf8-cceb-3cfed53a5b15"
},
"id": "7nDHbpX3qugB",
"execution_count": 57,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Requirement already satisfied: category_encoders in /usr/local/lib/python3.10/dist-packages (2.6.3)\n",
"Requirement already satisfied: numpy>=1.14.0 in /usr/local/lib/python3.10/dist-packages (from category_encoders) (1.22.0)\n",
"Requirement already satisfied: scikit-learn>=0.20.0 in /usr/local/lib/python3.10/dist-packages (from category_encoders) (1.2.2)\n",
"Requirement already satisfied: scipy>=1.0.0 in /usr/local/lib/python3.10/dist-packages (from category_encoders) (1.11.4)\n",
"Requirement already satisfied: statsmodels>=0.9.0 in /usr/local/lib/python3.10/dist-packages (from category_encoders) (0.14.2)\n",
"Requirement already satisfied: pandas>=1.0.5 in /usr/local/lib/python3.10/dist-packages (from category_encoders) (1.5.3)\n",
"Requirement already satisfied: patsy>=0.5.1 in /usr/local/lib/python3.10/dist-packages (from category_encoders) (0.5.6)\n",
"Requirement already satisfied: python-dateutil>=2.8.1 in /usr/local/lib/python3.10/dist-packages (from pandas>=1.0.5->category_encoders) (2.8.2)\n",
"Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/dist-packages (from pandas>=1.0.5->category_encoders) (2023.4)\n",
"Requirement already satisfied: six in /usr/local/lib/python3.10/dist-packages (from patsy>=0.5.1->category_encoders) (1.16.0)\n",
"Requirement already satisfied: joblib>=1.1.1 in /usr/local/lib/python3.10/dist-packages (from scikit-learn>=0.20.0->category_encoders) (1.4.2)\n",
"Requirement already satisfied: threadpoolctl>=2.0.0 in /usr/local/lib/python3.10/dist-packages (from scikit-learn>=0.20.0->category_encoders) (3.5.0)\n",
"Collecting numpy>=1.14.0 (from category_encoders)\n",
" Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.2 MB)\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m18.2/18.2 MB\u001b[0m \u001b[31m33.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[?25hRequirement already satisfied: packaging>=21.3 in /usr/local/lib/python3.10/dist-packages (from statsmodels>=0.9.0->category_encoders) (24.1)\n",
"Installing collected packages: numpy\n",
" Attempting uninstall: numpy\n",
" Found existing installation: numpy 1.22.0\n",
" Uninstalling numpy-1.22.0:\n",
" Successfully uninstalled numpy-1.22.0\n",
"\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n",
"cudf-cu12 24.4.1 requires pandas<2.2.2dev0,>=2.0, but you have pandas 1.5.3 which is incompatible.\u001b[0m\u001b[31m\n",
"\u001b[0mSuccessfully installed numpy-1.26.4\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"handle_unknown='ignore'"
],
"metadata": {
"id": "on3bGFY1re6z"
},
"id": "on3bGFY1re6z",
"execution_count": 58,
"outputs": []
},
{
"cell_type": "code",
"source": [
"import pandas as pd\n",
"from sklearn.preprocessing import OneHotEncoder\n",
"\n",
"# Sample data\n",
"data = pd.DataFrame({'City': ['New York', 'Los Angeles', 'San Francisco', 'Chicago', 'Houston']})\n",
"\n",
"# Define all possible categories\n",
"all_possible_categories = ['New York', 'Los Angeles', 'San Francisco', 'Chicago', 'Houston', 'Abu Dhabi']\n",
"\n",
"# Initialize the encoder\n",
"encoder = OneHotEncoder(categories=[all_possible_categories], handle_unknown='ignore')\n",
"\n",
"# Fit the encoder\n",
"encoder.fit(data[['City']])\n",
"\n",
"# Function to transform new data\n",
"def transform_new_data(new_data):\n",
" transformed_data = encoder.transform(new_data[['City']])\n",
" return transformed_data\n",
"\n",
"# Example of transforming new data\n",
"new_data = pd.DataFrame({'City': ['Abu Dhabi', 'New York']})\n",
"transformed_new_data = transform_new_data(new_data)\n",
"print(transformed_new_data.toarray())\n"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "yi1uqXWUuNva",
"outputId": "3479abdd-83a6-428a-b8ec-ec0a134932a8"
},
"id": "yi1uqXWUuNva",
"execution_count": 59,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"[[0. 0. 0. 0. 0. 1.]\n",
" [1. 0. 0. 0. 0. 0.]]\n"
]
}
]
},
{
"cell_type": "code",
"execution_count": 61,
"id": "99e08b54",
"metadata": {
"id": "99e08b54"
},
"outputs": [],
"source": [
"import pickle\n",
"pickle.dump(pipe,open('pipe.pkl','wb'))"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.8"
},
"colab": {
"provenance": []
}
},
"nbformat": 4,
"nbformat_minor": 5
}