GSP850

Descripción general
BigQuery se puede usar para realizar análisis de datos más sofisticados. En este lab, analizarás datos de eventos de fútbol para obtener información real del conjunto de datos.
Los datos que se usan en este lab provienen de las siguientes fuentes:
- Pappalardo et al., (2019) A public data set of spatio-temporal match events in soccer competitions, Nature Scientific Data 6:236, https://www.nature.com/articles/s41597-019-0247-7
- Pappalardo et al. (2019) PlayerRank: Data-driven Performance Evaluation and Player Ranking in Soccer via a Machine Learning Approach. ACM Transactions on Intelligent Systems and Technologies (TIST) 10, 5, Article 59 (September 2019), 27 pages. DOI: https://doi.org/10.1145/3343172
Objetivos
En este lab, aprenderás a hacer lo siguiente:
- Analizar datos de eventos de fútbol con varias funciones de BigQuery
- Escribir y ejecutar consultas que funcionen con datos anidados en tablas de BigQuery
Configuración y requisitos
Antes de hacer clic en el botón Comenzar lab
Lee estas instrucciones. Los labs cuentan con un temporizador que no se puede pausar. El temporizador, que comienza a funcionar cuando haces clic en Comenzar lab, indica por cuánto tiempo tendrás a tu disposición los recursos de Google Cloud.
Este lab práctico te permitirá realizar las actividades correspondientes en un entorno de nube real, no en uno de simulación o demostración. Para ello, se te proporcionan credenciales temporales nuevas que utilizarás para acceder a Google Cloud durante todo el lab.
Para completar este lab, necesitarás lo siguiente:
- Acceso a un navegador de Internet estándar. Se recomienda el navegador Chrome.
Nota: Usa una ventana del navegador privada o de incógnito (opción recomendada) para ejecutar el lab. Así evitarás conflictos entre tu cuenta personal y la cuenta de estudiante, lo que podría generar cargos adicionales en tu cuenta personal.
- Tiempo para completar el lab (recuerda que, una vez que comienzas un lab, no puedes pausarlo).
Nota: Usa solo la cuenta de estudiante para este lab. Si usas otra cuenta de Google Cloud, es posible que se apliquen cargos a esa cuenta.
Cómo iniciar tu lab y acceder a la consola de Google Cloud
-
Haz clic en el botón Comenzar lab. Si debes pagar por el lab, se abrirá un diálogo para que selecciones la forma de pago.
A la izquierda, se encuentra el panel Detalles del lab, que tiene estos elementos:
- El botón para abrir la consola de Google Cloud
- El tiempo restante
- Las credenciales temporales que debes usar para el lab
- Otra información para completar el lab, si es necesaria
-
Haz clic en Abrir la consola de Google Cloud (o haz clic con el botón derecho y selecciona Abrir el vínculo en una ventana de incógnito si ejecutas el navegador Chrome).
El lab inicia recursos y abre otra pestaña en la que se muestra la página de acceso.
Sugerencia: Ordena las pestañas en ventanas separadas, una junto a la otra.
Nota: Si ves el diálogo Elegir una cuenta, haz clic en Usar otra cuenta.
-
De ser necesario, copia el nombre de usuario a continuación y pégalo en el diálogo Acceder.
{{{user_0.username | "Username"}}}
También puedes encontrar el nombre de usuario en el panel Detalles del lab.
-
Haz clic en Siguiente.
-
Copia la contraseña que aparece a continuación y pégala en el diálogo Te damos la bienvenida.
{{{user_0.password | "Password"}}}
También puedes encontrar la contraseña en el panel Detalles del lab.
-
Haz clic en Siguiente.
Importante: Debes usar las credenciales que te proporciona el lab. No uses las credenciales de tu cuenta de Google Cloud.
Nota: Usar tu propia cuenta de Google Cloud para este lab podría generar cargos adicionales.
-
Haz clic para avanzar por las páginas siguientes:
- Acepta los Términos y Condiciones.
- No agregues opciones de recuperación o autenticación de dos factores (esta es una cuenta temporal).
- No te registres para obtener pruebas gratuitas.
Después de un momento, se abrirá la consola de Google Cloud en esta pestaña.
Nota: Para acceder a los productos y servicios de Google Cloud, haz clic en el menú de navegación o escribe el nombre del servicio o producto en el campo Buscar.
Tarea 1: Abre BigQuery
En la consola de BigQuery, se proporciona una interfaz para consultar tablas, incluidos conjuntos de datos públicos que ofrece BigQuery.
- En el menú de navegación de la consola de Cloud, selecciona BigQuery:
Se abrirá el cuadro de mensaje Te damos la bienvenida a BigQuery en la consola de Cloud. Este cuadro de mensaje contiene un vínculo a la guía de inicio rápido y las notas de la versión.
- Haz clic en Listo.
Se abrirá la consola de BigQuery.
Nota: El proceso para crear el conjunto de datos y las tablas se enseña en el lab Transferencia de datos de fútbol a BigQuery. En este lab, el enfoque es aprender a consultar la información.
Una vez que se creen las tablas, la pantalla será similar a la siguiente:
En esta sección, se usó la interfaz de BigQuery para acceder a la consola. La consola proporciona una forma conveniente de agregar información a un conjunto de datos. BigQuery usa tablas para representar datos de forma estructurada.
En la siguiente sección, obtén más información para crear consultas más complejas.
Tarea 2: Analiza datos anidados de eventos de fútbol
En esta sección, ejecutarás algunas consultas que usan uniones con la funcionalidad de array de BigQuery para permitir un mejor control de los datos de eventos de fútbol.
- En el editor de consultas, haz clic en Crear consulta en SQL.
- Copia y pega la siguiente consulta en el editor de consultas:
SELECT
Events.playerId,
(Players.firstName || ' ' || Players.lastName) AS playerName,
SUM(IF(Tags2Name.Label = 'assist', 1, 0)) AS numAssists
FROM
`soccer.events` Events,
Events.tags Tags
LEFT JOIN
`soccer.tags2name` Tags2Name ON
Tags.id = Tags2Name.Tag
LEFT JOIN
`soccer.players` Players ON
Events.playerId = Players.wyId
GROUP BY
playerId, playerName
ORDER BY
numAssists DESC
Las asistencias no se marcan como un campo escalar independiente en la tabla events, por lo que debes buscar "dentro" del campo tags.
Esto se hace con una unión cruzada correlacionada entre la tabla events y el campo tags (con "," en la cláusula FROM para representar una unión implícita) para crear 1 fila por etiqueta por evento (en lugar de 1 fila por evento). El ID de la etiqueta que corresponde a las asistencias se encuentra en la tabla tags2name, la cantidad de ocurrencias de esa etiqueta se cuenta por jugador y la tabla players obtiene los nombres de los jugadores a partir de sus IDs.
- Haz clic en Ejecutar. Los resultados se muestran debajo de la ventana de consulta.
Haz clic en Revisar mi progreso para verificar el objetivo
Verificar que la consulta se haya ejecutado
En esta sección, se creó una consulta más compleja en BigQuery. Realizar uniones en BigQuery y aprovechar los arrays proporciona una forma eficaz de agregar datos.
En la siguiente sección, aprende a usar la anidación y los arrays con BigQuery.
Tarea 3: Calcula la distancia promedio de los pases por equipo
En esta sección, ejecutarás algunas consultas que usan los campos anidados en los datos de eventos de fútbol y la funcionalidad de array y el tipo de datos STRUCT de BigQuery para responder algunas preguntas interesantes.
¿Cuánto difieren los equipos de clubes en términos de distancia promedio en sus pases (tanto en general como los precisos)?
Para responder esta pregunta, estudia el campo positions en la tabla events. Cuando observas estos datos, ves que este es un campo repetido que contiene 1 o más pares (x, y) por evento. Según Wyscout, una empresa líder en datos de la industria del fútbol que proporcionó esta información, estos valores representan las posiciones de origen y (si corresponde) destino asociadas con el evento, en una escala de 0 a 100 que representa el porcentaje del campo desde la perspectiva del equipo atacante.
En la captura de pantalla que se muestra a continuación, se muestran las posiciones correspondientes a algunos tipos de eventos diferentes para algunos eventos de ejemplo.
A partir de los datos, puedes observar que los pases tienen 2 pares de atributos (x, y) que representan la posición inicial y final. Por lo tanto, la distancia de los pases se puede calcular con las diferencias entre las coordenadas x e y, que luego se convierten a metros estimados con las dimensiones promedio de una cancha de fútbol (105 m x 68 m, según Wikipedia; no hay un tamaño estándar) y la fórmula de distancia bidimensional.
- En el editor de consultas, haz clic en Crear consulta en SQL.
- Agrega la siguiente consulta en el editor de consultas:
WITH
Passes AS
(
SELECT
*,
/* 1801 es una etiqueta conocida para "accurate" de la tabla tags2name. */
(1801 IN UNNEST(tags.id)) AS accuratePass,
(CASE
WHEN ARRAY_LENGTH(positions) != 2 THEN NULL
ELSE
/* Convierte las distancias basadas en coordenadas (x, y) de 0 a 100 a posiciones absolutas
con dimensiones de campo "promedio" de 105 x 68 antes de combinarlas en el cálculo de distancia 2D */
SQRT(
POW(
(positions[ORDINAL(2)].x - positions[ORDINAL(1)].x) * 105/100,
2) +
POW(
(positions[ORDINAL(2)].y - positions[ORDINAL(1)].y) * 68/100,
2)
)
END) AS passDistance
FROM
`soccer.events`
WHERE
eventName = 'Pass'
)
SELECT
Passes.teamId,
Teams.name AS team,
Teams.area.name AS teamArea,
COUNT(Passes.Id) AS numPasses,
AVG(Passes.passDistance) AS avgPassDistance,
SAFE_DIVIDE(
SUM(IF(Passes.accuratePass, Passes.passDistance, 0)),
SUM(IF(Passes.accuratePass, 1, 0))
) AS avgAccuratePassDistance
FROM
Passes
LEFT JOIN
`soccer.teams` Teams ON
Passes.teamId = Teams.wyId
WHERE
Teams.type = 'club'
GROUP BY
teamId, team, teamArea
ORDER BY
avgPassDistance
El código de la cláusula WITH inicial filtra la tabla events para que solo se muestren los pases y agrega un campo accuratePass buscando "dentro" del campo tags.
La distancia del pase se calcula extrayendo las coordenadas (x, y) iniciales y finales con ORDINAL y aplicando los conceptos y la fórmula mencionados anteriormente. La sentencia SELECT final agrega los datos de pases al nivel del equipo (filtrando solo los equipos de clubes), lo que incluye la distancia promedio de todos los pases y solo los pases precisos.
- Haz clic en Ejecutar. Los resultados se muestran debajo de la ventana de consulta.
Nota: Hay algunas diferencias en la distancia promedio de los pases entre miles de pases de varios equipos, que van desde el promedio más bajo, menos de 18 metros (Napoli y PSG), hasta el más alto, más de 23 metros (Eibar).
La distancia promedio de pases precisos muestra una dispersión similar, aunque esos valores están ligeramente más comprimidos en los equipos.
Haz clic en Revisar mi progreso para verificar el objetivo
Verificar que la consulta se haya ejecutado
En esta sección, se usó BigQuery para determinar la cantidad de pases y la distancia promedio de los pases por equipo. Para lograrlo, usaste las capacidades de procesamiento de arrays para extraer valores repetidos en un solo campo y, luego, calculaste la distancia entre el punto de inicio y el punto final de cada pase.
En la siguiente sección, aprenderás a desanidar otros datos de coordenadas para generar información sobre las distancias de los tiros.
Tarea 4: Analiza la distancia de los tiros
En esta sección, crearás una nueva consulta para analizar la distancia de los tiros.
¿Qué impacto tiene la distancia de un tiro en la probabilidad de que se marque un gol?
Para responder esta pregunta, usa un proceso similar al de la sección anterior. Para los tiros, usa los valores (x, y) del campo positions en la tabla events.
Nota: Como en la consulta anterior, se usan las dimensiones aproximadas de una cancha de fútbol con las distancias de las coordenadas x y las coordenadas y como entradas para la fórmula de distancia.
- En el editor de consultas, haz clic en Crear consulta en SQL.
- Copia y pega la siguiente consulta en el editor de consultas:
WITH
Shots AS
(
SELECT
*,
/* 101 es una etiqueta conocida para "goals" de la tabla goals */
(101 IN UNNEST(tags.id)) AS isGoal,
/* Convierte las distancias basadas en coordenadas de 0 a 100 (x,y) en posiciones absolutas
usando las dimensiones de campo "average" de 105 x 68 antes de combinar el cálculo de distancia en 2D */
SQRT(
POW(
(100 - positions[ORDINAL(1)].x) * 105/100,
2) +
POW(
(50 - positions[ORDINAL(1)].y) * 68/100,
2)
) AS shotDistance
FROM
`soccer.events`
WHERE
/* Incluye tiros tanto de jugada abierta como tiros libres (incluidos los penaltis) */
eventName = 'Shot' OR
(eventName = 'Free Kick' AND subEventName IN ('Free kick shot', 'Penalty'))
)
SELECT
ROUND(shotDistance, 0) AS ShotDistRound0,
COUNT(*) AS numShots,
SUM(IF(isGoal, 1, 0)) AS numGoals,
AVG(IF(isGoal, 1, 0)) AS goalPct
FROM
Shots
WHERE
shotDistance <= 50
GROUP BY
ShotDistRound0
ORDER BY
ShotDistRound0
La cláusula WITH inicial filtra la tabla events para que solo se muestren los tiros, agrega un campo isGoal buscando "dentro" del campo tags y calcula la distancia del tiro de la misma manera que se resolvió la distancia de los pases en la sección anterior, pero usa el punto medio de la boca del arco (100, 50) como ubicación final.
La instrucción SELECT final agrega la cantidad de tiros, la cantidad de goles y el porcentaje de goles de tiros por distancia redondeada al metro más cercano.
- Haz clic en Ejecutar. Los resultados se muestran debajo de la ventana de consulta.
Como se esperaba, los tiros a corta distancia tienen porcentajes de gol mucho más altos, que van de casi un 70% de éxito a 2 o 3 metros hasta menos de un 25% a 8 metros, y disminuyen de manera constante hasta los 25 metros o más.
Crea una visualización de los resultados
Visualizar los datos puede facilitar la comprensión y la observación de las tendencias.
- Haz clic en GRÁFICO en la sección Resultados de la consulta.
- Selecciona Diagrama de dispersión en Tipo de gráfico.
- Usa las funciones de creación de diagramas de dispersión en Hojas de cálculo para crear un gráfico como el que se muestra a continuación:
Hay un ligero aumento en la tasa de éxito a 11-12 metros, pero eso probablemente se deba a que los penaltis (que, por diseño, tienen una probabilidad mucho más alta de convertirse en gol que la mayoría de los otros tiros) representan un gran porcentaje de los tiros desde esa distancia.
Haz clic en Revisar mi progreso para verificar el objetivo
Verificar que la consulta se haya ejecutado
En esta sección, se usó BigQuery para establecer una vista de la distancia de los tiros en comparación con la tasa de éxito de los goles. A partir de este análisis, se comprende mejor la probabilidad de que se marque un gol en función de la distancia del tiro.
En la siguiente sección, realizarás un análisis similar para observar el impacto del ángulo de tiro en el éxito del tiro.
Tarea 5: Analiza el ángulo de tiro
En esta sección, modificarás la consulta anterior para analizar el impacto de los ángulos en los tiros.
En este caso, el ángulo calculado es el que se forma entre la ubicación del tiro y la línea de gol, como se muestra a continuación (imagen de Ian Dragulet).
Los ángulos más grandes se producen cuando se está cerca del objetivo y en el centro, por lo que esto está algo correlacionado con el cálculo de la distancia realizado anteriormente. Los cálculos del ángulo de tiro implican el uso de funciones trigonométricas de BigQuery en los datos (x, y).
- En el editor de consultas, haz clic en Crear consulta en SQL.
- Agrega la siguiente consulta en el editor de consultas:
WITH
Shots AS
(
SELECT
*,
/* 101 es una etiqueta conocida para "goals" de la tabla goals */
(101 IN UNNEST(tags.id)) AS isGoal,
/* Convierte las coordenadas de 0 a 100 (x,y) en posiciones absolutas usando las dimensiones de campo "average"
de 105 x 68 antes de usarlas en varios cálculos de distancia;
LEAST se utilizó para limitar las ubicaciones de los tiros a valores en el campo (x, y) (es decir, no exactamente 100) */
LEAST(positions[ORDINAL(1)].x, 99.99999) * 105/100 AS shotXAbs,
LEAST(positions[ORDINAL(1)].y, 99.99999) * 68/100 AS shotYAbs
FROM
`soccer.events`
WHERE
/* Incluye tiros tanto de jugada abierta como tiros libres (incluidos los penaltis) */
eventName = 'Shot' OR
(eventName = 'Free Kick' AND subEventName IN ('Free kick shot', 'Penalty'))
),
ShotsWithAngle AS
(
SELECT
Shots.*,
/* Ley de cosenos para obtener el ángulo "abierto" desde la ubicación del tiro hasta el arco, dado
que la apertura del arco es de 7.32 m, colocada a mitad de altura en el extremo del campo de (105, 34) */
SAFE.ACOS(
SAFE_DIVIDE(
( /* Distancia al cuadrado entre el tiro y un poste, en metros */
(POW(105 - shotXAbs, 2) + POW(34 + (7.32/2) - shotYAbs, 2)) +
/* Distancia al cuadrado entre el disparo y el otro poste, en metros */
(POW(105 - shotXAbs, 2) + POW(34 - (7.32/2) - shotYAbs, 2)) -
/* Longitud al cuadrado de la apertura del arco, en metros */
POW(7.32, 2)
),
(2 *
/* Distancia entre el disparo y un poste, en metros */
SQRT(POW(105 - shotXAbs, 2) + POW(34 + 7.32/2 - shotYAbs, 2)) *
/* Distancia entre el disparo y el otro poste, en metros */
SQRT(POW(105 - shotXAbs, 2) + POW(34 - 7.32/2 - shotYAbs, 2))
)
)
/* Convierte radianes a grados */
) * 180 / ACOS(-1)
AS shotAngle
FROM
Shots
)
SELECT
ROUND(shotAngle, 0) AS ShotAngleRound0,
COUNT(*) AS numShots,
SUM(IF(isGoal, 1, 0)) AS numGoals,
AVG(IF(isGoal, 1, 0)) AS goalPct
FROM
ShotsWithAngle
GROUP BY
ShotAngleRound0
ORDER BY
ShotAngleRound0
Esta consulta es similar a la de la distancia del tiro que se muestra arriba, excepto por una cláusula WITH inicial para extraer las coordenadas del tiro (para simplificar cuando se necesitan varias veces en el cálculo del ángulo) y un cálculo trigonométrico más detallado con la Ley de los cosenos para obtener el ángulo del tiro en la segunda cláusula WITH.
La sentencia SELECT final agrega por ángulo de tiro redondeado al grado más cercano.
- Haz clic en Ejecutar. Los resultados se muestran debajo de la ventana de consulta.
El ángulo de tiro parece estar correlacionado por lo general de forma positiva con la tasa de éxito de los goles, ya que pasa de una tasa de éxito de un solo dígito en ángulos inferiores a 20° a tasas mucho más altas en ángulos más amplios (con tamaños de muestra relativamente más bajos más allá de los 60° aproximadamente).
Haz clic en Gráficos en la sección Resultados de la consulta y selecciona Dispersión para los tipos de gráficos a fin de visualizar la tendencia completa como se muestra a continuación.
El gráfico muestra que la relación entre el ángulo de tiro y la tasa de éxito es relativamente lineal hasta aproximadamente 100°. De nuevo, los ángulos más amplios solo son posibles en tiros cercanos al arco, por lo que parte de esto se correlaciona con el efecto de distancia que se muestra arriba. Hay un ligero aumento en la tasa de éxito a los 35° y 38°, ya que estos son los ángulos de tiro más comunes para los penaltis (de nuevo, tienen una probabilidad mucho más alta que la mayoría de los otros tiros) y representan un gran porcentaje de los tiros desde ese rango.
Haz clic en Revisar mi progreso para verificar el objetivo
Verificar que la consulta se haya ejecutado
En la siguiente sección, pon a prueba tu comprensión de lo que aprendiste en este lab.
Tarea 6: ¡Examen sorpresa!
Completa un breve cuestionario sobre los temas abordados en este lab para poner a prueba tus conocimientos sobre BigQuery.
¡Felicitaciones!
¡Estás en camino a comprender la ciencia de datos deportivos! Usaste BigQuery de forma correcta para analizar la distancia promedio de los pases, así como la relación entre la distancia y el ángulo de los tiros con el éxito. En las consultas, se usaron uniones cruzadas correlacionadas y las funciones trigonométricas y de array de BigQuery para buscar en los datos anidados y realizar los cálculos de distancia y ángulo necesarios para analizar los datos según lo solicitado.
Capacitación y certificación de Google Cloud
Recibe la formación que necesitas para aprovechar al máximo las tecnologías de Google Cloud. Nuestras clases incluyen habilidades técnicas y recomendaciones para ayudarte a avanzar rápidamente y a seguir aprendiendo. Para que puedas realizar nuestros cursos cuando más te convenga, ofrecemos distintos tipos de capacitación de nivel básico a avanzado: a pedido, presenciales y virtuales. Las certificaciones te ayudan a validar y demostrar tus habilidades y tu conocimiento técnico respecto a las tecnologías de Google Cloud.
Última actualización del manual: 25 de enero de 2024
Prueba más reciente del lab: 25 de enero de 2024
Copyright 2025 Google LLC. All rights reserved. Google y el logotipo de Google son marcas de Google LLC. Los demás nombres de productos y empresas pueden ser marcas de las respectivas empresas a las que estén asociados.