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

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 tipo Unnamed: X
  • add_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 CSV
  • stats_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#41938514193851

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-garnacho1203665

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 en get_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 es None, 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 en get_available_leagues("Sofascore")
  • season: temporada disponible en get_available_season_for_leagues("Sofascore", league)
  • save_csv: exporta el resultado a CSV
  • accumulation: forma de pedir las estadísticas. Valores: total, per90, perMatch
  • selected_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 en get_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 medios
  • team_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/456617456617

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-guruzeta711231

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


Download files

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

Source Distribution

lanusstats-2.1.2.tar.gz (635.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lanusstats-2.1.2-py3-none-any.whl (638.3 kB view details)

Uploaded Python 3

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

Hashes for lanusstats-2.1.2.tar.gz
Algorithm Hash digest
SHA256 8669103a69952ecedd40fc4d8f6b634f2dcb35662939f87aca871077d05eec96
MD5 19d3f97b884f800d0bbb39dadad82d83
BLAKE2b-256 fd86c37ee3aea5dc5f76b23cc0c0d8fcddbba39a634ed4de6fbaa4d3ddc05386

See more details on using hashes here.

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

Hashes for lanusstats-2.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 1ab2cca0efae97648b45c4c00f052c55d21237d67eb1e9a0b0a661a3ab08e5ea
MD5 a63a995c554d8a77192aa267acbd05d9
BLAKE2b-256 e643bfeadb25b50fa59f830647539483c958809c8ad73f7aeb992ef2150c880c

See more details on using hashes here.

Supported by

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