statsbombpy


Namestatsbombpy JSON
Version 1.12.0 PyPI version JSON
download
home_pagehttps://github.com/statsbomb/statsbombpy
Summaryeasily stream StatsBomb data into Python
upload_time2023-12-12 14:36:42
maintainer
docs_urlNone
authorStatsBomb
requires_python
license
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # statsbombpy <picture><source media="(prefers-color-scheme: dark)" srcset="https://github.com/statsbomb/logos/blob/main/StatsBombPython_Lock_Light.svg"><source media="(prefers-color-scheme: light)" srcset="https://github.com/statsbomb/logos/blob/main/StatsBombPython_Lock.svg"><img alt="StatsBombPython_Lock" src="https://github.com/statsbomb/logos/blob/main/StatsBombPython_Lock.svg" align="right" height="40"></picture>

[![PyPI version](https://badge.fury.io/py/statsbombpy.svg?)](https://badge.fury.io/py/statsbombpy)

Brought to you by StatsBomb, this repository is a Python package that allows users to easily stream StatsBomb data into Python using your log in credentials for the API or free data from our GitHub page. **API access is for paying customers only**

**Support: support@statsbomb.com**


## Installation Instructions

`pip install statsbombpy`


## Running the tests

`nose2 -v --pretty-assert`


## Configuration

### Authentication

#### Environment Variables
Authentication can be done by setting environment variables named `SB_USERNAME` and `SB_PASSWORD` to your login credentials.

#### Manual Calls
Alternatively, if you don't want to use environment variables, all functions accept an argument `creds` to pass your login credentials in the format `{"user": "", "passwd": ""}`

### Concurrency
You can specify how many of your computer's cores to use when running the `sb.competition_events()` and `sb.competition_frames()` functions by setting the environment variable `SB_CORES` to the number you want to use. Allowing statsbombpy to use more cores will speed up those functions.

If you don't have an environment variable set we will try to detect the number of cores in your system and use 2 less than that number. If we cannot detect the number of cores we set the number to 4.

## Open Data
StatsBomb's open data can be accessed without the need of authentication.

StatsBomb are committed to sharing new data and research publicly to enhance understanding of the game of Football. We want to actively encourage new research and analysis at all levels. Therefore we have made certain leagues of StatsBomb Data freely available for public use for research projects and genuine interest in football analytics.

StatsBomb are hoping that by making data freely available, we will extend the wider football analytics community and attract new talent to the industry. We would like to collect some basic personal information about users of our data. By [giving us your email address](https://statsbomb.com/resource-centre/), it means we will let you know when we make more data, tutorials and research available. We will store the information in accordance with our Privacy Policy and the GDPR.

#### Terms & Conditions
Whilst we are keen to share data and facilitate research, we also urge you to be responsible with the data. Please register your details on https://www.statsbomb.com/resource-centre and read our [User Agreement](doc/LICENSE.pdf) carefully.
By using this repository, you are agreeing to the user agreement. If you publish, share or distribute any research, analysis or insights based on this data, please state the data source as StatsBomb and use our logo.


## Usage

```
from statsbombpy import sb
```


### Competitions

```
sb.competitions()
```
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>competition_id</th>
      <th>season_id</th>
      <th>country_name</th>
      <th>competition_name</th>
      <th>competition_gender</th>
      <th>season_name</th>
      <th>match_updated</th>
      <th>match_available</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>9</td>
      <td>42</td>
      <td>Germany</td>
      <td>1. Bundesliga</td>
      <td>male</td>
      <td>2019/2020</td>
      <td>2019-12-29T07:47:45.981</td>
      <td>2019-12-29T07:47:45.981</td>
    </tr>
    <tr>
      <th>1</th>
      <td>9</td>
      <td>4</td>
      <td>Germany</td>
      <td>1. Bundesliga</td>
      <td>male</td>
      <td>2018/2019</td>
      <td>2019-12-16T23:09:16.168756</td>
      <td>2019-12-16T23:09:16.168756</td>
    </tr>
    <tr>
      <th>2</th>
      <td>9</td>
      <td>1</td>
      <td>Germany</td>
      <td>1. Bundesliga</td>
      <td>male</td>
      <td>2017/2018</td>
      <td>2019-12-16T23:09:16.168756</td>
      <td>2019-12-16T23:09:16.168756</td>
    </tr>
    <tr>
      <th>3</th>
      <td>78</td>
      <td>42</td>
      <td>Croatia</td>
      <td>1. HNL</td>
      <td>male</td>
      <td>2019/2020</td>
      <td>2020-01-02T10:35:49.065</td>
      <td>2020-01-02T10:35:49.065</td>
    </tr>
    <tr>
      <th>4</th>
      <td>10</td>
      <td>42</td>
      <td>Germany</td>
      <td>2. Bundesliga</td>
      <td>male</td>
      <td>2019/2020</td>
      <td>2019-12-27T00:36:37.498</td>
      <td>2019-12-27T00:36:37.498</td>
    </tr>
  </tbody>
</table>


### Matches

```
sb.matches(competition_id=9, season_id=42)
```
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>match_id</th>
      <th>match_date</th>
      <th>kick_off</th>
      <th>competition</th>
      <th>season</th>
      <th>home_team</th>
      <th>away_team</th>
      <th>home_score</th>
      <th>away_score</th>
      <th>match_status</th>
      <th>last_updated</th>
      <th>match_week</th>
      <th>competition_stage</th>
      <th>stadium</th>
      <th>referee</th>
      <th>home_managers</th>
      <th>away_managers</th>
      <th>data_version</th>
      <th>shot_fidelity_version</th>
      <th>xy_fidelity_version</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>303299</td>
      <td>2019-12-15</td>
      <td>18:00:00.000</td>
      <td>Germany - 1. Bundesliga</td>
      <td>2019/2020</td>
      <td>Schalke 04</td>
      <td>Eintracht Frankfurt</td>
      <td>1</td>
      <td>0</td>
      <td>available</td>
      <td>2019-12-17T09:50:17.558</td>
      <td>15</td>
      <td>Regular Season</td>
      <td>VELTINS-Arena</td>
      <td>F. Zwayer</td>
      <td>David Wagner</td>
      <td>Adi Hütter</td>
      <td>1.1.0</td>
      <td>2</td>
      <td>2</td>
    </tr>
    <tr>
      <th>1</th>
      <td>303223</td>
      <td>2019-09-01</td>
      <td>18:00:00.000</td>
      <td>Germany - 1. Bundesliga</td>
      <td>2019/2020</td>
      <td>Eintracht Frankfurt</td>
      <td>Fortuna Düsseldorf</td>
      <td>2</td>
      <td>1</td>
      <td>available</td>
      <td>2019-12-16T23:09:16.168756</td>
      <td>3</td>
      <td>Regular Season</td>
      <td>Commerzbank-Arena</td>
      <td>F. Willenborg</td>
      <td>Adi Hütter</td>
      <td>Friedhelm Funkel</td>      
      <td>1.1.0</td>
      <td>2</td>
      <td>2</td>
    </tr>
    <tr>
      <th>2</th>
      <td>303083</td>
      <td>2019-12-15</td>
      <td>15:30:00.000</td>
      <td>Germany - 1. Bundesliga</td>
      <td>2019/2020</td>
      <td>Wolfsburg</td>
      <td>Borussia Mönchengladbach</td>
      <td>2</td>
      <td>1</td>
      <td>available</td>
      <td>2019-12-17T15:52:17.843</td>
      <td>15</td>
      <td>Regular Season</td>
      <td>VOLKSWAGEN ARENA</td>
      <td>F. Brych</td>
      <td>Oliver Glasner</td>
      <td>Marco Rose</td>      
      <td>1.1.0</td>
      <td>2</td>
      <td>2</td>
    </tr>
    <tr>
      <th>3</th>
      <td>303266</td>
      <td>2019-12-14</td>
      <td>15:30:00.000</td>
      <td>Germany - 1. Bundesliga</td>
      <td>2019/2020</td>
      <td>Hertha Berlin</td>
      <td>Freiburg</td>
      <td>1</td>
      <td>0</td>
      <td>available</td>
      <td>2019-12-17T17:43:18.285</td>
      <td>15</td>
      <td>Regular Season</td>
      <td>Olympiastadion Berlin</td>
      <td>F. Willenborg</td>
      <td>Jürgen Klinsmann</td>
      <td>Christian Streich</td>      
      <td>1.1.0</td>
      <td>2</td>
      <td>2</td>
    </tr>
    <tr>
      <th>4</th>
      <td>303073</td>
      <td>2019-12-21</td>
      <td>15:30:00.000</td>
      <td>Germany - 1. Bundesliga</td>
      <td>2019/2020</td>
      <td>Bayern Munich</td>
      <td>Wolfsburg</td>
      <td>2</td>
      <td>0</td>
      <td>available</td>
      <td>2019-12-23T18:02:36.454</td>
      <td>17</td>
      <td>Regular Season</td>
      <td>Allianz Arena</td>
      <td>C. Dingert</td>
      <td>Hans-Dieter Flick</td>
      <td>Oliver Glasner </td>      
      <td>1.1.0</td>
      <td>2</td>
      <td>2</td>
    </tr>
  </tbody>
</table>


### Lineups

```
sb.lineups(match_id=303299)["Eintracht Frankfurt"]
```
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>player_id</th>
      <th>player_name</th>
      <th>player_nickname</th>
      <th>birth_date</th>
      <th>player_gender</th>
      <th>player_height</th>
      <th>player_weight</th>
      <th>jersey_number</th>
      <th>country</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>3204</td>
      <td>Almamy Touré</td>
      <td>None</td>
      <td>1996-04-28</td>
      <td>male</td>
      <td>182.0</td>
      <td>72.0</td>
      <td>18</td>
      <td>Mali</td>
    </tr>
    <tr>
      <th>1</th>
      <td>5591</td>
      <td>Filip Kostić</td>
      <td>None</td>
      <td>1992-11-01</td>
      <td>male</td>
      <td>184.0</td>
      <td>82.0</td>
      <td>10</td>
      <td>Serbia</td>
    </tr>
    <tr>
      <th>2</th>
      <td>7713</td>
      <td>Obite Evan N"Dicka</td>
      <td>Evan N'Dicka</td>
      <td>1999-08-20</td>
      <td>male</td>
      <td>190.0</td>
      <td>NaN</td>
      <td>2</td>
      <td>France</td>
    </tr>
    <tr>
      <th>3</th>
      <td>8307</td>
      <td>Martin Hinteregger</td>
      <td>None</td>
      <td>1992-09-07</td>
      <td>male</td>
      <td>184.0</td>
      <td>83.0</td>
      <td>13</td>
      <td>Austria</td>
    </tr>
    <tr>
      <th>4</th>
      <td>8669</td>
      <td>Mijat Gaćinović</td>
      <td>None</td>
      <td>1995-02-08</td>
      <td>male</td>
      <td>175.0</td>
      <td>66.0</td>
      <td>11</td>
      <td>Serbia</td>
    </tr>
  </tbody>
</table>


### Events
The default settings for querying events return a single dataframe with all event types and event attributes.

```
events = sb.events(match_id=303299)
```

<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>ball_receipt_outcome</th>
      <th>ball_recovery_offensive</th>
      <th>ball_recovery_recovery_failure</th>
      <th>block_deflection</th>
      <th>carry_end_location</th>
      <th>clearance_aerial_won</th>
      <th>clearance_body_part</th>
      <th>clearance_head</th>
      <th>clearance_left_foot</th>
      <th>clearance_right_foot</th>
      <th>counterpress</th>
      <th>dribble_no_touch</th>
      <th>dribble_outcome</th>
      <th>dribble_overrun</th>
      <th>duel_outcome</th>
      <th>duel_type</th>
      <th>duration</th>
      <th>foul_committed_advantage</th>
      <th>foul_committed_card</th>
      <th>foul_won_advantage</th>
      <th>foul_won_defensive</th>
      <th>goalkeeper_body_part</th>
      <th>goalkeeper_end_location</th>
      <th>goalkeeper_outcome</th>
      <th>goalkeeper_position</th>
      <th>goalkeeper_technique</th>
      <th>goalkeeper_type</th>
      <th>id</th>
      <th>index</th>
      <th>injury_stoppage_in_chain</th>
      <th>interception_outcome</th>
      <th>location</th>
      <th>match_id</th>
      <th>minute</th>
      <th>off_camera</th>
      <th>out</th>
      <th>pass_aerial_won</th>
      <th>pass_angle</th>
      <th>pass_assisted_shot_id</th>
      <th>pass_body_part</th>
      <th>pass_cross</th>
      <th>pass_cut_back</th>
      <th>pass_deflected</th>
      <th>pass_end_location</th>
      <th>pass_goal_assist</th>
      <th>pass_height</th>
      <th>pass_length</th>
      <th>pass_outcome</th>
      <th>pass_outswinging</th>
      <th>pass_recipient</th>
      <th>pass_shot_assist</th>
      <th>pass_straight</th>
      <th>pass_switch</th>
      <th>pass_technique</th>
      <th>pass_through_ball</th>
      <th>pass_type</th>
      <th>pass_xclaim</th>
      <th>period</th>
      <th>play_pattern</th>
      <th>player</th>
      <th>position</th>
      <th>possession</th>
      <th>possession_team</th>
      <th>related_events</th>
      <th>second</th>
      <th>shot_aerial_won</th>
      <th>shot_body_part</th>
      <th>shot_end_location</th>
      <th>shot_first_time</th>
      <th>shot_freeze_frame</th>
      <th>shot_key_pass_id</th>
      <th>shot_one_on_one</th>
      <th>shot_outcome</th>
      <th>shot_statsbomb_xg</th>
      <th>shot_statsbomb_xg2</th>
      <th>shot_technique</th>
      <th>shot_type</th>
      <th>substitution_outcome</th>
      <th>substitution_replacement</th>
      <th>team</th>
      <th>timestamp</th>
      <th>type</th>
      <th>under_pressure</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>500</th>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>3.498736</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>84828c06-41b5-44eb-aa92-1710bdb818ac</td>
      <td>1838</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>[50.1, 16.6]</td>
      <td>303299</td>
      <td>47</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>2.720095</td>
      <td>NaN</td>
      <td>Left Foot</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>[13.3, 33.1]</td>
      <td>NaN</td>
      <td>Ground Pass</td>
      <td>40.329765</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>Frederik Rønnow</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>2</td>
      <td>Regular Play</td>
      <td>Obite Evan N"Dicka</td>
      <td>Left Center Back</td>
      <td>103</td>
      <td>Eintracht Frankfurt</td>
      <td>[ae3094e3-faa3-4608-8284-d9b8cca77711, c1202f1c-0831-4e88-83b2-597f56f0c858]</td>
      <td>52</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>Eintracht Frankfurt</td>
      <td>00:02:52.438</td>
      <td>Pass</td>
      <td>True</td>
    </tr>
    <tr>
      <th>501</th>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>3.604236</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>9061cd20-513b-499f-b925-f1de5f241281</td>
      <td>1840</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>[13.3, 33.1]</td>
      <td>303299</td>
      <td>47</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>-0.153945</td>
      <td>NaN</td>
      <td>Right Foot</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>[77.1, 23.2]</td>
      <td>NaN</td>
      <td>High Pass</td>
      <td>64.563540</td>
      <td>Incomplete</td>
      <td>NaN</td>
      <td>Mijat Gaćinović</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>2</td>
      <td>Regular Play</td>
      <td>Frederik Rønnow</td>
      <td>Goalkeeper</td>
      <td>103</td>
      <td>Eintracht Frankfurt</td>
      <td>[8e6495a7-782a-4f1a-845f-3ec50d761a1e, ff758a12-1ba6-4dd4-8b2c-7d39aa7aed97]</td>
      <td>55</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>Eintracht Frankfurt</td>
      <td>00:02:55.937</td>
      <td>Pass</td>
      <td>NaN</td>
    </tr>
    <tr>
      <th>502</th>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>2.101999</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>8e6495a7-782a-4f1a-845f-3ec50d761a1e</td>
      <td>1842</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>[43.0, 56.9]</td>
      <td>303299</td>
      <td>47</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>-0.703110</td>
      <td>NaN</td>
      <td>Head</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>[64.0, 39.1]</td>
      <td>NaN</td>
      <td>High Pass</td>
      <td>27.528894</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>Amine Harit</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>Recovery</td>
      <td>NaN</td>
      <td>2</td>
      <td>Regular Play</td>
      <td>Ozan Muhammed Kabak</td>
      <td>Right Center Back</td>
      <td>104</td>
      <td>Schalke 04</td>
      <td>[9061cd20-513b-499f-b925-f1de5f241281, be6dfe7d-7596-4cc2-8cd9-8c17d064317e]</td>
      <td>59</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>Schalke 04</td>
      <td>00:02:59.541</td>
      <td>Pass</td>
      <td>NaN</td>
    </tr>
    <tr>
      <th>503</th>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>1.187459</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>86431bc7-210a-4868-8e18-26ff38becefc</td>
      <td>1854</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>[65.9, 12.6]</td>
      <td>303299</td>
      <td>48</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>-0.730239</td>
      <td>NaN</td>
      <td>Right Foot</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>[74.5, 4.9]</td>
      <td>NaN</td>
      <td>Ground Pass</td>
      <td>11.543396</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>Amine Harit</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>2</td>
      <td>Regular Play</td>
      <td>Suat Serdar</td>
      <td>Left Defensive Midfield</td>
      <td>104</td>
      <td>Schalke 04</td>
      <td>[761b4e65-8f64-464c-8153-6a98465208ba]</td>
      <td>7</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>Schalke 04</td>
      <td>00:03:07.689</td>
      <td>Pass</td>
      <td>NaN</td>
    </tr>
    <tr>
      <th>504</th>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>0.766628</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>6e58c713-622c-4246-8243-e4162e487a1c</td>
      <td>1858</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>[79.1, 10.5]</td>
      <td>303299</td>
      <td>48</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>1.254940</td>
      <td>NaN</td>
      <td>Right Foot</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>[84.1, 25.8]</td>
      <td>NaN</td>
      <td>Ground Pass</td>
      <td>16.096273</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>Rabbi Matondo</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>2</td>
      <td>Regular Play</td>
      <td>Amine Harit</td>
      <td>Center Attacking Midfield</td>
      <td>104</td>
      <td>Schalke 04</td>
      <td>[b1960a76-d3ae-4ef3-a2cd-47eca8c25e0a, dd1575c0-a408-4177-944d-7e86d2f79181]</td>
      <td>11</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>Schalke 04</td>
      <td>00:03:11.719</td>
      <td>Pass</td>
      <td>True</td>
    </tr>
  </tbody>
</table>




It's also possible to get distinct dataframes for each event type and/or to have distinct event attributes on their own columns
```
sb.events(match_id=303299, split=True, flatten_attrs=False)["dribbles"]
```
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>id</th>
      <th>index</th>
      <th>period</th>
      <th>timestamp</th>
      <th>minute</th>
      <th>second</th>
      <th>type</th>
      <th>possession</th>
      <th>possession_team</th>
      <th>play_pattern</th>
      <th>team</th>
      <th>player</th>
      <th>position</th>
      <th>location</th>
      <th>duration</th>
      <th>under_pressure</th>
      <th>related_events</th>
      <th>dribble</th>
      <th>match_id</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>b190c01f-ad24-468c-8241-f955b91d996c</td>
      <td>131</td>
      <td>1</td>
      <td>00:02:08.032</td>
      <td>2</td>
      <td>8</td>
      <td>Dribble</td>
      <td>4</td>
      <td>Schalke 04</td>
      <td>Regular Play</td>
      <td>Schalke 04</td>
      <td>Daniel Caligiuri</td>
      <td>Right Wing</td>
      <td>[110.2, 62.9]</td>
      <td>0.000000</td>
      <td>True</td>
      <td>[60f822df-5747-4787-b0f9-45bf5217eb8a]</td>
      <td>{'outcome': {'id': 8, 'name': 'Complete'}}</td>
      <td>303299</td>
    </tr>
    <tr>
      <th>1</th>
      <td>4d773c92-f89f-491e-b3e0-3a1d2e863148</td>
      <td>399</td>
      <td>1</td>
      <td>00:08:48.623</td>
      <td>8</td>
      <td>48</td>
      <td>Dribble</td>
      <td>18</td>
      <td>Schalke 04</td>
      <td>Regular Play</td>
      <td>Schalke 04</td>
      <td>Amine Harit</td>
      <td>Center Attacking Midfield</td>
      <td>[88.9, 22.7]</td>
      <td>0.000000</td>
      <td>True</td>
      <td>[93d829df-eea7-416b-95aa-7593828cfade]</td>
      <td>{'outcome': {'id': 8, 'name': 'Complete'}}</td>
      <td>303299</td>
    </tr>
    <tr>
      <th>2</th>
      <td>8a78dce4-998a-4e81-902c-9f3957cebc9d</td>
      <td>460</td>
      <td>1</td>
      <td>00:13:30.202</td>
      <td>13</td>
      <td>30</td>
      <td>Dribble</td>
      <td>23</td>
      <td>Schalke 04</td>
      <td>Regular Play</td>
      <td>Schalke 04</td>
      <td>Daniel Caligiuri</td>
      <td>Right Wing</td>
      <td>[99.5, 68.1]</td>
      <td>0.007309</td>
      <td>True</td>
      <td>[772c5aae-e34e-4364-8a98-7caf7636c90b]</td>
      <td>{'outcome': {'id': 9, 'name': 'Incomplete'}}</td>
      <td>303299</td>
    </tr>
    <tr>
      <th>3</th>
      <td>e44d0122-2f2e-4771-820d-cc326a8b0379</td>
      <td>496</td>
      <td>1</td>
      <td>00:14:10.135</td>
      <td>14</td>
      <td>10</td>
      <td>Dribble</td>
      <td>24</td>
      <td>Schalke 04</td>
      <td>From Throw In</td>
      <td>Schalke 04</td>
      <td>Suat Serdar</td>
      <td>Left Defensive Midfield</td>
      <td>[41.2, 31.7]</td>
      <td>0.000000</td>
      <td>True</td>
      <td>[4de4039f-7efc-461b-b7d6-27c32ec2cd2a]</td>
      <td>{'outcome': {'id': 8, 'name': 'Complete'}}</td>
      <td>303299</td>
    </tr>
    <tr>
      <th>4</th>
      <td>9555afbd-d838-42c9-8f80-be3cd09e4c4a</td>
      <td>793</td>
      <td>1</td>
      <td>00:20:18.409</td>
      <td>20</td>
      <td>18</td>
      <td>Dribble</td>
      <td>33</td>
      <td>Eintracht Frankfurt</td>
      <td>Regular Play</td>
      <td>Eintracht Frankfurt</td>
      <td>Timothy Chandler</td>
      <td>Right Wing Back</td>
      <td>[81.8, 75.7]</td>
      <td>0.000000</td>
      <td>True</td>
      <td>[a5c88cee-6319-4c25-91cd-8a028d8dbfbf]</td>
      <td>{'outcome': {'id': 9, 'name': 'Incomplete'}}</td>
      <td>303299</td>
    </tr>
  </tbody>
</table>



### Competition Events
All events from a given competition can be queried and stored on a single dataframe
```
events = sb.competition_events(
    country="Germany",
    division= "1. Bundesliga",
    season="2019/2020",
    gender="male"
)

grouped_events = sb.competition_events(
    country="Germany",
    division= "1. Bundesliga",
    season="2019/2020",
    split=True
)
grouped_events["dribbles"]
```
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>id</th>
      <th>index</th>
      <th>period</th>
      <th>timestamp</th>
      <th>minute</th>
      <th>second</th>
      <th>type</th>
      <th>possession</th>
      <th>possession_team</th>
      <th>play_pattern</th>
      <th>team</th>
      <th>player</th>
      <th>position</th>
      <th>location</th>
      <th>duration</th>
      <th>under_pressure</th>
      <th>related_events</th>
      <th>dribble</th>
      <th>match_id</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>b190c01f-ad24-468c-8241-f955b91d996c</td>
      <td>131</td>
      <td>1</td>
      <td>00:02:08.032</td>
      <td>2</td>
      <td>8</td>
      <td>Dribble</td>
      <td>4</td>
      <td>Schalke 04</td>
      <td>Regular Play</td>
      <td>Schalke 04</td>
      <td>Daniel Caligiuri</td>
      <td>Right Wing</td>
      <td>[110.2, 62.9]</td>
      <td>0.000000</td>
      <td>True</td>
      <td>[60f822df-5747-4787-b0f9-45bf5217eb8a]</td>
      <td>{'outcome': {'id': 8, 'name': 'Complete'}}</td>
      <td>303299</td>
    </tr>
    <tr>
      <th>1</th>
      <td>4d773c92-f89f-491e-b3e0-3a1d2e863148</td>
      <td>399</td>
      <td>1</td>
      <td>00:08:48.623</td>
      <td>8</td>
      <td>48</td>
      <td>Dribble</td>
      <td>18</td>
      <td>Schalke 04</td>
      <td>Regular Play</td>
      <td>Schalke 04</td>
      <td>Amine Harit</td>
      <td>Center Attacking Midfield</td>
      <td>[88.9, 22.7]</td>
      <td>0.000000</td>
      <td>True</td>
      <td>[93d829df-eea7-416b-95aa-7593828cfade]</td>
      <td>{'outcome': {'id': 8, 'name': 'Complete'}}</td>
      <td>303299</td>
    </tr>
    <tr>
      <th>2</th>
      <td>8a78dce4-998a-4e81-902c-9f3957cebc9d</td>
      <td>460</td>
      <td>1</td>
      <td>00:13:30.202</td>
      <td>13</td>
      <td>30</td>
      <td>Dribble</td>
      <td>23</td>
      <td>Schalke 04</td>
      <td>Regular Play</td>
      <td>Schalke 04</td>
      <td>Daniel Caligiuri</td>
      <td>Right Wing</td>
      <td>[99.5, 68.1]</td>
      <td>0.007309</td>
      <td>True</td>
      <td>[772c5aae-e34e-4364-8a98-7caf7636c90b]</td>
      <td>{'outcome': {'id': 9, 'name': 'Incomplete'}}</td>
      <td>303299</td>
    </tr>
    <tr>
      <th>3</th>
      <td>e44d0122-2f2e-4771-820d-cc326a8b0379</td>
      <td>496</td>
      <td>1</td>
      <td>00:14:10.135</td>
      <td>14</td>
      <td>10</td>
      <td>Dribble</td>
      <td>24</td>
      <td>Schalke 04</td>
      <td>From Throw In</td>
      <td>Schalke 04</td>
      <td>Suat Serdar</td>
      <td>Left Defensive Midfield</td>
      <td>[41.2, 31.7]</td>
      <td>0.000000</td>
      <td>True</td>
      <td>[4de4039f-7efc-461b-b7d6-27c32ec2cd2a]</td>
      <td>{'outcome': {'id': 8, 'name': 'Complete'}}</td>
      <td>303299</td>
    </tr>
    <tr>
      <th>4</th>
      <td>9555afbd-d838-42c9-8f80-be3cd09e4c4a</td>
      <td>793</td>
      <td>1</td>
      <td>00:20:18.409</td>
      <td>20</td>
      <td>18</td>
      <td>Dribble</td>
      <td>33</td>
      <td>Eintracht Frankfurt</td>
      <td>Regular Play</td>
      <td>Eintracht Frankfurt</td>
      <td>Timothy Chandler</td>
      <td>Right Wing Back</td>
      <td>[81.8, 75.7]</td>
      <td>0.000000</td>
      <td>True</td>
      <td>[a5c88cee-6319-4c25-91cd-8a028d8dbfbf]</td>
      <td>{'outcome': {'id': 9, 'name': 'Incomplete'}}</td>
      <td>303299</td>
    </tr>
  </tbody>
</table>

### 360 Metrics
If you have access to 360 data for a competition, you can set `include_360_metrics=True` in the `events()` and `competition_events()` functions to retrieve 360 metrics such a line breaking passess together with the event data.

The open data does not include the 360 metrics. This is currently only available to customers with a data subscription.

```
events = sb.events(match_id=3837323, include_360_metrics=True)
comp_events = sb.competition_events(
            country="Europe",
            division="Champions League",
            season="2022/2023",
            include_360_metrics=True,
)
comp_events
```
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>50_50</th>
      <th>bad_behaviour_card</th>
      <th>ball_receipt_exceeds_distance</th>
      <th>ball_receipt_in_space</th>
      <th>ball_receipt_outcome</th>
      <th>ball_recovery_offensive</th>
      <th>ball_recovery_recovery_failure</th>
      <th>block_deflection</th>
      <th>block_offensive</th>
      <th>block_save_block</th>
      <th>carry_end_location</th>
      <th>clearance_aerial_won</th>
      <th>clearance_body_part</th>
      <th>clearance_head</th>
      <th>clearance_left_foot</th>
      <th>clearance_other</th>
      <th>clearance_right_foot</th>
      <th>counterpress</th>
      <th>distance_to_nearest_defender</th>
      <th>dribble_no_touch</th>
      <th>dribble_nutmeg</th>
      <th>dribble_outcome</th>
      <th>dribble_overrun</th>
      <th>duel_outcome</th>
      <th>duel_type</th>
      <th>duration</th>
      <th>foul_committed_advantage</th>
      <th>foul_committed_card</th>
      <th>foul_committed_offensive</th>
      <th>foul_committed_penalty</th>
      <th>foul_committed_type</th>
      <th>foul_won_advantage</th>
      <th>foul_won_defensive</th>
      <th>foul_won_penalty</th>
      <th>goalkeeper_body_part</th>
      <th>goalkeeper_end_location</th>
      <th>goalkeeper_lost_in_play</th>
      <th>goalkeeper_lost_out</th>
      <th>goalkeeper_outcome</th>
      <th>goalkeeper_position</th>
      <th>goalkeeper_punched_out</th>
      <th>goalkeeper_shot_saved_off_target</th>
      <th>goalkeeper_shot_saved_to_post</th>
      <th>goalkeeper_success_in_play</th>
      <th>goalkeeper_technique</th>
      <th>goalkeeper_type</th>
      <th>half_start_late_video_start</th>
      <th>id</th>
      <th>index</th>
      <th>injury_stoppage_in_chain</th>
      <th>interception_outcome</th>
      <th>line_breaking_pass</th>
      <th>location</th>
      <th>minute</th>
      <th>miscontrol_aerial_won</th>
      <th>num_defenders_on_goal_side_of_actor</th>
      <th>obv_against_after</th>
      <th>obv_against_before</th>
      <th>obv_against_net</th>
      <th>obv_for_after</th>
      <th>obv_for_before</th>
      <th>obv_for_net</th>
      <th>obv_total_net</th>
      <th>off_camera</th>
      <th>out</th>
      <th>pass_aerial_won</th>
      <th>pass_angle</th>
      <th>pass_assisted_shot_id</th>
      <th>pass_body_part</th>
      <th>pass_cross</th>
      <th>pass_cut_back</th>
      <th>pass_deflected</th>
      <th>pass_end_location</th>
      <th>pass_goal_assist</th>
      <th>pass_height</th>
      <th>pass_inswinging</th>
      <th>pass_length</th>
      <th>pass_miscommunication</th>
      <th>pass_no_touch</th>
      <th>pass_outcome</th>
      <th>pass_outswinging</th>
      <th>pass_recipient</th>
      <th>pass_shot_assist</th>
      <th>pass_straight</th>
      <th>pass_switch</th>
      <th>pass_technique</th>
      <th>pass_through_ball</th>
      <th>pass_type</th>
      <th>pass_xclaim</th>
      <th>period</th>
      <th>play_pattern</th>
      <th>player</th>
      <th>player_id</th>
      <th>player_off_permanent</th>
      <th>position</th>
      <th>possession</th>
      <th>possession_team</th>
      <th>possession_team_id</th>
      <th>related_events</th>
      <th>second</th>
      <th>shot_aerial_won</th>
      <th>shot_body_part</th>
      <th>shot_deflected</th>
      <th>shot_end_location</th>
      <th>shot_first_time</th>
      <th>shot_freeze_frame</th>
      <th>shot_key_pass_id</th>
      <th>shot_one_on_one</th>
      <th>shot_open_goal</th>
      <th>shot_outcome</th>
      <th>shot_redirect</th>
      <th>shot_saved_off_target</th>
      <th>shot_saved_to_post</th>
      <th>shot_statsbomb_xg</th>
      <th>shot_statsbomb_xg2</th>
      <th>shot_technique</th>
      <th>shot_type</th>
      <th>substitution_outcome</th>
      <th>substitution_replacement</th>
      <th>team</th>
      <th>timestamp</th>
      <th>type</th>
      <th>under_pressure</th>
      <th>visible_opponents</th>
      <th>visible_teammates</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>0.0</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>3479244f-8234-43c9-a389-4ce587062b48</td>
      <td>1</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>0</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>None</td>
      <td>None</td>
      <td>None</td>
      <td>None</td>
      <td>None</td>
      <td>None</td>
      <td>None</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>1</td>
      <td>Regular Play</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>1</td>
      <td>Real Madrid</td>
      <td>220</td>
      <td>NaN</td>
      <td>0</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>Real Madrid</td>
      <td>00:00:00.000</td>
      <td>Starting XI</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
    </tr>
    <tr>
      <th>1</th>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>0.0</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>c4f5a51b-741e-4920-ac32-02349b1f2755</td>
      <td>2</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>0</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>None</td>
      <td>None</td>
      <td>None</td>
      <td>None</td>
      <td>None</td>
      <td>None</td>
      <td>None</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>1</td>
      <td>Regular Play</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>1</td>
      <td>Real Madrid</td>
      <td>220</td>
      <td>NaN</td>
      <td>0</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>Celtic</td>
      <td>00:00:00.000</td>
      <td>Starting XI</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
    </tr>
    <tr>
      <th>2</th>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>0.0</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>27be67e7-fdb5-4db9-92b6-8f3214cecec4</td>
      <td>1</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>0</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>None</td>
      <td>None</td>
      <td>None</td>
      <td>None</td>
      <td>None</td>
      <td>None</td>
      <td>None</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>1</td>
      <td>Regular Play</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>1</td>
      <td>Juventus</td>
      <td>224</td>
      <td>NaN</td>
      <td>0</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>Juventus</td>
      <td>00:00:00.000</td>
      <td>Starting XI</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
    </tr>
    <tr>
      <th>3</th>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>0.0</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>819c381e-29c1-4f10-a6c3-acc3181cec14</td>
      <td>2</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>0</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>None</td>
      <td>None</td>
      <td>None</td>
      <td>None</td>
      <td>None</td>
      <td>None</td>
      <td>None</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>1</td>
      <td>Regular Play</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>1</td>
      <td>Juventus</td>
      <td>224</td>
      <td>NaN</td>
      <td>0</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>Paris Saint-Germain</td>
      <td>00:00:00.000</td>
      <td>Starting XI</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
    </tr>
    <tr>
      <th>4</th>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>0.0</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>e6d42d87-c78a-4286-94fd-4095e9f7b16f</td>
      <td>1</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>0</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>None</td>
      <td>None</td>
      <td>None</td>
      <td>None</td>
      <td>None</td>
      <td>None</td>
      <td>None</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>1</td>
      <td>Regular Play</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>1</td>
      <td>Manchester City</td>
      <td>36</td>
      <td>NaN</td>
      <td>0</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>Manchester City</td>
      <td>00:00:00.000</td>
      <td>Starting XI</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
    </tr>
  </tbody>
</table>

### 360 Frames

The frame functions will return the raw 360 freeze frame data along with the visible area for each frame. This is returned at the player level so you have multiple rows per frame/event_id. 
```
match_frames = sb.frames(match_id=3772072, fmt='dataframe')
comp_frames = sb.competition_frames(
    country="Germany",
    division= "1. Bundesliga",
    season="2019/2020"
)
match_frames
```

<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>actor</th>
      <th>distance_from_edge_of_visible_area</th>
      <th>event_uuid</th>
      <th>keeper</th>
      <th>location</th>
      <th>match_id</th>
      <th>teammate</th>
      <th>visible_area</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>False</td>
      <td>5.183739</td>
      <td>065b15cc-b550-48de-9a1e-a9608d8e6c6d</td>
      <td>False</td>
      <td>[79.14114105224532, 12.646560364129726]</td>
      <td>3855869</td>
      <td>False</td>
      <td>[50.8965834880119, 80.0, 55.8915648466696, 6.76382112514142, 80.0765213141343, 1.48859955554994, 113.056993108772, 80.0, 50.8965834880119, 80.0]</td>
    </tr>
    <tr>
      <th>1</th>
      <td>False</td>
      <td>7.784551</td>
      <td>065b15cc-b550-48de-9a1e-a9608d8e6c6d</td>
      <td>False</td>
      <td>[80.68650097437124, 23.040779651892883]</td>
      <td>3855869</td>
      <td>True</td>
      <td>[50.8965834880119, 80.0, 55.8915648466696, 6.76382112514142, 80.0765213141343, 1.48859955554994, 113.056993108772, 80.0, 50.8965834880119, 80.0]</td>
    </tr>
    <tr>
      <th>2</th>
      <td>False</td>
      <td>8.873694</td>
      <td>065b15cc-b550-48de-9a1e-a9608d8e6c6d</td>
      <td>False</td>
      <td>[80.20033992405365, 24.695673759901382]</td>
      <td>3855869</td>
      <td>False</td>
      <td>[50.8965834880119, 80.0, 55.8915648466696, 6.76382112514142, 80.0765213141343, 1.48859955554994, 113.056993108772, 80.0, 50.8965834880119, 80.0]</td>
    </tr>
    <tr>
      <th>3</th>
      <td>False</td>
      <td>9.738309</td>
      <td>065b15cc-b550-48de-9a1e-a9608d8e6c6d</td>
      <td>False</td>
      <td>[82.43349155444821, 32.24426347120625]</td>
      <td>3855869</td>
      <td>False</td>
      <td>[50.8965834880119, 80.0, 55.8915648466696, 6.76382112514142, 80.0765213141343, 1.48859955554994, 113.056993108772, 80.0, 50.8965834880119, 80.0]</td>
    </tr>
    <tr>
      <th>4</th>
      <td>False</td>
      <td>11.049633</td>
      <td>065b15cc-b550-48de-9a1e-a9608d8e6c6d</td>
      <td>False</td>
      <td>[81.320294294838, 32.98015558905158]</td>
      <td>3855869</td>
      <td>True</td>
      <td>[50.8965834880119, 80.0, 55.8915648466696, 6.76382112514142, 80.0765213141343, 1.48859955554994, 113.056993108772, 80.0, 50.8965834880119, 80.0]</td>
    </tr>
  </tbody>
</table>

### Aggregated Stats

For customers we also provide aggregated statistics at the player-match, player-season and team-season levels. 

```
player_match = sb.player_match_stats(3772072)
player_season = sb.player_season_stats(competition_id=9, season_id=42)
team_season = sb.team_season_stats(competition_id=9, season_id=42)

player_match
```

<table border=\"1\" class=\"dataframe\">
  <thead>
    <tr style=\"text-align: right;\">
      <th></th>
      <th>player_match_pressures</th>
      <th>player_match_long_balls</th>
      <th>player_match_shot_touch_ratio</th>
      <th>player_match_passes_into_box</th>
      <th>player_match_pressure_duration_avg</th>
      <th>player_match_crossing_ratio</th>
      <th>player_match_op_f3_forward_passes</th>
      <th>player_match_passing_ratio</th>
      <th>team_id</th>
      <th>player_match_successful_passes</th>
      <th>player_match_op_xgbuildup_per_possession</th>
      <th>player_match_op_xgchain</th>
      <th>player_match_op_passes_into_box</th>
      <th>player_match_deep_progressions</th>
      <th>player_match_turnovers</th>
      <th>player_match_counterpressured_action_fails</th>
      <th>player_match_passes</th>
      <th>player_match_key_passes</th>
      <th>player_match_dispossessions</th>
      <th>player_match_penalties_won</th>
      <th>player_match_through_balls</th>
      <th>team_name</th>
      <th>player_match_op_passes</th>
      <th>player_match_dribbles</th>
      <th>player_match_clearances</th>
      <th>player_match_forward_passes</th>
      <th>player_match_np_xg_per_shot</th>
      <th>player_match_counterpressures</th>
      <th>player_id</th>
      <th>player_match_op_xa</th>
      <th>player_match_op_xgchain_per_possession</th>
      <th>player_match_minutes</th>
      <th>player_match_pressured_long_balls</th>
      <th>player_match_op_f3_sideways_passes</th>
      <th>player_match_dribbles_faced</th>
      <th>player_match_np_xg</th>
      <th>player_match_goals</th>
      <th>player_match_op_key_passes</th>
      <th>player_match_aerial_ratio</th>
      <th>player_match_op_shots</th>
      <th>player_match_successful_crosses</th>
      <th>player_match_shots_blocked</th>
      <th>player_match_op_f3_passes</th>
      <th>player_match_op_assists</th>
      <th>player_match_long_ball_ratio</th>
      <th>account_id</th>
      <th>player_match_np_shots</th>
      <th>player_match_challenge_ratio</th>
      <th>player_match_touches</th>
      <th>player_match_pressure_regains</th>
      <th>player_match_crosses_into_box</th>
      <th>player_match_fouls</th>
      <th>player_match_sideways_passes</th>
      <th>player_match_aerials</th>
      <th>player_match_touches_inside_box</th>
      <th>player_match_counterpressure_duration_total</th>
      <th>player_match_successful_aerials</th>
      <th>player_match_box_cross_ratio</th>
      <th>player_match_xgbuildup_per_possession</th>
      <th>player_match_dribbled_past</th>
      <th>player_match_pressure_duration_total</th>
      <th>player_match_op_xgbuildup</th>
      <th>player_match_np_shots_on_target</th>
      <th>player_match_interceptions</th>
      <th>player_match_counterpressure_duration_avg</th>
      <th>player_match_xgchain_per_possession</th>
      <th>player_match_successful_long_balls</th>
      <th>player_match_op_f3_backward_passes</th>
      <th>player_match_xgchain</th>
      <th>player_match_tackles</th>
      <th>player_match_assists</th>
      <th>player_match_sp_xa</th>
      <th>player_match_aggressive_actions</th>
      <th>player_name</th>
      <th>player_match_xa</th>
      <th>match_id</th>
      <th>player_match_passes_inside_box</th>
      <th>player_match_possession</th>
      <th>player_match_pressured_action_fails</th>
      <th>player_match_crosses</th>
      <th>player_match_fouls_won</th>
      <th>player_match_xgbuildup</th>
      <th>player_match_backward_passes</th>
      <th>player_match_unpressured_long_balls</th>
      <th>player_match_np_goals</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>NaN</td>
      <td>10</td>
      <td>0.000000</td>
      <td>0</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>0</td>
      <td>0.842105</td>
      <td>870</td>
      <td>32</td>
      <td>0.003191</td>
      <td>0.105292</td>
      <td>0</td>
      <td>0</td>
      <td>0</td>
      <td>NaN</td>
      <td>38</td>
      <td>0</td>
      <td>0</td>
      <td>0</td>
      <td>0</td>
      <td>Arminia Bielefeld</td>
      <td>33</td>
      <td>0</td>
      <td>0</td>
      <td>9</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>9194</td>
      <td>0.000000</td>
      <td>0.003191</td>
      <td>94.21667</td>
      <td>1</td>
      <td>0</td>
      <td>0</td>
      <td>0.000000</td>
      <td>0</td>
      <td>0</td>
      <td>NaN</td>
      <td>0</td>
      <td>0</td>
      <td>0</td>
      <td>0</td>
      <td>0</td>
      <td>0.600000</td>
      <td>48</td>
      <td>0</td>
      <td>NaN</td>
      <td>65</td>
      <td>0</td>
      <td>0</td>
      <td>0</td>
      <td>29</td>
      <td>0</td>
      <td>0</td>
      <td>NaN</td>
      <td>0</td>
      <td>NaN</td>
      <td>0.003191</td>
      <td>0</td>
      <td>NaN</td>
      <td>0.105292</td>
      <td>0</td>
      <td>0</td>
      <td>NaN</td>
      <td>0.003191</td>
      <td>6</td>
      <td>0</td>
      <td>0.105292</td>
      <td>0</td>
      <td>0</td>
      <td>0.000000</td>
      <td>0</td>
      <td>Stefan Ortega</td>
      <td>0.000000</td>
      <td>3772072</td>
      <td>0</td>
      <td>0.491135</td>
      <td>NaN</td>
      <td>0</td>
      <td>0</td>
      <td>0.105292</td>
      <td>0</td>
      <td>9</td>
      <td>0</td>
    </tr>
    <tr>
      <th>1</th>
      <td>8.0</td>
      <td>0</td>
      <td>0.033333</td>
      <td>0</td>
      <td>0.570626</td>
      <td>0.0</td>
      <td>0</td>
      <td>0.812500</td>
      <td>870</td>
      <td>13</td>
      <td>0.003726</td>
      <td>0.160582</td>
      <td>0</td>
      <td>1</td>
      <td>3</td>
      <td>0.0</td>
      <td>16</td>
      <td>1</td>
      <td>3</td>
      <td>0</td>
      <td>0</td>
      <td>Arminia Bielefeld</td>
      <td>10</td>
      <td>1</td>
      <td>1</td>
      <td>0</td>
      <td>0.034737</td>
      <td>1.0</td>
      <td>9210</td>
      <td>0.043881</td>
      <td>0.007299</td>
      <td>91.90000</td>
      <td>1</td>
      <td>4</td>
      <td>0</td>
      <td>0.034737</td>
      <td>0</td>
      <td>1</td>
      <td>0.285714</td>
      <td>1</td>
      <td>0</td>
      <td>0</td>
      <td>6</td>
      <td>0</td>
      <td>NaN</td>
      <td>48</td>
      <td>1</td>
      <td>1.0</td>
      <td>30</td>
      <td>0</td>
      <td>0</td>
      <td>0</td>
      <td>10</td>
      <td>7</td>
      <td>5</td>
      <td>0.327541</td>
      <td>2</td>
      <td>NaN</td>
      <td>0.003726</td>
      <td>0</td>
      <td>4.565010</td>
      <td>0.081964</td>
      <td>0</td>
      <td>0</td>
      <td>0.327541</td>
      <td>0.007299</td>
      <td>0</td>
      <td>2</td>
      <td>0.160582</td>
      <td>1</td>
      <td>0</td>
      <td>0.000000</td>
      <td>9</td>
      <td>Fabian Klos</td>
      <td>0.043881</td>
      <td>3772072</td>
      <td>1</td>
      <td>0.491135</td>
      <td>0.0</td>
      <td>1</td>
      <td>1</td>
      <td>0.081964</td>
      <td>6</td>
      <td>0</td>
      <td>0</td>
    </tr>
    <tr>
      <th>2</th>
      <td>7.0</td>
      <td>13</td>
      <td>0.000000</td>
      <td>1</td>
      <td>1.795411</td>
      <td>0.0</td>
      <td>1</td>
      <td>0.852941</td>
      <td>190</td>
      <td>58</td>
      <td>0.017993</td>
      <td>0.773687</td>
      <td>0</td>
      <td>3</td>
      <td>0</td>
      <td>0.0</td>
      <td>68</td>
      <td>1</td>
      <td>0</td>
      <td>0</td>
      <td>0</td>
      <td>Union Berlin</td>
      <td>60</td>
      <td>0</td>
      <td>2</td>
      <td>4</td>
      <td>NaN</td>
      <td>0.0</td>
      <td>9164</td>
      <td>0.000000</td>
      <td>0.017993</td>
      <td>94.21667</td>
      <td>2</td>
      <td>3</td>
      <td>0</td>
      <td>0.000000</td>
      <td>0</td>
      <td>0</td>
      <td>0.666667</td>
      <td>0</td>
      <td>0</td>
      <td>1</td>
      <td>4</td>
      <td>0</td>
      <td>0.615385</td>
      <td>48</td>
      <td>0</td>
      <td>1.0</td>
      <td>122</td>
      <td>1</td>
      <td>0</td>
      <td>2</td>
      <td>51</td>
      <td>3</td>
      <td>0</td>
      <td>NaN</td>
      <td>2</td>
      <td>0.0</td>
      <td>0.017993</td>
      <td>0</td>
      <td>12.567875</td>
      <td>0.773687</td>
      <td>0</td>
      <td>1</td>
      <td>NaN</td>
      <td>0.019504</td>
      <td>8</td>
      <td>0</td>
      <td>0.838693</td>
      <td>2</td>
      <td>0</td>
      <td>0.043227</td>
      <td>11</td>
      <td>Christopher Trimmel</td>
      <td>0.043227</td>
      <td>3772072</td>
      <td>0</td>
      <td>0.508865</td>
      <td>0.0</td>
      <td>1</td>
      <td>0</td>
      <td>0.773687</td>
      <td>13</td>
      <td>13</td>
      <td>0</td>
    </tr>
    <tr>
      <th>3</th>
      <td>3.0</td>
      <td>4</td>
      <td>0.013699</td>
      <td>1</td>
      <td>0.744943</td>
      <td>NaN</td>
      <td>1</td>
      <td>0.777778</td>
      <td>870</td>
      <td>35</td>
      <td>0.002196</td>
      <td>0.090022</td>
      <td>1</td>
      <td>1</td>
      <td>1</td>
      <td>0.0</td>
      <td>45</td>
      <td>0</td>
      <td>1</td>
      <td>0</td>
      <td>0</td>
      <td>Arminia Bielefeld</td>
      <td>40</td>
      <td>0</td>
      <td>1</td>
      <td>18</td>
      <td>0.019468</td>
      <td>0.0</td>
      <td>24343</td>
      <td>0.000000</td>
      <td>0.002196</td>
      <td>94.21667</td>
      <td>1</td>
      <td>1</td>
      <td>0</td>
      <td>0.019468</td>
      <td>0</td>
      <td>0</td>
      <td>0.000000</td>
      <td>1</td>
      <td>0</td>
      <td>1</td>
      <td>2</td>
      <td>0</td>
      <td>0.750000</td>
      <td>48</td>
      <td>1</td>
      <td>NaN</td>
      <td>73</td>
      <td>0</td>
      <td>0</td>
      <td>0</td>
      <td>22</td>
      <td>1</td>
      <td>1</td>
      <td>NaN</td>
      <td>0</td>
      <td>0.0</td>
      <td>0.003043</td>
      <td>0</td>
      <td>2.234830</td>
      <td>0.090022</td>
      <td>0</td>
      <td>0</td>
      <td>NaN</td>
      <td>0.003043</td>
      <td>3</td>
      <td>0</td>
      <td>0.124760</td>
      <td>0</td>
      <td>0</td>
      <td>0.000000</td>
      <td>3</td>
      <td>Jacob Laursen</td>
      <td>0.000000</td>
      <td>3772072</td>
      <td>0</td>
      <td>0.491135</td>
      <td>0.0</td>
      <td>0</td>
      <td>1</td>
      <td>0.124760</td>
      <td>5</td>
      <td>4</td>
      <td>0</td>
    </tr>
    <tr>
      <th>4</th>
      <td>14.0</td>
      <td>6</td>
      <td>0.000000</td>
      <td>0</td>
      <td>0.592216</td>
      <td>NaN</td>
      <td>0</td>
      <td>0.763158</td>
      <td>870</td>
      <td>29</td>
      <td>0.006048</td>
      <td>0.211669</td>
      <td>0</td>
      <td>1</td>
      <td>0</td>
      <td>0.0</td>
      <td>38</td>
      <td>0</td>
      <td>2</td>
      <td>0</td>
      <td>0</td>
      <td>Arminia Bielefeld</td>
      <td>36</td>
      <td>0</td>
      <td>1</td>
      <td>7</td>
      <td>NaN</td>
      <td>2.0</td>
      <td>9204</td>
      <td>0.000000</td>
      <td>0.006048</td>
      <td>94.21667</td>
      <td>1</td>
      <td>1</td>
      <td>3</td>
      <td>0.000000</td>
      <td>0</td>
      <td>0</td>
      <td>0.500000</td>
      <td>0</td>
      <td>0</td>
      <td>0</td>
      <td>1</td>
      <td>0</td>
      <td>1.000000</td>
      <td>48</td>
      <td>0</td>
      <td>0.0</td>
      <td>64</td>
      <td>1</td>
      <td>0</td>
      <td>4</td>
      <td>29</td>
      <td>2</td>
      <td>0</td>
      <td>0.676610</td>
      <td>1</td>
      <td>NaN</td>
      <td>0.006048</td>
      <td>3</td>
      <td>8.291025</td>
      <td>0.211669</td>
      <td>0</td>
      <td>2</td>
      <td>0.338305</td>
      <td>0.006048</td>
      <td>6</td>
      <td>0</td>
      <td>0.211669</td>
      <td>0</td>
      <td>0</td>
      <td>0.000000</td>
      <td>18</td>
      <td>Manuel Prietl</td>
      <td>0.000000</td>
      <td>3772072</td>
      <td>0</td>
      <td>0.491135</td>
      <td>0.0</td>
      <td>0</td>
      <td>1</td>
      <td>0.211669</td>
      <td>2</td>
      <td>6</td>
      <td>0</td>
    </tr>
  </tbody>
</table>

### Raw Files
Alternatively, entities can be accessed as python dictionaries serving as an interface to raw jsons and without performing any preprocessing
```

sb.competitions(fmt="dict")

sb.matches(competition_id=9, season_id=42, fmt="dict")

sb.lineups(match_id=303299, fmt="dict")

sb.events(303299, fmt="dict")

sb.competition_events(
    country="Germany",
    division= "1. Bundesliga",
    season="2019/2020",
    gender="male",
    fmt="dict"
)

sb.frames(3772072, fmt="dict")

sb.competition_frames(
    country="Germany",
    division= "1. Bundesliga",
    season="2021/2022",
    gender="male",
    fmt="dict"
)

sb.player_match_stats(3772072, fmt="dict")

sb.player_season_stats(competition_id=9, season_id=42, fmt="dict")

sb.team_season_stats(competition_id=9, season_id=42, fmt="dict")

```



            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/statsbomb/statsbombpy",
    "name": "statsbombpy",
    "maintainer": "",
    "docs_url": null,
    "requires_python": "",
    "maintainer_email": "",
    "keywords": "",
    "author": "StatsBomb",
    "author_email": "support@statsbombservices.com",
    "download_url": "https://files.pythonhosted.org/packages/05/8f/eabf4709d27b6b25b46e7a2b9431cde1139416e8a98a9e695eebdeacdc77/statsbombpy-1.12.0.tar.gz",
    "platform": null,
    "description": "# statsbombpy <picture><source media=\"(prefers-color-scheme: dark)\" srcset=\"https://github.com/statsbomb/logos/blob/main/StatsBombPython_Lock_Light.svg\"><source media=\"(prefers-color-scheme: light)\" srcset=\"https://github.com/statsbomb/logos/blob/main/StatsBombPython_Lock.svg\"><img alt=\"StatsBombPython_Lock\" src=\"https://github.com/statsbomb/logos/blob/main/StatsBombPython_Lock.svg\" align=\"right\" height=\"40\"></picture>\n\n[![PyPI version](https://badge.fury.io/py/statsbombpy.svg?)](https://badge.fury.io/py/statsbombpy)\n\nBrought to you by StatsBomb, this repository is a Python package that allows users to easily stream StatsBomb data into Python using your log in credentials for the API or free data from our GitHub page. **API access is for paying customers only**\n\n**Support: support@statsbomb.com**\n\n\n## Installation Instructions\n\n`pip install statsbombpy`\n\n\n## Running the tests\n\n`nose2 -v --pretty-assert`\n\n\n## Configuration\n\n### Authentication\n\n#### Environment Variables\nAuthentication can be done by setting environment variables named `SB_USERNAME` and `SB_PASSWORD` to your login credentials.\n\n#### Manual Calls\nAlternatively, if you don't want to use environment variables, all functions accept an argument `creds` to pass your login credentials in the format `{\"user\": \"\", \"passwd\": \"\"}`\n\n### Concurrency\nYou can specify how many of your computer's cores to use when running the `sb.competition_events()` and `sb.competition_frames()` functions by setting the environment variable `SB_CORES` to the number you want to use. Allowing statsbombpy to use more cores will speed up those functions.\n\nIf you don't have an environment variable set we will try to detect the number of cores in your system and use 2 less than that number. If we cannot detect the number of cores we set the number to 4.\n\n## Open Data\nStatsBomb's open data can be accessed without the need of authentication.\n\nStatsBomb are committed to sharing new data and research publicly to enhance understanding of the game of Football. We want to actively encourage new research and analysis at all levels. Therefore we have made certain leagues of StatsBomb Data freely available for public use for research projects and genuine interest in football analytics.\n\nStatsBomb are hoping that by making data freely available, we will extend the wider football analytics community and attract new talent to the industry. We would like to collect some basic personal information about users of our data. By [giving us your email address](https://statsbomb.com/resource-centre/), it means we will let you know when we make more data, tutorials and research available. We will store the information in accordance with our Privacy Policy and the GDPR.\n\n#### Terms & Conditions\nWhilst we are keen to share data and facilitate research, we also urge you to be responsible with the data. Please register your details on https://www.statsbomb.com/resource-centre and read our [User Agreement](doc/LICENSE.pdf) carefully.\nBy using this repository, you are agreeing to the user agreement. If you publish, share or distribute any research, analysis or insights based on this data, please state the data source as StatsBomb and use our logo.\n\n\n## Usage\n\n```\nfrom statsbombpy import sb\n```\n\n\n### Competitions\n\n```\nsb.competitions()\n```\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>competition_id</th>\n      <th>season_id</th>\n      <th>country_name</th>\n      <th>competition_name</th>\n      <th>competition_gender</th>\n      <th>season_name</th>\n      <th>match_updated</th>\n      <th>match_available</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>9</td>\n      <td>42</td>\n      <td>Germany</td>\n      <td>1. Bundesliga</td>\n      <td>male</td>\n      <td>2019/2020</td>\n      <td>2019-12-29T07:47:45.981</td>\n      <td>2019-12-29T07:47:45.981</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>9</td>\n      <td>4</td>\n      <td>Germany</td>\n      <td>1. Bundesliga</td>\n      <td>male</td>\n      <td>2018/2019</td>\n      <td>2019-12-16T23:09:16.168756</td>\n      <td>2019-12-16T23:09:16.168756</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>9</td>\n      <td>1</td>\n      <td>Germany</td>\n      <td>1. Bundesliga</td>\n      <td>male</td>\n      <td>2017/2018</td>\n      <td>2019-12-16T23:09:16.168756</td>\n      <td>2019-12-16T23:09:16.168756</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>78</td>\n      <td>42</td>\n      <td>Croatia</td>\n      <td>1. HNL</td>\n      <td>male</td>\n      <td>2019/2020</td>\n      <td>2020-01-02T10:35:49.065</td>\n      <td>2020-01-02T10:35:49.065</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>10</td>\n      <td>42</td>\n      <td>Germany</td>\n      <td>2. Bundesliga</td>\n      <td>male</td>\n      <td>2019/2020</td>\n      <td>2019-12-27T00:36:37.498</td>\n      <td>2019-12-27T00:36:37.498</td>\n    </tr>\n  </tbody>\n</table>\n\n\n### Matches\n\n```\nsb.matches(competition_id=9, season_id=42)\n```\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>match_id</th>\n      <th>match_date</th>\n      <th>kick_off</th>\n      <th>competition</th>\n      <th>season</th>\n      <th>home_team</th>\n      <th>away_team</th>\n      <th>home_score</th>\n      <th>away_score</th>\n      <th>match_status</th>\n      <th>last_updated</th>\n      <th>match_week</th>\n      <th>competition_stage</th>\n      <th>stadium</th>\n      <th>referee</th>\n      <th>home_managers</th>\n      <th>away_managers</th>\n      <th>data_version</th>\n      <th>shot_fidelity_version</th>\n      <th>xy_fidelity_version</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>303299</td>\n      <td>2019-12-15</td>\n      <td>18:00:00.000</td>\n      <td>Germany - 1. Bundesliga</td>\n      <td>2019/2020</td>\n      <td>Schalke 04</td>\n      <td>Eintracht Frankfurt</td>\n      <td>1</td>\n      <td>0</td>\n      <td>available</td>\n      <td>2019-12-17T09:50:17.558</td>\n      <td>15</td>\n      <td>Regular Season</td>\n      <td>VELTINS-Arena</td>\n      <td>F. Zwayer</td>\n      <td>David Wagner</td>\n      <td>Adi H\u00fctter</td>\n      <td>1.1.0</td>\n      <td>2</td>\n      <td>2</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>303223</td>\n      <td>2019-09-01</td>\n      <td>18:00:00.000</td>\n      <td>Germany - 1. Bundesliga</td>\n      <td>2019/2020</td>\n      <td>Eintracht Frankfurt</td>\n      <td>Fortuna D\u00fcsseldorf</td>\n      <td>2</td>\n      <td>1</td>\n      <td>available</td>\n      <td>2019-12-16T23:09:16.168756</td>\n      <td>3</td>\n      <td>Regular Season</td>\n      <td>Commerzbank-Arena</td>\n      <td>F. Willenborg</td>\n      <td>Adi H\u00fctter</td>\n      <td>Friedhelm Funkel</td>      \n      <td>1.1.0</td>\n      <td>2</td>\n      <td>2</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>303083</td>\n      <td>2019-12-15</td>\n      <td>15:30:00.000</td>\n      <td>Germany - 1. Bundesliga</td>\n      <td>2019/2020</td>\n      <td>Wolfsburg</td>\n      <td>Borussia M\u00f6nchengladbach</td>\n      <td>2</td>\n      <td>1</td>\n      <td>available</td>\n      <td>2019-12-17T15:52:17.843</td>\n      <td>15</td>\n      <td>Regular Season</td>\n      <td>VOLKSWAGEN ARENA</td>\n      <td>F. Brych</td>\n      <td>Oliver Glasner</td>\n      <td>Marco Rose</td>      \n      <td>1.1.0</td>\n      <td>2</td>\n      <td>2</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>303266</td>\n      <td>2019-12-14</td>\n      <td>15:30:00.000</td>\n      <td>Germany - 1. Bundesliga</td>\n      <td>2019/2020</td>\n      <td>Hertha Berlin</td>\n      <td>Freiburg</td>\n      <td>1</td>\n      <td>0</td>\n      <td>available</td>\n      <td>2019-12-17T17:43:18.285</td>\n      <td>15</td>\n      <td>Regular Season</td>\n      <td>Olympiastadion Berlin</td>\n      <td>F. Willenborg</td>\n      <td>J\u00fcrgen Klinsmann</td>\n      <td>Christian Streich</td>      \n      <td>1.1.0</td>\n      <td>2</td>\n      <td>2</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>303073</td>\n      <td>2019-12-21</td>\n      <td>15:30:00.000</td>\n      <td>Germany - 1. Bundesliga</td>\n      <td>2019/2020</td>\n      <td>Bayern Munich</td>\n      <td>Wolfsburg</td>\n      <td>2</td>\n      <td>0</td>\n      <td>available</td>\n      <td>2019-12-23T18:02:36.454</td>\n      <td>17</td>\n      <td>Regular Season</td>\n      <td>Allianz Arena</td>\n      <td>C. Dingert</td>\n      <td>Hans-Dieter Flick</td>\n      <td>Oliver Glasner </td>      \n      <td>1.1.0</td>\n      <td>2</td>\n      <td>2</td>\n    </tr>\n  </tbody>\n</table>\n\n\n### Lineups\n\n```\nsb.lineups(match_id=303299)[\"Eintracht Frankfurt\"]\n```\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>player_id</th>\n      <th>player_name</th>\n      <th>player_nickname</th>\n      <th>birth_date</th>\n      <th>player_gender</th>\n      <th>player_height</th>\n      <th>player_weight</th>\n      <th>jersey_number</th>\n      <th>country</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>3204</td>\n      <td>Almamy Tour\u00e9</td>\n      <td>None</td>\n      <td>1996-04-28</td>\n      <td>male</td>\n      <td>182.0</td>\n      <td>72.0</td>\n      <td>18</td>\n      <td>Mali</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>5591</td>\n      <td>Filip Kosti\u0107</td>\n      <td>None</td>\n      <td>1992-11-01</td>\n      <td>male</td>\n      <td>184.0</td>\n      <td>82.0</td>\n      <td>10</td>\n      <td>Serbia</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>7713</td>\n      <td>Obite Evan N\"Dicka</td>\n      <td>Evan N'Dicka</td>\n      <td>1999-08-20</td>\n      <td>male</td>\n      <td>190.0</td>\n      <td>NaN</td>\n      <td>2</td>\n      <td>France</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>8307</td>\n      <td>Martin Hinteregger</td>\n      <td>None</td>\n      <td>1992-09-07</td>\n      <td>male</td>\n      <td>184.0</td>\n      <td>83.0</td>\n      <td>13</td>\n      <td>Austria</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>8669</td>\n      <td>Mijat Ga\u0107inovi\u0107</td>\n      <td>None</td>\n      <td>1995-02-08</td>\n      <td>male</td>\n      <td>175.0</td>\n      <td>66.0</td>\n      <td>11</td>\n      <td>Serbia</td>\n    </tr>\n  </tbody>\n</table>\n\n\n### Events\nThe default settings for querying events return a single dataframe with all event types and event attributes.\n\n```\nevents = sb.events(match_id=303299)\n```\n\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>ball_receipt_outcome</th>\n      <th>ball_recovery_offensive</th>\n      <th>ball_recovery_recovery_failure</th>\n      <th>block_deflection</th>\n      <th>carry_end_location</th>\n      <th>clearance_aerial_won</th>\n      <th>clearance_body_part</th>\n      <th>clearance_head</th>\n      <th>clearance_left_foot</th>\n      <th>clearance_right_foot</th>\n      <th>counterpress</th>\n      <th>dribble_no_touch</th>\n      <th>dribble_outcome</th>\n      <th>dribble_overrun</th>\n      <th>duel_outcome</th>\n      <th>duel_type</th>\n      <th>duration</th>\n      <th>foul_committed_advantage</th>\n      <th>foul_committed_card</th>\n      <th>foul_won_advantage</th>\n      <th>foul_won_defensive</th>\n      <th>goalkeeper_body_part</th>\n      <th>goalkeeper_end_location</th>\n      <th>goalkeeper_outcome</th>\n      <th>goalkeeper_position</th>\n      <th>goalkeeper_technique</th>\n      <th>goalkeeper_type</th>\n      <th>id</th>\n      <th>index</th>\n      <th>injury_stoppage_in_chain</th>\n      <th>interception_outcome</th>\n      <th>location</th>\n      <th>match_id</th>\n      <th>minute</th>\n      <th>off_camera</th>\n      <th>out</th>\n      <th>pass_aerial_won</th>\n      <th>pass_angle</th>\n      <th>pass_assisted_shot_id</th>\n      <th>pass_body_part</th>\n      <th>pass_cross</th>\n      <th>pass_cut_back</th>\n      <th>pass_deflected</th>\n      <th>pass_end_location</th>\n      <th>pass_goal_assist</th>\n      <th>pass_height</th>\n      <th>pass_length</th>\n      <th>pass_outcome</th>\n      <th>pass_outswinging</th>\n      <th>pass_recipient</th>\n      <th>pass_shot_assist</th>\n      <th>pass_straight</th>\n      <th>pass_switch</th>\n      <th>pass_technique</th>\n      <th>pass_through_ball</th>\n      <th>pass_type</th>\n      <th>pass_xclaim</th>\n      <th>period</th>\n      <th>play_pattern</th>\n      <th>player</th>\n      <th>position</th>\n      <th>possession</th>\n      <th>possession_team</th>\n      <th>related_events</th>\n      <th>second</th>\n      <th>shot_aerial_won</th>\n      <th>shot_body_part</th>\n      <th>shot_end_location</th>\n      <th>shot_first_time</th>\n      <th>shot_freeze_frame</th>\n      <th>shot_key_pass_id</th>\n      <th>shot_one_on_one</th>\n      <th>shot_outcome</th>\n      <th>shot_statsbomb_xg</th>\n      <th>shot_statsbomb_xg2</th>\n      <th>shot_technique</th>\n      <th>shot_type</th>\n      <th>substitution_outcome</th>\n      <th>substitution_replacement</th>\n      <th>team</th>\n      <th>timestamp</th>\n      <th>type</th>\n      <th>under_pressure</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>500</th>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>3.498736</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>84828c06-41b5-44eb-aa92-1710bdb818ac</td>\n      <td>1838</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>[50.1, 16.6]</td>\n      <td>303299</td>\n      <td>47</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>2.720095</td>\n      <td>NaN</td>\n      <td>Left Foot</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>[13.3, 33.1]</td>\n      <td>NaN</td>\n      <td>Ground Pass</td>\n      <td>40.329765</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>Frederik R\u00f8nnow</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>2</td>\n      <td>Regular Play</td>\n      <td>Obite Evan N\"Dicka</td>\n      <td>Left Center Back</td>\n      <td>103</td>\n      <td>Eintracht Frankfurt</td>\n      <td>[ae3094e3-faa3-4608-8284-d9b8cca77711, c1202f1c-0831-4e88-83b2-597f56f0c858]</td>\n      <td>52</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>Eintracht Frankfurt</td>\n      <td>00:02:52.438</td>\n      <td>Pass</td>\n      <td>True</td>\n    </tr>\n    <tr>\n      <th>501</th>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>3.604236</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>9061cd20-513b-499f-b925-f1de5f241281</td>\n      <td>1840</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>[13.3, 33.1]</td>\n      <td>303299</td>\n      <td>47</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>-0.153945</td>\n      <td>NaN</td>\n      <td>Right Foot</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>[77.1, 23.2]</td>\n      <td>NaN</td>\n      <td>High Pass</td>\n      <td>64.563540</td>\n      <td>Incomplete</td>\n      <td>NaN</td>\n      <td>Mijat Ga\u0107inovi\u0107</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>2</td>\n      <td>Regular Play</td>\n      <td>Frederik R\u00f8nnow</td>\n      <td>Goalkeeper</td>\n      <td>103</td>\n      <td>Eintracht Frankfurt</td>\n      <td>[8e6495a7-782a-4f1a-845f-3ec50d761a1e, ff758a12-1ba6-4dd4-8b2c-7d39aa7aed97]</td>\n      <td>55</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>Eintracht Frankfurt</td>\n      <td>00:02:55.937</td>\n      <td>Pass</td>\n      <td>NaN</td>\n    </tr>\n    <tr>\n      <th>502</th>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>2.101999</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>8e6495a7-782a-4f1a-845f-3ec50d761a1e</td>\n      <td>1842</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>[43.0, 56.9]</td>\n      <td>303299</td>\n      <td>47</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>-0.703110</td>\n      <td>NaN</td>\n      <td>Head</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>[64.0, 39.1]</td>\n      <td>NaN</td>\n      <td>High Pass</td>\n      <td>27.528894</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>Amine Harit</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>Recovery</td>\n      <td>NaN</td>\n      <td>2</td>\n      <td>Regular Play</td>\n      <td>Ozan Muhammed Kabak</td>\n      <td>Right Center Back</td>\n      <td>104</td>\n      <td>Schalke 04</td>\n      <td>[9061cd20-513b-499f-b925-f1de5f241281, be6dfe7d-7596-4cc2-8cd9-8c17d064317e]</td>\n      <td>59</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>Schalke 04</td>\n      <td>00:02:59.541</td>\n      <td>Pass</td>\n      <td>NaN</td>\n    </tr>\n    <tr>\n      <th>503</th>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>1.187459</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>86431bc7-210a-4868-8e18-26ff38becefc</td>\n      <td>1854</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>[65.9, 12.6]</td>\n      <td>303299</td>\n      <td>48</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>-0.730239</td>\n      <td>NaN</td>\n      <td>Right Foot</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>[74.5, 4.9]</td>\n      <td>NaN</td>\n      <td>Ground Pass</td>\n      <td>11.543396</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>Amine Harit</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>2</td>\n      <td>Regular Play</td>\n      <td>Suat Serdar</td>\n      <td>Left Defensive Midfield</td>\n      <td>104</td>\n      <td>Schalke 04</td>\n      <td>[761b4e65-8f64-464c-8153-6a98465208ba]</td>\n      <td>7</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>Schalke 04</td>\n      <td>00:03:07.689</td>\n      <td>Pass</td>\n      <td>NaN</td>\n    </tr>\n    <tr>\n      <th>504</th>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0.766628</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>6e58c713-622c-4246-8243-e4162e487a1c</td>\n      <td>1858</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>[79.1, 10.5]</td>\n      <td>303299</td>\n      <td>48</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>1.254940</td>\n      <td>NaN</td>\n      <td>Right Foot</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>[84.1, 25.8]</td>\n      <td>NaN</td>\n      <td>Ground Pass</td>\n      <td>16.096273</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>Rabbi Matondo</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>2</td>\n      <td>Regular Play</td>\n      <td>Amine Harit</td>\n      <td>Center Attacking Midfield</td>\n      <td>104</td>\n      <td>Schalke 04</td>\n      <td>[b1960a76-d3ae-4ef3-a2cd-47eca8c25e0a, dd1575c0-a408-4177-944d-7e86d2f79181]</td>\n      <td>11</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>Schalke 04</td>\n      <td>00:03:11.719</td>\n      <td>Pass</td>\n      <td>True</td>\n    </tr>\n  </tbody>\n</table>\n\n\n\n\nIt's also possible to get distinct dataframes for each event type and/or to have distinct event attributes on their own columns\n```\nsb.events(match_id=303299, split=True, flatten_attrs=False)[\"dribbles\"]\n```\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>id</th>\n      <th>index</th>\n      <th>period</th>\n      <th>timestamp</th>\n      <th>minute</th>\n      <th>second</th>\n      <th>type</th>\n      <th>possession</th>\n      <th>possession_team</th>\n      <th>play_pattern</th>\n      <th>team</th>\n      <th>player</th>\n      <th>position</th>\n      <th>location</th>\n      <th>duration</th>\n      <th>under_pressure</th>\n      <th>related_events</th>\n      <th>dribble</th>\n      <th>match_id</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>b190c01f-ad24-468c-8241-f955b91d996c</td>\n      <td>131</td>\n      <td>1</td>\n      <td>00:02:08.032</td>\n      <td>2</td>\n      <td>8</td>\n      <td>Dribble</td>\n      <td>4</td>\n      <td>Schalke 04</td>\n      <td>Regular Play</td>\n      <td>Schalke 04</td>\n      <td>Daniel Caligiuri</td>\n      <td>Right Wing</td>\n      <td>[110.2, 62.9]</td>\n      <td>0.000000</td>\n      <td>True</td>\n      <td>[60f822df-5747-4787-b0f9-45bf5217eb8a]</td>\n      <td>{'outcome': {'id': 8, 'name': 'Complete'}}</td>\n      <td>303299</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>4d773c92-f89f-491e-b3e0-3a1d2e863148</td>\n      <td>399</td>\n      <td>1</td>\n      <td>00:08:48.623</td>\n      <td>8</td>\n      <td>48</td>\n      <td>Dribble</td>\n      <td>18</td>\n      <td>Schalke 04</td>\n      <td>Regular Play</td>\n      <td>Schalke 04</td>\n      <td>Amine Harit</td>\n      <td>Center Attacking Midfield</td>\n      <td>[88.9, 22.7]</td>\n      <td>0.000000</td>\n      <td>True</td>\n      <td>[93d829df-eea7-416b-95aa-7593828cfade]</td>\n      <td>{'outcome': {'id': 8, 'name': 'Complete'}}</td>\n      <td>303299</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>8a78dce4-998a-4e81-902c-9f3957cebc9d</td>\n      <td>460</td>\n      <td>1</td>\n      <td>00:13:30.202</td>\n      <td>13</td>\n      <td>30</td>\n      <td>Dribble</td>\n      <td>23</td>\n      <td>Schalke 04</td>\n      <td>Regular Play</td>\n      <td>Schalke 04</td>\n      <td>Daniel Caligiuri</td>\n      <td>Right Wing</td>\n      <td>[99.5, 68.1]</td>\n      <td>0.007309</td>\n      <td>True</td>\n      <td>[772c5aae-e34e-4364-8a98-7caf7636c90b]</td>\n      <td>{'outcome': {'id': 9, 'name': 'Incomplete'}}</td>\n      <td>303299</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>e44d0122-2f2e-4771-820d-cc326a8b0379</td>\n      <td>496</td>\n      <td>1</td>\n      <td>00:14:10.135</td>\n      <td>14</td>\n      <td>10</td>\n      <td>Dribble</td>\n      <td>24</td>\n      <td>Schalke 04</td>\n      <td>From Throw In</td>\n      <td>Schalke 04</td>\n      <td>Suat Serdar</td>\n      <td>Left Defensive Midfield</td>\n      <td>[41.2, 31.7]</td>\n      <td>0.000000</td>\n      <td>True</td>\n      <td>[4de4039f-7efc-461b-b7d6-27c32ec2cd2a]</td>\n      <td>{'outcome': {'id': 8, 'name': 'Complete'}}</td>\n      <td>303299</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>9555afbd-d838-42c9-8f80-be3cd09e4c4a</td>\n      <td>793</td>\n      <td>1</td>\n      <td>00:20:18.409</td>\n      <td>20</td>\n      <td>18</td>\n      <td>Dribble</td>\n      <td>33</td>\n      <td>Eintracht Frankfurt</td>\n      <td>Regular Play</td>\n      <td>Eintracht Frankfurt</td>\n      <td>Timothy Chandler</td>\n      <td>Right Wing Back</td>\n      <td>[81.8, 75.7]</td>\n      <td>0.000000</td>\n      <td>True</td>\n      <td>[a5c88cee-6319-4c25-91cd-8a028d8dbfbf]</td>\n      <td>{'outcome': {'id': 9, 'name': 'Incomplete'}}</td>\n      <td>303299</td>\n    </tr>\n  </tbody>\n</table>\n\n\n\n### Competition Events\nAll events from a given competition can be queried and stored on a single dataframe\n```\nevents = sb.competition_events(\n    country=\"Germany\",\n    division= \"1. Bundesliga\",\n    season=\"2019/2020\",\n    gender=\"male\"\n)\n\ngrouped_events = sb.competition_events(\n    country=\"Germany\",\n    division= \"1. Bundesliga\",\n    season=\"2019/2020\",\n    split=True\n)\ngrouped_events[\"dribbles\"]\n```\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>id</th>\n      <th>index</th>\n      <th>period</th>\n      <th>timestamp</th>\n      <th>minute</th>\n      <th>second</th>\n      <th>type</th>\n      <th>possession</th>\n      <th>possession_team</th>\n      <th>play_pattern</th>\n      <th>team</th>\n      <th>player</th>\n      <th>position</th>\n      <th>location</th>\n      <th>duration</th>\n      <th>under_pressure</th>\n      <th>related_events</th>\n      <th>dribble</th>\n      <th>match_id</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>b190c01f-ad24-468c-8241-f955b91d996c</td>\n      <td>131</td>\n      <td>1</td>\n      <td>00:02:08.032</td>\n      <td>2</td>\n      <td>8</td>\n      <td>Dribble</td>\n      <td>4</td>\n      <td>Schalke 04</td>\n      <td>Regular Play</td>\n      <td>Schalke 04</td>\n      <td>Daniel Caligiuri</td>\n      <td>Right Wing</td>\n      <td>[110.2, 62.9]</td>\n      <td>0.000000</td>\n      <td>True</td>\n      <td>[60f822df-5747-4787-b0f9-45bf5217eb8a]</td>\n      <td>{'outcome': {'id': 8, 'name': 'Complete'}}</td>\n      <td>303299</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>4d773c92-f89f-491e-b3e0-3a1d2e863148</td>\n      <td>399</td>\n      <td>1</td>\n      <td>00:08:48.623</td>\n      <td>8</td>\n      <td>48</td>\n      <td>Dribble</td>\n      <td>18</td>\n      <td>Schalke 04</td>\n      <td>Regular Play</td>\n      <td>Schalke 04</td>\n      <td>Amine Harit</td>\n      <td>Center Attacking Midfield</td>\n      <td>[88.9, 22.7]</td>\n      <td>0.000000</td>\n      <td>True</td>\n      <td>[93d829df-eea7-416b-95aa-7593828cfade]</td>\n      <td>{'outcome': {'id': 8, 'name': 'Complete'}}</td>\n      <td>303299</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>8a78dce4-998a-4e81-902c-9f3957cebc9d</td>\n      <td>460</td>\n      <td>1</td>\n      <td>00:13:30.202</td>\n      <td>13</td>\n      <td>30</td>\n      <td>Dribble</td>\n      <td>23</td>\n      <td>Schalke 04</td>\n      <td>Regular Play</td>\n      <td>Schalke 04</td>\n      <td>Daniel Caligiuri</td>\n      <td>Right Wing</td>\n      <td>[99.5, 68.1]</td>\n      <td>0.007309</td>\n      <td>True</td>\n      <td>[772c5aae-e34e-4364-8a98-7caf7636c90b]</td>\n      <td>{'outcome': {'id': 9, 'name': 'Incomplete'}}</td>\n      <td>303299</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>e44d0122-2f2e-4771-820d-cc326a8b0379</td>\n      <td>496</td>\n      <td>1</td>\n      <td>00:14:10.135</td>\n      <td>14</td>\n      <td>10</td>\n      <td>Dribble</td>\n      <td>24</td>\n      <td>Schalke 04</td>\n      <td>From Throw In</td>\n      <td>Schalke 04</td>\n      <td>Suat Serdar</td>\n      <td>Left Defensive Midfield</td>\n      <td>[41.2, 31.7]</td>\n      <td>0.000000</td>\n      <td>True</td>\n      <td>[4de4039f-7efc-461b-b7d6-27c32ec2cd2a]</td>\n      <td>{'outcome': {'id': 8, 'name': 'Complete'}}</td>\n      <td>303299</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>9555afbd-d838-42c9-8f80-be3cd09e4c4a</td>\n      <td>793</td>\n      <td>1</td>\n      <td>00:20:18.409</td>\n      <td>20</td>\n      <td>18</td>\n      <td>Dribble</td>\n      <td>33</td>\n      <td>Eintracht Frankfurt</td>\n      <td>Regular Play</td>\n      <td>Eintracht Frankfurt</td>\n      <td>Timothy Chandler</td>\n      <td>Right Wing Back</td>\n      <td>[81.8, 75.7]</td>\n      <td>0.000000</td>\n      <td>True</td>\n      <td>[a5c88cee-6319-4c25-91cd-8a028d8dbfbf]</td>\n      <td>{'outcome': {'id': 9, 'name': 'Incomplete'}}</td>\n      <td>303299</td>\n    </tr>\n  </tbody>\n</table>\n\n### 360 Metrics\nIf you have access to 360 data for a competition, you can set `include_360_metrics=True` in the `events()` and `competition_events()` functions to retrieve 360 metrics such a line breaking passess together with the event data.\n\nThe open data does not include the 360 metrics. This is currently only available to customers with a data subscription.\n\n```\nevents = sb.events(match_id=3837323, include_360_metrics=True)\ncomp_events = sb.competition_events(\n            country=\"Europe\",\n            division=\"Champions League\",\n            season=\"2022/2023\",\n            include_360_metrics=True,\n)\ncomp_events\n```\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>50_50</th>\n      <th>bad_behaviour_card</th>\n      <th>ball_receipt_exceeds_distance</th>\n      <th>ball_receipt_in_space</th>\n      <th>ball_receipt_outcome</th>\n      <th>ball_recovery_offensive</th>\n      <th>ball_recovery_recovery_failure</th>\n      <th>block_deflection</th>\n      <th>block_offensive</th>\n      <th>block_save_block</th>\n      <th>carry_end_location</th>\n      <th>clearance_aerial_won</th>\n      <th>clearance_body_part</th>\n      <th>clearance_head</th>\n      <th>clearance_left_foot</th>\n      <th>clearance_other</th>\n      <th>clearance_right_foot</th>\n      <th>counterpress</th>\n      <th>distance_to_nearest_defender</th>\n      <th>dribble_no_touch</th>\n      <th>dribble_nutmeg</th>\n      <th>dribble_outcome</th>\n      <th>dribble_overrun</th>\n      <th>duel_outcome</th>\n      <th>duel_type</th>\n      <th>duration</th>\n      <th>foul_committed_advantage</th>\n      <th>foul_committed_card</th>\n      <th>foul_committed_offensive</th>\n      <th>foul_committed_penalty</th>\n      <th>foul_committed_type</th>\n      <th>foul_won_advantage</th>\n      <th>foul_won_defensive</th>\n      <th>foul_won_penalty</th>\n      <th>goalkeeper_body_part</th>\n      <th>goalkeeper_end_location</th>\n      <th>goalkeeper_lost_in_play</th>\n      <th>goalkeeper_lost_out</th>\n      <th>goalkeeper_outcome</th>\n      <th>goalkeeper_position</th>\n      <th>goalkeeper_punched_out</th>\n      <th>goalkeeper_shot_saved_off_target</th>\n      <th>goalkeeper_shot_saved_to_post</th>\n      <th>goalkeeper_success_in_play</th>\n      <th>goalkeeper_technique</th>\n      <th>goalkeeper_type</th>\n      <th>half_start_late_video_start</th>\n      <th>id</th>\n      <th>index</th>\n      <th>injury_stoppage_in_chain</th>\n      <th>interception_outcome</th>\n      <th>line_breaking_pass</th>\n      <th>location</th>\n      <th>minute</th>\n      <th>miscontrol_aerial_won</th>\n      <th>num_defenders_on_goal_side_of_actor</th>\n      <th>obv_against_after</th>\n      <th>obv_against_before</th>\n      <th>obv_against_net</th>\n      <th>obv_for_after</th>\n      <th>obv_for_before</th>\n      <th>obv_for_net</th>\n      <th>obv_total_net</th>\n      <th>off_camera</th>\n      <th>out</th>\n      <th>pass_aerial_won</th>\n      <th>pass_angle</th>\n      <th>pass_assisted_shot_id</th>\n      <th>pass_body_part</th>\n      <th>pass_cross</th>\n      <th>pass_cut_back</th>\n      <th>pass_deflected</th>\n      <th>pass_end_location</th>\n      <th>pass_goal_assist</th>\n      <th>pass_height</th>\n      <th>pass_inswinging</th>\n      <th>pass_length</th>\n      <th>pass_miscommunication</th>\n      <th>pass_no_touch</th>\n      <th>pass_outcome</th>\n      <th>pass_outswinging</th>\n      <th>pass_recipient</th>\n      <th>pass_shot_assist</th>\n      <th>pass_straight</th>\n      <th>pass_switch</th>\n      <th>pass_technique</th>\n      <th>pass_through_ball</th>\n      <th>pass_type</th>\n      <th>pass_xclaim</th>\n      <th>period</th>\n      <th>play_pattern</th>\n      <th>player</th>\n      <th>player_id</th>\n      <th>player_off_permanent</th>\n      <th>position</th>\n      <th>possession</th>\n      <th>possession_team</th>\n      <th>possession_team_id</th>\n      <th>related_events</th>\n      <th>second</th>\n      <th>shot_aerial_won</th>\n      <th>shot_body_part</th>\n      <th>shot_deflected</th>\n      <th>shot_end_location</th>\n      <th>shot_first_time</th>\n      <th>shot_freeze_frame</th>\n      <th>shot_key_pass_id</th>\n      <th>shot_one_on_one</th>\n      <th>shot_open_goal</th>\n      <th>shot_outcome</th>\n      <th>shot_redirect</th>\n      <th>shot_saved_off_target</th>\n      <th>shot_saved_to_post</th>\n      <th>shot_statsbomb_xg</th>\n      <th>shot_statsbomb_xg2</th>\n      <th>shot_technique</th>\n      <th>shot_type</th>\n      <th>substitution_outcome</th>\n      <th>substitution_replacement</th>\n      <th>team</th>\n      <th>timestamp</th>\n      <th>type</th>\n      <th>under_pressure</th>\n      <th>visible_opponents</th>\n      <th>visible_teammates</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0.0</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>3479244f-8234-43c9-a389-4ce587062b48</td>\n      <td>1</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>1</td>\n      <td>Regular Play</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>1</td>\n      <td>Real Madrid</td>\n      <td>220</td>\n      <td>NaN</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>Real Madrid</td>\n      <td>00:00:00.000</td>\n      <td>Starting XI</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0.0</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>c4f5a51b-741e-4920-ac32-02349b1f2755</td>\n      <td>2</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>1</td>\n      <td>Regular Play</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>1</td>\n      <td>Real Madrid</td>\n      <td>220</td>\n      <td>NaN</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>Celtic</td>\n      <td>00:00:00.000</td>\n      <td>Starting XI</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0.0</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>27be67e7-fdb5-4db9-92b6-8f3214cecec4</td>\n      <td>1</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>1</td>\n      <td>Regular Play</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>1</td>\n      <td>Juventus</td>\n      <td>224</td>\n      <td>NaN</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>Juventus</td>\n      <td>00:00:00.000</td>\n      <td>Starting XI</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0.0</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>819c381e-29c1-4f10-a6c3-acc3181cec14</td>\n      <td>2</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>1</td>\n      <td>Regular Play</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>1</td>\n      <td>Juventus</td>\n      <td>224</td>\n      <td>NaN</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>Paris Saint-Germain</td>\n      <td>00:00:00.000</td>\n      <td>Starting XI</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0.0</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>e6d42d87-c78a-4286-94fd-4095e9f7b16f</td>\n      <td>1</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>1</td>\n      <td>Regular Play</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>1</td>\n      <td>Manchester City</td>\n      <td>36</td>\n      <td>NaN</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>Manchester City</td>\n      <td>00:00:00.000</td>\n      <td>Starting XI</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n    </tr>\n  </tbody>\n</table>\n\n### 360 Frames\n\nThe frame functions will return the raw 360 freeze frame data along with the visible area for each frame. This is returned at the player level so you have multiple rows per frame/event_id. \n```\nmatch_frames = sb.frames(match_id=3772072, fmt='dataframe')\ncomp_frames = sb.competition_frames(\n    country=\"Germany\",\n    division= \"1. Bundesliga\",\n    season=\"2019/2020\"\n)\nmatch_frames\n```\n\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>actor</th>\n      <th>distance_from_edge_of_visible_area</th>\n      <th>event_uuid</th>\n      <th>keeper</th>\n      <th>location</th>\n      <th>match_id</th>\n      <th>teammate</th>\n      <th>visible_area</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>False</td>\n      <td>5.183739</td>\n      <td>065b15cc-b550-48de-9a1e-a9608d8e6c6d</td>\n      <td>False</td>\n      <td>[79.14114105224532, 12.646560364129726]</td>\n      <td>3855869</td>\n      <td>False</td>\n      <td>[50.8965834880119, 80.0, 55.8915648466696, 6.76382112514142, 80.0765213141343, 1.48859955554994, 113.056993108772, 80.0, 50.8965834880119, 80.0]</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>False</td>\n      <td>7.784551</td>\n      <td>065b15cc-b550-48de-9a1e-a9608d8e6c6d</td>\n      <td>False</td>\n      <td>[80.68650097437124, 23.040779651892883]</td>\n      <td>3855869</td>\n      <td>True</td>\n      <td>[50.8965834880119, 80.0, 55.8915648466696, 6.76382112514142, 80.0765213141343, 1.48859955554994, 113.056993108772, 80.0, 50.8965834880119, 80.0]</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>False</td>\n      <td>8.873694</td>\n      <td>065b15cc-b550-48de-9a1e-a9608d8e6c6d</td>\n      <td>False</td>\n      <td>[80.20033992405365, 24.695673759901382]</td>\n      <td>3855869</td>\n      <td>False</td>\n      <td>[50.8965834880119, 80.0, 55.8915648466696, 6.76382112514142, 80.0765213141343, 1.48859955554994, 113.056993108772, 80.0, 50.8965834880119, 80.0]</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>False</td>\n      <td>9.738309</td>\n      <td>065b15cc-b550-48de-9a1e-a9608d8e6c6d</td>\n      <td>False</td>\n      <td>[82.43349155444821, 32.24426347120625]</td>\n      <td>3855869</td>\n      <td>False</td>\n      <td>[50.8965834880119, 80.0, 55.8915648466696, 6.76382112514142, 80.0765213141343, 1.48859955554994, 113.056993108772, 80.0, 50.8965834880119, 80.0]</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>False</td>\n      <td>11.049633</td>\n      <td>065b15cc-b550-48de-9a1e-a9608d8e6c6d</td>\n      <td>False</td>\n      <td>[81.320294294838, 32.98015558905158]</td>\n      <td>3855869</td>\n      <td>True</td>\n      <td>[50.8965834880119, 80.0, 55.8915648466696, 6.76382112514142, 80.0765213141343, 1.48859955554994, 113.056993108772, 80.0, 50.8965834880119, 80.0]</td>\n    </tr>\n  </tbody>\n</table>\n\n### Aggregated Stats\n\nFor customers we also provide aggregated statistics at the player-match, player-season and team-season levels. \n\n```\nplayer_match = sb.player_match_stats(3772072)\nplayer_season = sb.player_season_stats(competition_id=9, season_id=42)\nteam_season = sb.team_season_stats(competition_id=9, season_id=42)\n\nplayer_match\n```\n\n<table border=\\\"1\\\" class=\\\"dataframe\\\">\n  <thead>\n    <tr style=\\\"text-align: right;\\\">\n      <th></th>\n      <th>player_match_pressures</th>\n      <th>player_match_long_balls</th>\n      <th>player_match_shot_touch_ratio</th>\n      <th>player_match_passes_into_box</th>\n      <th>player_match_pressure_duration_avg</th>\n      <th>player_match_crossing_ratio</th>\n      <th>player_match_op_f3_forward_passes</th>\n      <th>player_match_passing_ratio</th>\n      <th>team_id</th>\n      <th>player_match_successful_passes</th>\n      <th>player_match_op_xgbuildup_per_possession</th>\n      <th>player_match_op_xgchain</th>\n      <th>player_match_op_passes_into_box</th>\n      <th>player_match_deep_progressions</th>\n      <th>player_match_turnovers</th>\n      <th>player_match_counterpressured_action_fails</th>\n      <th>player_match_passes</th>\n      <th>player_match_key_passes</th>\n      <th>player_match_dispossessions</th>\n      <th>player_match_penalties_won</th>\n      <th>player_match_through_balls</th>\n      <th>team_name</th>\n      <th>player_match_op_passes</th>\n      <th>player_match_dribbles</th>\n      <th>player_match_clearances</th>\n      <th>player_match_forward_passes</th>\n      <th>player_match_np_xg_per_shot</th>\n      <th>player_match_counterpressures</th>\n      <th>player_id</th>\n      <th>player_match_op_xa</th>\n      <th>player_match_op_xgchain_per_possession</th>\n      <th>player_match_minutes</th>\n      <th>player_match_pressured_long_balls</th>\n      <th>player_match_op_f3_sideways_passes</th>\n      <th>player_match_dribbles_faced</th>\n      <th>player_match_np_xg</th>\n      <th>player_match_goals</th>\n      <th>player_match_op_key_passes</th>\n      <th>player_match_aerial_ratio</th>\n      <th>player_match_op_shots</th>\n      <th>player_match_successful_crosses</th>\n      <th>player_match_shots_blocked</th>\n      <th>player_match_op_f3_passes</th>\n      <th>player_match_op_assists</th>\n      <th>player_match_long_ball_ratio</th>\n      <th>account_id</th>\n      <th>player_match_np_shots</th>\n      <th>player_match_challenge_ratio</th>\n      <th>player_match_touches</th>\n      <th>player_match_pressure_regains</th>\n      <th>player_match_crosses_into_box</th>\n      <th>player_match_fouls</th>\n      <th>player_match_sideways_passes</th>\n      <th>player_match_aerials</th>\n      <th>player_match_touches_inside_box</th>\n      <th>player_match_counterpressure_duration_total</th>\n      <th>player_match_successful_aerials</th>\n      <th>player_match_box_cross_ratio</th>\n      <th>player_match_xgbuildup_per_possession</th>\n      <th>player_match_dribbled_past</th>\n      <th>player_match_pressure_duration_total</th>\n      <th>player_match_op_xgbuildup</th>\n      <th>player_match_np_shots_on_target</th>\n      <th>player_match_interceptions</th>\n      <th>player_match_counterpressure_duration_avg</th>\n      <th>player_match_xgchain_per_possession</th>\n      <th>player_match_successful_long_balls</th>\n      <th>player_match_op_f3_backward_passes</th>\n      <th>player_match_xgchain</th>\n      <th>player_match_tackles</th>\n      <th>player_match_assists</th>\n      <th>player_match_sp_xa</th>\n      <th>player_match_aggressive_actions</th>\n      <th>player_name</th>\n      <th>player_match_xa</th>\n      <th>match_id</th>\n      <th>player_match_passes_inside_box</th>\n      <th>player_match_possession</th>\n      <th>player_match_pressured_action_fails</th>\n      <th>player_match_crosses</th>\n      <th>player_match_fouls_won</th>\n      <th>player_match_xgbuildup</th>\n      <th>player_match_backward_passes</th>\n      <th>player_match_unpressured_long_balls</th>\n      <th>player_match_np_goals</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>NaN</td>\n      <td>10</td>\n      <td>0.000000</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0</td>\n      <td>0.842105</td>\n      <td>870</td>\n      <td>32</td>\n      <td>0.003191</td>\n      <td>0.105292</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>38</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>Arminia Bielefeld</td>\n      <td>33</td>\n      <td>0</td>\n      <td>0</td>\n      <td>9</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>9194</td>\n      <td>0.000000</td>\n      <td>0.003191</td>\n      <td>94.21667</td>\n      <td>1</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0.000000</td>\n      <td>0</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0.600000</td>\n      <td>48</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>65</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>29</td>\n      <td>0</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>0.003191</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>0.105292</td>\n      <td>0</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>0.003191</td>\n      <td>6</td>\n      <td>0</td>\n      <td>0.105292</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0.000000</td>\n      <td>0</td>\n      <td>Stefan Ortega</td>\n      <td>0.000000</td>\n      <td>3772072</td>\n      <td>0</td>\n      <td>0.491135</td>\n      <td>NaN</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0.105292</td>\n      <td>0</td>\n      <td>9</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>8.0</td>\n      <td>0</td>\n      <td>0.033333</td>\n      <td>0</td>\n      <td>0.570626</td>\n      <td>0.0</td>\n      <td>0</td>\n      <td>0.812500</td>\n      <td>870</td>\n      <td>13</td>\n      <td>0.003726</td>\n      <td>0.160582</td>\n      <td>0</td>\n      <td>1</td>\n      <td>3</td>\n      <td>0.0</td>\n      <td>16</td>\n      <td>1</td>\n      <td>3</td>\n      <td>0</td>\n      <td>0</td>\n      <td>Arminia Bielefeld</td>\n      <td>10</td>\n      <td>1</td>\n      <td>1</td>\n      <td>0</td>\n      <td>0.034737</td>\n      <td>1.0</td>\n      <td>9210</td>\n      <td>0.043881</td>\n      <td>0.007299</td>\n      <td>91.90000</td>\n      <td>1</td>\n      <td>4</td>\n      <td>0</td>\n      <td>0.034737</td>\n      <td>0</td>\n      <td>1</td>\n      <td>0.285714</td>\n      <td>1</td>\n      <td>0</td>\n      <td>0</td>\n      <td>6</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>48</td>\n      <td>1</td>\n      <td>1.0</td>\n      <td>30</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>10</td>\n      <td>7</td>\n      <td>5</td>\n      <td>0.327541</td>\n      <td>2</td>\n      <td>NaN</td>\n      <td>0.003726</td>\n      <td>0</td>\n      <td>4.565010</td>\n      <td>0.081964</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0.327541</td>\n      <td>0.007299</td>\n      <td>0</td>\n      <td>2</td>\n      <td>0.160582</td>\n      <td>1</td>\n      <td>0</td>\n      <td>0.000000</td>\n      <td>9</td>\n      <td>Fabian Klos</td>\n      <td>0.043881</td>\n      <td>3772072</td>\n      <td>1</td>\n      <td>0.491135</td>\n      <td>0.0</td>\n      <td>1</td>\n      <td>1</td>\n      <td>0.081964</td>\n      <td>6</td>\n      <td>0</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>7.0</td>\n      <td>13</td>\n      <td>0.000000</td>\n      <td>1</td>\n      <td>1.795411</td>\n      <td>0.0</td>\n      <td>1</td>\n      <td>0.852941</td>\n      <td>190</td>\n      <td>58</td>\n      <td>0.017993</td>\n      <td>0.773687</td>\n      <td>0</td>\n      <td>3</td>\n      <td>0</td>\n      <td>0.0</td>\n      <td>68</td>\n      <td>1</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>Union Berlin</td>\n      <td>60</td>\n      <td>0</td>\n      <td>2</td>\n      <td>4</td>\n      <td>NaN</td>\n      <td>0.0</td>\n      <td>9164</td>\n      <td>0.000000</td>\n      <td>0.017993</td>\n      <td>94.21667</td>\n      <td>2</td>\n      <td>3</td>\n      <td>0</td>\n      <td>0.000000</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0.666667</td>\n      <td>0</td>\n      <td>0</td>\n      <td>1</td>\n      <td>4</td>\n      <td>0</td>\n      <td>0.615385</td>\n      <td>48</td>\n      <td>0</td>\n      <td>1.0</td>\n      <td>122</td>\n      <td>1</td>\n      <td>0</td>\n      <td>2</td>\n      <td>51</td>\n      <td>3</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>2</td>\n      <td>0.0</td>\n      <td>0.017993</td>\n      <td>0</td>\n      <td>12.567875</td>\n      <td>0.773687</td>\n      <td>0</td>\n      <td>1</td>\n      <td>NaN</td>\n      <td>0.019504</td>\n      <td>8</td>\n      <td>0</td>\n      <td>0.838693</td>\n      <td>2</td>\n      <td>0</td>\n      <td>0.043227</td>\n      <td>11</td>\n      <td>Christopher Trimmel</td>\n      <td>0.043227</td>\n      <td>3772072</td>\n      <td>0</td>\n      <td>0.508865</td>\n      <td>0.0</td>\n      <td>1</td>\n      <td>0</td>\n      <td>0.773687</td>\n      <td>13</td>\n      <td>13</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>3.0</td>\n      <td>4</td>\n      <td>0.013699</td>\n      <td>1</td>\n      <td>0.744943</td>\n      <td>NaN</td>\n      <td>1</td>\n      <td>0.777778</td>\n      <td>870</td>\n      <td>35</td>\n      <td>0.002196</td>\n      <td>0.090022</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>0.0</td>\n      <td>45</td>\n      <td>0</td>\n      <td>1</td>\n      <td>0</td>\n      <td>0</td>\n      <td>Arminia Bielefeld</td>\n      <td>40</td>\n      <td>0</td>\n      <td>1</td>\n      <td>18</td>\n      <td>0.019468</td>\n      <td>0.0</td>\n      <td>24343</td>\n      <td>0.000000</td>\n      <td>0.002196</td>\n      <td>94.21667</td>\n      <td>1</td>\n      <td>1</td>\n      <td>0</td>\n      <td>0.019468</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0.000000</td>\n      <td>1</td>\n      <td>0</td>\n      <td>1</td>\n      <td>2</td>\n      <td>0</td>\n      <td>0.750000</td>\n      <td>48</td>\n      <td>1</td>\n      <td>NaN</td>\n      <td>73</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>22</td>\n      <td>1</td>\n      <td>1</td>\n      <td>NaN</td>\n      <td>0</td>\n      <td>0.0</td>\n      <td>0.003043</td>\n      <td>0</td>\n      <td>2.234830</td>\n      <td>0.090022</td>\n      <td>0</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>0.003043</td>\n      <td>3</td>\n      <td>0</td>\n      <td>0.124760</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0.000000</td>\n      <td>3</td>\n      <td>Jacob Laursen</td>\n      <td>0.000000</td>\n      <td>3772072</td>\n      <td>0</td>\n      <td>0.491135</td>\n      <td>0.0</td>\n      <td>0</td>\n      <td>1</td>\n      <td>0.124760</td>\n      <td>5</td>\n      <td>4</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>14.0</td>\n      <td>6</td>\n      <td>0.000000</td>\n      <td>0</td>\n      <td>0.592216</td>\n      <td>NaN</td>\n      <td>0</td>\n      <td>0.763158</td>\n      <td>870</td>\n      <td>29</td>\n      <td>0.006048</td>\n      <td>0.211669</td>\n      <td>0</td>\n      <td>1</td>\n      <td>0</td>\n      <td>0.0</td>\n      <td>38</td>\n      <td>0</td>\n      <td>2</td>\n      <td>0</td>\n      <td>0</td>\n      <td>Arminia Bielefeld</td>\n      <td>36</td>\n      <td>0</td>\n      <td>1</td>\n      <td>7</td>\n      <td>NaN</td>\n      <td>2.0</td>\n      <td>9204</td>\n      <td>0.000000</td>\n      <td>0.006048</td>\n      <td>94.21667</td>\n      <td>1</td>\n      <td>1</td>\n      <td>3</td>\n      <td>0.000000</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0.500000</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>1</td>\n      <td>0</td>\n      <td>1.000000</td>\n      <td>48</td>\n      <td>0</td>\n      <td>0.0</td>\n      <td>64</td>\n      <td>1</td>\n      <td>0</td>\n      <td>4</td>\n      <td>29</td>\n      <td>2</td>\n      <td>0</td>\n      <td>0.676610</td>\n      <td>1</td>\n      <td>NaN</td>\n      <td>0.006048</td>\n      <td>3</td>\n      <td>8.291025</td>\n      <td>0.211669</td>\n      <td>0</td>\n      <td>2</td>\n      <td>0.338305</td>\n      <td>0.006048</td>\n      <td>6</td>\n      <td>0</td>\n      <td>0.211669</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0.000000</td>\n      <td>18</td>\n      <td>Manuel Prietl</td>\n      <td>0.000000</td>\n      <td>3772072</td>\n      <td>0</td>\n      <td>0.491135</td>\n      <td>0.0</td>\n      <td>0</td>\n      <td>1</td>\n      <td>0.211669</td>\n      <td>2</td>\n      <td>6</td>\n      <td>0</td>\n    </tr>\n  </tbody>\n</table>\n\n### Raw Files\nAlternatively, entities can be accessed as python dictionaries serving as an interface to raw jsons and without performing any preprocessing\n```\n\nsb.competitions(fmt=\"dict\")\n\nsb.matches(competition_id=9, season_id=42, fmt=\"dict\")\n\nsb.lineups(match_id=303299, fmt=\"dict\")\n\nsb.events(303299, fmt=\"dict\")\n\nsb.competition_events(\n    country=\"Germany\",\n    division= \"1. Bundesliga\",\n    season=\"2019/2020\",\n    gender=\"male\",\n    fmt=\"dict\"\n)\n\nsb.frames(3772072, fmt=\"dict\")\n\nsb.competition_frames(\n    country=\"Germany\",\n    division= \"1. Bundesliga\",\n    season=\"2021/2022\",\n    gender=\"male\",\n    fmt=\"dict\"\n)\n\nsb.player_match_stats(3772072, fmt=\"dict\")\n\nsb.player_season_stats(competition_id=9, season_id=42, fmt=\"dict\")\n\nsb.team_season_stats(competition_id=9, season_id=42, fmt=\"dict\")\n\n```\n\n\n",
    "bugtrack_url": null,
    "license": "",
    "summary": "easily stream StatsBomb data into Python",
    "version": "1.12.0",
    "project_urls": {
        "Homepage": "https://github.com/statsbomb/statsbombpy"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "35db42913b069f9819bc130b4f91e59749deca0668d8818296c347bf2d91473c",
                "md5": "e700e40067721217fd71ac8ddf72f2e9",
                "sha256": "3b87f7d0b171140a7aab2051b59ca5c98486fb33792d1d3f5b8d7cd19156c900"
            },
            "downloads": -1,
            "filename": "statsbombpy-1.12.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "e700e40067721217fd71ac8ddf72f2e9",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": null,
            "size": 16452,
            "upload_time": "2023-12-12T14:36:39",
            "upload_time_iso_8601": "2023-12-12T14:36:39.450619Z",
            "url": "https://files.pythonhosted.org/packages/35/db/42913b069f9819bc130b4f91e59749deca0668d8818296c347bf2d91473c/statsbombpy-1.12.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "058feabf4709d27b6b25b46e7a2b9431cde1139416e8a98a9e695eebdeacdc77",
                "md5": "bc77103022ba2ab2598957b7472569d2",
                "sha256": "579f9bb1e802ab0ba76449c5c9489a9ca5ebb99a59daf9855fbd3a38f11acebf"
            },
            "downloads": -1,
            "filename": "statsbombpy-1.12.0.tar.gz",
            "has_sig": false,
            "md5_digest": "bc77103022ba2ab2598957b7472569d2",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 32670,
            "upload_time": "2023-12-12T14:36:42",
            "upload_time_iso_8601": "2023-12-12T14:36:42.695464Z",
            "url": "https://files.pythonhosted.org/packages/05/8f/eabf4709d27b6b25b46e7a2b9431cde1139416e8a98a9e695eebdeacdc77/statsbombpy-1.12.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-12-12 14:36:42",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "statsbomb",
    "github_project": "statsbombpy",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "statsbombpy"
}
        
Elapsed time: 0.15250s