10 · Caso práctico: EDA del Google Play Store limpio
Con datos numéricos limpios en mano, agrega por categoría, compara calificaciones de apps gratuitas vs de pago con una prueba t y dispersa instalaciones contra calificaciones para revelar los patrones dominantes.
Ahora que los datos están limpios, las preguntas reales comienzan: ¿qué categorías tienen más apps, cuáles obtienen más reseñas, las apps de pago califican más alto que las gratuitas?
Sin esto:
Sin la etapa de EDA sobre datos limpios, saltarías directamente al modelado y perderías los patrones dominantes que están a simple vista.
La lección 9 limpió los datos de Google Play Store — convirtiendo columnas de strings en numéricas y eliminando duplicados. Esta lección retoma desde ese estado limpio y hace las preguntas analíticas que la limpieza desbloqueó.
El patrón central de EDA en datos tabulares es:
"Para cada cohorte X, resume la métrica Y."
Esa única oración cubre la mayor parte de lo que hace un analista de datos día a día:
- Para cada Categoría, ¿cuál es la Calificación promedio?
- Para cada Tipo (Gratuita/De pago), ¿cuál es la distribución de Calificación?
- Para cada nivel de instalaciones, ¿aumenta la Calificación?
Este patrón se mapea directamente a pandas groupby(X)[Y].agg() — que también es la estructura de SQL's GROUP BY X. Si puedes escribir un groupby, puedes responder el 80% de las preguntas de analítica de producto.
También incorporaremos una prueba t de Welch para responder si la diferencia de calificación entre apps gratuitas y de pago es estadísticamente real o simplemente ruido — conectando este EDA con los fundamentos de pruebas de hipótesis del track de Estadística.
Python (in browser)
El DataFrame limpio: todas las columnas son numéricas, los dtypes son correctos, e intencionalmente dejamos 5 calificaciones faltantes para practicar `.dropna()` en los análisis de groupby. Este es el estado inicial para todo el EDA en esta lección.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
`df['Category'].value_counts()` cuenta las ocurrencias por categoría. El gráfico de barras revela el dominio por categoría — un hallazgo que moldea directamente la estrategia del modelo: más datos en una categoría significa que el modelo generalizará mejor para esa cohorte.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
`df.groupby('Category')['Rating'].mean().sort_values()` — el patrón groupby en una línea. La línea discontinua de la media general convierte el gráfico de barras en una comparación 'por encima/por debajo del promedio', que es legible de forma instantánea.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
`scipy.stats.ttest_ind(free, paid, equal_var=False)` ejecuta la prueba t de Welch — la variante que NO asume varianzas iguales, que es más segura cuando los tamaños de grupo difieren. El p-value responde: '¿es la diferencia de medias mayor que el ruido de muestreo?'
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
Scatter de `log10(installs)` vs `Rating` coloreado por `Type` — tres dimensiones en un gráfico. `np.log10()` comprime el rango de instalaciones de [10K, 1M] a [4, 6], haciendo el scatter legible. La correlación de Pearson cuantifica la fuerza de la relación.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
El puente EDA-modelado: cada gráfico sorprendente genera una hipótesis; cada gráfico confirmatorio genera una variable. Los patrones groupby se convierten en términos de interacción. La X limpia y diseñada es lo que recibe model.fit().
Ves que las apps de pago tienen calificación media 4.2 y las gratuitas 4.0 (n=20 cada una, std≈0.5). ¿Es esa diferencia probablemente 'significativa'?
- El patrón universal de EDA es `df.groupby(X)[Y].agg()` — 'para cada cohorte X, resume la métrica Y'. Este único patrón cubre el 80% de las preguntas de analítica de producto y se mapea directamente a SQL `GROUP BY`.
- Incorporar una prueba estadística (t de Welch, χ²) durante el EDA responde '¿es real esta diferencia o es ruido?' antes de comprometerte con el modelado — ahorra semanas de construir un modelo alrededor de una señal espuria.
- Cada gráfico de EDA genera una hipótesis (algo sorprendente a probar) o una variable (algo confirmatorio a diseñar). Escribe ambas listas antes de abrir un notebook de modelado.
- Significancia estadística ≠ significancia práctica. Una diferencia de 0.2 estrellas entre apps Gratuitas y De Pago puede ser real (p < 0.05) pero irrelevante para un motor de recomendación que solo muestra apps 4.5+.
Cada equipo de analítica de producto ejecuta exactamente este proceso: agregar por cohorte, graficar, prueba estadística, generar hipótesis. El modelado de ML se asienta ENCIMA de esta capa, no en lugar de ella.
Si lo quitas: Enviarías un modelo de churn que aprende 'los usuarios recientes se van menos' — una tautología que tu EDA habría detectado en 30 segundos.