Skip to main content

Python library for scraping football data and visualize it / Libreria de Python para scrapear data de fútbol y visualizarla

Project description

Esto es la líbreria de LanusStats, un lugar en donde se intentará hacerle la vida más facíla toda persona que este interesada en el ámbito del fútbol y los datos. Se van a tener recursos de todo tipo, desde scrapeo de información de distintas páginas/lugares hasta la posibilidad de hacer visualizaciones con solo una función.

Para instalarla, solamente tenes que correr esto en algun consola de comando:

pip install LanusStats

En caso de querer actualizarla a la versión más reciente:

pip install --upgrade LanusStats

La libreria consta de distintos módulos para sacar información de estas páginas:


Cómo se usa?

General

Para saber que páginas contienen un módulo para scrapear, podes hacer:

get_available_pages()

Para saber que ligas tienen las páginas de la función anterior, podes hacer:

get_available_leagues(page)

Para saber que temporadas tienen las ligas de las páginas de la función anterior, podes hacer:

get_available_season_for_leagues(page, league)

Fbref

Importo la clase de esta manera:

import LanusStats as ls  
fbref = ls.Fbref()

Todas las funciones deben tener el fbref. delante de ellas

  • Para scrapear información de los equipos se puede usar get_teams_season_stats. Ejemplo:
get_teams_season_stats('gca', 'Copa de la Liga', season='2024', save_csv=False, stats_vs=False, change_columns_names=False, add_page_name=False)

change_columns_names te permite ponerle el nombre a columnas de tipo Unnamed: 0 add_page_name le agrega el nombre de la página a las columnas, hay veces que se repiten los nombres entre páginas
save_csv exporta la tabla a un csv
stats_vs te permite scrapear las tablas de estadísticas vs que en Fbref está la posibilidad

Si esto lo queres hacer todo junto, podes usar get_vs_and_teams_season_stats. Ejemplo:

get_vs_and_teams_season_stats('gca', 'Copa de la Liga', season='2024', save_excel=False, stats_vs=False, change_columns_names=False, add_page_name=False)

Esto te devuelve dos DataFrames, uno para las estadísticas a favor y otro en contra. save_excel te permite exportarlo a un .xlsx que contiene dos páginas.

Para terminar, con get_all_teams_season_stats podes scrapear TODAS las estadísticas que esten en la pagina. Ejemplo:

get_all_teams_season_stats('Copa de la Liga', '2024', save_csv=False, stats_vs=False, change_columns_names=False, add_page_name=False)
  • Para scrapear data de los jugadores se pueden usar:
get_player_season_stats('gca', 'Copa de la Liga', save_csv=False, add_page_name=False)

Y si quiero scrapear todas las estadísticas en una

get_all_player_season_stats("Copa de la Liga", "2024", save_csv=False, add_page_name=False)
  • Del perfil de un jugar se puede sacar los percentiles y las similutdes (si las tiene)
get_player_percentiles("https://fbref.com/en/players/bc7dc64d/Bukayo-Saka")
get_player_similarities("https://fbref.com/en/players/bc7dc64d/Bukayo-Saka")
  • De un partido en particular se puede sacar los tiros y las estadísticas generales (si las tiene)
get_match_shots("https://fbref.com/en/matches/77d7e2d6/Arsenal-Luton-Town-April-3-2024-Premier-League")
get_general_match_team_stats("https://fbref.com/en/matches/77d7e2d6/Arsenal-Luton-Town-April-3-2024-Premier-League")
  • Si queres scrapear la tabla de posiciones de una liga, podes:
get_tournament_table("https://fbref.com/en/comps/9/Premier-League-Stats")

FotMob

import LanusStats as ls  
fotmob = ls.FotMob()
  • Para obtener las distintas tablas que pueden haber en la UI de Fotmob (ejemplo) pueden usar:
get_season_tables("Premier League", "2022/2023", "xg")
  • Para obtener información de estadísticas de una temporada (ejemplo):

** De los jugadores puedes usar:

get_players_stats_season("Premier League", "2023/2024", "expected_assists_per_90")

** De los equipos puedes usar:

get_teams_stats_season("Premier League", "2023/2024", "poss_won_att_3rd_team")
  • De un partido (ejemplo) la información que puedes sacar es de:

** Mapa de tiros:

get_match_shotmap(4193851)

** Estadísticas generales de los equipos:

get_general_match_stats(4193851)

Aclaración: El id de parametro es el que se encuentra en la url, ejemplo: https://www.fotmob.com/es/matches/afc-bournemouth-vs-manchester-united/2yrx85#4193851

  • También puedes obtener información de un jugador:

** Mapa de tiros (ejemplo):

get_player_shotmap("Premier League", "2023/2024", 1203665)

El 3º parametro es el id que se encuentra en la url, ejemplo: https://www.fotmob.com/es/players/1203665/alejandro-garnacho

365 Scores

import LanusStats as ls  
threesixfivescores = ls.ThreeSixFiveScores()

SofaScore

