diff --git a/docs/examples/broadcast_tracking_data.ipynb b/docs/examples/broadcast_tracking_data.ipynb index b6ed5a5a..09aaaa55 100644 --- a/docs/examples/broadcast_tracking_data.ipynb +++ b/docs/examples/broadcast_tracking_data.ipynb @@ -32,7 +32,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 1, "metadata": { "scrolled": true }, @@ -49,7 +49,7 @@ " raw_data=tracking_file,\n", " limit=100)\n", "\n", - "df = dataset.to_pandas()" + "df = dataset.to_df()" ] }, { @@ -63,7 +63,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 2, "metadata": {}, "outputs": [ { @@ -89,7 +89,7 @@ " 'Serge Gnabry (22)']" ] }, - "execution_count": 5, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -103,7 +103,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -135,7 +135,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -173,7 +173,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -199,14 +199,14 @@ " \n", " period_id\n", " timestamp\n", + " frame_id\n", " ball_state\n", " ball_owning_team_id\n", " ball_x\n", " ball_y\n", + " ball_z\n", " away_23_x\n", " away_23_y\n", - " away_23_d\n", - " away_23_s\n", " ...\n", " away_14_d\n", " away_14_s\n", @@ -225,14 +225,14 @@ " 0\n", " 1\n", " 11.2\n", + " 1523\n", " None\n", " NaN\n", " NaN\n", " NaN\n", + " NaN\n", " 0.747489\n", " 0.098509\n", - " NaN\n", - " NaN\n", " ...\n", " NaN\n", " NaN\n", @@ -249,14 +249,14 @@ " 1\n", " 1\n", " 11.3\n", + " 1524\n", " None\n", " NaN\n", " 0.791347\n", " -0.020033\n", + " 2.243712\n", " 0.745323\n", " 0.099367\n", - " NaN\n", - " NaN\n", " ...\n", " NaN\n", " NaN\n", @@ -273,14 +273,14 @@ " 2\n", " 1\n", " 11.4\n", + " 1525\n", " None\n", " NaN\n", " 0.772630\n", " -0.009469\n", + " 2.534799\n", " 0.742956\n", " 0.099743\n", - " NaN\n", - " NaN\n", " ...\n", " NaN\n", " NaN\n", @@ -297,14 +297,14 @@ " 3\n", " 1\n", " 11.5\n", + " 1526\n", " None\n", " NaN\n", " 0.754625\n", " 0.001612\n", + " 2.659813\n", " 0.740386\n", " 0.099638\n", - " NaN\n", - " NaN\n", " ...\n", " NaN\n", " NaN\n", @@ -321,14 +321,14 @@ " 4\n", " 1\n", " 11.6\n", + " 1527\n", " None\n", " NaN\n", " 0.737330\n", " 0.013210\n", + " 2.618755\n", " 0.737875\n", " 0.096646\n", - " NaN\n", - " NaN\n", " ...\n", " NaN\n", " NaN\n", @@ -343,42 +343,42 @@ " \n", " \n", "\n", - "

5 rows × 90 columns

\n", + "

5 rows × 92 columns

\n", "" ], "text/plain": [ - " period_id timestamp ball_state ball_owning_team_id ball_x ball_y \\\n", - "0 1 11.2 None NaN NaN NaN \n", - "1 1 11.3 None NaN 0.791347 -0.020033 \n", - "2 1 11.4 None NaN 0.772630 -0.009469 \n", - "3 1 11.5 None NaN 0.754625 0.001612 \n", - "4 1 11.6 None NaN 0.737330 0.013210 \n", + " period_id timestamp frame_id ball_state ball_owning_team_id ball_x \\\n", + "0 1 11.2 1523 None NaN NaN \n", + "1 1 11.3 1524 None NaN 0.791347 \n", + "2 1 11.4 1525 None NaN 0.772630 \n", + "3 1 11.5 1526 None NaN 0.754625 \n", + "4 1 11.6 1527 None NaN 0.737330 \n", "\n", - " away_23_x away_23_y away_23_d away_23_s ... away_14_d away_14_s \\\n", - "0 0.747489 0.098509 NaN NaN ... NaN NaN \n", - "1 0.745323 0.099367 NaN NaN ... NaN NaN \n", - "2 0.742956 0.099743 NaN NaN ... NaN NaN \n", - "3 0.740386 0.099638 NaN NaN ... NaN NaN \n", - "4 0.737875 0.096646 NaN NaN ... NaN NaN \n", + " ball_y ball_z away_23_x away_23_y ... away_14_d away_14_s \\\n", + "0 NaN NaN 0.747489 0.098509 ... NaN NaN \n", + "1 -0.020033 2.243712 0.745323 0.099367 ... NaN NaN \n", + "2 -0.009469 2.534799 0.742956 0.099743 ... NaN NaN \n", + "3 0.001612 2.659813 0.740386 0.099638 ... NaN NaN \n", + "4 0.013210 2.618755 0.737875 0.096646 ... NaN NaN \n", "\n", - " home_9_x home_9_y home_9_d home_9_s home_anon_75_x home_anon_75_y \\\n", - "0 NaN NaN NaN NaN NaN NaN \n", - "1 NaN NaN NaN NaN NaN NaN \n", - "2 NaN NaN NaN NaN NaN NaN \n", - "3 NaN NaN NaN NaN NaN NaN \n", - "4 NaN NaN NaN NaN NaN NaN \n", + " home_9_x home_9_y home_9_d home_9_s home_anon_75_x home_anon_75_y \\\n", + "0 NaN NaN NaN NaN NaN NaN \n", + "1 NaN NaN NaN NaN NaN NaN \n", + "2 NaN NaN NaN NaN NaN NaN \n", + "3 NaN NaN NaN NaN NaN NaN \n", + "4 NaN NaN NaN NaN NaN NaN \n", "\n", - " home_anon_75_d home_anon_75_s \n", - "0 NaN NaN \n", - "1 NaN NaN \n", - "2 NaN NaN \n", - "3 NaN NaN \n", - "4 NaN NaN \n", + " home_anon_75_d home_anon_75_s \n", + "0 NaN NaN \n", + "1 NaN NaN \n", + "2 NaN NaN \n", + "3 NaN NaN \n", + "4 NaN NaN \n", "\n", - "[5 rows x 90 columns]" + "[5 rows x 92 columns]" ] }, - "execution_count": 10, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -411,7 +411,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.9" + "version": "3.10.6" }, "toc": { "base_numbering": 1, diff --git a/docs/examples/code_data.ipynb b/docs/examples/code_data.ipynb index 9e4adcfb..d97228f1 100644 --- a/docs/examples/code_data.ipynb +++ b/docs/examples/code_data.ipynb @@ -189,7 +189,7 @@ } ], "source": [ - "code_dataset.to_pandas()" + "code_dataset.to_df()" ] }, { @@ -279,7 +279,7 @@ ], "source": [ "passes = code_dataset.filter(lambda code: code.code == 'PASS')\n", - "passes.to_pandas()" + "passes.to_df()" ] }, { @@ -359,9 +359,23 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 6, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/koen/Developer/Projects/PySport/kloppy/.venv/lib/python3.10/site-packages/kloppy-3.7.1-py3.10.egg/kloppy/_providers/statsbomb.py:67: UserWarning: \n", + "\n", + "You are about to use StatsBomb public data.\n", + "By using this data, you are agreeing to the user agreement. \n", + "The user agreement can be found here: https://github.com/statsbomb/open-data/blob/master/LICENSE.pdf\n", + "\n", + " warnings.warn(\n" + ] + } + ], "source": [ "from kloppy import statsbomb\n", "\n", @@ -370,7 +384,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -405,7 +419,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -785,18 +799,18 @@ "27 Lionel Andrés Messi Cuccittini Barcelona " ] }, - "execution_count": 14, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "code_dataset.to_pandas()" + "code_dataset.to_df()" ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -1213,7 +1227,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -1245,7 +1259,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.9" + "version": "3.10.6" } }, "nbformat": 4, diff --git a/docs/examples/config.ipynb b/docs/examples/config.ipynb index ae34daa3..6f78ed7a 100644 --- a/docs/examples/config.ipynb +++ b/docs/examples/config.ipynb @@ -12,7 +12,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 5, "id": "e8979b51", "metadata": {}, "outputs": [], @@ -32,7 +32,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "id": "b70b22c9", "metadata": {}, "outputs": [ @@ -41,11 +41,13 @@ "text/plain": [ "{'cache': '/Users/koen/kloppy_cache',\n", " 'coordinate_system': 'kloppy',\n", + " 'event_factory': None,\n", " 'adapters.http.basic_authentication': None,\n", - " 'adapters.s3.s3fs': None}" + " 'adapters.s3.s3fs': None,\n", + " 'dataframe.engine': 'pandas'}" ] }, - "execution_count": 5, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -56,7 +58,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "id": "9d75b69b", "metadata": {}, "outputs": [ @@ -66,7 +68,7 @@ "'kloppy'" ] }, - "execution_count": 6, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -91,6 +93,19 @@ "id": "1ba6227a", "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/koen/Developer/Projects/PySport/kloppy/.venv/lib/python3.10/site-packages/kloppy-3.7.1-py3.10.egg/kloppy/_providers/statsbomb.py:67: UserWarning: \n", + "\n", + "You are about to use StatsBomb public data.\n", + "By using this data, you are agreeing to the user agreement. \n", + "The user agreement can be found here: https://github.com/statsbomb/open-data/blob/master/LICENSE.pdf\n", + "\n", + " warnings.warn(\n" + ] + }, { "data": { "text/plain": [ @@ -124,7 +139,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 9, "id": "6fc5b89c", "metadata": {}, "outputs": [ @@ -137,13 +152,26 @@ "After context: opta\n" ] }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/koen/Developer/Projects/PySport/kloppy/.venv/lib/python3.10/site-packages/kloppy-3.7.1-py3.10.egg/kloppy/_providers/statsbomb.py:67: UserWarning: \n", + "\n", + "You are about to use StatsBomb public data.\n", + "By using this data, you are agreeing to the user agreement. \n", + "The user agreement can be found here: https://github.com/statsbomb/open-data/blob/master/LICENSE.pdf\n", + "\n", + " warnings.warn(\n" + ] + }, { "data": { "text/plain": [ - "StatsbombCoordinateSystem(normalized=False, length=120, width=80)" + "StatsBombCoordinateSystem(normalized=False, length=120, width=80)" ] }, - "execution_count": 15, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -175,7 +203,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.9" + "version": "3.10.6" } }, "nbformat": 4, diff --git a/docs/examples/event_data.ipynb b/docs/examples/event_data.ipynb index 60ad712d..10fb241f 100644 --- a/docs/examples/event_data.ipynb +++ b/docs/examples/event_data.ipynb @@ -22,7 +22,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 55, "metadata": { "scrolled": true }, @@ -44,7 +44,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 56, "metadata": {}, "outputs": [], "source": [ @@ -61,7 +61,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 57, "metadata": {}, "outputs": [ { @@ -80,7 +80,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 58, "metadata": {}, "outputs": [ { @@ -106,7 +106,7 @@ " 'Marc-André ter Stegen (1)']" ] }, - "execution_count": 31, + "execution_count": 58, "metadata": {}, "output_type": "execute_result" } @@ -117,7 +117,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 59, "metadata": {}, "outputs": [ { @@ -126,7 +126,7 @@ "'statsbomb team id: 217 - 206'" ] }, - "execution_count": 32, + "execution_count": 59, "metadata": {}, "output_type": "execute_result" } @@ -138,7 +138,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 60, "metadata": {}, "outputs": [ { @@ -164,7 +164,7 @@ " 'Marc-André ter Stegen id=20055']" ] }, - "execution_count": 33, + "execution_count": 60, "metadata": {}, "output_type": "execute_result" } @@ -176,7 +176,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 61, "metadata": {}, "outputs": [ { @@ -206,7 +206,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 62, "metadata": {}, "outputs": [ { @@ -265,7 +265,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 63, "metadata": {}, "outputs": [ { @@ -301,18 +301,32 @@ "source": [ "## Use metadata when transforming to pandas dataframe\n", "\n", - "The metadata can also be used when transforming a dataset to a pandas dataframe. The `additional_columns` argument should be passed to `to_pandas`. " + "The metadata can also be used when transforming a dataset to a pandas dataframe. Using keyword argument additional columns can be created." ] }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 64, "metadata": {}, "outputs": [ { "data": { "text/html": [ - "
See Full Dataframe in Mito
\n", + "
\n", + "\n", + "
\n", " \n", " \n", " \n", @@ -377,7 +391,8 @@ " \n", " \n", " \n", - "
Barcelona
" + "\n", + "" ], "text/plain": [ " event_id event_type result timestamp \\\n", @@ -395,18 +410,17 @@ "4 5477 Ousmane Dembélé Barcelona " ] }, - "execution_count": 37, + "execution_count": 64, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\n", - "dataframe = dataset.to_pandas(\n", - " additional_columns={\n", - " 'player_name': lambda event: str(event.player),\n", - " 'team_name': lambda event: str(event.player.team)\n", - " }\n", + "dataframe = dataset.to_df(\n", + " \"*\", # Get all default columns\n", + " player_name=lambda event: str(event.player),\n", + " team_name=lambda event: str(event.player.team)\n", ")\n", "\n", "dataframe[[\n", @@ -426,13 +440,27 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 65, "metadata": {}, "outputs": [ { "data": { "text/html": [ - "
See Full Dataframe in Mito
\n", + "
\n", + "\n", + "
\n", " \n", " \n", " \n", @@ -497,7 +525,9 @@ " \n", " \n", " \n", - "
9.721368
" + "\n", + "

1160 rows × 2 columns

\n", + "" ], "text/plain": [ " angle_to_goal distance_to_goal\n", @@ -516,7 +546,7 @@ "[1160 rows x 2 columns]" ] }, - "execution_count": 38, + "execution_count": 65, "metadata": {}, "output_type": "execute_result" } @@ -541,7 +571,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 66, "metadata": {}, "outputs": [ { @@ -557,7 +587,7 @@ "{'angle_to_goal': 90.48146580583835}" ] }, - "execution_count": 39, + "execution_count": 66, "metadata": {}, "output_type": "execute_result" } @@ -584,13 +614,27 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 67, "metadata": {}, "outputs": [ { "data": { "text/html": [ - "
See Full Dataframe in Mito
\n", + "
\n", + "\n", + "
\n", " \n", " \n", " \n", @@ -703,7 +747,9 @@ " \n", " \n", " \n", - "
NaN
" + "\n", + "

1160 rows × 6 columns

\n", + "" ], "text/plain": [ " period_id timestamp coordinates_x coordinates_y end_coordinates_x \\\n", @@ -735,7 +781,7 @@ "[1160 rows x 6 columns]" ] }, - "execution_count": 40, + "execution_count": 67, "metadata": {}, "output_type": "execute_result" } @@ -761,13 +807,27 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 68, "metadata": {}, "outputs": [ { "data": { "text/html": [ - "
See Full Dataframe in Mito
\n", + "
\n", + "\n", + "
\n", " \n", " \n", " \n", @@ -783,35 +843,35 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -825,57 +885,59 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - "
10.0981234362
113.4971234243252
216.785123474194
318.4311234237121
4110.4331234165161
...22787.914123479230
115622791.3951234252153
115722795.1271234197151
115822798.906123454160
115922802.770123459242
" + "\n", + "

1160 rows × 4 columns

\n", + "" ], "text/plain": [ " period timestamp some_columns other_column\n", - "0 1 0.098 1234 3\n", - "1 1 3.497 1234 243\n", - "2 1 6.785 1234 74\n", - "3 1 8.431 1234 237\n", - "4 1 10.433 1234 165\n", + "0 1 0.098 1234 62\n", + "1 1 3.497 1234 252\n", + "2 1 6.785 1234 194\n", + "3 1 8.431 1234 121\n", + "4 1 10.433 1234 161\n", "... ... ... ... ...\n", - "1155 2 2787.914 1234 79\n", - "1156 2 2791.395 1234 252\n", - "1157 2 2795.127 1234 197\n", - "1158 2 2798.906 1234 54\n", - "1159 2 2802.770 1234 59\n", + "1155 2 2787.914 1234 230\n", + "1156 2 2791.395 1234 153\n", + "1157 2 2795.127 1234 151\n", + "1158 2 2798.906 1234 160\n", + "1159 2 2802.770 1234 242\n", "\n", "[1160 rows x 4 columns]" ] }, - "execution_count": 41, + "execution_count": 68, "metadata": {}, "output_type": "execute_result" } @@ -906,25 +968,25 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 69, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[{'period': 1, 'timestamp': 0.098, 'some_columns': 1234, 'other_column': 33},\n", - " {'period': 1, 'timestamp': 3.497, 'some_columns': 1234, 'other_column': 98},\n", - " {'period': 1, 'timestamp': 6.785, 'some_columns': 1234, 'other_column': 64},\n", - " {'period': 1, 'timestamp': 8.431, 'some_columns': 1234, 'other_column': 171},\n", - " {'period': 1, 'timestamp': 10.433, 'some_columns': 1234, 'other_column': 56},\n", - " {'period': 1, 'timestamp': 11.15, 'some_columns': 1234, 'other_column': 179},\n", - " {'period': 1, 'timestamp': 24.687, 'some_columns': 1234, 'other_column': 251},\n", - " {'period': 1, 'timestamp': 30.008, 'some_columns': 1234, 'other_column': 20},\n", - " {'period': 1, 'timestamp': 34.738, 'some_columns': 1234, 'other_column': 218},\n", - " {'period': 1, 'timestamp': 37.467, 'some_columns': 1234, 'other_column': 255}]" + "[{'period': 1, 'timestamp': 0.098, 'some_columns': 1234, 'other_column': 42},\n", + " {'period': 1, 'timestamp': 3.497, 'some_columns': 1234, 'other_column': 72},\n", + " {'period': 1, 'timestamp': 6.785, 'some_columns': 1234, 'other_column': 135},\n", + " {'period': 1, 'timestamp': 8.431, 'some_columns': 1234, 'other_column': 100},\n", + " {'period': 1, 'timestamp': 10.433, 'some_columns': 1234, 'other_column': 193},\n", + " {'period': 1, 'timestamp': 11.15, 'some_columns': 1234, 'other_column': 64},\n", + " {'period': 1, 'timestamp': 24.687, 'some_columns': 1234, 'other_column': 22},\n", + " {'period': 1, 'timestamp': 30.008, 'some_columns': 1234, 'other_column': 157},\n", + " {'period': 1, 'timestamp': 34.738, 'some_columns': 1234, 'other_column': 73},\n", + " {'period': 1, 'timestamp': 37.467, 'some_columns': 1234, 'other_column': 226}]" ] }, - "execution_count": 42, + "execution_count": 69, "metadata": {}, "output_type": "execute_result" } @@ -954,13 +1016,27 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 70, "metadata": {}, "outputs": [ { "data": { "text/html": [ - "
See Full Dataframe in Mito
\n", + "
\n", + "\n", + "
\n", " \n", " \n", " \n", @@ -1001,10 +1077,112 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -1037,7 +1215,8 @@ " \n", " \n", " \n", - "
1095.914
............50.089920Ousmane Dembélé1842.287
60.071365Ivan Rakitić2104.861
70.078886Lionel Andrés Messi Cuccittini2248.168
80.171218Gerard Piqué Bernabéu2250.989
90.226095Ousmane Dembélé2308.083
100.257290Luis Alberto Suárez Díaz2434.592
110.145402Ousmane Dembélé2610.612
120.143644Jordi Alba Ramos2864.792
130.034266Mubarak Wakaso3072.668
140.018334Luis Alberto Suárez Díaz3239.623
150.014615Philippe Coutinho Correia3301.656
160.039418Jordi Alba Ramos3339.758
170.026228Lionel Andrés Messi Cuccittini3446.115
180.031532Philippe Coutinho Correia3641.424
190.137812Lionel Andrés Messi Cuccittini3797.222
200.081403Lionel Andrés Messi Cuccittini3948.856
210.009953Ivan Rakitić4118.643
220.337188Luis Alberto Suárez Díaz4352.760
235508.038
" + "\n", + "" ], "text/plain": [ " statsbomb_xg player timestamp\n", @@ -1071,7 +1250,7 @@ "27 0.289481 Lionel Andrés Messi Cuccittini 5508.038" ] }, - "execution_count": 43, + "execution_count": 70, "metadata": {}, "output_type": "execute_result" } @@ -1117,7 +1296,7 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 71, "metadata": {}, "outputs": [], "source": [ @@ -1129,7 +1308,7 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 72, "metadata": {}, "outputs": [], "source": [ @@ -1138,14 +1317,14 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 73, "metadata": {}, "outputs": [ { "data": { - "image/png": "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SLeXKUZnAUCbiEajeuGFF/Tmm2/qypUrSiaTOnPmjMbGxmTbtl555RVduHBBlmXJcRyVFnN66qmnZFmW8T4JEQBoI7FYTE8++aSefPLJbZ+/9tprunjxomzb3vrs97//vbq6unT69Gnj/dGdBQBtznEcvfPOO6rVats+r1arev3113e1bUIEANpctVqV4zg7frfbUVuECAC0uUgk8rFvrB88eHBX2yZEAKDNWZalr371qwqHw/d+qEgkoq985Su72jYhAgD7wPHjx/Wd73xHJ0+eVLIjqeHRYT3//PM6cODArrbL6CwA2CdGRkb09a9/Xecvvi1J6uvr2/U2PQ+RenEA0A64pn0yurMeUDq1N9MoA2hOnPMPxvOWyJmJJ7zeJAA03COjx/0uYc942bqiJQIAMEaIAACMESIAAGOECADAGCECADBGiAAAjBEiAABjhAgAwBghAgAwRogAAIwRIgAAY4QIAMAYIQIAMEaIAACMESIAAGOECADAGCECADBGiAAAjBEiAABjhAgAwBghAgAwRogAAIwRIgAAY4QIAMAYIQIAMEaIAACMESIAAGOECADAGCECADBGiAAAjBEiAABjhAgAwBghAgAwRogAAIwRIgAAY4QIAMAYIQIAMEaIAACMESIAAGOECADAGCECADBGiAAAjBEiAABjhAgAwBghAgAwRogAAIwRIgAAY4QIAMAYIQIAMEaIAACMESIAAGOECADAWMjrDZ6/+LbXmwR8x3EN7Myzlkg61enVpgAAe8yra7bluu4nff+JXwIA9g1rpw95JgIAMEaIAACMESIAAGOECADAGCECADBGiAAAjBEiAABjhAgAwBghAgAwRogAAIx92gSMO77mDgCAREsEALALhAgAwBghAgAwRogAAIwRIgAAY4QIAMDY/wdPo5T9AGfcawAAAABJRU5ErkJggg==\n", + "image/png": "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", "text/plain": [ - "
" + "
" ] }, "metadata": {}, @@ -1153,13 +1332,15 @@ } ], "source": [ + "# You might need to install mplsoccer package\n", + "# %pip install mplsoccer\n", + "\n", "from mplsoccer.pitch import Pitch\n", "\n", "home_team = dataset.metadata.teams[0]\n", "\n", - "pitch = Pitch(pitch_type='statsbomb', orientation='horizontal',\n", - " pitch_color='white', line_color='#c7d5cc', figsize=(16, 11),\n", - " constrained_layout=True, tight_layout=False)\n", + "pitch = Pitch(pitch_type='statsbomb',\n", + " pitch_color='white', line_color='#c7d5cc')\n", "fig, ax = pitch.draw()\n", "\n", "def get_color(player):\n", @@ -1179,6 +1360,13 @@ "\n", "_ = pitch.scatter(x, y, color=color, ax=ax)" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { @@ -1197,7 +1385,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.9" + "version": "3.10.6" }, "toc": { "base_numbering": 1, diff --git a/docs/examples/navigating.ipynb b/docs/examples/navigating.ipynb index 9643eac8..d4186e92 100644 --- a/docs/examples/navigating.ipynb +++ b/docs/examples/navigating.ipynb @@ -22,7 +22,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 1, "id": "c910dd35", "metadata": {}, "outputs": [ @@ -30,7 +30,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/Users/koen/Developer/Projects/PySport/kloppy/.venv/lib/python3.8/site-packages/kloppy-3.2.0-py3.8.egg/kloppy/_providers/statsbomb.py:46: UserWarning: \n", + "/Users/koen/Developer/Projects/PySport/kloppy/.venv/lib/python3.10/site-packages/kloppy-3.7.1-py3.10.egg/kloppy/_providers/statsbomb.py:67: UserWarning: \n", "\n", "You are about to use StatsBomb public data.\n", "By using this data, you are agreeing to the user agreement. \n", @@ -162,7 +162,7 @@ "2 LEFT_FOOT " ] }, - "execution_count": 5, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -177,7 +177,7 @@ "filtered_dataset = dataset.filter('shot.goal')\n", "\n", "# Show the results\n", - "filtered_dataset.to_pandas()" + "filtered_dataset.to_df()" ] }, { @@ -190,7 +190,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 2, "id": "57aac560", "metadata": {}, "outputs": [ @@ -200,7 +200,7 @@ "0" ] }, - "execution_count": 10, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -220,7 +220,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 3, "id": "45de2f06", "metadata": {}, "outputs": [ @@ -230,7 +230,7 @@ "1132" ] }, - "execution_count": 11, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -250,17 +250,17 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 4, "id": "2df283f7", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 12, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -271,7 +271,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 5, "id": "7c432ca0", "metadata": {}, "outputs": [ @@ -301,17 +301,30 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 6, "id": "31fd93a8", "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/koen/Developer/Projects/PySport/kloppy/.venv/lib/python3.10/site-packages/kloppy-3.7.1-py3.10.egg/kloppy/_providers/statsbomb.py:67: UserWarning: \n", + "\n", + "You are about to use StatsBomb public data.\n", + "By using this data, you are agreeing to the user agreement. \n", + "The user agreement can be found here: https://github.com/statsbomb/open-data/blob/master/LICENSE.pdf\n", + "\n", + " warnings.warn(\n" + ] + }, { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 17, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -326,7 +339,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 7, "id": "98dda35c", "metadata": {}, "outputs": [ @@ -335,7 +348,7 @@ "output_type": "stream", "text": [ "\n", - "\n", + "\n", "\n" ] } @@ -357,17 +370,17 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 8, "id": "841fa959", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 25, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -386,7 +399,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 9, "id": "16aad417", "metadata": {}, "outputs": [ @@ -396,7 +409,7 @@ "" ] }, - "execution_count": 26, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -420,7 +433,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 10, "id": "963e687d", "metadata": {}, "outputs": [ @@ -433,7 +446,7 @@ " ]" ] }, - "execution_count": 31, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -445,7 +458,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 11, "id": "7d2c3377", "metadata": {}, "outputs": [ @@ -463,7 +476,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 12, "id": "3e53ee99", "metadata": {}, "outputs": [ @@ -504,7 +517,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.9" + "version": "3.10.6" } }, "nbformat": 4, diff --git a/docs/examples/plotting.ipynb b/docs/examples/plotting.ipynb index 819ffc26..3a65f6b5 100644 --- a/docs/examples/plotting.ipynb +++ b/docs/examples/plotting.ipynb @@ -23,50 +23,30 @@ "name": "stdout", "output_type": "stream", "text": [ - "Collecting mplsoccer\n", - " Downloading mplsoccer-1.0.5.tar.gz (57 kB)\n", - "\u001b[K |████████████████████████████████| 57 kB 1.4 MB/s eta 0:00:01\n", - "\u001b[?25hCollecting matplotlib\n", - " Downloading matplotlib-3.5.1-cp38-cp38-macosx_11_0_arm64.whl (7.2 MB)\n", - "\u001b[K |████████████████████████████████| 7.2 MB 666 kB/s eta 0:00:01\n", - "\u001b[?25hCollecting seaborn\n", - " Downloading seaborn-0.11.2-py3-none-any.whl (292 kB)\n", - "\u001b[K |████████████████████████████████| 292 kB 795 kB/s eta 0:00:01\n", - "\u001b[?25hCollecting scipy\n", - " Downloading scipy-1.7.3-1-cp38-cp38-macosx_12_0_arm64.whl (26.9 MB)\n", - "\u001b[K |████████████████████████████████| 26.9 MB 1.3 MB/s eta 0:00:01\n", - "\u001b[?25hRequirement already satisfied: pandas in /Users/koen/Developer/Projects/PySport/kloppy/.venv/lib/python3.8/site-packages (from mplsoccer) (1.3.5)\n", - "Collecting pillow\n", - " Downloading Pillow-8.4.0-cp38-cp38-macosx_11_0_arm64.whl (2.8 MB)\n", - "\u001b[K |████████████████████████████████| 2.8 MB 1.2 MB/s eta 0:00:01\n", - "\u001b[?25hRequirement already satisfied: numpy in /Users/koen/Developer/Projects/PySport/kloppy/.venv/lib/python3.8/site-packages (from mplsoccer) (1.21.4)\n", - "Collecting beautifulsoup4\n", - " Downloading beautifulsoup4-4.10.0-py3-none-any.whl (97 kB)\n", - "\u001b[K |████████████████████████████████| 97 kB 1.1 MB/s eta 0:00:01\n", - "\u001b[?25hRequirement already satisfied: python-dateutil>=2.7 in /Users/koen/Developer/Projects/PySport/kloppy/.venv/lib/python3.8/site-packages (from matplotlib) (2.8.2)\n", - "Collecting fonttools>=4.22.0\n", - " Downloading fonttools-4.28.5-py3-none-any.whl (890 kB)\n", - "\u001b[K |████████████████████████████████| 890 kB 630 kB/s eta 0:00:01\n", - "\u001b[?25hCollecting cycler>=0.10\n", - " Downloading cycler-0.11.0-py3-none-any.whl (6.4 kB)\n", - "Requirement already satisfied: packaging>=20.0 in /Users/koen/Developer/Projects/PySport/kloppy/.venv/lib/python3.8/site-packages (from matplotlib) (21.3)\n", - "Requirement already satisfied: pyparsing>=2.2.1 in /Users/koen/Developer/Projects/PySport/kloppy/.venv/lib/python3.8/site-packages (from matplotlib) (3.0.6)\n", - "Collecting kiwisolver>=1.0.1\n", - " Downloading kiwisolver-1.3.2-cp38-cp38-macosx_11_0_arm64.whl (59 kB)\n", - "\u001b[K |████████████████████████████████| 59 kB 1.3 MB/s eta 0:00:01\n", - "\u001b[?25hRequirement already satisfied: six>=1.5 in /Users/koen/Developer/Projects/PySport/kloppy/.venv/lib/python3.8/site-packages (from python-dateutil>=2.7->matplotlib) (1.16.0)\n", - "Requirement already satisfied: pytz>=2017.3 in /Users/koen/Developer/Projects/PySport/kloppy/.venv/lib/python3.8/site-packages (from pandas->mplsoccer) (2021.3)\n", - "Collecting soupsieve>1.2\n", - " Downloading soupsieve-2.3.1-py3-none-any.whl (37 kB)\n", - "Building wheels for collected packages: mplsoccer\n", - " Building wheel for mplsoccer (setup.py) ... \u001b[?25ldone\n", - "\u001b[?25h Created wheel for mplsoccer: filename=mplsoccer-1.0.5-py3-none-any.whl size=62945 sha256=16994e8b7249911aca813d3ad2e701c61450199c86ba47a3ceab2c4b4201f639\n", - " Stored in directory: /Users/koen/Library/Caches/pip/wheels/9d/00/80/238af6bc002b4ab5163484f1584ff6b9e795b8b1a33463768d\n", - "Successfully built mplsoccer\n", - "Installing collected packages: pillow, kiwisolver, fonttools, cycler, soupsieve, scipy, matplotlib, seaborn, beautifulsoup4, mplsoccer\n", - "Successfully installed beautifulsoup4-4.10.0 cycler-0.11.0 fonttools-4.28.5 kiwisolver-1.3.2 matplotlib-3.5.1 mplsoccer-1.0.5 pillow-8.4.0 scipy-1.7.3 seaborn-0.11.2 soupsieve-2.3.1\n", - "\u001b[33mWARNING: You are using pip version 21.1.2; however, version 21.3.1 is available.\n", - "You should consider upgrading via the '/Users/koen/Developer/Projects/PySport/kloppy/.venv/bin/python -m pip install --upgrade pip' command.\u001b[0m\n" + "Requirement already satisfied: mplsoccer in /Users/koen/Developer/Projects/PySport/kloppy/.venv/lib/python3.10/site-packages (1.1.10)\n", + "Requirement already satisfied: matplotlib in /Users/koen/Developer/Projects/PySport/kloppy/.venv/lib/python3.10/site-packages (3.7.1)\n", + "Requirement already satisfied: seaborn in /Users/koen/Developer/Projects/PySport/kloppy/.venv/lib/python3.10/site-packages (0.12.2)\n", + "Requirement already satisfied: scipy in /Users/koen/Developer/Projects/PySport/kloppy/.venv/lib/python3.10/site-packages (from mplsoccer) (1.10.1)\n", + "Requirement already satisfied: pillow in /Users/koen/Developer/Projects/PySport/kloppy/.venv/lib/python3.10/site-packages (from mplsoccer) (9.4.0)\n", + "Requirement already satisfied: requests in /Users/koen/Developer/Projects/PySport/kloppy/.venv/lib/python3.10/site-packages/requests-2.28.2-py3.10.egg (from mplsoccer) (2.28.2)\n", + "Requirement already satisfied: numpy in /Users/koen/Developer/Projects/PySport/kloppy/.venv/lib/python3.10/site-packages (from mplsoccer) (1.24.2)\n", + "Requirement already satisfied: pandas in /Users/koen/Developer/Projects/PySport/kloppy/.venv/lib/python3.10/site-packages (from mplsoccer) (1.5.3)\n", + "Requirement already satisfied: fonttools>=4.22.0 in /Users/koen/Developer/Projects/PySport/kloppy/.venv/lib/python3.10/site-packages (from matplotlib) (4.38.0)\n", + "Requirement already satisfied: packaging>=20.0 in /Users/koen/Developer/Projects/PySport/kloppy/.venv/lib/python3.10/site-packages (from matplotlib) (23.0)\n", + "Requirement already satisfied: pyparsing>=2.3.1 in /Users/koen/Developer/Projects/PySport/kloppy/.venv/lib/python3.10/site-packages (from matplotlib) (3.0.9)\n", + "Requirement already satisfied: python-dateutil>=2.7 in /Users/koen/Developer/Projects/PySport/kloppy/.venv/lib/python3.10/site-packages/python_dateutil-2.8.2-py3.10.egg (from matplotlib) (2.8.2)\n", + "Requirement already satisfied: cycler>=0.10 in /Users/koen/Developer/Projects/PySport/kloppy/.venv/lib/python3.10/site-packages (from matplotlib) (0.11.0)\n", + "Requirement already satisfied: contourpy>=1.0.1 in /Users/koen/Developer/Projects/PySport/kloppy/.venv/lib/python3.10/site-packages (from matplotlib) (1.0.7)\n", + "Requirement already satisfied: kiwisolver>=1.0.1 in /Users/koen/Developer/Projects/PySport/kloppy/.venv/lib/python3.10/site-packages (from matplotlib) (1.4.4)\n", + "Requirement already satisfied: pytz>=2020.1 in /Users/koen/Developer/Projects/PySport/kloppy/.venv/lib/python3.10/site-packages/pytz-2022.7.1-py3.10.egg (from pandas->mplsoccer) (2022.7.1)\n", + "Requirement already satisfied: six>=1.5 in /Users/koen/Developer/Projects/PySport/kloppy/.venv/lib/python3.10/site-packages/six-1.16.0-py3.10.egg (from python-dateutil>=2.7->matplotlib) (1.16.0)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /Users/koen/Developer/Projects/PySport/kloppy/.venv/lib/python3.10/site-packages/charset_normalizer-3.0.1-py3.10-macosx-12-arm64.egg (from requests->mplsoccer) (3.0.1)\n", + "Requirement already satisfied: idna<4,>=2.5 in /Users/koen/Developer/Projects/PySport/kloppy/.venv/lib/python3.10/site-packages/idna-3.4-py3.10.egg (from requests->mplsoccer) (3.4)\n", + "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /Users/koen/Developer/Projects/PySport/kloppy/.venv/lib/python3.10/site-packages/urllib3-1.26.14-py3.10.egg (from requests->mplsoccer) (1.26.14)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /Users/koen/Developer/Projects/PySport/kloppy/.venv/lib/python3.10/site-packages/certifi-2022.12.7-py3.10.egg (from requests->mplsoccer) (2022.12.7)\n", + "\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip available: \u001b[0m\u001b[31;49m22.3.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m23.0.1\u001b[0m\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n" ] } ], @@ -77,7 +57,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": {}, "outputs": [ { @@ -112,9 +92,9 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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", "text/plain": [ - "
" + "
" ] }, "metadata": {}, @@ -125,7 +105,7 @@ "df = (\n", " dataset\n", " .filter(lambda event: event.player == messi)\n", - " .to_pandas()\n", + " .to_df()\n", ")\n", "\n", "\n", @@ -135,7 +115,7 @@ " df[\"coordinates_x\"],\n", " df[\"coordinates_y\"],\n", " ax=ax,\n", - " shade=True,\n", + " fill=True,\n", " n_levels=50,\n", ")" ] @@ -164,7 +144,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.9" + "version": "3.10.6" }, "toc": { "base_numbering": 1, diff --git a/docs/examples/state.ipynb b/docs/examples/state.ipynb index 42760224..32226afe 100644 --- a/docs/examples/state.ipynb +++ b/docs/examples/state.ipynb @@ -17,9 +17,22 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 31, "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/koen/Developer/Projects/PySport/kloppy/.venv/lib/python3.10/site-packages/kloppy-3.7.1-py3.10.egg/kloppy/_providers/statsbomb.py:67: UserWarning: \n", + "\n", + "You are about to use StatsBomb public data.\n", + "By using this data, you are agreeing to the user agreement. \n", + "The user agreement can be found here: https://github.com/statsbomb/open-data/blob/master/LICENSE.pdf\n", + "\n", + " warnings.warn(\n" + ] + }, { "name": "stdout", "output_type": "stream", @@ -49,7 +62,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 32, "metadata": {}, "outputs": [ { @@ -58,7 +71,7 @@ "{'score': Score(home=0, away=0)}" ] }, - "execution_count": 20, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" } @@ -80,7 +93,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 33, "metadata": {}, "outputs": [ { @@ -89,7 +102,7 @@ "28" ] }, - "execution_count": 21, + "execution_count": 33, "metadata": {}, "output_type": "execute_result" } @@ -102,41 +115,41 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 34, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "0-0 Barcelona - Lionel Andrés Messi Cuccittini - ShotResult.OFF_TARGET\n", - "0-0 Barcelona - Jordi Alba Ramos - ShotResult.OFF_TARGET\n", - "0-0 Barcelona - Lionel Andrés Messi Cuccittini - ShotResult.SAVED\n", - "0-0 Deportivo Alavés - Rubén Sobrino Pozuelo - ShotResult.OFF_TARGET\n", - "0-0 Barcelona - Luis Alberto Suárez Díaz - ShotResult.OFF_TARGET\n", - "0-0 Barcelona - Ousmane Dembélé - ShotResult.OFF_TARGET\n", - "0-0 Barcelona - Ivan Rakitić - ShotResult.OFF_TARGET\n", - "0-0 Barcelona - Lionel Andrés Messi Cuccittini - ShotResult.POST\n", - "0-0 Barcelona - Gerard Piqué Bernabéu - ShotResult.OFF_TARGET\n", - "0-0 Barcelona - Ousmane Dembélé - ShotResult.SAVED\n", - "0-0 Barcelona - Luis Alberto Suárez Díaz - ShotResult.OFF_TARGET\n", - "0-0 Barcelona - Ousmane Dembélé - ShotResult.OFF_TARGET\n", - "0-0 Barcelona - Jordi Alba Ramos - ShotResult.SAVED\n", - "0-0 Deportivo Alavés - Mubarak Wakaso - ShotResult.BLOCKED\n", - "0-0 Barcelona - Luis Alberto Suárez Díaz - ShotResult.BLOCKED\n", - "0-0 Barcelona - Philippe Coutinho Correia - ShotResult.BLOCKED\n", - "0-0 Barcelona - Jordi Alba Ramos - ShotResult.BLOCKED\n", - "0-0 Barcelona - Lionel Andrés Messi Cuccittini - ShotResult.OFF_TARGET\n", - "0-0 Barcelona - Philippe Coutinho Correia - ShotResult.BLOCKED\n", - "0-0 Barcelona - Lionel Andrés Messi Cuccittini - ShotResult.GOAL\n", - "1-0 Barcelona - Lionel Andrés Messi Cuccittini - ShotResult.POST\n", - "1-0 Barcelona - Ivan Rakitić - ShotResult.BLOCKED\n", - "1-0 Barcelona - Luis Alberto Suárez Díaz - ShotResult.SAVED\n", - "1-0 Deportivo Alavés - Adrián Marín Gómez - ShotResult.OFF_TARGET\n", - "1-0 Barcelona - Philippe Coutinho Correia - ShotResult.SAVED\n", - "1-0 Barcelona - Philippe Coutinho Correia - ShotResult.GOAL\n", - "2-0 Barcelona - Lionel Andrés Messi Cuccittini - ShotResult.SAVED\n", - "2-0 Barcelona - Lionel Andrés Messi Cuccittini - ShotResult.GOAL\n" + "0-0 Barcelona - Lionel Andrés Messi Cuccittini - OFF_TARGET\n", + "0-0 Barcelona - Jordi Alba Ramos - OFF_TARGET\n", + "0-0 Barcelona - Lionel Andrés Messi Cuccittini - SAVED\n", + "0-0 Deportivo Alavés - Rubén Sobrino Pozuelo - OFF_TARGET\n", + "0-0 Barcelona - Luis Alberto Suárez Díaz - OFF_TARGET\n", + "0-0 Barcelona - Ousmane Dembélé - OFF_TARGET\n", + "0-0 Barcelona - Ivan Rakitić - OFF_TARGET\n", + "0-0 Barcelona - Lionel Andrés Messi Cuccittini - POST\n", + "0-0 Barcelona - Gerard Piqué Bernabéu - OFF_TARGET\n", + "0-0 Barcelona - Ousmane Dembélé - SAVED\n", + "0-0 Barcelona - Luis Alberto Suárez Díaz - OFF_TARGET\n", + "0-0 Barcelona - Ousmane Dembélé - OFF_TARGET\n", + "0-0 Barcelona - Jordi Alba Ramos - SAVED\n", + "0-0 Deportivo Alavés - Mubarak Wakaso - BLOCKED\n", + "0-0 Barcelona - Luis Alberto Suárez Díaz - BLOCKED\n", + "0-0 Barcelona - Philippe Coutinho Correia - BLOCKED\n", + "0-0 Barcelona - Jordi Alba Ramos - BLOCKED\n", + "0-0 Barcelona - Lionel Andrés Messi Cuccittini - OFF_TARGET\n", + "0-0 Barcelona - Philippe Coutinho Correia - BLOCKED\n", + "0-0 Barcelona - Lionel Andrés Messi Cuccittini - GOAL\n", + "1-0 Barcelona - Lionel Andrés Messi Cuccittini - POST\n", + "1-0 Barcelona - Ivan Rakitić - BLOCKED\n", + "1-0 Barcelona - Luis Alberto Suárez Díaz - SAVED\n", + "1-0 Deportivo Alavés - Adrián Marín Gómez - OFF_TARGET\n", + "1-0 Barcelona - Philippe Coutinho Correia - SAVED\n", + "1-0 Barcelona - Philippe Coutinho Correia - GOAL\n", + "2-0 Barcelona - Lionel Andrés Messi Cuccittini - SAVED\n", + "2-0 Barcelona - Lionel Andrés Messi Cuccittini - GOAL\n" ] } ], @@ -147,7 +160,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 35, "metadata": {}, "outputs": [ { @@ -189,7 +202,6 @@ " body_part_type\n", " home_score\n", " away_score\n", - " set_piece_type\n", " \n", " \n", " \n", @@ -213,7 +225,6 @@ " RIGHT_FOOT\n", " 0\n", " 0\n", - " NaN\n", " \n", " \n", " 1\n", @@ -235,7 +246,6 @@ " LEFT_FOOT\n", " 0\n", " 0\n", - " NaN\n", " \n", " \n", " 2\n", @@ -257,7 +267,6 @@ " LEFT_FOOT\n", " 0\n", " 0\n", - " NaN\n", " \n", " \n", " 3\n", @@ -279,7 +288,6 @@ " HEAD\n", " 0\n", " 0\n", - " NaN\n", " \n", " \n", " 4\n", @@ -301,7 +309,6 @@ " RIGHT_FOOT\n", " 0\n", " 0\n", - " NaN\n", " \n", " \n", " 5\n", @@ -323,7 +330,6 @@ " LEFT_FOOT\n", " 0\n", " 0\n", - " NaN\n", " \n", " \n", " 6\n", @@ -345,7 +351,6 @@ " HEAD\n", " 0\n", " 0\n", - " NaN\n", " \n", " \n", " 7\n", @@ -367,7 +372,6 @@ " LEFT_FOOT\n", " 0\n", " 0\n", - " FREE_KICK\n", " \n", " \n", " 8\n", @@ -389,7 +393,6 @@ " HEAD\n", " 0\n", " 0\n", - " NaN\n", " \n", " \n", " 9\n", @@ -411,7 +414,6 @@ " RIGHT_FOOT\n", " 0\n", " 0\n", - " NaN\n", " \n", " \n", " 10\n", @@ -433,7 +435,6 @@ " RIGHT_FOOT\n", " 0\n", " 0\n", - " NaN\n", " \n", " \n", " 11\n", @@ -455,7 +456,6 @@ " RIGHT_FOOT\n", " 0\n", " 0\n", - " NaN\n", " \n", " \n", " 12\n", @@ -477,7 +477,6 @@ " LEFT_FOOT\n", " 0\n", " 0\n", - " NaN\n", " \n", " \n", " 13\n", @@ -499,7 +498,6 @@ " LEFT_FOOT\n", " 0\n", " 0\n", - " NaN\n", " \n", " \n", " 14\n", @@ -521,7 +519,6 @@ " RIGHT_FOOT\n", " 0\n", " 0\n", - " NaN\n", " \n", " \n", " 15\n", @@ -543,7 +540,6 @@ " RIGHT_FOOT\n", " 0\n", " 0\n", - " NaN\n", " \n", " \n", " 16\n", @@ -565,7 +561,6 @@ " LEFT_FOOT\n", " 0\n", " 0\n", - " NaN\n", " \n", " \n", " 17\n", @@ -587,7 +582,6 @@ " LEFT_FOOT\n", " 0\n", " 0\n", - " NaN\n", " \n", " \n", " 18\n", @@ -609,7 +603,6 @@ " RIGHT_FOOT\n", " 0\n", " 0\n", - " NaN\n", " \n", " \n", " 19\n", @@ -631,7 +624,6 @@ " LEFT_FOOT\n", " 0\n", " 0\n", - " FREE_KICK\n", " \n", " \n", " 20\n", @@ -653,7 +645,6 @@ " LEFT_FOOT\n", " 1\n", " 0\n", - " NaN\n", " \n", " \n", " 21\n", @@ -675,7 +666,6 @@ " RIGHT_FOOT\n", " 1\n", " 0\n", - " NaN\n", " \n", " \n", " 22\n", @@ -697,7 +687,6 @@ " LEFT_FOOT\n", " 1\n", " 0\n", - " NaN\n", " \n", " \n", " 23\n", @@ -719,7 +708,6 @@ " RIGHT_FOOT\n", " 1\n", " 0\n", - " NaN\n", " \n", " \n", " 24\n", @@ -741,7 +729,6 @@ " RIGHT_FOOT\n", " 1\n", " 0\n", - " NaN\n", " \n", " \n", " 25\n", @@ -763,7 +750,6 @@ " RIGHT_FOOT\n", " 1\n", " 0\n", - " NaN\n", " \n", " \n", " 26\n", @@ -785,7 +771,6 @@ " LEFT_FOOT\n", " 2\n", " 0\n", - " NaN\n", " \n", " \n", " 27\n", @@ -807,7 +792,6 @@ " LEFT_FOOT\n", " 2\n", " 0\n", - " NaN\n", " \n", " \n", "\n", @@ -904,47 +888,48 @@ "26 5503 0.883750 0.575625 None \n", "27 5503 0.932917 0.431875 None \n", "\n", - " end_coordinates_y body_part_type home_score away_score set_piece_type \n", - "0 None RIGHT_FOOT 0 0 NaN \n", - "1 None LEFT_FOOT 0 0 NaN \n", - "2 None LEFT_FOOT 0 0 NaN \n", - "3 None HEAD 0 0 NaN \n", - "4 None RIGHT_FOOT 0 0 NaN \n", - "5 None LEFT_FOOT 0 0 NaN \n", - "6 None HEAD 0 0 NaN \n", - "7 None LEFT_FOOT 0 0 FREE_KICK \n", - "8 None HEAD 0 0 NaN \n", - "9 None RIGHT_FOOT 0 0 NaN \n", - "10 None RIGHT_FOOT 0 0 NaN \n", - "11 None RIGHT_FOOT 0 0 NaN \n", - "12 None LEFT_FOOT 0 0 NaN \n", - "13 None LEFT_FOOT 0 0 NaN \n", - "14 None RIGHT_FOOT 0 0 NaN \n", - "15 None RIGHT_FOOT 0 0 NaN \n", - "16 None LEFT_FOOT 0 0 NaN \n", - "17 None LEFT_FOOT 0 0 NaN \n", - "18 None RIGHT_FOOT 0 0 NaN \n", - "19 None LEFT_FOOT 0 0 FREE_KICK \n", - "20 None LEFT_FOOT 1 0 NaN \n", - "21 None RIGHT_FOOT 1 0 NaN \n", - "22 None LEFT_FOOT 1 0 NaN \n", - "23 None RIGHT_FOOT 1 0 NaN \n", - "24 None RIGHT_FOOT 1 0 NaN \n", - "25 None RIGHT_FOOT 1 0 NaN \n", - "26 None LEFT_FOOT 2 0 NaN \n", - "27 None LEFT_FOOT 2 0 NaN " + " end_coordinates_y body_part_type home_score away_score \n", + "0 None RIGHT_FOOT 0 0 \n", + "1 None LEFT_FOOT 0 0 \n", + "2 None LEFT_FOOT 0 0 \n", + "3 None HEAD 0 0 \n", + "4 None RIGHT_FOOT 0 0 \n", + "5 None LEFT_FOOT 0 0 \n", + "6 None HEAD 0 0 \n", + "7 None LEFT_FOOT 0 0 \n", + "8 None HEAD 0 0 \n", + "9 None RIGHT_FOOT 0 0 \n", + "10 None RIGHT_FOOT 0 0 \n", + "11 None RIGHT_FOOT 0 0 \n", + "12 None LEFT_FOOT 0 0 \n", + "13 None LEFT_FOOT 0 0 \n", + "14 None RIGHT_FOOT 0 0 \n", + "15 None RIGHT_FOOT 0 0 \n", + "16 None LEFT_FOOT 0 0 \n", + "17 None LEFT_FOOT 0 0 \n", + "18 None RIGHT_FOOT 0 0 \n", + "19 None LEFT_FOOT 0 0 \n", + "20 None LEFT_FOOT 1 0 \n", + "21 None RIGHT_FOOT 1 0 \n", + "22 None LEFT_FOOT 1 0 \n", + "23 None RIGHT_FOOT 1 0 \n", + "24 None RIGHT_FOOT 1 0 \n", + "25 None RIGHT_FOOT 1 0 \n", + "26 None LEFT_FOOT 2 0 \n", + "27 None LEFT_FOOT 2 0 " ] }, - "execution_count": 23, + "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "dataframe = dataset.to_pandas(additional_columns={\n", - " 'home_score': lambda event: event.state['score'].home,\n", - " 'away_score': lambda event: event.state['score'].away\n", - "})\n", + "dataframe = dataset.to_df(\n", + " \"*\",\n", + " home_score=lambda event: event.state['score'].home,\n", + " away_score=lambda event: event.state['score'].away\n", + ")\n", "dataframe" ] }, @@ -957,7 +942,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 36, "metadata": {}, "outputs": [ { @@ -999,7 +984,6 @@ " body_part_type\n", " home_score\n", " away_score\n", - " set_piece_type\n", " \n", " \n", " \n", @@ -1023,7 +1007,6 @@ " LEFT_FOOT\n", " 2\n", " 0\n", - " NaN\n", " \n", " \n", " 27\n", @@ -1045,7 +1028,6 @@ " LEFT_FOOT\n", " 2\n", " 0\n", - " NaN\n", " \n", " \n", "\n", @@ -1064,12 +1046,12 @@ "26 5503 0.883750 0.575625 None \n", "27 5503 0.932917 0.431875 None \n", "\n", - " end_coordinates_y body_part_type home_score away_score set_piece_type \n", - "26 None LEFT_FOOT 2 0 NaN \n", - "27 None LEFT_FOOT 2 0 NaN " + " end_coordinates_y body_part_type home_score away_score \n", + "26 None LEFT_FOOT 2 0 \n", + "27 None LEFT_FOOT 2 0 " ] }, - "execution_count": 24, + "execution_count": 36, "metadata": {}, "output_type": "execute_result" } @@ -1089,9 +1071,23 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 37, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/koen/Developer/Projects/PySport/kloppy/.venv/lib/python3.10/site-packages/kloppy-3.7.1-py3.10.egg/kloppy/_providers/statsbomb.py:67: UserWarning: \n", + "\n", + "You are about to use StatsBomb public data.\n", + "By using this data, you are agreeing to the user agreement. \n", + "The user agreement can be found here: https://github.com/statsbomb/open-data/blob/master/LICENSE.pdf\n", + "\n", + " warnings.warn(\n" + ] + } + ], "source": [ "from kloppy import statsbomb\n", "from kloppy.domain import EventType\n", @@ -1110,7 +1106,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 38, "metadata": {}, "outputs": [], "source": [ @@ -1119,7 +1115,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 39, "metadata": {}, "outputs": [], "source": [ @@ -1127,13 +1123,13 @@ " dataset\n", " .add_state('lineup')\n", " .filter(lambda event: arturo_vidal in event.state['lineup'].players)\n", - " .to_pandas()\n", + " .to_df()\n", ")" ] }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 40, "metadata": {}, "outputs": [ { @@ -1150,7 +1146,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 41, "metadata": {}, "outputs": [], "source": [ @@ -1158,15 +1154,16 @@ " dataset\n", " .add_state('lineup')\n", " .filter(lambda event: event.event_type == EventType.PASS and event.team == home_team)\n", - " .to_pandas(additional_columns={\n", - " 'vidal_on_pitch': lambda event: arturo_vidal in event.state['lineup'].players\n", - " })\n", + " .to_df(\n", + " \"*\",\n", + " vidal_on_pitch=lambda event: arturo_vidal in event.state['lineup'].players\n", + " )\n", ")" ] }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 42, "metadata": {}, "outputs": [ { @@ -1225,7 +1222,7 @@ "True 83 88 94.318182" ] }, - "execution_count": 30, + "execution_count": 42, "metadata": {}, "output_type": "execute_result" } @@ -1247,14 +1244,14 @@ }, { "cell_type": "code", - "execution_count": 63, + "execution_count": 43, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "/Users/koen/Developer/Projects/PySport/kloppy/.venv/lib/python3.8/site-packages/kloppy-3.1.0-py3.8.egg/kloppy/_providers/statsbomb.py:46: UserWarning: \n", + "/Users/koen/Developer/Projects/PySport/kloppy/.venv/lib/python3.10/site-packages/kloppy-3.7.1-py3.10.egg/kloppy/_providers/statsbomb.py:67: UserWarning: \n", "\n", "You are about to use StatsBomb public data.\n", "By using this data, you are agreeing to the user agreement. \n", @@ -1277,20 +1274,21 @@ " .filter(\n", " lambda event: event.event_type == EventType.SHOT\n", " )\n", - " .to_pandas(additional_columns={\n", - " 'Team': lambda event: str(event.team),\n", - " 'Formation': lambda event: str(\n", + " .to_df(\n", + " \"*\",\n", + " Team=lambda event: str(event.team),\n", + " Formation=lambda event: str(\n", " event.state['formation'].home \n", " if event.team == dataset.metadata.teams[0] \n", " else event.state['formation'].away\n", " )\n", - " })\n", + " )\n", ")" ] }, { "cell_type": "code", - "execution_count": 65, + "execution_count": 44, "metadata": {}, "outputs": [ { @@ -1367,7 +1365,7 @@ " 4-4-2 0 1 0.000000" ] }, - "execution_count": 65, + "execution_count": 44, "metadata": {}, "output_type": "execute_result" } @@ -1408,7 +1406,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.9" + "version": "3.10.6" }, "toc": { "base_numbering": 1, diff --git a/docs/examples/tracking_data.ipynb b/docs/examples/tracking_data.ipynb index e603f926..a5311410 100644 --- a/docs/examples/tracking_data.ipynb +++ b/docs/examples/tracking_data.ipynb @@ -164,7 +164,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.9" + "version": "3.10.6" }, "toc": { "base_numbering": 1, diff --git a/docs/getting-started/datafactory.ipynb b/docs/getting-started/datafactory.ipynb index 37bf9a9a..30695063 100644 --- a/docs/getting-started/datafactory.ipynb +++ b/docs/getting-started/datafactory.ipynb @@ -200,16 +200,8 @@ " event_types=[\"shot\", \"pass\"]\n", ")\n", "\n", - "dataset.to_pandas().head()" + "dataset.to_df().head()" ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "35a991ab", - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { @@ -228,7 +220,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.9" + "version": "3.10.6" } }, "nbformat": 4, diff --git a/docs/getting-started/metrica.ipynb b/docs/getting-started/metrica.ipynb index b4ab6301..9ff5599c 100644 --- a/docs/getting-started/metrica.ipynb +++ b/docs/getting-started/metrica.ipynb @@ -13,7 +13,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 1, "id": "f3e2e6fd", "metadata": {}, "outputs": [ @@ -40,14 +40,14 @@ " \n", " period_id\n", " timestamp\n", + " frame_id\n", " ball_state\n", " ball_owning_team_id\n", " ball_x\n", " ball_y\n", + " ball_z\n", " home_11_x\n", " home_11_y\n", - " home_11_d\n", - " home_11_s\n", " ...\n", " away_26_d\n", " away_26_s\n", @@ -66,14 +66,14 @@ " 0\n", " 1\n", " 0.00\n", + " 1\n", " None\n", " None\n", " 0.45472\n", " 0.61291\n", + " None\n", " 0.00082\n", " 0.51762\n", - " None\n", - " None\n", " ...\n", " NaN\n", " NaN\n", @@ -90,14 +90,14 @@ " 1\n", " 2\n", " 0.08\n", + " 145006\n", " None\n", " None\n", " NaN\n", " NaN\n", + " None\n", " 0.90456\n", " 0.54644\n", - " None\n", - " None\n", " ...\n", " NaN\n", " NaN\n", @@ -112,30 +112,26 @@ " \n", " \n", "\n", - "

2 rows × 118 columns

\n", + "

2 rows × 120 columns

\n", "" ], "text/plain": [ - " period_id timestamp ball_state ball_owning_team_id ball_x ball_y \\\n", - "0 1 0.00 None None 0.45472 0.61291 \n", - "1 2 0.08 None None NaN NaN \n", + " period_id timestamp frame_id ball_state ball_owning_team_id ball_x \\\n", + "0 1 0.00 1 None None 0.45472 \n", + "1 2 0.08 145006 None None NaN \n", "\n", - " home_11_x home_11_y home_11_d home_11_s ... away_26_d away_26_s \\\n", - "0 0.00082 0.51762 None None ... NaN NaN \n", - "1 0.90456 0.54644 None None ... NaN NaN \n", + " ball_y ball_z home_11_x home_11_y ... away_26_d away_26_s away_27_x \\\n", + "0 0.61291 None 0.00082 0.51762 ... NaN NaN NaN \n", + "1 NaN None 0.90456 0.54644 ... NaN NaN 0.19754 \n", "\n", - " away_27_x away_27_y away_27_d away_27_s away_28_x away_28_y away_28_d \\\n", - "0 NaN NaN NaN NaN NaN NaN NaN \n", - "1 0.19754 0.54636 NaN NaN 0.21798 0.18921 NaN \n", + " away_27_y away_27_d away_27_s away_28_x away_28_y away_28_d away_28_s \n", + "0 NaN NaN NaN NaN NaN NaN NaN \n", + "1 0.54636 NaN NaN 0.21798 0.18921 NaN NaN \n", "\n", - " away_28_s \n", - "0 NaN \n", - "1 NaN \n", - "\n", - "[2 rows x 118 columns]" + "[2 rows x 120 columns]" ] }, - "execution_count": 3, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -153,7 +149,7 @@ " coordinates=\"metrica\"\n", ")\n", "\n", - "dataset.to_pandas().head()" + "dataset.to_df().head()" ] }, { @@ -166,7 +162,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 2, "id": "0a582d72", "metadata": {}, "outputs": [ @@ -193,14 +189,14 @@ " \n", " period_id\n", " timestamp\n", + " frame_id\n", " ball_state\n", " ball_owning_team_id\n", " ball_x\n", " ball_y\n", + " ball_z\n", " home_11_x\n", " home_11_y\n", - " home_11_d\n", - " home_11_s\n", " ...\n", " away_22_d\n", " away_22_s\n", @@ -219,14 +215,14 @@ " 0\n", " 1\n", " 0.0\n", + " 1\n", " None\n", " None\n", " 0.45472\n", " 0.61291\n", + " None\n", " 0.00082\n", " 0.51762\n", - " None\n", - " None\n", " ...\n", " None\n", " None\n", @@ -243,14 +239,14 @@ " 1\n", " 1\n", " 0.2\n", + " 6\n", " None\n", " None\n", " 0.55677\n", " 0.61091\n", + " None\n", " 0.00140\n", " 0.51762\n", - " None\n", - " None\n", " ...\n", " None\n", " None\n", @@ -267,14 +263,14 @@ " 2\n", " 1\n", " 0.4\n", + " 11\n", " None\n", " None\n", " 0.56504\n", " 0.69395\n", + " None\n", " 0.00085\n", " 0.51890\n", - " None\n", - " None\n", " ...\n", " None\n", " None\n", @@ -291,14 +287,14 @@ " 3\n", " 1\n", " 0.6\n", + " 16\n", " None\n", " None\n", " 0.57330\n", " 0.77700\n", + " None\n", " 0.00065\n", " 0.51916\n", - " None\n", - " None\n", " ...\n", " None\n", " None\n", @@ -315,14 +311,14 @@ " 4\n", " 1\n", " 0.8\n", + " 21\n", " None\n", " None\n", " 0.57247\n", " 0.79726\n", + " None\n", " 0.00066\n", " 0.51879\n", - " None\n", - " None\n", " ...\n", " None\n", " None\n", @@ -337,42 +333,35 @@ " \n", " \n", "\n", - "

5 rows × 94 columns

\n", + "

5 rows × 96 columns

\n", "" ], "text/plain": [ - " period_id timestamp ball_state ball_owning_team_id ball_x ball_y \\\n", - "0 1 0.0 None None 0.45472 0.61291 \n", - "1 1 0.2 None None 0.55677 0.61091 \n", - "2 1 0.4 None None 0.56504 0.69395 \n", - "3 1 0.6 None None 0.57330 0.77700 \n", - "4 1 0.8 None None 0.57247 0.79726 \n", - "\n", - " home_11_x home_11_y home_11_d home_11_s ... away_22_d away_22_s \\\n", - "0 0.00082 0.51762 None None ... None None \n", - "1 0.00140 0.51762 None None ... None None \n", - "2 0.00085 0.51890 None None ... None None \n", - "3 0.00065 0.51916 None None ... None None \n", - "4 0.00066 0.51879 None None ... None None \n", + " period_id timestamp frame_id ball_state ball_owning_team_id ball_x \\\n", + "0 1 0.0 1 None None 0.45472 \n", + "1 1 0.2 6 None None 0.55677 \n", + "2 1 0.4 11 None None 0.56504 \n", + "3 1 0.6 16 None None 0.57330 \n", + "4 1 0.8 21 None None 0.57247 \n", "\n", - " away_23_x away_23_y away_23_d away_23_s away_24_x away_24_y away_24_d \\\n", - "0 0.43693 0.94998 None None 0.37833 0.72617 None \n", - "1 0.43504 0.95116 None None 0.37557 0.72327 None \n", - "2 0.43128 0.95690 None None 0.36945 0.71909 None \n", - "3 0.42728 0.96250 None None 0.36360 0.71470 None \n", - "4 0.42275 0.96700 None None 0.35810 0.71129 None \n", + " ball_y ball_z home_11_x home_11_y ... away_22_d away_22_s away_23_x \\\n", + "0 0.61291 None 0.00082 0.51762 ... None None 0.43693 \n", + "1 0.61091 None 0.00140 0.51762 ... None None 0.43504 \n", + "2 0.69395 None 0.00085 0.51890 ... None None 0.43128 \n", + "3 0.77700 None 0.00065 0.51916 ... None None 0.42728 \n", + "4 0.79726 None 0.00066 0.51879 ... None None 0.42275 \n", "\n", - " away_24_s \n", - "0 None \n", - "1 None \n", - "2 None \n", - "3 None \n", - "4 None \n", + " away_23_y away_23_d away_23_s away_24_x away_24_y away_24_d away_24_s \n", + "0 0.94998 None None 0.37833 0.72617 None None \n", + "1 0.95116 None None 0.37557 0.72327 None None \n", + "2 0.95690 None None 0.36945 0.71909 None None \n", + "3 0.96250 None None 0.36360 0.71470 None None \n", + "4 0.96700 None None 0.35810 0.71129 None None \n", "\n", - "[5 rows x 94 columns]" + "[5 rows x 96 columns]" ] }, - "execution_count": 4, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -390,7 +379,7 @@ " coordinates=\"metrica\"\n", ")\n", "\n", - "dataset.to_pandas().head()" + "dataset.to_df().head()" ] }, { @@ -403,7 +392,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 3, "id": "90ae6cf1", "metadata": {}, "outputs": [ @@ -430,14 +419,14 @@ " \n", " period_id\n", " timestamp\n", + " frame_id\n", " ball_state\n", " ball_owning_team_id\n", " ball_x\n", " ball_y\n", + " ball_z\n", " home_11_x\n", " home_11_y\n", - " home_11_d\n", - " home_11_s\n", " ...\n", " away_22_d\n", " away_22_s\n", @@ -456,14 +445,14 @@ " 0\n", " 1\n", " 0.0\n", + " 1\n", " None\n", " None\n", " 0.45472\n", " 0.61291\n", + " None\n", " 0.00082\n", " 0.51762\n", - " None\n", - " None\n", " ...\n", " None\n", " None\n", @@ -480,14 +469,14 @@ " 1\n", " 1\n", " 0.2\n", + " 6\n", " None\n", " None\n", " 0.55677\n", " 0.61091\n", + " None\n", " 0.00140\n", " 0.51762\n", - " None\n", - " None\n", " ...\n", " None\n", " None\n", @@ -504,14 +493,14 @@ " 2\n", " 1\n", " 0.4\n", + " 11\n", " None\n", " None\n", " 0.56504\n", " 0.69395\n", + " None\n", " 0.00085\n", " 0.51890\n", - " None\n", - " None\n", " ...\n", " None\n", " None\n", @@ -528,14 +517,14 @@ " 3\n", " 1\n", " 0.6\n", + " 16\n", " None\n", " None\n", " 0.57330\n", " 0.77700\n", + " None\n", " 0.00065\n", " 0.51916\n", - " None\n", - " None\n", " ...\n", " None\n", " None\n", @@ -552,14 +541,14 @@ " 4\n", " 1\n", " 0.8\n", + " 21\n", " None\n", " None\n", " 0.57247\n", " 0.79726\n", + " None\n", " 0.00066\n", " 0.51879\n", - " None\n", - " None\n", " ...\n", " None\n", " None\n", @@ -574,42 +563,35 @@ " \n", " \n", "\n", - "

5 rows × 94 columns

\n", + "

5 rows × 96 columns

\n", "" ], "text/plain": [ - " period_id timestamp ball_state ball_owning_team_id ball_x ball_y \\\n", - "0 1 0.0 None None 0.45472 0.61291 \n", - "1 1 0.2 None None 0.55677 0.61091 \n", - "2 1 0.4 None None 0.56504 0.69395 \n", - "3 1 0.6 None None 0.57330 0.77700 \n", - "4 1 0.8 None None 0.57247 0.79726 \n", + " period_id timestamp frame_id ball_state ball_owning_team_id ball_x \\\n", + "0 1 0.0 1 None None 0.45472 \n", + "1 1 0.2 6 None None 0.55677 \n", + "2 1 0.4 11 None None 0.56504 \n", + "3 1 0.6 16 None None 0.57330 \n", + "4 1 0.8 21 None None 0.57247 \n", "\n", - " home_11_x home_11_y home_11_d home_11_s ... away_22_d away_22_s \\\n", - "0 0.00082 0.51762 None None ... None None \n", - "1 0.00140 0.51762 None None ... None None \n", - "2 0.00085 0.51890 None None ... None None \n", - "3 0.00065 0.51916 None None ... None None \n", - "4 0.00066 0.51879 None None ... None None \n", + " ball_y ball_z home_11_x home_11_y ... away_22_d away_22_s away_23_x \\\n", + "0 0.61291 None 0.00082 0.51762 ... None None 0.43693 \n", + "1 0.61091 None 0.00140 0.51762 ... None None 0.43504 \n", + "2 0.69395 None 0.00085 0.51890 ... None None 0.43128 \n", + "3 0.77700 None 0.00065 0.51916 ... None None 0.42728 \n", + "4 0.79726 None 0.00066 0.51879 ... None None 0.42275 \n", "\n", - " away_23_x away_23_y away_23_d away_23_s away_24_x away_24_y away_24_d \\\n", - "0 0.43693 0.94998 None None 0.37833 0.72617 None \n", - "1 0.43504 0.95116 None None 0.37557 0.72327 None \n", - "2 0.43128 0.95690 None None 0.36945 0.71909 None \n", - "3 0.42728 0.96250 None None 0.36360 0.71470 None \n", - "4 0.42275 0.96700 None None 0.35810 0.71129 None \n", + " away_23_y away_23_d away_23_s away_24_x away_24_y away_24_d away_24_s \n", + "0 0.94998 None None 0.37833 0.72617 None None \n", + "1 0.95116 None None 0.37557 0.72327 None None \n", + "2 0.95690 None None 0.36945 0.71909 None None \n", + "3 0.96250 None None 0.36360 0.71470 None None \n", + "4 0.96700 None None 0.35810 0.71129 None None \n", "\n", - " away_24_s \n", - "0 None \n", - "1 None \n", - "2 None \n", - "3 None \n", - "4 None \n", - "\n", - "[5 rows x 94 columns]" + "[5 rows x 96 columns]" ] }, - "execution_count": 5, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -626,7 +608,7 @@ " coordinates=\"metrica\"\n", ")\n", "\n", - "dataset.to_pandas().head()" + "dataset.to_df().head()" ] }, { @@ -639,7 +621,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 4, "id": "2ccac53a", "metadata": {}, "outputs": [ @@ -666,14 +648,14 @@ " \n", " period_id\n", " timestamp\n", + " frame_id\n", " ball_state\n", " ball_owning_team_id\n", " ball_x\n", " ball_y\n", + " ball_z\n", " Track_1_x\n", " Track_1_y\n", - " Track_1_d\n", - " Track_1_s\n", " ...\n", " Track_21_x\n", " Track_21_y\n", @@ -692,14 +674,14 @@ " 0\n", " 1\n", " 18.0\n", + " 450\n", " None\n", " None\n", " 0.52867\n", " 0.70690\n", + " None\n", " 0.30602\n", " 0.97029\n", - " None\n", - " 1.112790\n", " ...\n", " 0.39631\n", " 0.77277\n", @@ -716,14 +698,14 @@ " 1\n", " 1\n", " 18.2\n", + " 455\n", " None\n", " None\n", " 0.54588\n", " 0.71626\n", + " None\n", " 0.30817\n", " 0.96742\n", - " None\n", - " 1.308405\n", " ...\n", " 0.40246\n", " 0.76937\n", @@ -740,14 +722,14 @@ " 2\n", " 1\n", " 18.4\n", + " 460\n", " None\n", " None\n", " 0.56310\n", " 0.72562\n", + " None\n", " 0.31071\n", " 0.96452\n", - " None\n", - " 1.498831\n", " ...\n", " 0.40863\n", " 0.76542\n", @@ -764,14 +746,14 @@ " 3\n", " 1\n", " 18.6\n", + " 465\n", " None\n", " None\n", " 0.58031\n", " 0.73497\n", + " None\n", " 0.31365\n", " 0.96167\n", - " None\n", - " 1.672004\n", " ...\n", " 0.41480\n", " 0.76085\n", @@ -788,14 +770,14 @@ " 4\n", " 1\n", " 18.8\n", + " 470\n", " None\n", " None\n", " 0.59753\n", " 0.74433\n", + " None\n", " 0.31705\n", " 0.95887\n", - " None\n", - " 1.848415\n", " ...\n", " 0.42098\n", " 0.75571\n", @@ -810,42 +792,42 @@ " \n", " \n", "\n", - "

5 rows × 116 columns

\n", + "

5 rows × 118 columns

\n", "" ], "text/plain": [ - " period_id timestamp ball_state ball_owning_team_id ball_x ball_y \\\n", - "0 1 18.0 None None 0.52867 0.70690 \n", - "1 1 18.2 None None 0.54588 0.71626 \n", - "2 1 18.4 None None 0.56310 0.72562 \n", - "3 1 18.6 None None 0.58031 0.73497 \n", - "4 1 18.8 None None 0.59753 0.74433 \n", + " period_id timestamp frame_id ball_state ball_owning_team_id ball_x \\\n", + "0 1 18.0 450 None None 0.52867 \n", + "1 1 18.2 455 None None 0.54588 \n", + "2 1 18.4 460 None None 0.56310 \n", + "3 1 18.6 465 None None 0.58031 \n", + "4 1 18.8 470 None None 0.59753 \n", "\n", - " Track_1_x Track_1_y Track_1_d Track_1_s ... Track_21_x Track_21_y \\\n", - "0 0.30602 0.97029 None 1.112790 ... 0.39631 0.77277 \n", - "1 0.30817 0.96742 None 1.308405 ... 0.40246 0.76937 \n", - "2 0.31071 0.96452 None 1.498831 ... 0.40863 0.76542 \n", - "3 0.31365 0.96167 None 1.672004 ... 0.41480 0.76085 \n", - "4 0.31705 0.95887 None 1.848415 ... 0.42098 0.75571 \n", + " ball_y ball_z Track_1_x Track_1_y ... Track_21_x Track_21_y \\\n", + "0 0.70690 None 0.30602 0.97029 ... 0.39631 0.77277 \n", + "1 0.71626 None 0.30817 0.96742 ... 0.40246 0.76937 \n", + "2 0.72562 None 0.31071 0.96452 ... 0.40863 0.76542 \n", + "3 0.73497 None 0.31365 0.96167 ... 0.41480 0.76085 \n", + "4 0.74433 None 0.31705 0.95887 ... 0.42098 0.75571 \n", "\n", - " Track_21_d Track_21_s Track_21_mapping Track_22_x Track_22_y \\\n", - "0 None 3.338606 15.0 NaN NaN \n", - "1 None 3.387701 15.0 NaN NaN \n", - "2 None 3.442519 15.0 NaN NaN \n", - "3 None 3.514268 15.0 NaN NaN \n", - "4 None 3.601024 15.0 NaN NaN \n", + " Track_21_d Track_21_s Track_21_mapping Track_22_x Track_22_y \\\n", + "0 None 3.338606 15.0 NaN NaN \n", + "1 None 3.387701 15.0 NaN NaN \n", + "2 None 3.442519 15.0 NaN NaN \n", + "3 None 3.514268 15.0 NaN NaN \n", + "4 None 3.601024 15.0 NaN NaN \n", "\n", - " Track_22_d Track_22_s Track_22_mapping \n", - "0 None NaN 21.0 \n", - "1 None NaN 21.0 \n", - "2 None NaN 21.0 \n", - "3 None NaN 21.0 \n", - "4 None NaN 21.0 \n", + " Track_22_d Track_22_s Track_22_mapping \n", + "0 None NaN 21.0 \n", + "1 None NaN 21.0 \n", + "2 None NaN 21.0 \n", + "3 None NaN 21.0 \n", + "4 None NaN 21.0 \n", "\n", - "[5 rows x 116 columns]" + "[5 rows x 118 columns]" ] }, - "execution_count": 1, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -863,7 +845,7 @@ " coordinates=\"metrica\"\n", ")\n", "\n", - "dataset.to_pandas().head()" + "dataset.to_df().head()" ] }, { @@ -876,7 +858,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "id": "6aaa7038", "metadata": {}, "outputs": [ @@ -1061,7 +1043,7 @@ "4 NaN " ] }, - "execution_count": 6, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -1078,7 +1060,7 @@ " event_types=[\"shot\", \"pass\"]\n", ")\n", "\n", - "dataset.to_pandas().head()\n" + "dataset.to_df().head()\n" ] } ], @@ -1098,7 +1080,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.9" + "version": "3.10.6" } }, "nbformat": 4, diff --git a/docs/getting-started/opta.ipynb b/docs/getting-started/opta.ipynb index 0694d90e..ef0f3441 100644 --- a/docs/getting-started/opta.ipynb +++ b/docs/getting-started/opta.ipynb @@ -220,7 +220,7 @@ " event_types=[\"pass\", \"shot\"]\n", ")\n", "\n", - "dataset.to_pandas().head()" + "dataset.to_df().head()" ] } ], @@ -240,7 +240,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.9" + "version": "3.10.6" } }, "nbformat": 4, diff --git a/docs/getting-started/secondspectrum.ipynb b/docs/getting-started/secondspectrum.ipynb index c41609c9..dfc2275e 100644 --- a/docs/getting-started/secondspectrum.ipynb +++ b/docs/getting-started/secondspectrum.ipynb @@ -12,7 +12,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 1, "id": "efbb67de", "metadata": {}, "outputs": [ @@ -39,14 +39,14 @@ " \n", " period_id\n", " timestamp\n", + " frame_id\n", " ball_state\n", " ball_owning_team_id\n", " ball_x\n", " ball_y\n", + " ball_z\n", " 20grw_x\n", " 20grw_y\n", - " 20grw_d\n", - " 20grw_s\n", " ...\n", " 56zeu_d\n", " 56zeu_s\n", @@ -65,14 +65,14 @@ " 0\n", " 1\n", " 160.00\n", + " 4000\n", " alive\n", " 456\n", " 48.434473\n", " -16.681311\n", + " 0.0\n", " 46.299561\n", " -24.536171\n", - " None\n", - " None\n", " ...\n", " None\n", " None\n", @@ -89,14 +89,14 @@ " 1\n", " 2\n", " 681.72\n", + " 91600\n", " alive\n", " 123\n", " 23.364446\n", " -16.856017\n", + " 0.0\n", " 8.861703\n", " -33.088368\n", - " None\n", - " None\n", " ...\n", " None\n", " None\n", @@ -111,26 +111,26 @@ " \n", " \n", "\n", - "

