lección 2
Montar el repo y mirar los datos
Cargar las estadísticas de temporada y los valores de mercado, y dar un primer vistazo: cuántas filas, qué está sucio y qué es exactamente el target.
⏱ 50 min
## Lunes, 11:00. El cajón de los extractos
Gorka te deja en la carpeta compartida dos ficheros CSV, los extractos que el proveedor de estadísticas y la base de valoraciones exportan cada temporada. No hay diccionario de datos: lo que es cada columna se pregunta por el chat. El primer trabajo de un data scientist no es modelar, es entender qué tiene delante, y nadie se salta ese paso sin pagarlo luego. Así que hoy montas el esqueleto del repositorio, cargas los dos ficheros con Pandas y les haces las preguntas de siempre: cuántas filas, qué columnas, de qué tipo, cuántos nulos, qué pinta tienen las primeras filas. Un vistazo honesto antes de tocar nada.
1scouting-fichaje/2├── README.md ← lo escribirás el viernes3├── requirements.txt ← pandas, numpy, scikit-learn, matplotlib, duckdb4├── datos/ ← stats_temporada.csv, valores_mercado.csv5├── sql/ ← consultas de contexto6└── src/7 ├── 01_explorar.py ← HOY: carga y primer vistazo8 ├── 02_features.py ← martes9 ├── 03_modelar.py ← miércoles10 ├── 04_validar.py ← jueves11 └── 05_informe.py ← viernes
El esqueleto del proyecto que vas a ir rellenando toda la semana. Cada día escribe un fichero de src/. Al final, esto es un repo que puedes abrir en un editor y entender de un vistazo, y subir a GitHub como pieza de portfolio.
Fíjate en una cosa de la estructura antes de seguir: cada script lleva un número delante. No es decoración. Marca el orden en que se ejecuta el proyecto fuera del navegador, donde el sistema de ficheros sí persiste: primero exploras, luego construyes las features, luego modelas, luego validas, luego informas. Dentro de la plataforma cada ejercicio corre aislado y parte de los CSV de datos/, pero el código que escribes en cada uno es un trozo del script numerado que le toca. Al juntarlos, forman un programa que corre de principio a fin.
## Qué es una fila, y qué es el target
Lo más importante que tienes que entender hoy no es un comando de Pandas, es qué representa una fila. En stats_temporada.csv, una fila es un jugador en una temporada: el resumen de lo que hizo esa campaña (goles, asistencias, minutos, edad, posición…). En valores_mercado.csv, una fila es el valor de mercado de ese jugador en esa temporada, con dos fechas: el valor al cierre de la temporada y el valor un año después. Esas dos fechas son la clave del encargo.
El valor de hace un año —el de cierre de la temporada— es el presente: lo que vale el jugador hoy. El valor de un año después es el futuro: lo que queremos estimar. Ese es el target. Y el valor presente, lejos de ser trampa, es la mejor pista que tienes para estimar el futuro: lo que vale hoy un jugador es casi siempre el mejor punto de partida para lo que valdrá mañana. Que quede clarísimo, porque toda la semana se apoya en esta distinción: valor_cierre_temporada es feature (presente), valor_un_ano_despues es target (futuro). Las dos tablas se cruzan por jugador y temporada, nunca por el nombre, porque los nombres vienen escritos de mil maneras.
Al cargar los ficheros vas a tropezar con la suciedad enseguida, y conviene que la veas hoy aunque no la arregles hasta mañana. La posición aparece escrita de veinte formas (DEL, delantero, FW, Delantero…). El valor de mercado viene como texto con «M», «K» y «€» pegados. Hay edades de 2 y de 99 años, alturas imposibles, jugadores con cero minutos, y jugadores que salen dos veces porque ficharon en enero y aparecen con dos equipos en la misma temporada. Hoy solo tomas nota de qué hay; mañana decides qué hacer con cada cosa.
No cruces las dos tablas por el nombre del jugador. Los nombres vienen con acentos, mayúsculas y abreviaturas distintas en cada fichero ("J. García" en uno, "Javier Garcia" en otro), así que un cruce por nombre perdería filas en silencio. La clave real es (jugador_id, temporada). Cruzar por la columna equivocada es un error que no da error: simplemente te quedas con menos jugadores de los que crees y nunca te enteras.
Consejo de senior: el primer vistazo a un dataset nuevo son siempre las mismas cuatro preguntas. ¿Cuántas filas y columnas tengo (.shape)? ¿De qué tipo es cada columna (.info())? ¿Qué rango tienen los números y hay valores imposibles (.describe())? ¿Cuántos nulos hay por columna (.isnull().sum())? Hazlas antes de nada, siempre, en todos los proyectos. Te ahorran modelar sobre basura durante tres días sin saberlo.
## Amaia te avisa de las marranadas
Amaia Sologuren · 13:41
«Jaja, bienvenido a los extractos del proveedor. El valor viene como "12,5 M €" o "800 K", la posición cada uno la escribe como le da (DEL, delantero, FW), hay edades y alturas imposibles de algún error de carga, y ojo: hay jugadores dos veces porque ficharon en enero, así que aparecen con dos equipos en la misma temporada. Mañana lo limpias; hoy solo entérate de qué hay. Y oye, consejo gratis: cuando montes el modelo y te dé un acierto de escándalo, antes de celebrar nada, pregúntate si no se habrá aprendido a los jugadores de memoria en vez de aprender fútbol.»
Guárdate la última frase de Amaia. Hoy suena a superstición de compañera veterana; el jueves vas a ver en una sola cifra que tenía toda la razón. De momento, acabemos de entender los datos.
## comentarios
Reporta erratas, ayuda a otros o comparte tu opinión. Sé constructivo.
Inicia sesión para comentar y responder.
cargando comentarios...
Regístrate para guardar tu progreso.