import LanusStats as ls  
sofascore = ls.SofaScore()
  • De un partido (ejemplo) podes sacar los disparos:
get_match_shotmap("https://www.sofascore.com/arsenal-manchester-united/KR#id:11352532", save_csv=True)

match_url se pone la url entera de la página del partido de Sofascore.
save_csv si guardas el dataframe que te devuelve en un csv

  • También de un partido podes sacar las estadísticas de los jugadores:
get_players_match_stats("https://www.sofascore.com/arsenal-manchester-united/KR#id:11352532")

match_url se pone la url entera de la página del partido de Sofascore.
Aclaración, te devuelve una lista de dataframes, el primero (ó [0]) es del local y el segundo ó [1] es del visitante

  • También de un partido podes sacar las posiciones promedio:
get_players_average_positions("https://www.sofascore.com/arsenal-manchester-united/KR#id:11352532")

match_url se pone la url entera de la página del partido de Sofascore.
Aclaración, te devuelve una lista de dataframes, el primero (ó [0]) es del local y el segundo ó [1] es del visitante

  • También podes obtener la información de los lineups:
get_lineups("https://www.sofascore.com/arsenal-manchester-united/KR#id:11352532")
  • Por último dentro de un partido podes sacar el mapa de calor de cada uno dentro del partido:
get_player_heatmap("https://www.sofascore.com/arsenal-manchester-united/KR#id:11352532", "Alejandro Garnacho")

Aclaración: el nombre del jugador debe ser tal cual lo muestra SofaScore.

  • Se puede sacar el mapa de calor de un jugador de cada torneo, si es que lo tiene:
get_player_season_heatmap("Argentina Liga Profesional", "2024", 832213)

La liga y la temporada salen de las funciones generales ya vistas y el tercer parámetro es el id del jugador que se puede ver en la página de jugador: https://www.sofascore.com/player/joaquin-pereyra/832213. Es el número al final del link

  • Por último, se pueden scrapear las estadísticas de los jugadores en un torneo:
scrape_league_stats(league="Argentina Liga Profesional", season="2024", save_csv=False, accumulation="per90", selected_positions= ["Goalkeepers"])

league Liga habilitada en get_available_leagues("Sofascore") season Temporada habilitada en get_available_season_for_leagues("Sofascore", league) save_csv si guardar el dataframe en un csv o no accumulation como pedir las estadísticas. Valores posibles: total, per90, perMatch selected_positions que grupo de jugadores traer. Valores posibles: ['Goalkeepers', 'Defenders', 'Midfielders', 'Forwards']

Visualizaciones

Hay visualizaciones seteadas para hacer desde una función que scrapean usando las funciones de la libreria y visualizan la información de cierta manera para que se puede customizar o usar derecho.

  • Plotear percentiles de los jugadores de Fbref en un grafico de MPLSoccer
ls.visualizations.fbref_plot_player_percentiles(path="https://fbref.com/en/players/058c938c/Marcelino-Moreno", image=None, chart_stats = ["shots", "passes", "defense"], save_image=True, name_extra = "- Lanus", credit_extra= "")

path Link del jugador en Fbref
image path de una imagen que quieras usar, se recomienda pasarla por https://crop-circle.imageonline.co/
chart_stats agregar rectangulos y nombres de las estadísticas al gráfico
save_image si guarda el png de la visualización
name_extra agregarle un string al título
credit_extra agregarle un string a los créditos

Ejemplo: Marcelino Moreno fbref percentile plot

  • Plotear match momentum de FotMob
ls.visualizations.fotmob_match_momentum_plot(match_id=4193851, save_fig=False)

match_id es el que se encuentra en la url, ejemplo: https://www.fotmob.com/es/matches/afc-bournemouth-vs-manchester-united/2yrx85#4193851
save_fig si guardo la imagen o no

  • Plotear hexbins de tiros de jugadores de FotMob
ls.visualizations.fotmob_hexbin_shotmap('La Liga', '2023/2024', 711231)

league Liga habilitada en get_available_leagues("Fotmob")
season Temporada habilitada.
player_id Id del jugador de FotMob. Ejemplo: https://www.fotmob.com/es/players/711231/gorka-guruzeta el número de la url es el id del jugador.

  • Plotear un mapa de disparos de un partido de 365Scores
ls.visualizations.threesixfivescores_match_shotmap('https://www.365scores.com/es-mx/football/match/copa-sudamericana-389/lanus-metropolitanos-fc-869-13830-389#id=4072240')

Hay que poner la url del partido entera. Va a devolver info si es que tiene un mapa de tiros el partido.


Créditos

Quiero agradecer a las influencias y ayudas que tuve para armar todo esto:


Más contenido

Unite al Discord hecho para la comunidad hispano hablante de fútbol y datos (cualquiera está invitado igual)

Para ver todo el contenido de LanusStats, te dejo este link

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

LanusStats-1.5.1.tar.gz (25.1 kB view hashes)

Uploaded Source

Built Distribution

LanusStats-1.5.1-py3-none-any.whl (28.0 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page