2 rows × 94 columns

\n", + "

2 rows × 96 columns

\n", "" ], "text/plain": [ - " period_id timestamp ball_state ball_owning_team_id ball_x ball_y \\\n", - "0 1 160.00 alive 456 48.434473 -16.681311 \n", - "1 2 681.72 alive 123 23.364446 -16.856017 \n", + " period_id timestamp frame_id ball_state ball_owning_team_id ball_x \\\n", + "0 1 160.00 4000 alive 456 48.434473 \n", + "1 2 681.72 91600 alive 123 23.364446 \n", "\n", - " 20grw_x 20grw_y 20grw_d 20grw_s ... 56zeu_d 56zeu_s 27cl51_x \\\n", - "0 46.299561 -24.536171 None None ... None None 46.646914 \n", - "1 8.861703 -33.088368 None None ... None None -48.850250 \n", + " ball_y ball_z 20grw_x 20grw_y ... 56zeu_d 56zeu_s 27cl51_x \\\n", + "0 -16.681311 0.0 46.299561 -24.536171 ... None None 46.646914 \n", + "1 -16.856017 0.0 8.861703 -33.088368 ... None None -48.850250 \n", "\n", - " 27cl51_y 27cl51_d 27cl51_s eh90mu_x eh90mu_y eh90mu_d eh90mu_s \n", - "0 25.246787 None None 5.033404 -21.188707 None None \n", - "1 -16.447842 None None 15.112902 12.965995 None None \n", + " 27cl51_y 27cl51_d 27cl51_s eh90mu_x eh90mu_y eh90mu_d eh90mu_s \n", + "0 25.246787 None None 5.033404 -21.188707 None None \n", + "1 -16.447842 None None 15.112902 12.965995 None None \n", "\n", - "[2 rows x 94 columns]" + "[2 rows x 96 columns]" ] }, - "execution_count": 3, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -150,7 +150,7 @@ " only_alive=True\n", ")\n", "\n", - "dataset.to_pandas().head()" + "dataset.to_df().head()" ] } ], @@ -170,7 +170,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.9" + "version": "3.10.6" } }, "nbformat": 4, diff --git a/docs/getting-started/skillcorner.ipynb b/docs/getting-started/skillcorner.ipynb index 2a969160..27327bd8 100644 --- a/docs/getting-started/skillcorner.ipynb +++ b/docs/getting-started/skillcorner.ipynb @@ -12,7 +12,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 1, "id": "71e23535", "metadata": {}, "outputs": [ @@ -39,14 +39,14 @@ " \n", " period_id\n", " timestamp\n", + " frame_id\n", " ball_state\n", " ball_owning_team_id\n", " ball_x\n", " ball_y\n", + " ball_z\n", " home_22_x\n", " home_22_y\n", - " home_22_d\n", - " home_22_s\n", " ...\n", " away_anon_304_d\n", " away_anon_304_s\n", @@ -65,14 +65,14 @@ " 0\n", " 1\n", " 12.0\n", + " 1531\n", " None\n", " NaN\n", " 18.887029\n", " 30.037350\n", + " 1.246213\n", " 14.195641\n", " 23.489013\n", - " NaN\n", - " NaN\n", " ...\n", " NaN\n", " NaN\n", @@ -89,14 +89,14 @@ " 1\n", " 1\n", " 13.0\n", + " 1541\n", " None\n", " NaN\n", " 13.514701\n", " 25.827027\n", + " 0.657040\n", " 14.230466\n", " 15.453939\n", - " NaN\n", - " NaN\n", " ...\n", " NaN\n", " NaN\n", @@ -113,14 +113,14 @@ " 2\n", " 1\n", " 14.0\n", + " 1551\n", " None\n", " NaN\n", " 16.835040\n", " 27.427233\n", + " 0.057516\n", " 15.328696\n", " 17.867260\n", - " NaN\n", - " NaN\n", " ...\n", " NaN\n", " NaN\n", @@ -137,14 +137,14 @@ " 3\n", " 1\n", " 15.0\n", + " 1561\n", " None\n", " NaN\n", " 11.656880\n", " 24.721404\n", + " NaN\n", " 13.642248\n", " 22.210971\n", - " NaN\n", - " NaN\n", " ...\n", " NaN\n", " NaN\n", @@ -161,6 +161,7 @@ " 4\n", " 1\n", " 16.0\n", + " 1571\n", " None\n", " 103.0\n", " 7.426918\n", @@ -168,7 +169,6 @@ " NaN\n", " NaN\n", " NaN\n", - " NaN\n", " ...\n", " NaN\n", " NaN\n", @@ -183,23 +183,23 @@ " \n", " \n", "\n", - "

5 rows × 138 columns

\n", + "

5 rows × 140 columns

\n", "" ], "text/plain": [ - " period_id timestamp ball_state ball_owning_team_id ball_x ball_y \\\n", - "0 1 12.0 None NaN 18.887029 30.037350 \n", - "1 1 13.0 None NaN 13.514701 25.827027 \n", - "2 1 14.0 None NaN 16.835040 27.427233 \n", - "3 1 15.0 None NaN 11.656880 24.721404 \n", - "4 1 16.0 None 103.0 7.426918 30.572856 \n", + " period_id timestamp frame_id ball_state ball_owning_team_id ball_x \\\n", + "0 1 12.0 1531 None NaN 18.887029 \n", + "1 1 13.0 1541 None NaN 13.514701 \n", + "2 1 14.0 1551 None NaN 16.835040 \n", + "3 1 15.0 1561 None NaN 11.656880 \n", + "4 1 16.0 1571 None 103.0 7.426918 \n", "\n", - " home_22_x home_22_y home_22_d home_22_s ... away_anon_304_d \\\n", - "0 14.195641 23.489013 NaN NaN ... NaN \n", - "1 14.230466 15.453939 NaN NaN ... NaN \n", - "2 15.328696 17.867260 NaN NaN ... NaN \n", - "3 13.642248 22.210971 NaN NaN ... NaN \n", - "4 NaN NaN NaN NaN ... NaN \n", + " ball_y ball_z home_22_x home_22_y ... away_anon_304_d \\\n", + "0 30.037350 1.246213 14.195641 23.489013 ... NaN \n", + "1 25.827027 0.657040 14.230466 15.453939 ... NaN \n", + "2 27.427233 0.057516 15.328696 17.867260 ... NaN \n", + "3 24.721404 NaN 13.642248 22.210971 ... NaN \n", + "4 30.572856 NaN NaN NaN ... NaN \n", "\n", " away_anon_304_s home_anon_368_x home_anon_368_y home_anon_368_d \\\n", "0 NaN NaN NaN NaN \n", @@ -222,10 +222,10 @@ "3 NaN \n", "4 NaN \n", "\n", - "[5 rows x 138 columns]" + "[5 rows x 140 columns]" ] }, - "execution_count": 7, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -244,7 +244,7 @@ " include_empty_frames=False\n", ")\n", "\n", - "dataset.to_pandas().head()" + "dataset.to_df().head()" ] }, { @@ -257,7 +257,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 2, "id": "bff4e3aa", "metadata": {}, "outputs": [ @@ -284,14 +284,14 @@ " \n", " period_id\n", " timestamp\n", + " frame_id\n", " ball_state\n", " ball_owning_team_id\n", " ball_x\n", " ball_y\n", + " ball_z\n", " home_47_x\n", " home_47_y\n", - " home_47_d\n", - " home_47_s\n", " ...\n", " home_31_d\n", " home_31_s\n", @@ -310,14 +310,14 @@ " 0\n", " 1\n", " 1.0\n", + " 452\n", " None\n", " NaN\n", " 14.693770\n", " -0.907936\n", + " 5.222056e-02\n", " -4.630710\n", " -20.740084\n", - " NaN\n", - " NaN\n", " ...\n", " NaN\n", " NaN\n", @@ -334,12 +334,12 @@ " 1\n", " 1\n", " 2.0\n", + " 462\n", " None\n", " NaN\n", " 14.634828\n", " -0.030155\n", - " NaN\n", - " NaN\n", + " -3.604550e-02\n", " NaN\n", " NaN\n", " ...\n", @@ -358,14 +358,14 @@ " 2\n", " 1\n", " 13.0\n", + " 572\n", " None\n", " 40.0\n", " 37.410470\n", " -19.993496\n", + " -7.256100e-16\n", " 19.580474\n", " -19.368974\n", - " NaN\n", - " NaN\n", " ...\n", " NaN\n", " NaN\n", @@ -382,14 +382,14 @@ " 3\n", " 1\n", " 14.0\n", + " 582\n", " None\n", " 40.0\n", " 42.215165\n", " -22.637840\n", + " 1.230652e-01\n", " 26.785449\n", " -18.257435\n", - " NaN\n", - " NaN\n", " ...\n", " NaN\n", " NaN\n", @@ -406,14 +406,14 @@ " 4\n", " 1\n", " 15.0\n", + " 592\n", " None\n", " 40.0\n", " 42.433060\n", " -28.680917\n", + " NaN\n", " 31.769383\n", " -22.166959\n", - " NaN\n", - " NaN\n", " ...\n", " NaN\n", " NaN\n", @@ -428,23 +428,23 @@ " \n", " \n", "\n", - "

