¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Leer un resultado con honestidad

Después de esta lección: Puedo decir hasta dónde se puede creer el resultado de una muestra.

Lección de 60 min5 comandosLaboratorio JupyterLab de ciencia de datos: pandas, Matplotlib y scikit-learn en el navegador

Diez días de invierno

Un empleado nuevo cuenta los alquileres de los diez primeros días del año y dice: «Alquilamos unas 197 bicis al día». El dueño asiente.

El año entero da unas 270. El número era correcto y la frase era falsa. Un resultado vale lo que valen la muestra, la dispersión y el grupo que lo respaldan.

Al final de esta lección

Nota

Puedo decir hasta dónde se puede creer el resultado de una muestra.

Palabras clave

PalabraQué significa
Muestraunas pocas filas tomadas de una tabla más grande
Representativauna muestra que se parece a la tabla entera
Dispersióncuánto se separan los valores unos de otros
Valor atípicoun valor lejos del resto, verdadero o falso
Medianael valor del medio cuando los valores están ordenados
Tamaño del grupocuántas filas hay detrás de una media o un recuento

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Una muestra debe parecerse al todo

Muchas veces no puedes mirarlo todo, así que tomas una muestra. Una buena muestra es representativa: se parece a la tabla entera en lo que importa.

Las diez primeras filas de una tabla rara vez son representativas. Vienen todas del mismo lugar o del mismo momento.

Comparar tres maneras de elegir días

Comando
docker exec jupyter python3 -c "import pandas as pd; h=pd.read_csv('hires.csv'); print(\"media del año:\", round(h['hires'].mean(),1)); print(\"media de los 10 primeros días:\", round(h['hires'].head(10).mean(),1)); print(\"media de un día de cada 36:\", round(h['hires'].iloc[::36].mean(),1), len(h['hires'].iloc[::36]))"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Una muestra al azar también se mueve

Tomar filas al azar evita un patrón. Pero una muestra pequeña al azar da una media distinta cada vez, y una más grande se mueve menos.

En pandas, sample(10, random_state=1) toma diez días. El random_state es una semilla: el mismo número da los mismos días.

Seis muestras de 10 y de 100 días

Comando
docker exec jupyter python3 -c "import pandas as pd; h=pd.read_csv('hires.csv'); print([round(h['hires'].sample(10, random_state=s).mean(),1) for s in range(1,7)]); print([round(h['hires'].sample(100, random_state=s).mean(),1) for s in range(1,7)])"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un valor grande y qué hacer con él

Un valor atípico está lejos del resto. Tira de la media hacia él, pero apenas mueve la mediana.

No lo borres porque sea grande. Pregunta si puede ser verdad. Un error, como 5000 alquileres en una tienda de 30 bicis, se quita. Un día de mucho movimiento real se queda y se menciona.

Un día enorme, calculado en Python

Código: python
# Siete días de alquileres en una estación, y la misma lista con un día enorme.
days = [204, 173, 327, 173, 240, 198, 220]
def middle(values):
    in_order = sorted(values)
    half = len(in_order) // 2
    if len(in_order) % 2 == 1:
        return in_order[half]
    return (in_order[half - 1] + in_order[half]) / 2

print("media:", round(sum(days) / len(days), 1), "mediana:", middle(days))
days.append(5000)
print("media:", round(sum(days) / len(days), 1), "mediana:", middle(days))
# ¿Cuál de los dos números se movió más?

Poner un 5000 inventado en el primer día

Comando
docker exec jupyter python3 -c "import pandas as pd; h=pd.read_csv('hires.csv'); t=h.copy(); t.loc[t.index[0],'hires']=5000; print(round(h['hires'].mean(),1), h['hires'].median(), round(t['hires'].mean(),1), t['hires'].median())"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Mirar los tres días más grandes

Comando
docker exec jupyter python3 -c "import pandas as pd; h=pd.read_csv('hires.csv'); print(h.nlargest(3,'hires')[['date','weather','hires']].to_string(index=False))"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un error frecuente

Advertencia

Mucha gente cree que la mediana es siempre mejor que la media. Es más estable ante un valor atípico, pero oculta lo grande que es. Da las dos, y di cuál fue el valor más grande y por qué lo conservaste.

Mira el tamaño de cada grupo

Una media de 8 días y una de 200 días no son pruebas iguales. Muestra siempre cuántas filas hay en cada grupo junto a su media.

Y cuida el verbo. Los días de lluvia van con menos alquileres en esta tabla. Mostrar que la lluvia los causa pide más que una media.

Días de lluvia contra días de sol

Comando
docker exec jupyter python3 -c "import pandas as pd; h=pd.read_csv('hires.csv'); r=h[h['weather']=='rainy']['hires']; s=h[h['weather']=='sunny']['hires']; print(len(r),len(s),round(r.mean(),1),round(s.mean(),1)); print(round(r.std(),1), round(s.std(),1))"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Ejemplo resuelto: leer los números

Lo que vesLo que puedes decirLo que no puedes decir
120 días de lluvia, media 227.6Los días de lluvia tuvieron menos alquileres aquíQue la lluvia es la única razón
131 días de sol, media 312.2Los días de sol tuvieron más movimiento aquíQue será igual el año que viene
Dispersión de 80.3 y 68.2Un día suelto varía muchoQue un día cualquiera se parecerá a su media

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Para ir más lejos: una regla justa

En tu cuaderno, halla los percentiles 25 y 75 de hires con quantile. Llama a su diferencia el RIC (rango intercuartílico).

Cuenta los días por debajo del percentil 25 menos 1,5 RIC o por encima del 75 más 1,5 RIC. ¿Qué días son y quitarías alguno?

Sobre este laboratorio y su código: Laboratorio JupyterLab de ciencia de datos: pandas, Matplotlib y scikit-learn en el navegador

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.