{ "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", " \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", " \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", " \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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
idSeasoncitydateteam1team2toss_winnertoss_decisionresultdl_appliedwinnerwin_by_runswin_by_wicketsplayer_of_matchvenueumpire1umpire2umpire3
01IPL-2017Hyderabad05-04-2017Sunrisers HyderabadRoyal Challengers BangaloreRoyal Challengers Bangalorefieldnormal0Sunrisers Hyderabad350Yuvraj SinghRajiv Gandhi International Stadium, UppalAY DandekarNJ LlongNaN
12IPL-2017Pune06-04-2017Mumbai IndiansRising Pune SupergiantRising Pune Supergiantfieldnormal0Rising Pune Supergiant07SPD SmithMaharashtra Cricket Association StadiumA Nand KishoreS RaviNaN
23IPL-2017Rajkot07-04-2017Gujarat LionsKolkata Knight RidersKolkata Knight Ridersfieldnormal0Kolkata Knight Riders010CA LynnSaurashtra Cricket Association StadiumNitin MenonCK NandanNaN
34IPL-2017Indore08-04-2017Rising Pune SupergiantKings XI PunjabKings XI Punjabfieldnormal0Kings XI Punjab06GJ MaxwellHolkar Cricket StadiumAK ChaudharyC ShamshuddinNaN
45IPL-2017Bangalore08-04-2017Royal Challengers BangaloreDelhi DaredevilsRoyal Challengers Bangalorebatnormal0Royal Challengers Bangalore150KM JadhavM Chinnaswamy StadiumNaNNaNNaN
\n", "
\n", "
\n", "\n", "
\n", " \n", "\n", " \n", "\n", " \n", "
\n", "\n", "\n", "
\n", " \n", "\n", "\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", " \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", " \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", " \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", " \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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
match_idinningbatting_teambowling_teamoverballbatsmannon_strikerbowleris_super_over...bye_runslegbye_runsnoball_runspenalty_runsbatsman_runsextra_runstotal_runsplayer_dismisseddismissal_kindfielder
011Sunrisers HyderabadRoyal Challengers Bangalore11DA WarnerS DhawanTS Mills0...0000000NaNNaNNaN
111Sunrisers HyderabadRoyal Challengers Bangalore12DA WarnerS DhawanTS Mills0...0000000NaNNaNNaN
211Sunrisers HyderabadRoyal Challengers Bangalore13DA WarnerS DhawanTS Mills0...0000404NaNNaNNaN
311Sunrisers HyderabadRoyal Challengers Bangalore14DA WarnerS DhawanTS Mills0...0000000NaNNaNNaN
411Sunrisers HyderabadRoyal Challengers Bangalore15DA WarnerS DhawanTS Mills0...0000022NaNNaNNaN
\n", "

5 rows × 21 columns

\n", "
\n", "
\n", "\n", "
\n", " \n", "\n", " \n", "\n", " \n", "
\n", "\n", "\n", "
\n", " \n", "\n", "\n", "\n", " \n", "
\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", " \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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
match_idinningtotal_runs
011207
221184
431183
641163
851157
............
1518113471143
1520114121136
1522114131171
1524114141155
1526114151152
\n", "

756 rows × 3 columns

\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", "
\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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
idSeasoncitydateteam1team2toss_winnertoss_decisionresultdl_appliedwinnerwin_by_runswin_by_wicketsplayer_of_matchvenueumpire1umpire2umpire3match_idtotal_runs
01IPL-2017Hyderabad05-04-2017Sunrisers HyderabadRoyal Challengers BangaloreRoyal Challengers Bangalorefieldnormal0Sunrisers Hyderabad350Yuvraj SinghRajiv Gandhi International Stadium, UppalAY DandekarNJ LlongNaN1207
12IPL-2017Pune06-04-2017Mumbai IndiansRising Pune SupergiantRising Pune Supergiantfieldnormal0Rising Pune Supergiant07SPD SmithMaharashtra Cricket Association StadiumA Nand KishoreS RaviNaN2184
23IPL-2017Rajkot07-04-2017Gujarat LionsKolkata Knight RidersKolkata Knight Ridersfieldnormal0Kolkata Knight Riders010CA LynnSaurashtra Cricket Association StadiumNitin MenonCK NandanNaN3183
34IPL-2017Indore08-04-2017Rising Pune SupergiantKings XI PunjabKings XI Punjabfieldnormal0Kings XI Punjab06GJ MaxwellHolkar Cricket StadiumAK ChaudharyC ShamshuddinNaN4163
45IPL-2017Bangalore08-04-2017Royal Challengers BangaloreDelhi DaredevilsRoyal Challengers Bangalorebatnormal0Royal Challengers Bangalore150KM JadhavM Chinnaswamy StadiumNaNNaNNaN5157
...............................................................
75111347IPL-2019Mumbai05-05-2019Kolkata Knight RidersMumbai IndiansMumbai Indiansfieldnormal0Mumbai Indians09HH PandyaWankhede StadiumNanda KishoreO NandanS Ravi11347143
75211412IPL-2019Chennai07-05-2019Chennai Super KingsMumbai IndiansChennai Super Kingsbatnormal0Mumbai Indians06AS YadavM. A. Chidambaram StadiumNigel LlongNitin MenonIan Gould11412136
75311413IPL-2019Visakhapatnam08-05-2019Sunrisers HyderabadDelhi CapitalsDelhi Capitalsfieldnormal0Delhi Capitals02RR PantACA-VDCA StadiumNaNNaNNaN11413171
75411414IPL-2019Visakhapatnam10-05-2019Delhi CapitalsChennai Super KingsChennai Super Kingsfieldnormal0Chennai Super Kings06F du PlessisACA-VDCA StadiumSundaram RaviBruce OxenfordChettithody Shamshuddin11414155
75511415IPL-2019Hyderabad12-05-2019Mumbai IndiansChennai Super KingsMumbai Indiansbatnormal0Mumbai Indians10JJ BumrahRajiv Gandhi Intl. Cricket StadiumNitin MenonIan GouldNigel Llong11415152
\n", "

756 rows × 20 columns

\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", "
\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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
match_idcitywinnertotal_runs_xinningbatting_teambowling_teamoverballbatsman...bye_runslegbye_runsnoball_runspenalty_runsbatsman_runsextra_runstotal_runs_yplayer_dismisseddismissal_kindfielder
1251HyderabadSunrisers Hyderabad2072Royal Challengers BangaloreSunrisers Hyderabad11CH Gayle...0000101NaNNaNNaN
1261HyderabadSunrisers Hyderabad2072Royal Challengers BangaloreSunrisers Hyderabad12Mandeep Singh...0000000NaNNaNNaN
1271HyderabadSunrisers Hyderabad2072Royal Challengers BangaloreSunrisers Hyderabad13Mandeep Singh...0000000NaNNaNNaN
1281HyderabadSunrisers Hyderabad2072Royal Challengers BangaloreSunrisers Hyderabad14Mandeep Singh...0000202NaNNaNNaN
1291HyderabadSunrisers Hyderabad2072Royal Challengers BangaloreSunrisers Hyderabad15Mandeep Singh...0000404NaNNaNNaN
..................................................................
14957311415HyderabadMumbai Indians1522Chennai Super KingsMumbai Indians202RA Jadeja...0000101NaNNaNNaN
14957411415HyderabadMumbai Indians1522Chennai Super KingsMumbai Indians203SR Watson...0000202NaNNaNNaN
14957511415HyderabadMumbai Indians1522Chennai Super KingsMumbai Indians204SR Watson...0000101SR Watsonrun outKH Pandya
14957611415HyderabadMumbai Indians1522Chennai Super KingsMumbai Indians205SN Thakur...0000202NaNNaNNaN
14957711415HyderabadMumbai Indians1522Chennai Super KingsMumbai Indians206SN Thakur...0000000SN ThakurlbwNaN
\n", "

72413 rows × 24 columns

\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", "
\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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
match_idcitywinnertotal_runs_xinningbatting_teambowling_teamoverballbatsman...penalty_runsbatsman_runsextra_runstotal_runs_yplayer_dismisseddismissal_kindfieldercurrent_scoreruns_leftballs_left
1251HyderabadSunrisers Hyderabad2072Royal Challengers BangaloreSunrisers Hyderabad11CH Gayle...0101NaNNaNNaN1206119
1261HyderabadSunrisers Hyderabad2072Royal Challengers BangaloreSunrisers Hyderabad12Mandeep Singh...0000NaNNaNNaN1206118
1271HyderabadSunrisers Hyderabad2072Royal Challengers BangaloreSunrisers Hyderabad13Mandeep Singh...0000NaNNaNNaN1206117
1281HyderabadSunrisers Hyderabad2072Royal Challengers BangaloreSunrisers Hyderabad14Mandeep Singh...0202NaNNaNNaN3204116
1291HyderabadSunrisers Hyderabad2072Royal Challengers BangaloreSunrisers Hyderabad15Mandeep Singh...0404NaNNaNNaN7200115
..................................................................
14957311415HyderabadMumbai Indians1522Chennai Super KingsMumbai Indians202RA Jadeja...0101NaNNaNNaN15204
14957411415HyderabadMumbai Indians1522Chennai Super KingsMumbai Indians203SR Watson...0202NaNNaNNaN154-23
14957511415HyderabadMumbai Indians1522Chennai Super KingsMumbai Indians204SR Watson...0101SR Watsonrun outKH Pandya155-32
14957611415HyderabadMumbai Indians1522Chennai Super KingsMumbai Indians205SN Thakur...0202NaNNaNNaN157-51
14957711415HyderabadMumbai Indians1522Chennai Super KingsMumbai Indians206SN Thakur...0000SN ThakurlbwNaN157-50
\n", "

72413 rows × 27 columns

\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", "
\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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
match_idinningbatting_teambowling_teamoverballbatsmannon_strikerbowleris_super_over...bye_runslegbye_runsnoball_runspenalty_runsbatsman_runsextra_runstotal_runsplayer_dismisseddismissal_kindfielder
011Sunrisers HyderabadRoyal Challengers Bangalore11DA WarnerS DhawanTS Mills0...0000000NaNNaNNaN
111Sunrisers HyderabadRoyal Challengers Bangalore12DA WarnerS DhawanTS Mills0...0000000NaNNaNNaN
211Sunrisers HyderabadRoyal Challengers Bangalore13DA WarnerS DhawanTS Mills0...0000404NaNNaNNaN
311Sunrisers HyderabadRoyal Challengers Bangalore14DA WarnerS DhawanTS Mills0...0000000NaNNaNNaN
411Sunrisers HyderabadRoyal Challengers Bangalore15DA WarnerS DhawanTS Mills0...0000022NaNNaNNaN
..................................................................
179073114152Chennai Super KingsMumbai Indians202RA JadejaSR WatsonSL Malinga0...0000101NaNNaNNaN
179074114152Chennai Super KingsMumbai Indians203SR WatsonRA JadejaSL Malinga0...0000202NaNNaNNaN
179075114152Chennai Super KingsMumbai Indians204SR WatsonRA JadejaSL Malinga0...0000101SR Watsonrun outKH Pandya
179076114152Chennai Super KingsMumbai Indians205SN ThakurRA JadejaSL Malinga0...0000202NaNNaNNaN
179077114152Chennai Super KingsMumbai Indians206SN ThakurRA JadejaSL Malinga0...0000000SN ThakurlbwNaN
\n", "

179078 rows × 21 columns

\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", "
\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", " \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", " \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", " \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", " \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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
match_idcitywinnertotal_runs_xinningbatting_teambowling_teamoverballbatsman...penalty_runsbatsman_runsextra_runstotal_runs_yplayer_dismisseddismissal_kindfieldercurrent_scoreruns_leftballs_left
1251HyderabadSunrisers Hyderabad2072Royal Challengers BangaloreSunrisers Hyderabad11CH Gayle...01010NaNNaN1206119
1261HyderabadSunrisers Hyderabad2072Royal Challengers BangaloreSunrisers Hyderabad12Mandeep Singh...00000NaNNaN1206118
1271HyderabadSunrisers Hyderabad2072Royal Challengers BangaloreSunrisers Hyderabad13Mandeep Singh...00000NaNNaN1206117
1281HyderabadSunrisers Hyderabad2072Royal Challengers BangaloreSunrisers Hyderabad14Mandeep Singh...02020NaNNaN3204116
1291HyderabadSunrisers Hyderabad2072Royal Challengers BangaloreSunrisers Hyderabad15Mandeep Singh...04040NaNNaN7200115
\n", "

5 rows × 27 columns

\n", "
\n", "
\n", "\n", "
\n", " \n", "\n", " \n", "\n", " \n", "
\n", "\n", "\n", "
\n", " \n", "\n", "\n", "\n", " \n", "
\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", " \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", "
batting_teambowling_teamcityruns_leftballs_leftwicketstotal_runs_xcrrrrrresult
135691Kolkata Knight RidersSunrisers HyderabadKolkata511741898.03883518.01
\n", "
\n", "
\n", "\n", "
\n", " \n", "\n", " \n", "\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", " \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", " \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", " \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", " \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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
batting_teambowling_teamcityruns_leftballs_leftwicketstotal_runs_xcrrrrr
64488Mumbai IndiansDelhi DaredevilsDelhi924532079.20000012.266667
85786Mumbai IndiansChennai Super KingsDelhi1036421929.5357149.656250
82269Sunrisers HyderabadChennai Super KingsHyderabad19910112237.57894711.821782
65470Mumbai IndiansDeccan ChargersMumbai374831005.2500004.625000
135896Mumbai IndiansDelhi CapitalsMumbai1215632199.18750012.964286
..............................
41310Deccan ChargersMumbai IndiansMumbai964851786.83333312.000000
43512Deccan ChargersChennai Super KingsNagpur483631386.4285718.000000
126242Delhi DaredevilsKings XI PunjabDelhi1118921578.9032267.483146
73409Sunrisers HyderabadRoyal Challengers BangaloreHyderabad1079421305.3076926.829787
101346Kings XI PunjabRajasthan RoyalsPune15811711628.0000008.102564
\n", "

57073 rows × 9 columns

\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", "
\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.
" ] }, "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", " \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", " \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", " \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", " \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", " \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", " \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", "
end_of_overruns_after_overwickets_in_overlosewin
10459141057.442.6
1046728052.347.7
1047331059.240.8
1047947-170.729.3
10485512060.839.2
10491613048.551.5
1049779042.557.5
10505815028.471.6
1051197026.273.8
105181017014.385.7
10524119-119.980.1
10530129016.483.6
10536138014.185.9
10542148012.187.9
10548155-121.278.8
10555168-130.070.0
10561178-256.443.6
10567186-171.328.7
10573198-289.610.4
\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", "
\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 }