Python library for scraping football data and visualize it / Libreria de Python para scrapear data de fútbol y visualizarla
Project description
LanusStats es una librería Python de scraping orientada al fútbol y los datos. Su objetivo es abstraer la complejidad de extraer información de múltiples plataformas en funciones simples que devuelven DataFrames de pandas listos para analizar o visualizar.
Instalación
pip install LanusStats
Para actualizar a la última versión:
pip install --upgrade LanusStats
Fuentes disponibles
Cómo se usa
Funciones generales
Para saber qué páginas tienen módulo disponible:
import LanusStats as ls
ls.get_available_pages()
Para ver las ligas disponibles de una página:
ls.get_available_leagues(page)
Para ver las temporadas disponibles de una liga:
ls.get_available_season_for_leagues(page, league)
FBRef
import LanusStats as ls
fbref = ls.Fbref()
Estadísticas de equipos
Scrapear una estadística específica para todos los equipos de una liga:
fbref.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: renombra columnas de tipoUnnamed: Xadd_page_name: agrega el nombre de la estadística como prefijo a las columnas (útil al hacer merge entre tablas)save_csv: exporta el resultado a un archivo CSVstats_vs: incluye las estadísticas "en contra" que FBRef provee
Para obtener estadísticas a favor y en contra en un solo paso:
fbref.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)
Devuelve dos DataFrames (a favor y en contra). save_excel los exporta en un .xlsx con dos hojas.
Para scrapear todas las estadísticas disponibles de una liga:
fbref.get_all_teams_season_stats('Copa de la Liga', '2024', save_csv=False, stats_vs=False, change_columns_names=False, add_page_name=False)
Estadísticas de jugadores
fbref.get_player_season_stats('gca', 'Copa de la Liga', save_csv=False, add_page_name=False)
Para scrapear todas las estadísticas de jugadores en una sola llamada:
fbref.get_all_player_season_stats("Copa de la Liga", "2024", save_csv=False, add_page_name=False)
Estadísticas de un partido
fbref.get_general_match_team_stats("https://fbref.com/en/matches/77d7e2d6/Arsenal-Luton-Town-April-3-2024-Premier-League")
Tabla de posiciones
fbref.get_tournament_table("https://fbref.com/en/comps/9/Premier-League-Stats")
FotMob
import LanusStats as ls
fotmob = ls.FotMob()
Tablas de liga
Obtener las tablas de una temporada (posiciones, xG, etc.):
fotmob.get_season_tables("Premier League", "2022/2023", "xg")
Estadísticas de temporada
Estadísticas de jugadores:
fotmob.get_players_stats_season("Premier League", "2023/2024", "expected_assists_per_90")
Estadísticas de equipos:
fotmob.get_teams_stats_season("Premier League", "2023/2024", "poss_won_att_3rd_team")
Datos de un partido
El match_id es el número al final de la URL. Ejemplo: https://www.fotmob.com/es/matches/afc-bournemouth-vs-manchester-united/2yrx85#4193851 → 4193851
Mapa de tiros:
fotmob.get_match_shotmap(4193851)
Estadísticas generales de los equipos:
fotmob.get_general_match_stats(4193851)
Datos de un jugador
El player_id es el número en la URL del jugador. Ejemplo: https://www.fotmob.com/es/players/1203665/alejandro-garnacho → 1203665
Los parámetros de temporada y competición corresponden a la posición en el dropdown de FotMob, comenzando desde 0.
Mapa de tiros del jugador:
fotmob.get_player_shotmap("1", "0", 1203665)
Percentiles:
fotmob.get_player_percentiles("1", "0", 1203665)
Estadísticas de temporada:
fotmob.get_player_season_stats("1", "0", 1203665)
Toda la información disponible del jugador:
fotmob.get_player_data(1203665)
365Scores
import LanusStats as ls
threesixfivescores = ls.ThreeSixFiveScores()
La URL de un partido tiene la forma: https://www.365scores.com/es-mx/football/match/copa-de-la-liga-profesional-7214/lanus-union-santa-fe-869-7206-7214#id=4033824
Estadísticas de liga
Top performers de distintas estadísticas para la temporada actual de una liga:
threesixfivescores.get_league_top_players_stats(league="Argentina Liga Profesional")
league: liga disponible enget_available_leagues("365Scores")
Devuelve un DataFrame con jugadores, posiciones, estadísticas y valores.
Datos de un partido
Mapa de tiros (si el partido lo tiene):
threesixfivescores.get_match_shotmap("https://www.365scores.com/es-mx/football/match/copa-de-la-liga-profesional-7214/lanus-union-santa-fe-869-7206-7214#id=4033824")
Devuelve un DataFrame con cada disparo, coordenadas, xG, xGoT y resultado del tiro. Lanza MatchDoesntHaveInfo si el partido no tiene mapa de tiros.
Estadísticas generales de los equipos:
threesixfivescores.get_match_general_stats("https://www.365scores.com/es-mx/football/match/copa-de-la-liga-profesional-7214/lanus-union-santa-fe-869-7206-7214#id=4033824")
Devuelve un DataFrame con las estadísticas del partido por equipo (posesión, tiros, pases, etc.).
Estadísticas de tiempo de juego (tiempo efectivo, tiempo perdido, etc.):
threesixfivescores.get_match_time_stats("https://www.365scores.com/es-mx/football/match/copa-de-la-liga-profesional-7214/lanus-union-santa-fe-869-7206-7214#id=4033824")
Lanza MatchDoesntHaveInfo si el partido no tiene esta información.
Datos de jugadores en un partido
Información general de los jugadores que participaron:
threesixfivescores.get_players_info("https://www.365scores.com/es-mx/football/match/copa-de-la-liga-profesional-7214/lanus-union-santa-fe-869-7206-7214#id=4033824")
Mapa de calor de un jugador en un partido:
threesixfivescores.get_player_heatmap_match(player="Lautaro Martinez", match_url="https://www.365scores.com/es-mx/football/match/copa-de-la-liga-profesional-7214/lanus-union-santa-fe-869-7206-7214#id=4033824")
player: nombre del jugador tal como figura en 365Scores
Devuelve una imagen PIL del mapa de calor.
SofaScore
import LanusStats as ls
sofascore = ls.SofaScore()
Datos de un partido
El match_url es la URL completa del partido. Ejemplo: https://www.sofascore.com/arsenal-manchester-united/KR#id:11352532
Mapa de tiros:
sofascore.get_match_shotmap("https://www.sofascore.com/arsenal-manchester-united/KR#id:11352532", save_csv=False)
Estadísticas de jugadores (devuelve una lista: [0] local, [1] visitante):
sofascore.get_players_match_stats("https://www.sofascore.com/arsenal-manchester-united/KR#id:11352532")
Posiciones promedio (devuelve una lista: [0] local, [1] visitante):
sofascore.get_players_average_positions("https://www.sofascore.com/arsenal-manchester-united/KR#id:11352532")
Lineups:
sofascore.get_lineups("https://www.sofascore.com/arsenal-manchester-united/KR#id:11352532")
Mapa de calor de un jugador en un partido:
sofascore.get_player_heatmap("https://www.sofascore.com/arsenal-manchester-united/KR#id:11352532", "Alejandro Garnacho")
El nombre del jugador debe ser exactamente como lo muestra SofaScore.
Eventos de un jugador en un partido:
sofascore.get_player_match_events("https://www.sofascore.com/arsenal-manchester-united/KR#id:11352532", "Alejandro Garnacho", events=None)
events: puede ser una lista con uno o más de['passes', 'ball-carries', 'dribbles', 'defensive']. Si esNone, devuelve todos.
Estadísticas de jugador por temporada
Mapa de calor de un jugador en un torneo:
sofascore.get_player_season_heatmap("Argentina Liga Profesional", "2024", 832213)
El tercer parámetro es el ID del jugador, visible en su URL: https://www.sofascore.com/player/joaquin-pereyra/832213
Estadísticas de jugadores de un torneo completo:
sofascore.scrape_league_stats(league="Argentina Liga Profesional", season="2024", save_csv=False, accumulation="per90", selected_positions=["Goalkeepers"])
league: liga disponible enget_available_leagues("Sofascore")season: temporada disponible enget_available_season_for_leagues("Sofascore", league)save_csv: exporta el resultado a CSVaccumulation: forma de pedir las estadísticas. Valores:total,per90,perMatchselected_positions: grupo de jugadores. Valores:['Goalkeepers', 'Defenders', 'Midfielders', 'Forwards']
Transfermarkt
import LanusStats as ls
transfermarkt = ls.Transfermarkt()
Valoraciones de planteles
transfermarkt.get_league_teams_valuations(league="Primera Division Argentina", season="2024")
league: liga disponible enget_available_leagues("Transfermarkt")season: temporada (por ejemplo:"2024"o"2023/2024")
Plantel de un equipo
transfermarkt.scrape_players_for_teams(team_name="Club Atletico Lanus", team_id="333", season="2024")
El team_name y team_id se sacan de la URL del equipo. Ejemplo: https://www.transfermarkt.com.ar/club-atletico-lanus/startseite/verein/333
team_name: nombre respetando la URL, sin guiones mediosteam_id: número al final de la URL
Datos de un jugador
El player_id se saca de la URL del jugador. Ejemplo: https://www.transfermarkt.com.ar/marcelino-moreno/profil/spieler/456617 → 456617
Historial de transferencias:
transfermarkt.get_player_transfer_history(player_id="456617")
Evolución del valor de mercado:
transfermarkt.get_player_market_value(player_id="456617")
Posiciones jugadas:
transfermarkt.get_player_positions_played(player_name="Marcelino Moreno", player_id="456617")
Datos de penales para arqueros:
transfermarkt.get_keepers_penalty_data(player_name="Emiliano Martinez", player_id="111873")
Partidos jugados:
transfermarkt.get_player_played_data(player_name="Emiliano Martinez", player_id="111873")
Visualizaciones
Las visualizaciones combinan el scraping y el ploteo en una sola función, listas para usar o customizar.
Match momentum de un partido de FotMob:
ls.visualizations.fotmob_match_momentum_plot(match_id=4193851, save_fig=False)
Hexbin de tiros de un jugador en FotMob:
ls.visualizations.fotmob_hexbin_shotmap('La Liga', '2023/2024', 711231)
player_id: ID del jugador en FotMob. Ejemplo:https://www.fotmob.com/es/players/711231/gorka-guruzeta→711231
Mapa de tiros 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')
Evolución del valor de mercado según Transfermarkt:
ls.visualizations.transfermarkt_player_market_value(player_id='111873')
Eventos de un jugador en un partido de SofaScore:
ls.visualizations.sofascore_plot_match_events('https://www.sofascore.com/es/football/match/banfield-racing-club/pobsuob#id:15270114', 'Santiago Sosa', events=None, dashboard=True)
dashboard=True: agrupa todas las figuras en una sola imagen
Créditos
Más contenido
Unite al Discord de la comunidad hispanohablante de fútbol y datos.
Para ver todo el contenido de LanusStats: linktr.ee/lanusstats
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file lanusstats-2.1.2.tar.gz.
File metadata
- Download URL: lanusstats-2.1.2.tar.gz
- Upload date:
- Size: 635.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8669103a69952ecedd40fc4d8f6b634f2dcb35662939f87aca871077d05eec96
|
|
| MD5 |
19d3f97b884f800d0bbb39dadad82d83
|
|
| BLAKE2b-256 |
fd86c37ee3aea5dc5f76b23cc0c0d8fcddbba39a634ed4de6fbaa4d3ddc05386
|
File details
Details for the file lanusstats-2.1.2-py3-none-any.whl.
File metadata
- Download URL: lanusstats-2.1.2-py3-none-any.whl
- Upload date:
- Size: 638.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1ab2cca0efae97648b45c4c00f052c55d21237d67eb1e9a0b0a661a3ab08e5ea
|
|
| MD5 |
a63a995c554d8a77192aa267acbd05d9
|
|
| BLAKE2b-256 |
e643bfeadb25b50fa59f830647539483c958809c8ad73f7aeb992ef2150c880c
|