# introduccion-a-la-ciencia-de-datos-con-python
Introducción a la Ciencia de Datos con Python
Volver a la portada del cursoTécnicas avanzadas de visualización
Sección 3 · Visualización de Datos
Técnicas avanzadas de visualización
Una dispersión del PIB per cápita contra la esperanza de vida en escala logarítmica ya muestra la relación principal: en 2007 la correlación sube de 0.679 a 0.809 al tomar el logaritmo del PIB. Pero esa gráfica tiene solo dos variables. Gapminder tiene seis, y las buenas gráficas cuentan más sin volverse ilegibles. Esta lectura cubre cuatro técnicas: paneles pequeños, codificar más variables, seaborn para gráficas estadísticas y anotaciones. El notebook visualizacion-gapminder las ejecuta todas.
Paneles pequeños (small multiples)
Meter 142 líneas en un solo eje produce un manchón. La alternativa es repetir la misma gráfica por grupo, con los mismos ejes, para comparar a simple vista. plt.subplots crea la cuadrícula y sharey=True fuerza la misma escala vertical en todos los paneles:
import plotly.express as px
import matplotlib.pyplot as plt
gap = px.data.gapminder().drop(columns=["iso_alpha", "iso_num"])
continentes = ["Africa", "Americas", "Asia", "Europe", "Oceania"]
fig, axes = plt.subplots(1, 5, figsize=(15, 3.5), sharey=True)
for ax, cont in zip(axes, continentes):
d = gap[gap["continent"] == cont]
for _, pais in d.groupby("country"):
ax.plot(pais["year"], pais["lifeExp"], color="0.8", lw=0.8)
ax.plot(d.groupby("year")["lifeExp"].mean(), color="C0", lw=2.5)
ax.set_title(cont)
axes[0].set_ylabel("Esperanza de vida (años)")
fig.tight_layout()
Cada país va en gris y la media del continente en azul. El patrón salta: la media de Africa se estanca entre 1987 y 2002 (53.3, 53.6, 53.6, 53.3) mientras la de Europe sigue subiendo, y en el panel de Africa aparece una línea que se desploma en 1992: Rwanda. Sin sharey, cada panel tendría su propia escala y la comparación sería engañosa.
Codificar más variables: la gráfica de burbujas
Hans Rosling, profesor de salud internacional del Instituto Karolinska y cofundador de la Fundación Gapminder, popularizó en su charla TED de 2006 la gráfica de burbujas: PIB en el eje x, vida en el eje y, color por continente y tamaño por población. Con seaborn son pocas líneas:
import seaborn as sns
g07 = gap[gap["year"] == 2007]
fig, ax = plt.subplots(figsize=(9, 5.5))
sns.scatterplot(data=g07, x="gdpPercap", y="lifeExp", hue="continent",
size="pop", sizes=(20, 1500), alpha=0.7, ax=ax)
ax.set_xscale("log")
ax.set_xlabel("PIB per cápita (US$, escala log)")
ax.set_ylabel("Esperanza de vida (años)")
Cuatro variables en una gráfica: las dos burbujas grandes son China e India. La transparencia (alpha) evita que las burbujas grandes tapen a las pequeñas. Se percibe mejor la posición que el color, y el color mejor que el área: pon en los ejes las variables de la pregunta principal.
seaborn para gráficas estadísticas
seaborn trabaja directo con DataFrames en formato largo. Tres funciones cubren mucho:
sns.boxplot(data=g07, x="continent", y="lifeExp")resume distribuciones. En 2007 la mediana de Africa es 52.9, pero su rango va de 39.6 a 76.4; Europe va de 71.8 a 81.8. El boxplot muestra esa diferencia de dispersión que una barra con la media oculta.sns.heatmap(tabla)pinta la tabla continente × año depivot_table: un color por celda, útil cuando hay muchas columnas.sns.relplot(..., col="year")crea paneles pequeños de dispersiones sin escribir el bucle, por ejemplo para 1952, 1977 y 2007.
Anotar lo importante
Una gráfica explicativa dirige la mirada. ax.annotate pone texto con flecha sobre un punto:
ruanda = gap[gap["country"] == "Rwanda"]
fig, ax = plt.subplots(figsize=(8, 4))
ax.plot(ruanda["year"], ruanda["lifeExp"], marker="o")
ax.annotate("1992: 23.6 años", xy=(1992, 23.6), xytext=(1965, 28),
arrowprops=dict(arrowstyle="->"))
ax.set_ylim(0, 50)
Una anotación dice algo que el lector no vería solo. Si anotas diez puntos, ninguno destaca.
Elegir la gráfica según la pregunta
- ¿Cómo cambia algo en el tiempo? Línea.
- ¿Cómo se distribuye una variable? Histograma o boxplot.
- ¿Cómo se relacionan dos numéricas? Dispersión, con escala log si una está sesgada.
- ¿Cómo se comparan grupos? Barras con la mediana o boxplots, ordenados por valor.
Color y ejes honestos
Usa paletas que se distingan con daltonismo (viridis, cividis o la paleta colorblind de seaborn) y no confíes solo en rojo contra verde. En barras, el eje y empieza en cero: cortar el eje convierte una diferencia de 2 años en una que parece del doble. En líneas se puede recortar, pero dilo en la etiqueta. Y si usas escala log, escríbelo en el eje.
Interactividad con plotly
Para explorar, px.scatter con animation_frame="year", size="pop", color="continent", hover_name="country" y log_x=True reproduce la animación de Rosling con 12 cuadros, uno por año, y muestra el país al pasar el cursor. Es ideal para un notebook o una página web; para un informe en PDF, matplotlib o seaborn.
Trampas comunes
- Paneles con escalas distintas sin avisar: olvidar
sharey. - Codificar demasiado: color, tamaño, forma y transparencia a la vez no se leen.
- Escala lineal con datos sesgados: el PIB per cápita de 2007 tiene media 11 680 y mediana 6124; en escala lineal la mitad de los países queda apretada a la izquierda.
- Ejes sin unidad: «lifeExp» no es una etiqueta; «Esperanza de vida (años)» sí.
Cierre
Antes de graficar, escribe la frase que la gráfica debe demostrar. Si al final la gráfica no la demuestra a primera vista, cambia el tipo, quita variables o anota el punto clave.