Un año con 367 días
Limpiar datos es encontrar los errores de una tabla y corregirlos antes de sacar ninguna cuenta. Si no lo haces, las medias y los gráficos mienten sin avisar.
Una tienda de alquiler de bicis exporta sus datos de un año. Salen 367 filas, y un año tiene 365 días. Algo ha entrado dos veces.
Al terminar esta lección
Nota
Puedo encontrar y corregir los datos malos de una tabla.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Dato ausente | una celda que debería tener valor y está vacía | |
| Duplicado | una fila que aparece dos veces | |
| Valor imposible | un dato que no puede ser verdad | 99.9 grados |
| Limpiar | corregir o quitar los datos malos | |
| Mediana | el valor que queda en medio al ordenar los datos | |
| CSV | un archivo de texto con una fila por línea |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Cinco fallos típicos de los datos
Los datos reales llegan sucios. Casi siempre fallan de cinco maneras, y cada una tiene una prueba.
Hoy usarás un archivo del laboratorio con los alquileres de bicis de un año. Una copia suya tiene los fallos puestos a propósito, siempre en las mismas filas.
Ejemplo resuelto: cada fallo y su prueba
| Fallo | Cómo se ve | La prueba |
|---|---|---|
| Dato ausente | una celda vacía | contar las celdas vacías de la columna |
| Tipo equivocado | texto donde esperas números | mirar el tipo de cada columna |
| Duplicado | más filas que días | contar las filas repetidas |
| Valor imposible | un máximo que no puede darse | mirar el valor más alto |
| Palabras distintas | Sunny y sunny contadas aparte | contar cuántas veces sale cada palabra |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Crear la copia sucia y revisarla
docker exec jupyter python3 steps/messy.pySe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Arregla palabras y números uno a uno
Una palabra con espacios o mayúsculas distintas se arregla en dos pasos. strip() quita los espacios de los lados. lower() pasa todo a minúsculas.
Un número escrito como texto se comprueba con isdigit(). Si el texto son solo cifras, lo conviertes con int(). Si no, no es un recuento válido.
Pruébalo: palabras con espacios
# Tres maneras de escribir el mismo tiempo.
words = ["rainy", " Rainy", "RAINY "]
for word in words:
print(repr(word), "pasa a", repr(word.strip().lower()))
# Añade "SUNNY" a la lista y vuelve a ejecutarlo.
Pruébalo: números escritos como texto
# ¿Es un recuento de alquileres un número entero?
for text in ["290", "-12", "unknown"]:
print(text, text.isdigit())
# Añade "45" a la lista. ¿Qué dice isdigit?
Quitar o rellenar un dato ausente
Para un dato ausente tienes dos caminos. Quitas la fila, si el dato era imprescindible. O rellenas la celda con un valor razonable, como la mediana de la columna.
Un valor imposible, como 99.9 grados, se trata igual: primero lo marcas como ausente y luego decides.
Un error frecuente
Advertencia
Mucha gente cree que un dato ausente se arregla escribiendo 0. Pero 0 grados es una temperatura real y baja la media. Rellena con la mediana, o quita la fila, y apunta siempre lo que hiciste.
Ejecutar los pasos de limpieza
docker exec jupyter python3 steps/clean.pySe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Ejemplo resuelto: las filas tras cada paso
| Paso | Filas que quedan | Qué se hizo |
|---|---|---|
| Al empezar | 367 | La copia sucia, tal como llegó |
| Quitar las filas repetidas | 365 | Se fue una fila de más por cada duplicado |
| Quitar los recuentos que no son números | 363 | Se fueron dos filas: un -5 y un unknown |
| Arreglar las palabras del tiempo | 363 | No cambia el número de filas, solo el texto |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Apunta cada cambio que haces
Limpiar cambia los datos, y alguien puede preguntarte por qué. Apunta cada paso: qué fallo era, cuántas filas tocaste y qué hiciste.
Una línea por paso basta. Así otra persona puede repetir tu limpieza y llegar al mismo resultado.
Para ir más lejos
La tabla limpia tiene 363 filas, no 365. Explica en dos frases qué puede salir mal si alguien calcula el total del año con ellas sin saberlo.
Después apunta en una línea cada paso que hizo clean.py, como si se lo dejaras escrito a un compañero.