{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "#Much of the scraping code is taken from this repository: https://github.com/chmartin/FBref_EPL\n", "#I've made the the necessary changes for the recently added data and for combining it" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "#standard(stats)\n", "stats = [\"player\",\"nationality\",\"position\",\"squad\",\"age\",\"birth_year\",\"games\",\"games_starts\",\"minutes\",\"goals\",\"assists\",\"pens_made\",\"pens_att\",\"cards_yellow\",\"cards_red\",\"goals_per90\",\"assists_per90\",\"goals_assists_per90\",\"goals_pens_per90\",\"goals_assists_pens_per90\",\"xg\",\"npxg\",\"xa\",\"xg_per90\",\"xa_per90\",\"xg_xa_per90\",\"npxg_per90\",\"npxg_xa_per90\"]\n", "stats3 = [\"players_used\",\"possession\",\"games\",\"games_starts\",\"minutes\",\"goals\",\"assists\",\"pens_made\",\"pens_att\",\"cards_yellow\",\"cards_red\",\"goals_per90\",\"assists_per90\",\"goals_assists_per90\",\"goals_pens_per90\",\"goals_assists_pens_per90\",\"xg\",\"npxg\",\"xa\",\"xg_per90\",\"xa_per90\",\"xg_xa_per90\",\"npxg_per90\",\"npxg_xa_per90\"] \n", "#goalkeeping(keepers)\n", "keepers = [\"player\",\"nationality\",\"position\",\"squad\",\"age\",\"birth_year\",\"games_gk\",\"games_starts_gk\",\"minutes_gk\",\"goals_against_gk\",\"goals_against_per90_gk\",\"shots_on_target_against\",\"saves\",\"save_pct\",\"wins_gk\",\"draws_gk\",\"losses_gk\",\"clean_sheets\",\"clean_sheets_pct\",\"pens_att_gk\",\"pens_allowed\",\"pens_saved\",\"pens_missed_gk\"]\n", "keepers3 = [\"players_used\",\"games_gk\",\"games_starts_gk\",\"minutes_gk\",\"goals_against_gk\",\"goals_against_per90_gk\",\"shots_on_target_against\",\"saves\",\"save_pct\",\"wins_gk\",\"draws_gk\",\"losses_gk\",\"clean_sheets\",\"clean_sheets_pct\",\"pens_att_gk\",\"pens_allowed\",\"pens_saved\",\"pens_missed_gk\"]\n", "#advance goalkeeping(keepersadv)\n", "keepersadv = [\"player\",\"nationality\",\"position\",\"squad\",\"age\",\"birth_year\",\"minutes_90s_gk\",\"goals_against_gk\",\"pens_allowed\",\"free_kick_goals_against_gk\",\"corner_kick_goals_against_gk\",\"own_goals_against_gk\",\"psxg_gk\",\"psnpxg_per_shot_on_target_against\",\"psxg_net_gk\",\"psxg_net_per90_gk\",\"passes_completed_launched_gk\",\"passes_launched_gk\",\"passes_pct_launched_gk\",\"passes_gk\",\"passes_throws_gk\",\"pct_passes_launched_gk\",\"passes_length_avg_gk\",\"goal_kicks\",\"pct_goal_kicks_launched\",\"goal_kick_length_avg\",\"crosses_gk\",\"crosses_stopped_gk\",\"crosses_stopped_pct_gk\",\"def_actions_outside_pen_area_gk\",\"def_actions_outside_pen_area_per90_gk\",\"avg_distance_def_actions_gk\"]\n", "keepersadv2 = [\"minutes_90s_gk\",\"goals_against_gk\",\"pens_allowed\",\"free_kick_goals_against_gk\",\"corner_kick_goals_against_gk\",\"own_goals_against_gk\",\"psxg_gk\",\"psnpxg_per_shot_on_target_against\",\"psxg_net_gk\",\"psxg_net_per90_gk\",\"passes_completed_launched_gk\",\"passes_launched_gk\",\"passes_pct_launched_gk\",\"passes_gk\",\"passes_throws_gk\",\"pct_passes_launched_gk\",\"passes_length_avg_gk\",\"goal_kicks\",\"pct_goal_kicks_launched\",\"goal_kick_length_avg\",\"crosses_gk\",\"crosses_stopped_gk\",\"crosses_stopped_pct_gk\",\"def_actions_outside_pen_area_gk\",\"def_actions_outside_pen_area_per90_gk\",\"avg_distance_def_actions_gk\"]\n", "#shooting(shooting)\n", "shooting = [\"player\",\"nationality\",\"position\",\"squad\",\"age\",\"birth_year\",\"minutes_90s\",\"goals\",\"pens_made\",\"pens_att\",\"shots_total\",\"shots_on_target\",\"shots_free_kicks\",\"shots_on_target_pct\",\"shots_total_per90\",\"shots_on_target_per90\",\"goals_per_shot\",\"goals_per_shot_on_target\",\"xg\",\"npxg\",\"npxg_per_shot\",\"xg_net\",\"npxg_net\"]\n", "shooting2 = [\"minutes_90s\",\"goals\",\"pens_made\",\"pens_att\",\"shots_total\",\"shots_on_target\",\"shots_free_kicks\",\"shots_on_target_pct\",\"shots_total_per90\",\"shots_on_target_per90\",\"goals_per_shot\",\"goals_per_shot_on_target\",\"xg\",\"npxg\",\"npxg_per_shot\",\"xg_net\",\"npxg_net\"]\n", "shooting3 = [\"goals\",\"pens_made\",\"pens_att\",\"shots_total\",\"shots_on_target\",\"shots_free_kicks\",\"shots_on_target_pct\",\"shots_total_per90\",\"shots_on_target_per90\",\"goals_per_shot\",\"goals_per_shot_on_target\",\"xg\",\"npxg\",\"npxg_per_shot\",\"xg_net\",\"npxg_net\"]\n", "#passing(passing)\n", "passing = [\"player\",\"nationality\",\"position\",\"squad\",\"age\",\"birth_year\",\"minutes_90s\",\"passes_completed\",\"passes\",\"passes_pct\",\"passes_total_distance\",\"passes_progressive_distance\",\"passes_completed_short\",\"passes_short\",\"passes_pct_short\",\"passes_completed_medium\",\"passes_medium\",\"passes_pct_medium\",\"passes_completed_long\",\"passes_long\",\"passes_pct_long\",\"assists\",\"xa\",\"xa_net\",\"assisted_shots\",\"passes_into_final_third\",\"passes_into_penalty_area\",\"crosses_into_penalty_area\",\"progressive_passes\"]\n", "passing2 = [\"passes_completed\",\"passes\",\"passes_pct\",\"passes_total_distance\",\"passes_progressive_distance\",\"passes_completed_short\",\"passes_short\",\"passes_pct_short\",\"passes_completed_medium\",\"passes_medium\",\"passes_pct_medium\",\"passes_completed_long\",\"passes_long\",\"passes_pct_long\",\"assists\",\"xa\",\"xa_net\",\"assisted_shots\",\"passes_into_final_third\",\"passes_into_penalty_area\",\"crosses_into_penalty_area\",\"progressive_passes\"]\n", "#passtypes(passing_types)\n", "passing_types = [\"player\",\"nationality\",\"position\",\"squad\",\"age\",\"birth_year\",\"minutes_90s\",\"passes\",\"passes_live\",\"passes_dead\",\"passes_free_kicks\",\"through_balls\",\"passes_pressure\",\"passes_switches\",\"crosses\",\"corner_kicks\",\"corner_kicks_in\",\"corner_kicks_out\",\"corner_kicks_straight\",\"passes_ground\",\"passes_low\",\"passes_high\",\"passes_left_foot\",\"passes_right_foot\",\"passes_head\",\"throw_ins\",\"passes_other_body\",\"passes_completed\",\"passes_offsides\",\"passes_oob\",\"passes_intercepted\",\"passes_blocked\"]\n", "passing_types2 = [\"passes\",\"passes_live\",\"passes_dead\",\"passes_free_kicks\",\"through_balls\",\"passes_pressure\",\"passes_switches\",\"crosses\",\"corner_kicks\",\"corner_kicks_in\",\"corner_kicks_out\",\"corner_kicks_straight\",\"passes_ground\",\"passes_low\",\"passes_high\",\"passes_left_foot\",\"passes_right_foot\",\"passes_head\",\"throw_ins\",\"passes_other_body\",\"passes_completed\",\"passes_offsides\",\"passes_oob\",\"passes_intercepted\",\"passes_blocked\"]\n", "#goal and shot creation(gca)\n", "gca = [\"player\",\"nationality\",\"position\",\"squad\",\"age\",\"birth_year\",\"minutes_90s\",\"sca\",\"sca_per90\",\"sca_passes_live\",\"sca_passes_dead\",\"sca_dribbles\",\"sca_shots\",\"sca_fouled\",\"gca\",\"gca_per90\",\"gca_passes_live\",\"gca_passes_dead\",\"gca_dribbles\",\"gca_shots\",\"gca_fouled\",\"gca_og_for\"]\n", "gca2 = [\"sca\",\"sca_per90\",\"sca_passes_live\",\"sca_passes_dead\",\"sca_dribbles\",\"sca_shots\",\"sca_fouled\",\"gca\",\"gca_per90\",\"gca_passes_live\",\"gca_passes_dead\",\"gca_dribbles\",\"gca_shots\",\"gca_fouled\",\"gca_og_for\"]\n", "#defensive actions(defense)\n", "defense = [\"player\",\"nationality\",\"position\",\"squad\",\"age\",\"birth_year\",\"minutes_90s\",\"tackles\",\"tackles_won\",\"tackles_def_3rd\",\"tackles_mid_3rd\",\"tackles_att_3rd\",\"dribble_tackles\",\"dribbles_vs\",\"dribble_tackles_pct\",\"dribbled_past\",\"pressures\",\"pressure_regains\",\"pressure_regain_pct\",\"pressures_def_3rd\",\"pressures_mid_3rd\",\"pressures_att_3rd\",\"blocks\",\"blocked_shots\",\"blocked_shots_saves\",\"blocked_passes\",\"interceptions\",\"clearances\",\"errors\"]\n", "defense2 = [\"tackles\",\"tackles_won\",\"tackles_def_3rd\",\"tackles_mid_3rd\",\"tackles_att_3rd\",\"dribble_tackles\",\"dribbles_vs\",\"dribble_tackles_pct\",\"dribbled_past\",\"pressures\",\"pressure_regains\",\"pressure_regain_pct\",\"pressures_def_3rd\",\"pressures_mid_3rd\",\"pressures_att_3rd\",\"blocks\",\"blocked_shots\",\"blocked_shots_saves\",\"blocked_passes\",\"interceptions\",\"clearances\",\"errors\"]\n", "#possession(possession)\n", "possession = [\"player\",\"nationality\",\"position\",\"squad\",\"age\",\"birth_year\",\"minutes_90s\",\"touches\",\"touches_def_pen_area\",\"touches_def_3rd\",\"touches_mid_3rd\",\"touches_att_3rd\",\"touches_att_pen_area\",\"touches_live_ball\",\"dribbles_completed\",\"dribbles\",\"dribbles_completed_pct\",\"players_dribbled_past\",\"nutmegs\",\"carries\",\"carry_distance\",\"carry_progressive_distance\",\"pass_targets\",\"passes_received\",\"passes_received_pct\",\"miscontrols\",\"dispossessed\"]\n", "possession2 = [\"touches\",\"touches_def_pen_area\",\"touches_def_3rd\",\"touches_mid_3rd\",\"touches_att_3rd\",\"touches_att_pen_area\",\"touches_live_ball\",\"dribbles_completed\",\"dribbles\",\"dribbles_completed_pct\",\"players_dribbled_past\",\"nutmegs\",\"carries\",\"carry_distance\",\"carry_progressive_distance\",\"pass_targets\",\"passes_received\",\"passes_received_pct\",\"miscontrols\",\"dispossessed\"]\n", "#playingtime(playingtime)\n", "playingtime = [\"player\",\"nationality\",\"position\",\"squad\",\"age\",\"birth_year\",\"minutes_90s\",\"games\",\"minutes\",\"minutes_per_game\",\"minutes_pct\",\"games_starts\",\"minutes_per_start\",\"games_subs\",\"minutes_per_sub\",\"unused_subs\",\"points_per_match\",\"on_goals_for\",\"on_goals_against\",\"plus_minus\",\"plus_minus_per90\",\"plus_minus_wowy\",\"on_xg_for\",\"on_xg_against\",\"xg_plus_minus\",\"xg_plus_minus_per90\",\"xg_plus_minus_wowy\"]\n", "playingtime2 = [\"games\",\"minutes\",\"minutes_per_game\",\"minutes_pct\",\"games_starts\",\"minutes_per_start\",\"games_subs\",\"minutes_per_sub\",\"unused_subs\",\"points_per_match\",\"on_goals_for\",\"on_goals_against\",\"plus_minus\",\"plus_minus_per90\",\"plus_minus_wowy\",\"on_xg_for\",\"on_xg_against\",\"xg_plus_minus\",\"xg_plus_minus_per90\",\"xg_plus_minus_wowy\"]\n", "#miscallaneous(misc)\n", "misc = [\"player\",\"nationality\",\"position\",\"squad\",\"age\",\"birth_year\",\"minutes_90s\",\"cards_yellow\",\"cards_red\",\"cards_yellow_red\",\"fouls\",\"fouled\",\"offsides\",\"crosses\",\"interceptions\",\"tackles_won\",\"pens_won\",\"pens_conceded\",\"own_goals\",\"ball_recoveries\",\"aerials_won\",\"aerials_lost\",\"aerials_won_pct\"]\n", "misc2 = [\"cards_yellow\",\"cards_red\",\"cards_yellow_red\",\"fouls\",\"fouled\",\"offsides\",\"crosses\",\"interceptions\",\"tackles_won\",\"pens_won\",\"pens_conceded\",\"own_goals\",\"ball_recoveries\",\"aerials_won\",\"aerials_lost\",\"aerials_won_pct\"]" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "import requests\n", "from bs4 import BeautifulSoup\n", "import pandas as pd\n", "import re\n", "import sys, getopt\n", "import csv" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "#Functions to get the data in a dataframe using BeautifulSoup\n", "\n", "def get_tables(url):\n", " res = requests.get(url)\n", " ## The next two lines get around the issue with comments breaking the parsing.\n", " comm = re.compile(\"\")\n", " soup = BeautifulSoup(comm.sub(\"\",res.text),'lxml')\n", " all_tables = soup.findAll(\"tbody\")\n", " team_table = all_tables[0]\n", " player_table = all_tables[1]\n", " return player_table, team_table\n", "\n", "def get_frame(features, player_table):\n", " pre_df_player = dict()\n", " features_wanted_player = features\n", " rows_player = player_table.find_all('tr')\n", " for row in rows_player:\n", " if(row.find('th',{\"scope\":\"row\"}) != None):\n", " \n", " for f in features_wanted_player:\n", " cell = row.find(\"td\",{\"data-stat\": f})\n", " a = cell.text.strip().encode()\n", " text=a.decode(\"utf-8\")\n", " if(text == ''):\n", " text = '0'\n", " if((f!='player')&(f!='nationality')&(f!='position')&(f!='squad')&(f!='age')&(f!='birth_year')):\n", " text = float(text.replace(',',''))\n", " if f in pre_df_player:\n", " pre_df_player[f].append(text)\n", " else:\n", " pre_df_player[f] = [text]\n", " df_player = pd.DataFrame.from_dict(pre_df_player)\n", " return df_player\n", "\n", "def get_frame_team(features, team_table):\n", " pre_df_squad = dict()\n", " #Note: features does not contain squad name, it requires special treatment\n", " features_wanted_squad = features\n", " rows_squad = team_table.find_all('tr')\n", " for row in rows_squad:\n", " if(row.find('th',{\"scope\":\"row\"}) != None):\n", " name = row.find('th',{\"data-stat\":\"squad\"}).text.strip().encode().decode(\"utf-8\")\n", " if 'squad' in pre_df_squad:\n", " pre_df_squad['squad'].append(name)\n", " else:\n", " pre_df_squad['squad'] = [name]\n", " for f in features_wanted_squad:\n", " cell = row.find(\"td\",{\"data-stat\": f})\n", " a = cell.text.strip().encode()\n", " text=a.decode(\"utf-8\")\n", " if(text == ''):\n", " text = '0'\n", " if((f!='player')&(f!='nationality')&(f!='position')&(f!='squad')&(f!='age')&(f!='birth_year')):\n", " text = float(text.replace(',',''))\n", " if f in pre_df_squad:\n", " pre_df_squad[f].append(text)\n", " else:\n", " pre_df_squad[f] = [text]\n", " df_squad = pd.DataFrame.from_dict(pre_df_squad)\n", " return df_squad\n", "\n", "def frame_for_category(category,top,end,features):\n", " url = (top + category + end)\n", " player_table, team_table = get_tables(url)\n", " df_player = get_frame(features, player_table)\n", " return df_player\n", "\n", "def frame_for_category_team(category,top,end,features):\n", " url = (top + category + end)\n", " player_table, team_table = get_tables(url)\n", " df_team = get_frame_team(features, team_table)\n", " return df_team" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "#Function to get the player data for outfield player, includes all categories - standard stats, shooting\n", "#passing, passing types, goal and shot creation, defensive actions, possession, and miscallaneous\n", "def get_outfield_data(top, end):\n", " df1 = frame_for_category('stats',top,end,stats)\n", " df2 = frame_for_category('shooting',top,end,shooting2)\n", " df3 = frame_for_category('passing',top,end,passing2)\n", " df4 = frame_for_category('passing_types',top,end,passing_types2)\n", " df5 = frame_for_category('gca',top,end,gca2)\n", " df6 = frame_for_category('defense',top,end,defense2)\n", " df7 = frame_for_category('possession',top,end,possession2)\n", " df8 = frame_for_category('misc',top,end,misc2)\n", " df = pd.concat([df1, df2, df3, df4, df5, df6, df7, df8], axis=1)\n", " df = df.loc[:,~df.columns.duplicated()]\n", " return df" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "#Function to get keeping and advance goalkeeping data\n", "def get_keeper_data(top,end):\n", " df1 = frame_for_category('keepers',top,end,keepers)\n", " df2 = frame_for_category('keepersadv',top,end,keepersadv2)\n", " df = pd.concat([df1, df2], axis=1)\n", " df = df.loc[:,~df.columns.duplicated()]\n", " return df" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "#Function to get team-wise data accross all categories as mentioned above\n", "def get_team_data(top,end):\n", " df1 = frame_for_category_team('stats',top,end,stats3)\n", " df2 = frame_for_category_team('keepers',top,end,keepers3)\n", " df3 = frame_for_category_team('keepersadv',top,end,keepersadv2)\n", " df4 = frame_for_category_team('shooting',top,end,shooting3)\n", " df5 = frame_for_category_team('passing',top,end,passing2)\n", " df6 = frame_for_category_team('passing_types',top,end,passing_types2)\n", " df7 = frame_for_category_team('gca',top,end,gca2)\n", " df8 = frame_for_category_team('defense',top,end,defense2)\n", " df9 = frame_for_category_team('possession',top,end,possession2)\n", " df10 = frame_for_category_team('misc',top,end,misc2)\n", " df = pd.concat([df1, df2, df3, df4, df5, df6, df7, df8, df9, df10], axis=1)\n", " df = df.loc[:,~df.columns.duplicated()]\n", " return df\n", " " ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " | player | \n", "nationality | \n", "position | \n", "squad | \n", "age | \n", "birth_year | \n", "games | \n", "games_starts | \n", "minutes | \n", "goals | \n", "... | \n", "fouls | \n", "fouled | \n", "offsides | \n", "pens_won | \n", "pens_conceded | \n", "own_goals | \n", "ball_recoveries | \n", "aerials_won | \n", "aerials_lost | \n", "aerials_won_pct | \n", "
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | \n", "Patrick van Aanholt | \n", "nl NED | \n", "DF | \n", "Crystal Palace | \n", "28 | \n", "1990 | \n", "25.0 | \n", "25.0 | \n", "2162.0 | \n", "3.0 | \n", "... | \n", "6.0 | \n", "6.0 | \n", "2.0 | \n", "0.0 | \n", "0.0 | \n", "1.0 | \n", "203.0 | \n", "10.0 | \n", "14.0 | \n", "41.7 | \n", "
1 | \n", "Max Aarons | \n", "eng ENG | \n", "DF | \n", "Norwich City | \n", "19 | \n", "2000 | \n", "30.0 | \n", "30.0 | \n", "2700.0 | \n", "0.0 | \n", "... | \n", "26.0 | \n", "40.0 | \n", "2.0 | \n", "1.0 | \n", "0.0 | \n", "0.0 | \n", "236.0 | \n", "18.0 | \n", "36.0 | \n", "33.3 | \n", "
2 | \n", "Tammy Abraham | \n", "eng ENG | \n", "FW | \n", "Chelsea | \n", "21 | \n", "1997 | \n", "28.0 | \n", "24.0 | \n", "2034.0 | \n", "13.0 | \n", "... | \n", "16.0 | \n", "21.0 | \n", "23.0 | \n", "1.0 | \n", "0.0 | \n", "1.0 | \n", "86.0 | \n", "58.0 | \n", "97.0 | \n", "37.4 | \n", "
3 | \n", "Che Adams | \n", "eng ENG | \n", "FW | \n", "Southampton | \n", "23 | \n", "1996 | \n", "24.0 | \n", "8.0 | \n", "756.0 | \n", "0.0 | \n", "... | \n", "14.0 | \n", "8.0 | \n", "7.0 | \n", "1.0 | \n", "0.0 | \n", "0.0 | \n", "54.0 | \n", "18.0 | \n", "58.0 | \n", "23.7 | \n", "
4 | \n", "Adrián | \n", "es ESP | \n", "GK | \n", "Liverpool | \n", "32 | \n", "1987 | \n", "11.0 | \n", "9.0 | \n", "875.0 | \n", "0.0 | \n", "... | \n", "0.0 | \n", "1.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "47.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
503 | \n", "Wilfried Zaha | \n", "ci CIV | \n", "MF,FW | \n", "Crystal Palace | \n", "26 | \n", "1992 | \n", "32.0 | \n", "31.0 | \n", "2740.0 | \n", "3.0 | \n", "... | \n", "42.0 | \n", "99.0 | \n", "15.0 | \n", "1.0 | \n", "0.0 | \n", "0.0 | \n", "208.0 | \n", "11.0 | \n", "25.0 | \n", "30.6 | \n", "
504 | \n", "Christoph Zimmermann | \n", "de GER | \n", "DF | \n", "Norwich City | \n", "26 | \n", "1993 | \n", "15.0 | \n", "15.0 | \n", "1295.0 | \n", "0.0 | \n", "... | \n", "8.0 | \n", "8.0 | \n", "0.0 | \n", "0.0 | \n", "2.0 | \n", "0.0 | \n", "139.0 | \n", "36.0 | \n", "10.0 | \n", "78.3 | \n", "
505 | \n", "Oleksandr Zinchenko | \n", "ua UKR | \n", "DF | \n", "Manchester City | \n", "22 | \n", "1996 | \n", "14.0 | \n", "11.0 | \n", "1028.0 | \n", "0.0 | \n", "... | \n", "11.0 | \n", "2.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "119.0 | \n", "23.0 | \n", "19.0 | \n", "54.8 | \n", "
506 | \n", "Richairo Živković | \n", "nl NED | \n", "FW | \n", "Sheffield Utd | \n", "22 | \n", "1996 | \n", "2.0 | \n", "0.0 | \n", "44.0 | \n", "0.0 | \n", "... | \n", "1.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "1.0 | \n", "4.0 | \n", "20.0 | \n", "
507 | \n", "Kurt Zouma | \n", "fr FRA | \n", "DF | \n", "Chelsea | \n", "24 | \n", "1994 | \n", "22.0 | \n", "19.0 | \n", "1804.0 | \n", "0.0 | \n", "... | \n", "26.0 | \n", "12.0 | \n", "1.0 | \n", "0.0 | \n", "1.0 | \n", "1.0 | \n", "240.0 | \n", "76.0 | \n", "22.0 | \n", "77.6 | \n", "
508 rows × 151 columns
\n", "\n", " | squad | \n", "players_used | \n", "possession | \n", "games | \n", "games_starts | \n", "minutes | \n", "goals | \n", "assists | \n", "pens_made | \n", "pens_att | \n", "... | \n", "fouls | \n", "fouled | \n", "offsides | \n", "pens_won | \n", "pens_conceded | \n", "own_goals | \n", "ball_recoveries | \n", "aerials_won | \n", "aerials_lost | \n", "aerials_won_pct | \n", "
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | \n", "Arsenal | \n", "29.0 | \n", "54.8 | \n", "32.0 | \n", "352.0 | \n", "2880.0 | \n", "47.0 | \n", "29.0 | \n", "2.0 | \n", "2.0 | \n", "... | \n", "346.0 | \n", "367.0 | \n", "63.0 | \n", "1.0 | \n", "5.0 | \n", "0.0 | \n", "2593.0 | \n", "403.0 | \n", "471.0 | \n", "46.1 | \n", "
1 | \n", "Aston Villa | \n", "28.0 | \n", "45.2 | \n", "32.0 | \n", "352.0 | \n", "2880.0 | \n", "35.0 | \n", "28.0 | \n", "1.0 | \n", "3.0 | \n", "... | \n", "376.0 | \n", "425.0 | \n", "51.0 | \n", "2.0 | \n", "5.0 | \n", "1.0 | \n", "2860.0 | \n", "581.0 | \n", "644.0 | \n", "47.4 | \n", "
2 | \n", "Bournemouth | \n", "27.0 | \n", "45.5 | \n", "32.0 | \n", "352.0 | \n", "2880.0 | \n", "29.0 | \n", "19.0 | \n", "1.0 | \n", "1.0 | \n", "... | \n", "304.0 | \n", "331.0 | \n", "54.0 | \n", "1.0 | \n", "3.0 | \n", "0.0 | \n", "3031.0 | \n", "627.0 | \n", "663.0 | \n", "48.6 | \n", "
3 | \n", "Brighton | \n", "25.0 | \n", "54.0 | \n", "32.0 | \n", "352.0 | \n", "2880.0 | \n", "30.0 | \n", "20.0 | \n", "1.0 | \n", "2.0 | \n", "... | \n", "324.0 | \n", "269.0 | \n", "55.0 | \n", "2.0 | \n", "2.0 | \n", "2.0 | \n", "3010.0 | \n", "549.0 | \n", "468.0 | \n", "54.0 | \n", "
4 | \n", "Burnley | \n", "22.0 | \n", "40.3 | \n", "32.0 | \n", "352.0 | \n", "2880.0 | \n", "35.0 | \n", "25.0 | \n", "2.0 | \n", "2.0 | \n", "... | \n", "356.0 | \n", "320.0 | \n", "73.0 | \n", "1.0 | \n", "5.0 | \n", "1.0 | \n", "3022.0 | \n", "786.0 | \n", "746.0 | \n", "51.3 | \n", "
5 | \n", "Chelsea | \n", "27.0 | \n", "60.0 | \n", "32.0 | \n", "352.0 | \n", "2880.0 | \n", "57.0 | \n", "37.0 | \n", "6.0 | \n", "6.0 | \n", "... | \n", "330.0 | \n", "319.0 | \n", "56.0 | \n", "5.0 | \n", "2.0 | \n", "3.0 | \n", "3129.0 | \n", "552.0 | \n", "539.0 | \n", "50.6 | \n", "
6 | \n", "Crystal Palace | \n", "24.0 | \n", "44.2 | \n", "32.0 | \n", "352.0 | \n", "2880.0 | \n", "26.0 | \n", "18.0 | \n", "3.0 | \n", "3.0 | \n", "... | \n", "349.0 | \n", "393.0 | \n", "48.0 | \n", "2.0 | \n", "1.0 | \n", "2.0 | \n", "2938.0 | \n", "604.0 | \n", "622.0 | \n", "49.3 | \n", "
7 | \n", "Everton | \n", "23.0 | \n", "48.9 | \n", "32.0 | \n", "352.0 | \n", "2880.0 | \n", "38.0 | \n", "28.0 | \n", "1.0 | \n", "1.0 | \n", "... | \n", "387.0 | \n", "324.0 | \n", "51.0 | \n", "0.0 | \n", "1.0 | \n", "2.0 | \n", "3067.0 | \n", "708.0 | \n", "720.0 | \n", "49.6 | \n", "
8 | \n", "Leicester City | \n", "21.0 | \n", "57.7 | \n", "32.0 | \n", "352.0 | \n", "2880.0 | \n", "58.0 | \n", "42.0 | \n", "5.0 | \n", "7.0 | \n", "... | \n", "340.0 | \n", "380.0 | \n", "57.0 | \n", "6.0 | \n", "8.0 | \n", "0.0 | \n", "2942.0 | \n", "565.0 | \n", "496.0 | \n", "53.3 | \n", "
9 | \n", "Liverpool | \n", "24.0 | \n", "63.1 | \n", "32.0 | \n", "352.0 | \n", "2880.0 | \n", "68.0 | \n", "56.0 | \n", "5.0 | \n", "5.0 | \n", "... | \n", "268.0 | \n", "244.0 | \n", "45.0 | \n", "4.0 | \n", "1.0 | \n", "1.0 | \n", "3309.0 | \n", "539.0 | \n", "473.0 | \n", "53.3 | \n", "
10 | \n", "Manchester City | \n", "23.0 | \n", "65.6 | \n", "32.0 | \n", "352.0 | \n", "2880.0 | \n", "80.0 | \n", "58.0 | \n", "6.0 | \n", "10.0 | \n", "... | \n", "311.0 | \n", "249.0 | \n", "56.0 | \n", "9.0 | \n", "2.0 | \n", "1.0 | \n", "2874.0 | \n", "423.0 | \n", "390.0 | \n", "52.0 | \n", "
11 | \n", "Manchester Utd | \n", "28.0 | \n", "55.6 | \n", "32.0 | \n", "352.0 | \n", "2880.0 | \n", "50.0 | \n", "34.0 | \n", "7.0 | \n", "11.0 | \n", "... | \n", "357.0 | \n", "365.0 | \n", "45.0 | \n", "10.0 | \n", "1.0 | \n", "1.0 | \n", "2979.0 | \n", "499.0 | \n", "425.0 | \n", "54.0 | \n", "
12 | \n", "Newcastle Utd | \n", "27.0 | \n", "37.9 | \n", "32.0 | \n", "352.0 | \n", "2880.0 | \n", "33.0 | \n", "25.0 | \n", "0.0 | \n", "1.0 | \n", "... | \n", "310.0 | \n", "347.0 | \n", "67.0 | \n", "0.0 | \n", "0.0 | \n", "1.0 | \n", "2816.0 | \n", "625.0 | \n", "643.0 | \n", "49.3 | \n", "
13 | \n", "Norwich City | \n", "28.0 | \n", "50.2 | \n", "32.0 | \n", "352.0 | \n", "2880.0 | \n", "24.0 | \n", "17.0 | \n", "2.0 | \n", "2.0 | \n", "... | \n", "306.0 | \n", "371.0 | \n", "41.0 | \n", "1.0 | \n", "7.0 | \n", "2.0 | \n", "2868.0 | \n", "443.0 | \n", "552.0 | \n", "44.5 | \n", "
14 | \n", "Sheffield Utd | \n", "25.0 | \n", "43.5 | \n", "32.0 | \n", "352.0 | \n", "2880.0 | \n", "30.0 | \n", "21.0 | \n", "1.0 | \n", "1.0 | \n", "... | \n", "346.0 | \n", "249.0 | \n", "66.0 | \n", "1.0 | \n", "2.0 | \n", "0.0 | \n", "3093.0 | \n", "736.0 | \n", "725.0 | \n", "50.4 | \n", "
15 | \n", "Southampton | \n", "24.0 | \n", "47.9 | \n", "32.0 | \n", "352.0 | \n", "2880.0 | \n", "41.0 | \n", "24.0 | \n", "1.0 | \n", "2.0 | \n", "... | \n", "389.0 | \n", "319.0 | \n", "49.0 | \n", "2.0 | \n", "4.0 | \n", "1.0 | \n", "3341.0 | \n", "683.0 | \n", "758.0 | \n", "47.4 | \n", "
16 | \n", "Tottenham | \n", "29.0 | \n", "53.1 | \n", "32.0 | \n", "352.0 | \n", "2880.0 | \n", "48.0 | \n", "33.0 | \n", "3.0 | \n", "4.0 | \n", "... | \n", "338.0 | \n", "359.0 | \n", "57.0 | \n", "4.0 | \n", "7.0 | \n", "2.0 | \n", "3081.0 | \n", "529.0 | \n", "539.0 | \n", "49.5 | \n", "
17 | \n", "Watford | \n", "26.0 | \n", "42.6 | \n", "32.0 | \n", "352.0 | \n", "2880.0 | \n", "28.0 | \n", "19.0 | \n", "4.0 | \n", "5.0 | \n", "... | \n", "398.0 | \n", "272.0 | \n", "54.0 | \n", "4.0 | \n", "6.0 | \n", "3.0 | \n", "3176.0 | \n", "664.0 | \n", "666.0 | \n", "49.9 | \n", "
18 | \n", "West Ham | \n", "28.0 | \n", "43.2 | \n", "32.0 | \n", "352.0 | \n", "2880.0 | \n", "38.0 | \n", "29.0 | \n", "3.0 | \n", "3.0 | \n", "... | \n", "324.0 | \n", "289.0 | \n", "63.0 | \n", "3.0 | \n", "6.0 | \n", "3.0 | \n", "2973.0 | \n", "659.0 | \n", "669.0 | \n", "49.6 | \n", "
19 | \n", "Wolves | \n", "20.0 | \n", "47.7 | \n", "32.0 | \n", "352.0 | \n", "2880.0 | \n", "43.0 | \n", "31.0 | \n", "3.0 | \n", "3.0 | \n", "... | \n", "350.0 | \n", "304.0 | \n", "45.0 | \n", "3.0 | \n", "2.0 | \n", "1.0 | \n", "2992.0 | \n", "617.0 | \n", "583.0 | \n", "51.4 | \n", "
20 rows × 188 columns
\n", "\n", " | player | \n", "nationality | \n", "position | \n", "squad | \n", "age | \n", "birth_year | \n", "games_gk | \n", "games_starts_gk | \n", "minutes_gk | \n", "goals_against_gk | \n", "... | \n", "passes_length_avg_gk | \n", "goal_kicks | \n", "pct_goal_kicks_launched | \n", "goal_kick_length_avg | \n", "crosses_gk | \n", "crosses_stopped_gk | \n", "crosses_stopped_pct_gk | \n", "def_actions_outside_pen_area_gk | \n", "def_actions_outside_pen_area_per90_gk | \n", "avg_distance_def_actions_gk | \n", "
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | \n", "Antonio Adán | \n", "es ESP | \n", "GK | \n", "Atlético Madrid | \n", "32 | \n", "1987 | \n", "1.0 | \n", "0.0 | \n", "25.0 | \n", "0.0 | \n", "... | \n", "44.0 | \n", "1.0 | \n", "100.0 | \n", "67.0 | \n", "2.0 | \n", "0.0 | \n", "0.0 | \n", "1.0 | \n", "3.60 | \n", "14.7 | \n", "
1 | \n", "Adrián | \n", "es ESP | \n", "GK | \n", "Liverpool | \n", "32 | \n", "1987 | \n", "11.0 | \n", "9.0 | \n", "875.0 | \n", "10.0 | \n", "... | \n", "38.3 | \n", "68.0 | \n", "48.5 | \n", "40.4 | \n", "91.0 | \n", "8.0 | \n", "8.8 | \n", "7.0 | \n", "0.72 | \n", "13.3 | \n", "
2 | \n", "Rúnar Alex Rúnarsson | \n", "is ISL | \n", "GK | \n", "Dijon | \n", "24 | \n", "1995 | \n", "11.0 | \n", "9.0 | \n", "900.0 | \n", "17.0 | \n", "... | \n", "35.9 | \n", "81.0 | \n", "64.2 | \n", "49.2 | \n", "89.0 | \n", "8.0 | \n", "9.0 | \n", "5.0 | \n", "0.50 | \n", "14.1 | \n", "
3 | \n", "Enrico Alfonso | \n", "it ITA | \n", "GK | \n", "Brescia | \n", "31 | \n", "1988 | \n", "4.0 | \n", "4.0 | \n", "279.0 | \n", "4.0 | \n", "... | \n", "37.0 | \n", "24.0 | \n", "37.5 | \n", "32.8 | \n", "38.0 | \n", "2.0 | \n", "5.3 | \n", "4.0 | \n", "1.29 | \n", "16.3 | \n", "
4 | \n", "Alisson | \n", "br BRA | \n", "GK | \n", "Liverpool | \n", "26 | \n", "1992 | \n", "23.0 | \n", "23.0 | \n", "2003.0 | \n", "15.0 | \n", "... | \n", "31.9 | \n", "141.0 | \n", "39.7 | \n", "39.1 | \n", "151.0 | \n", "10.0 | \n", "6.6 | \n", "25.0 | \n", "1.12 | \n", "17.1 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
186 | \n", "Mauro Vigorito | \n", "it ITA | \n", "GK | \n", "Lecce | \n", "29 | \n", "1990 | \n", "5.0 | \n", "4.0 | \n", "423.0 | \n", "9.0 | \n", "... | \n", "36.3 | \n", "49.0 | \n", "38.8 | \n", "32.2 | \n", "61.0 | \n", "4.0 | \n", "6.6 | \n", "1.0 | \n", "0.21 | \n", "11.6 | \n", "
187 | \n", "Felix Wiedwald | \n", "de GER | \n", "GK | \n", "Eint Frankfurt | \n", "29 | \n", "1990 | \n", "3.0 | \n", "3.0 | \n", "270.0 | \n", "8.0 | \n", "... | \n", "38.0 | \n", "24.0 | \n", "54.2 | \n", "41.8 | \n", "28.0 | \n", "2.0 | \n", "7.1 | \n", "3.0 | \n", "1.00 | \n", "16.1 | \n", "
188 | \n", "Yoel | \n", "es ESP | \n", "GK | \n", "Eibar | \n", "30 | \n", "1988 | \n", "2.0 | \n", "2.0 | \n", "90.0 | \n", "0.0 | \n", "... | \n", "61.2 | \n", "8.0 | \n", "87.5 | \n", "66.5 | \n", "16.0 | \n", "1.0 | \n", "6.3 | \n", "2.0 | \n", "2.00 | \n", "17.0 | \n", "
189 | \n", "Robin Zentner | \n", "de GER | \n", "GK | \n", "Mainz 05 | \n", "24 | \n", "1994 | \n", "22.0 | \n", "22.0 | \n", "1935.0 | \n", "40.0 | \n", "... | \n", "40.8 | \n", "196.0 | \n", "62.8 | \n", "51.6 | \n", "226.0 | \n", "23.0 | \n", "10.2 | \n", "20.0 | \n", "0.93 | \n", "16.2 | \n", "
190 | \n", "Leopold Zingerle | \n", "de GER | \n", "GK | \n", "Paderborn 07 | \n", "25 | \n", "1994 | \n", "28.0 | \n", "28.0 | \n", "2520.0 | \n", "57.0 | \n", "... | \n", "32.3 | \n", "235.0 | \n", "31.9 | \n", "32.5 | \n", "260.0 | \n", "10.0 | \n", "3.8 | \n", "17.0 | \n", "0.61 | \n", "14.0 | \n", "
191 rows × 47 columns
\n", "