5 rows × 110 columns

\n", + "

5 rows × 112 columns

\n", "" ], "text/plain": [ - " period_id timestamp ball_state ball_owning_team_id ball_x ball_y \\\n", - "0 1 1.0 None NaN 14.693770 -0.907936 \n", - "1 1 2.0 None NaN 14.634828 -0.030155 \n", - "2 1 13.0 None 40.0 37.410470 -19.993496 \n", - "3 1 14.0 None 40.0 42.215165 -22.637840 \n", - "4 1 15.0 None 40.0 42.433060 -28.680917 \n", + " period_id timestamp frame_id ball_state ball_owning_team_id ball_x \\\n", + "0 1 1.0 452 None NaN 14.693770 \n", + "1 1 2.0 462 None NaN 14.634828 \n", + "2 1 13.0 572 None 40.0 37.410470 \n", + "3 1 14.0 582 None 40.0 42.215165 \n", + "4 1 15.0 592 None 40.0 42.433060 \n", "\n", - " home_47_x home_47_y home_47_d home_47_s ... home_31_d home_31_s \\\n", - "0 -4.630710 -20.740084 NaN NaN ... NaN NaN \n", - "1 NaN NaN NaN NaN ... NaN NaN \n", - "2 19.580474 -19.368974 NaN NaN ... NaN NaN \n", - "3 26.785449 -18.257435 NaN NaN ... NaN NaN \n", - "4 31.769383 -22.166959 NaN NaN ... NaN NaN \n", + " ball_y ball_z home_47_x home_47_y ... home_31_d home_31_s \\\n", + "0 -0.907936 5.222056e-02 -4.630710 -20.740084 ... NaN NaN \n", + "1 -0.030155 -3.604550e-02 NaN NaN ... NaN NaN \n", + "2 -19.993496 -7.256100e-16 19.580474 -19.368974 ... NaN NaN \n", + "3 -22.637840 1.230652e-01 26.785449 -18.257435 ... NaN NaN \n", + "4 -28.680917 NaN 31.769383 -22.166959 ... NaN NaN \n", "\n", " home_anon_471_x home_anon_471_y home_anon_471_d home_anon_471_s \\\n", "0 NaN NaN NaN NaN \n", @@ -460,10 +460,10 @@ "3 NaN NaN NaN NaN \n", "4 NaN NaN NaN NaN \n", "\n", - "[5 rows x 110 columns]" + "[5 rows x 112 columns]" ] }, - "execution_count": 8, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -482,7 +482,7 @@ " include_empty_frames=False\n", ")\n", "\n", - "dataset.to_pandas().head()" + "dataset.to_df().head()" ] }, { @@ -495,7 +495,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 3, "id": "797091f9", "metadata": {}, "outputs": [ @@ -522,14 +522,14 @@ " \n", " period_id\n", " timestamp\n", + " frame_id\n", " ball_state\n", " ball_owning_team_id\n", " ball_x\n", " ball_y\n", + " ball_z\n", " home_47_x\n", " home_47_y\n", - " home_47_d\n", - " home_47_s\n", " ...\n", " home_31_d\n", " home_31_s\n", @@ -548,14 +548,14 @@ " 0\n", " 1\n", " 1.0\n", + " 452\n", " None\n", " NaN\n", " 14.693770\n", " -0.907936\n", + " 5.222056e-02\n", " -4.630710\n", " -20.740084\n", - " NaN\n", - " NaN\n", " ...\n", " NaN\n", " NaN\n", @@ -572,12 +572,12 @@ " 1\n", " 1\n", " 2.0\n", + " 462\n", " None\n", " NaN\n", " 14.634828\n", " -0.030155\n", - " NaN\n", - " NaN\n", + " -3.604550e-02\n", " NaN\n", " NaN\n", " ...\n", @@ -596,14 +596,14 @@ " 2\n", " 1\n", " 13.0\n", + " 572\n", " None\n", " 40.0\n", " 37.410470\n", " -19.993496\n", + " -7.256100e-16\n", " 19.580474\n", " -19.368974\n", - " NaN\n", - " NaN\n", " ...\n", " NaN\n", " NaN\n", @@ -620,14 +620,14 @@ " 3\n", " 1\n", " 14.0\n", + " 582\n", " None\n", " 40.0\n", " 42.215165\n", " -22.637840\n", + " 1.230652e-01\n", " 26.785449\n", " -18.257435\n", - " NaN\n", - " NaN\n", " ...\n", " NaN\n", " NaN\n", @@ -644,14 +644,14 @@ " 4\n", " 1\n", " 15.0\n", + " 592\n", " None\n", " 40.0\n", " 42.433060\n", " -28.680917\n", + " NaN\n", " 31.769383\n", " -22.166959\n", - " NaN\n", - " NaN\n", " ...\n", " NaN\n", " NaN\n", @@ -666,23 +666,23 @@ " \n", " \n", "\n", - "

5 rows × 110 columns

\n", + "

5 rows × 112 columns

\n", "" ], "text/plain": [ - " period_id timestamp ball_state ball_owning_team_id ball_x ball_y \\\n", - "0 1 1.0 None NaN 14.693770 -0.907936 \n", - "1 1 2.0 None NaN 14.634828 -0.030155 \n", - "2 1 13.0 None 40.0 37.410470 -19.993496 \n", - "3 1 14.0 None 40.0 42.215165 -22.637840 \n", - "4 1 15.0 None 40.0 42.433060 -28.680917 \n", + " period_id timestamp frame_id ball_state ball_owning_team_id ball_x \\\n", + "0 1 1.0 452 None NaN 14.693770 \n", + "1 1 2.0 462 None NaN 14.634828 \n", + "2 1 13.0 572 None 40.0 37.410470 \n", + "3 1 14.0 582 None 40.0 42.215165 \n", + "4 1 15.0 592 None 40.0 42.433060 \n", "\n", - " home_47_x home_47_y home_47_d home_47_s ... home_31_d home_31_s \\\n", - "0 -4.630710 -20.740084 NaN NaN ... NaN NaN \n", - "1 NaN NaN NaN NaN ... NaN NaN \n", - "2 19.580474 -19.368974 NaN NaN ... NaN NaN \n", - "3 26.785449 -18.257435 NaN NaN ... NaN NaN \n", - "4 31.769383 -22.166959 NaN NaN ... NaN NaN \n", + " ball_y ball_z home_47_x home_47_y ... home_31_d home_31_s \\\n", + "0 -0.907936 5.222056e-02 -4.630710 -20.740084 ... NaN NaN \n", + "1 -0.030155 -3.604550e-02 NaN NaN ... NaN NaN \n", + "2 -19.993496 -7.256100e-16 19.580474 -19.368974 ... NaN NaN \n", + "3 -22.637840 1.230652e-01 26.785449 -18.257435 ... NaN NaN \n", + "4 -28.680917 NaN 31.769383 -22.166959 ... NaN NaN \n", "\n", " home_anon_471_x home_anon_471_y home_anon_471_d home_anon_471_s \\\n", "0 NaN NaN NaN NaN \n", @@ -698,10 +698,10 @@ "3 NaN NaN NaN NaN \n", "4 NaN NaN NaN NaN \n", "\n", - "[5 rows x 110 columns]" + "[5 rows x 112 columns]" ] }, - "execution_count": 9, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -719,7 +719,7 @@ " include_empty_frames=False\n", ")\n", "\n", - "dataset.to_pandas().head()" + "dataset.to_df().head()" ] } ], @@ -739,7 +739,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.9" + "version": "3.10.6" } }, "nbformat": 4, diff --git a/docs/getting-started/sportec.ipynb b/docs/getting-started/sportec.ipynb index fcd7b4df..399f8bb4 100644 --- a/docs/getting-started/sportec.ipynb +++ b/docs/getting-started/sportec.ipynb @@ -12,7 +12,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "id": "e9adb7cb", "metadata": {}, "outputs": [ @@ -159,7 +159,7 @@ " 4.21\n", " NaN\n", " NaN\n", - " NaN\n", + " None\n", " NaN\n", " NaN\n", " \n", @@ -194,10 +194,10 @@ "1 DFL-OBJ-002G3I NaN NaN \n", "2 DFL-OBJ-0027B9 THROW_IN NaN \n", "3 NaN NaN RIGHT_FOOT \n", - "4 NaN NaN NaN " + "4 None NaN NaN " ] }, - "execution_count": 2, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -214,7 +214,7 @@ " event_types=[\"pass\", \"shot\"]\n", ")\n", "\n", - "dataset.to_pandas().head()" + "dataset.to_df().head()" ] } ], @@ -234,7 +234,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.9" + "version": "3.10.6" } }, "nbformat": 4, diff --git a/docs/getting-started/sportscode.ipynb b/docs/getting-started/sportscode.ipynb index 390b3a3c..a24e319b 100644 --- a/docs/getting-started/sportscode.ipynb +++ b/docs/getting-started/sportscode.ipynb @@ -12,7 +12,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 1, "id": "523a21a7", "metadata": {}, "outputs": [ @@ -101,7 +101,7 @@ "2 NaN 0.13 " ] }, - "execution_count": 3, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -113,7 +113,7 @@ " data=\"../../kloppy/tests/files/code_xml.xml\"\n", ")\n", "\n", - "dataset.to_pandas().head()" + "dataset.to_df().head()" ] }, { @@ -126,7 +126,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 2, "id": "728790a3", "metadata": {}, "outputs": [ @@ -221,7 +221,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.9" + "version": "3.10.6" } }, "nbformat": 4, diff --git a/docs/getting-started/statsbomb.ipynb b/docs/getting-started/statsbomb.ipynb index 477015b1..dc94c0c0 100644 --- a/docs/getting-started/statsbomb.ipynb +++ b/docs/getting-started/statsbomb.ipynb @@ -19,7 +19,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 1, "id": "12ec8092", "metadata": {}, "outputs": [ @@ -62,149 +62,162 @@ " receiver_player_id\n", " set_piece_type\n", " body_part_type\n", + " pass_type\n", " \n", " \n", " \n", " \n", " 0\n", - " 34208ade-2af4-45c3-970e-655937cad938\n", + " bbc398f7-c784-4958-a504-37b583caf97a\n", " PASS\n", " COMPLETE\n", " True\n", " 1\n", - " 0.098\n", - " 2.007\n", + " 0.878\n", + " 2.788504\n", " alive\n", - " 206\n", - " 206\n", - " 6581\n", - " 60.5\n", - " 40.5\n", - " 35.5\n", - " 25.5\n", - " 6855\n", + " 909\n", + " 909\n", + " 11086\n", + " 59.95\n", + " 39.95\n", + " 32.45\n", + " 28.75\n", + " 8963\n", " KICK_OFF\n", - " LEFT_FOOT\n", + " RIGHT_FOOT\n", + " NaN\n", " \n", " \n", " 1\n", - " d1cccb73-c7ef-4b02-8267-ebd7f149904b\n", + " 5c210f79-9714-44a6-b2ec-387f6a117b37\n", " PASS\n", - " INCOMPLETE\n", - " False\n", + " COMPLETE\n", + " True\n", " 1\n", - " 3.497\n", - " NaN\n", + " 4.288\n", + " 6.764772\n", " alive\n", - " 206\n", - " 206\n", - " 6855\n", - " 35.5\n", - " 28.5\n", + " 909\n", + " 909\n", + " 8963\n", + " 36.15\n", + " 30.35\n", + " 70.65\n", + " 75.75\n", + " 8541\n", " NaN\n", - " NaN\n", - " NaN\n", - " NaN\n", - " RIGHT_FOOT\n", + " LEFT_FOOT\n", + " LONG_BALL\n", " \n", " \n", " 2\n", - " f1cc47d6-4b19-45a6-beb9-33d67fc83f4b\n", + " 8a3e6668-9680-4417-987e-8db0c6ce6a8b\n", " PASS\n", " COMPLETE\n", " True\n", " 1\n", - " 6.785\n", - " 8.431\n", + " 12.163\n", + " 14.093230\n", " alive\n", - " 217\n", - " 217\n", - " 5203\n", - " 34.5\n", - " 7.5\n", - " 34.5\n", - " 20.5\n", - " 5470\n", + " 914\n", + " 914\n", + " 8286\n", + " 43.05\n", + " 0.05\n", + " 15.75\n", + " 7.45\n", + " 6954\n", + " THROW_IN\n", + " NaN\n", " NaN\n", - " HEAD\n", " \n", " \n", " 3\n", - " f774571f-4b65-43a0-9bfc-6384948d1b82\n", + " f8e61bb0-b618-4695-9ff9-eaa0584bdbfa\n", " PASS\n", " COMPLETE\n", " True\n", " 1\n", - " 8.431\n", - " 9.576\n", + " 16.420\n", + " 18.242108\n", " alive\n", - " 217\n", - " 217\n", - " 5470\n", - " 35.5\n", - " 20.5\n", - " 35.5\n", - " 1.5\n", - " 5477\n", + " 914\n", + " 914\n", + " 6954\n", + " 3.25\n", + " 12.65\n", + " 7.85\n", + " 36.15\n", + " 7036\n", + " NaN\n", + " RIGHT_FOOT\n", " NaN\n", - " HEAD\n", " \n", " \n", " 4\n", - " 46f0e871-3e72-4817-9a53-af27583ba6c1\n", + " 1d72ce76-31fd-43e0-a6b2-1f78c8a57a77\n", " PASS\n", " COMPLETE\n", " True\n", " 1\n", - " 10.433\n", - " 11.150\n", + " 20.025\n", + " 21.071484\n", " alive\n", - " 217\n", - " 217\n", - " 5477\n", - " 33.5\n", - " 2.5\n", - " 25.5\n", - " 1.5\n", - " 5211\n", + " 914\n", + " 914\n", + " 7036\n", + " 9.05\n", + " 38.85\n", + " 19.65\n", + " 47.85\n", + " 7173\n", " NaN\n", " RIGHT_FOOT\n", + " NaN\n", " \n", " \n", "\n", "" ], "text/plain": [ - " event_id event_type result success \\\n", - "0 34208ade-2af4-45c3-970e-655937cad938 PASS COMPLETE True \n", - "1 d1cccb73-c7ef-4b02-8267-ebd7f149904b PASS INCOMPLETE False \n", - "2 f1cc47d6-4b19-45a6-beb9-33d67fc83f4b PASS COMPLETE True \n", - "3 f774571f-4b65-43a0-9bfc-6384948d1b82 PASS COMPLETE True \n", - "4 46f0e871-3e72-4817-9a53-af27583ba6c1 PASS COMPLETE True \n", + " event_id event_type result success \\\n", + "0 bbc398f7-c784-4958-a504-37b583caf97a PASS COMPLETE True \n", + "1 5c210f79-9714-44a6-b2ec-387f6a117b37 PASS COMPLETE True \n", + "2 8a3e6668-9680-4417-987e-8db0c6ce6a8b PASS COMPLETE True \n", + "3 f8e61bb0-b618-4695-9ff9-eaa0584bdbfa PASS COMPLETE True \n", + "4 1d72ce76-31fd-43e0-a6b2-1f78c8a57a77 PASS COMPLETE True \n", "\n", " period_id timestamp end_timestamp ball_state ball_owning_team team_id \\\n", - "0 1 0.098 2.007 alive 206 206 \n", - "1 1 3.497 NaN alive 206 206 \n", - "2 1 6.785 8.431 alive 217 217 \n", - "3 1 8.431 9.576 alive 217 217 \n", - "4 1 10.433 11.150 alive 217 217 \n", + "0 1 0.878 2.788504 alive 909 909 \n", + "1 1 4.288 6.764772 alive 909 909 \n", + "2 1 12.163 14.093230 alive 914 914 \n", + "3 1 16.420 18.242108 alive 914 914 \n", + "4 1 20.025 21.071484 alive 914 914 \n", "\n", " player_id coordinates_x coordinates_y end_coordinates_x \\\n", - "0 6581 60.5 40.5 35.5 \n", - "1 6855 35.5 28.5 NaN \n", - "2 5203 34.5 7.5 34.5 \n", - "3 5470 35.5 20.5 35.5 \n", - "4 5477 33.5 2.5 25.5 \n", + "0 11086 59.95 39.95 32.45 \n", + "1 8963 36.15 30.35 70.65 \n", + "2 8286 43.05 0.05 15.75 \n", + "3 6954 3.25 12.65 7.85 \n", + "4 7036 9.05 38.85 19.65 \n", + "\n", + " end_coordinates_y receiver_player_id set_piece_type body_part_type \\\n", + "0 28.75 8963 KICK_OFF RIGHT_FOOT \n", + "1 75.75 8541 NaN LEFT_FOOT \n", + "2 7.45 6954 THROW_IN NaN \n", + "3 36.15 7036 NaN RIGHT_FOOT \n", + "4 47.85 7173 NaN RIGHT_FOOT \n", "\n", - " end_coordinates_y receiver_player_id set_piece_type body_part_type \n", - "0 25.5 6855 KICK_OFF LEFT_FOOT \n", - "1 NaN NaN NaN RIGHT_FOOT \n", - "2 20.5 5470 NaN HEAD \n", - "3 1.5 5477 NaN HEAD \n", - "4 1.5 5211 NaN RIGHT_FOOT " + " pass_type \n", + "0 NaN \n", + "1 LONG_BALL \n", + "2 NaN \n", + "3 NaN \n", + "4 NaN " ] }, - "execution_count": 4, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -224,7 +237,7 @@ " event_types=[\"pass\", \"shot\"]\n", ")\n", "\n", - "dataset.to_pandas().head()" + "dataset.to_df().head()" ] }, { @@ -239,7 +252,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 2, "id": "f3b9119e", "metadata": {}, "outputs": [ @@ -282,6 +295,7 @@ " receiver_player_id\n", " set_piece_type\n", " body_part_type\n", + " pass_type\n", " \n", " \n", " \n", @@ -305,6 +319,7 @@ " 6855\n", " KICK_OFF\n", " LEFT_FOOT\n", + " NaN\n", " \n", " \n", " 1\n", @@ -314,18 +329,19 @@ " False\n", " 1\n", " 3.497\n", - " NaN\n", + " 6.785\n", " alive\n", " 206\n", " 206\n", " 6855\n", " 35.5\n", " 28.5\n", - " NaN\n", - " NaN\n", - " NaN\n", + " 85.5\n", + " 72.5\n", + " None\n", " NaN\n", " RIGHT_FOOT\n", + " LONG_BALL\n", " \n", " \n", " 2\n", @@ -347,6 +363,7 @@ " 5470\n", " NaN\n", " HEAD\n", + " HEAD_PASS\n", " \n", " \n", " 3\n", @@ -368,6 +385,7 @@ " 5477\n", " NaN\n", " HEAD\n", + " HEAD_PASS\n", " \n", " \n", " 4\n", @@ -389,6 +407,7 @@ " 5211\n", " NaN\n", " RIGHT_FOOT\n", + " NaN\n", " \n", " \n", "\n", @@ -404,27 +423,34 @@ "\n", " period_id timestamp end_timestamp ball_state ball_owning_team team_id \\\n", "0 1 0.098 2.007 alive 206 206 \n", - "1 1 3.497 NaN alive 206 206 \n", + "1 1 3.497 6.785 alive 206 206 \n", "2 1 6.785 8.431 alive 217 217 \n", "3 1 8.431 9.576 alive 217 217 \n", "4 1 10.433 11.150 alive 217 217 \n", "\n", " player_id coordinates_x coordinates_y end_coordinates_x \\\n", "0 6581 60.5 40.5 35.5 \n", - "1 6855 35.5 28.5 NaN \n", + "1 6855 35.5 28.5 85.5 \n", "2 5203 34.5 7.5 34.5 \n", "3 5470 35.5 20.5 35.5 \n", "4 5477 33.5 2.5 25.5 \n", "\n", - " end_coordinates_y receiver_player_id set_piece_type body_part_type \n", - "0 25.5 6855 KICK_OFF LEFT_FOOT \n", - "1 NaN NaN NaN RIGHT_FOOT \n", - "2 20.5 5470 NaN HEAD \n", - "3 1.5 5477 NaN HEAD \n", - "4 1.5 5211 NaN RIGHT_FOOT " + " end_coordinates_y receiver_player_id set_piece_type body_part_type \\\n", + "0 25.5 6855 KICK_OFF LEFT_FOOT \n", + "1 72.5 None NaN RIGHT_FOOT \n", + "2 20.5 5470 NaN HEAD \n", + "3 1.5 5477 NaN HEAD \n", + "4 1.5 5211 NaN RIGHT_FOOT \n", + "\n", + " pass_type \n", + "0 NaN \n", + "1 LONG_BALL \n", + "2 HEAD_PASS \n", + "3 HEAD_PASS \n", + "4 NaN " ] }, - "execution_count": 5, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -441,7 +467,7 @@ " event_types=[\"pass\", \"shot\"]\n", ")\n", "\n", - "dataset.to_pandas().head()" + "dataset.to_df().head()" ] }, { @@ -457,7 +483,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 3, "id": "aa5df8f9", "metadata": {}, "outputs": [ @@ -465,7 +491,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/Users/koen/Developer/Projects/PySport/kloppy/.venv/lib/python3.8/site-packages/kloppy-3.0.0-py3.8.egg/kloppy/_providers/statsbomb.py:45: UserWarning: \n", + "/Users/koen/Developer/Projects/PySport/kloppy/.venv/lib/python3.10/site-packages/kloppy-3.7.1-py3.10.egg/kloppy/_providers/statsbomb.py:67: UserWarning: \n", "\n", "You are about to use StatsBomb public data.\n", "By using this data, you are agreeing to the user agreement. \n", @@ -513,6 +539,7 @@ " receiver_player_id\n", " set_piece_type\n", " body_part_type\n", + " pass_type\n", " \n", " \n", " \n", @@ -536,6 +563,7 @@ " 6855\n", " KICK_OFF\n", " LEFT_FOOT\n", + " NaN\n", " \n", " \n", " 1\n", @@ -545,18 +573,19 @@ " False\n", " 1\n", " 3.497\n", - " NaN\n", + " 6.785\n", " alive\n", " 206\n", " 206\n", " 6855\n", " 35.5\n", " 28.5\n", - " NaN\n", - " NaN\n", - " NaN\n", + " 85.5\n", + " 72.5\n", + " None\n", " NaN\n", " RIGHT_FOOT\n", + " LONG_BALL\n", " \n", " \n", " 2\n", @@ -578,6 +607,7 @@ " 5470\n", " NaN\n", " HEAD\n", + " HEAD_PASS\n", " \n", " \n", " 3\n", @@ -599,6 +629,7 @@ " 5477\n", " NaN\n", " HEAD\n", + " HEAD_PASS\n", " \n", " \n", " 4\n", @@ -620,6 +651,7 @@ " 5211\n", " NaN\n", " RIGHT_FOOT\n", + " NaN\n", " \n", " \n", "\n", @@ -635,27 +667,34 @@ "\n", " period_id timestamp end_timestamp ball_state ball_owning_team team_id \\\n", "0 1 0.098 2.007 alive 206 206 \n", - "1 1 3.497 NaN alive 206 206 \n", + "1 1 3.497 6.785 alive 206 206 \n", "2 1 6.785 8.431 alive 217 217 \n", "3 1 8.431 9.576 alive 217 217 \n", "4 1 10.433 11.150 alive 217 217 \n", "\n", " player_id coordinates_x coordinates_y end_coordinates_x \\\n", "0 6581 60.5 40.5 35.5 \n", - "1 6855 35.5 28.5 NaN \n", + "1 6855 35.5 28.5 85.5 \n", "2 5203 34.5 7.5 34.5 \n", "3 5470 35.5 20.5 35.5 \n", "4 5477 33.5 2.5 25.5 \n", "\n", - " end_coordinates_y receiver_player_id set_piece_type body_part_type \n", - "0 25.5 6855 KICK_OFF LEFT_FOOT \n", - "1 NaN NaN NaN RIGHT_FOOT \n", - "2 20.5 5470 NaN HEAD \n", - "3 1.5 5477 NaN HEAD \n", - "4 1.5 5211 NaN RIGHT_FOOT " + " end_coordinates_y receiver_player_id set_piece_type body_part_type \\\n", + "0 25.5 6855 KICK_OFF LEFT_FOOT \n", + "1 72.5 None NaN RIGHT_FOOT \n", + "2 20.5 5470 NaN HEAD \n", + "3 1.5 5477 NaN HEAD \n", + "4 1.5 5211 NaN RIGHT_FOOT \n", + "\n", + " pass_type \n", + "0 NaN \n", + "1 LONG_BALL \n", + "2 HEAD_PASS \n", + "3 HEAD_PASS \n", + "4 NaN " ] }, - "execution_count": 14, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -671,7 +710,7 @@ " event_types=[\"pass\", \"shot\"]\n", ")\n", "\n", - "dataset.to_pandas().head()" + "dataset.to_df().head()" ] } ], @@ -691,7 +730,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.9" + "version": "3.10.6" } }, "nbformat": 4, diff --git a/docs/getting-started/tracab.ipynb b/docs/getting-started/tracab.ipynb index 48fe462c..280369de 100644 --- a/docs/getting-started/tracab.ipynb +++ b/docs/getting-started/tracab.ipynb @@ -12,7 +12,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 1, "id": "495a3f90", "metadata": {}, "outputs": [ @@ -39,10 +39,12 @@ " \n", " period_id\n", " timestamp\n", + " frame_id\n", " ball_state\n", " ball_owning_team_id\n", " ball_x\n", " ball_y\n", + " ball_z\n", " away_19_x\n", " away_19_y\n", " away_19_d\n", @@ -62,10 +64,12 @@ " 0\n", " 1\n", " 0.00\n", + " 100\n", " alive\n", " home\n", " -27.0\n", " 25.0\n", + " 0.0\n", " 8889.0\n", " -666.0\n", " NaN\n", @@ -83,10 +87,12 @@ " 1\n", " 2\n", " 0.00\n", + " 200\n", " alive\n", " home\n", " -27.0\n", " 25.0\n", + " 0.0\n", " NaN\n", " NaN\n", " NaN\n", @@ -104,10 +110,12 @@ " 2\n", " 2\n", " 0.08\n", + " 202\n", " alive\n", " home\n", " -27.0\n", " 25.0\n", + " 0.0\n", " NaN\n", " NaN\n", " NaN\n", @@ -126,23 +134,28 @@ "" ], "text/plain": [ - " period_id timestamp ball_state ball_owning_team_id ball_x ball_y \\\n", - "0 1 0.00 alive home -27.0 25.0 \n", - "1 2 0.00 alive home -27.0 25.0 \n", - "2 2 0.08 alive home -27.0 25.0 \n", + " period_id timestamp frame_id ball_state ball_owning_team_id ball_x \\\n", + "0 1 0.00 100 alive home -27.0 \n", + "1 2 0.00 200 alive home -27.0 \n", + "2 2 0.08 202 alive home -27.0 \n", "\n", - " away_19_x away_19_y away_19_d away_19_s home_19_x home_19_y home_19_d \\\n", - "0 8889.0 -666.0 NaN 0.55 -1234.0 -294.0 None \n", - "1 NaN NaN NaN NaN -1234.0 -294.0 None \n", - "2 NaN NaN NaN NaN -1234.0 -294.0 None \n", + " ball_y ball_z away_19_x away_19_y away_19_d away_19_s home_19_x \\\n", + "0 25.0 0.0 8889.0 -666.0 NaN 0.55 -1234.0 \n", + "1 25.0 0.0 NaN NaN NaN NaN -1234.0 \n", + "2 25.0 0.0 NaN NaN NaN NaN -1234.0 \n", "\n", - " home_19_s away_1337_x away_1337_y away_1337_d away_1337_s \n", - "0 0.07 NaN NaN NaN NaN \n", - "1 0.07 -8889.0 -666.0 NaN 0.55 \n", - "2 0.07 -8889.0 -666.0 NaN 0.55 " + " home_19_y home_19_d home_19_s away_1337_x away_1337_y away_1337_d \\\n", + "0 -294.0 None 0.07 NaN NaN NaN \n", + "1 -294.0 None 0.07 -8889.0 -666.0 NaN \n", + "2 -294.0 None 0.07 -8889.0 -666.0 NaN \n", + "\n", + " away_1337_s \n", + "0 NaN \n", + "1 0.55 \n", + "2 0.55 " ] }, - "execution_count": 11, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -162,7 +175,7 @@ ")\n", "\n", "# Because this is a test dataset the output contains some garbage\n", - "dataset.to_pandas().head()" + "dataset.to_df().head()" ] } ], @@ -182,7 +195,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.9" + "version": "3.10.6" } }, "nbformat": 4, diff --git a/docs/getting-started/wyscout.ipynb b/docs/getting-started/wyscout.ipynb index f0f03b21..8da56f88 100644 --- a/docs/getting-started/wyscout.ipynb +++ b/docs/getting-started/wyscout.ipynb @@ -12,7 +12,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "id": "f1120143", "metadata": {}, "outputs": [ @@ -100,8 +100,8 @@ " ...\n", " 29.0\n", " 41.0\n", - " NaN\n", - " NaN\n", + " 71.0\n", + " 94.0\n", " NaN\n", " False\n", " HIGH_PASS\n", @@ -124,8 +124,8 @@ " ...\n", " 29.0\n", " 6.0\n", - " NaN\n", - " NaN\n", + " 36.0\n", + " 3.0\n", " NaN\n", " False\n", " HEAD_PASS\n", @@ -203,8 +203,8 @@ "\n", " coordinates_y end_coordinates_x end_coordinates_y receiver_player_id \\\n", "0 50.0 29.0 41.0 NaN \n", - "1 41.0 NaN NaN NaN \n", - "2 6.0 NaN NaN NaN \n", + "1 41.0 71.0 94.0 NaN \n", + "2 6.0 36.0 3.0 NaN \n", "3 0.0 41.0 13.0 NaN \n", "4 13.0 63.0 15.0 NaN \n", "\n", @@ -225,7 +225,7 @@ "[5 rows x 21 columns]" ] }, - "execution_count": 2, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -241,7 +241,7 @@ " coordinates=\"wyscout\"\n", ")\n", "\n", - "dataset.to_pandas().head()" + "dataset.to_df().head()" ] }, { @@ -256,7 +256,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "id": "ada96b31", "metadata": {}, "outputs": [ @@ -392,8 +392,8 @@ " ...\n", " 32.0\n", " 35.0\n", - " NaN\n", - " NaN\n", + " 89.0\n", + " 6.0\n", " NaN\n", " False\n", " HIGH_PASS\n", @@ -416,8 +416,8 @@ " ...\n", " 85.0\n", " 0.0\n", - " NaN\n", - " NaN\n", + " 93.0\n", + " 16.0\n", " NaN\n", " False\n", " HAND_PASS\n", @@ -449,8 +449,8 @@ "0 48.0 47.0 50.0 NaN \n", "1 50.0 41.0 48.0 NaN \n", "2 48.0 32.0 35.0 NaN \n", - "3 35.0 NaN NaN NaN \n", - "4 0.0 NaN NaN NaN \n", + "3 35.0 89.0 6.0 NaN \n", + "4 0.0 93.0 16.0 NaN \n", "\n", " is_counter_attack pass_type set_piece_type goalkeeper_action_type \\\n", "0 False SIMPLE_PASS NaN NaN \n", @@ -469,7 +469,7 @@ "[5 rows x 21 columns]" ] }, - "execution_count": 3, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -485,7 +485,7 @@ " coordinates=\"wyscout\"\n", ")\n", "\n", - "dataset.to_pandas().head()" + "dataset.to_df().head()" ] }, { @@ -500,7 +500,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "id": "8308124e", "metadata": {}, "outputs": [ @@ -636,8 +636,8 @@ " ...\n", " 32.0\n", " 35.0\n", - " NaN\n", - " NaN\n", + " 89.0\n", + " 6.0\n", " NaN\n", " False\n", " HIGH_PASS\n", @@ -660,8 +660,8 @@ " ...\n", " 85.0\n", " 0.0\n", - " NaN\n", - " NaN\n", + " 93.0\n", + " 16.0\n", " NaN\n", " False\n", " HAND_PASS\n", @@ -693,8 +693,8 @@ "0 48.0 47.0 50.0 NaN \n", "1 50.0 41.0 48.0 NaN \n", "2 48.0 32.0 35.0 NaN \n", - "3 35.0 NaN NaN NaN \n", - "4 0.0 NaN NaN NaN \n", + "3 35.0 89.0 6.0 NaN \n", + "4 0.0 93.0 16.0 NaN \n", "\n", " is_counter_attack pass_type set_piece_type goalkeeper_action_type \\\n", "0 False SIMPLE_PASS NaN NaN \n", @@ -713,7 +713,7 @@ "[5 rows x 21 columns]" ] }, - "execution_count": 4, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -729,7 +729,7 @@ " coordinates=\"wyscout\"\n", ")\n", "\n", - "dataset.to_pandas().head()" + "dataset.to_df().head()" ] } ], @@ -749,7 +749,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.9" + "version": "3.10.6" } }, "nbformat": 4, diff --git a/examples/datasets/metrica.py b/examples/datasets/metrica.py index e7f70f0e..24bb63fd 100644 --- a/examples/datasets/metrica.py +++ b/examples/datasets/metrica.py @@ -22,12 +22,12 @@ def main(): # We can pass additional keyword arguments to the loaders to specify a different dataset dataset = metrica.load_open_data(limit=1000, match_id="2") - data_frame = dataset.to_pandas() + data_frame = dataset.to_df() print(data_frame) # Also load dataset in new metrica format dataset = metrica.load_open_data(limit=10_000, match_id="3") - data_frame = dataset.to_pandas() + data_frame = dataset.to_df() df = data_frame[data_frame.ball_x.notnull()] print(df) diff --git a/examples/datasets/statsbomb.py b/examples/datasets/statsbomb.py index c2cb49c4..9e1b1d8a 100644 --- a/examples/datasets/statsbomb.py +++ b/examples/datasets/statsbomb.py @@ -30,7 +30,7 @@ def main(): ) with performance_logging("to pandas", logger=logger): - dataframe = dataset.to_pandas() + dataframe = dataset.to_df() print(dataframe[:50].to_string())