Módulo 2 · Datos

Lección 3 de 6

Visualización exploratoria

En esta páginaEl problema

El problema

Ya sabes que sensores-aula.csv contiene ocho observaciones sintéticas, cinco columnas y un faltante en humedad. Ahora necesitas responder otra pregunta: ¿cómo se distribuyen conjuntamente la temperatura y el CO₂, y dónde aparecen las tres zonas dentro de esas ocho filas?

Las columnas relevantes están completas:

muestra_idtemperatura_cco2_ppmzona
A-00122.4420norte
A-00223.1435norte
A-00321.8415sur
A-00425.0470centro
A-00524.6510centro
A-00619.9495sur
A-00720.5530sur
A-00826.2455norte

Cada fila aporta un par (temperatura_c, co2_ppm). Una gráfica de dispersión coloca la primera variable en el eje horizontal y la segunda en el vertical. Cada punto conserva una observación.

Una gráfica de líneas uniría las filas y sugeriría una secuencia. Este archivo no contiene tiempo ni otro orden continuo que justifique esa conexión. Una gráfica de barras podría comparar una sola medición por identificador, pero no mostraría con la misma claridad la relación entre las dos variables cuantitativas.

El resultado es una figura con una descripción y una tabla equivalente. Ni la figura ni la tabla, por sí solas, demuestran causalidad ni describen mediciones fuera de estas ocho filas.

Pregunta y canales visuales

Una figura asigna datos a canales visuales. Aquí la asignación responde directamente a la pregunta:

  • posición horizontal → temperatura en grados Celsius
  • posición vertical → CO₂ en partes por millón
  • color y forma del marcador → zona
  • un punto → una observación identificada en la tabla

Descarga sensores-aula.csv desde el panel de esta página y colócalo junto a tu cuaderno o archivo.

Pregunta. Sin dibujar, a partir de la tabla, ¿cuántos puntos tendrá la figura y qué rango cubrirá cada eje?

Primero comprueba que las columnas elegidas contienen los ocho pares esperados.

Python 3 · ejemplo reproducible
import pandas as pd

tabla = pd.read_csv("sensores-aula.csv")
vista = tabla[["muestra_id", "temperatura_c", "co2_ppm", "zona"]]

print(f"Filas: {len(vista)}")
print(
    f"Temperatura: {vista['temperatura_c'].min():.1f} a "
    f"{vista['temperatura_c'].max():.1f} °C"
)
print(f"CO2: {vista['co2_ppm'].min()} a {vista['co2_ppm'].max()} ppm")
print(f"Zonas: {sorted(vista['zona'].unique())}")
Salida esperada

La salida esperada está oculta.

Gráfica de dispersión

Matplotlib crea la figura y el área de trazado. seaborn recibe el DataFrame y asigna columnas a los canales declarados. hue="zona" cambia el color. style="zona" también cambia el marcador. Esa redundancia permite distinguir las zonas aunque el color no se perciba. ax=ax dibuja los puntos en el área creada por plt.subplots. ax.set(...) fija el título y las etiquetas de los ejes, y ax.legend(title=...) nombra la leyenda.

Pregunta. Antes de ejecutar, a partir de la tabla, ¿esperas que cada zona forme un grupo separado en el plano temperatura–CO₂?

Python 3 · ejemplo reproducible
import matplotlib.pyplot as plt
import seaborn as sns

fig, ax = plt.subplots(figsize=(8, 5))
sns.scatterplot(
    data=vista, x="temperatura_c", y="co2_ppm",
    hue="zona", style="zona", s=90, ax=ax,  # s: tamaño del marcador
)
ax.set(
    title="Temperatura y CO₂ en ocho observaciones sintéticas",
    xlabel="Temperatura (°C)",
    ylabel="CO₂ (ppm)",
)
ax.legend(title="Zona")

print(f"Título: {ax.get_title()}")
print(f"Ejes: {ax.get_xlabel()} | {ax.get_ylabel()}")
plt.show()
Salida esperada

La salida esperada está oculta.

Verificación con los datos

Usa la gráfica para localizar valores extremos. Usa la consulta para obtener sus identificadores y valores exactos. idxmax() devuelve la etiqueta de la fila donde aparece el máximo de una columna.

Pregunta. A partir de la tabla inicial, anticipa qué identificador y valor devolverá cada máximo.

Python 3 · ejemplo reproducible
co2_max = vista.loc[vista["co2_ppm"].idxmax()]
temperatura_max = vista.loc[vista["temperatura_c"].idxmax()]

print(
    f"CO2 máximo: {co2_max['muestra_id']}, "
    f"{co2_max['co2_ppm']} ppm, zona {co2_max['zona']}"
)
print(
    f"Temperatura máxima: {temperatura_max['muestra_id']}, "
    f"{temperatura_max['temperatura_c']:.1f} °C, "
    f"zona {temperatura_max['zona']}"
)
Salida esperada

La salida esperada está oculta.

Para dejar una evidencia que pueda recorrerse sin ver la gráfica, ordenamos los pares por CO₂. sort_values con una lista de columnas ordena primero por CO₂ y desempata por muestra_id; ascending=[False, True] fija el sentido de cada una.

Pregunta. Si ordenas de mayor a menor, ¿qué tres identificadores deberían aparecer primero?

Python 3 · ejemplo reproducible
evidencia = vista.sort_values(
    ["co2_ppm", "muestra_id"],
    ascending=[False, True],
)

print(evidencia.head(3).to_string(index=False))
Salida esperada

La salida esperada está oculta.

Descripción de los hallazgos

Una descripción útil responde qué se representó, cuántas observaciones aparecen, qué hallazgos se verificaron y qué límite tiene la lectura. Para este caso:

La dispersión compara temperatura (19.9–26.2 °C) y CO₂ (415–530 ppm) en ocho observaciones sintéticas. A-007 tiene el CO₂ máximo y A-008 la temperatura máxima. En el plano de esta figura, las zonas se mezclan y cada una contiene solo dos o tres filas. La figura describe estas observaciones. No demuestra causalidad ni permite generalizar a otras mediciones.

Evita frases como “la temperatura reduce el CO₂” o “la zona sur siempre tiene más CO₂”. La primera inventa una causa. La segunda contradice A-003, una observación de zona sur con el CO₂ mínimo.

Mesa de prueba

Una figura y su evidencia equivalente

Localiza A-007 y A-008. Después, compara la gráfica con la descripción y la tabla. El color repite información que también aparece como marcador y texto.

Temperatura y CO₂ en ocho observaciones sintéticasDiagrama de dispersión de temperatura y CO₂ con ocho observaciones. La descripción textual siguiente la resume y la tabla contiene todos los valores.Temperatura y CO₂ en ocho observaciones sintéticas40045050055020222426A-007A-008Temperatura (°C)CO₂ (ppm)
  • norte · círculo
  • centro · cuadrado
  • sur · triángulo

Descripción textual

La figura contiene ocho observaciones. La temperatura va de 19.9 a 26.2 °C y el CO₂ de 415 a 530 ppm. A-007 registra el CO₂ máximo; A-008, la temperatura máxima. Los máximos pertenecen a filas distintas. En el plano temperatura–CO₂, las zonas se mezclan: A-003 (sur) queda junto a A-001 y A-002 (norte). Con solo dos o tres observaciones por zona, no se puede establecer un patrón general.

Los mismos ocho pares, con identificador y zona
MuestraTemperatura (°C)CO₂ (ppm)Zona
A-00122.4420norte
A-00223.1435norte
A-00321.8415sur
A-00425.0470centro
A-00524.6510centro
A-00619.9495sur
A-00720.5530sur
A-00826.2455norte

En otra tabla sintética, C-01 registra 18 °C y 420 ppm; C-02 registra 24 °C y 510 ppm. La dispersión coloca C-02 arriba y a la derecha de C-01. ¿Qué descripción queda acotada a esa evidencia?

Puedes responder o seguir leyendo.

Selecciona una respuesta

Práctica

Traza guiada

Sin ejecutar, describe dónde esperarías estos tres puntos:

  • A-005: temperatura 24.6 °C y CO₂ 510 ppm
  • A-003: temperatura 21.8 °C y CO₂ 415 ppm
  • A-006: temperatura 19.9 °C y CO₂ 495 ppm

Después localízalos en la figura y confirma sus valores en la tabla. Si tu predicción no coincide, revisa primero qué variable ocupa cada eje.

Pregunta alternativa

Pregunta ahora cómo se relacionan temperatura_c y humedad_pct. Antes de graficar, cuenta cuántas filas tienen ambas columnas disponibles.

Usa temperatura en x, humedad en y y conserva color más marcador para zona. La descripción debe indicar cuántas observaciones tienen ambas mediciones, no el total del archivo.

Evidencia para otra tabla

Elige una tabla local pequeña con dos variables cuantitativas y un identificador. Escribe primero una pregunta que necesite comparar pares. Conserva:

  1. la pregunta y la razón para elegir dispersión
  2. una figura con título, ejes y unidades
  3. una tabla o consulta con identificadores y valores exactos
  4. dos observaciones verificables
  5. una limitación que impida generalizar más allá de la tabla

Reto opcional

Ordena vista por temperatura y comprueba si los valores de CO₂ aumentan en el mismo orden. Explica por qué encontrar ascensos y descensos en ocho pares no basta para declarar ausencia o presencia de una relación poblacional. No calcules un coeficiente ni añadas una recta de tendencia.

Errores que revisar

  • Si aparece una línea uniendo puntos, comprueba que usaste scatterplot y no una gráfica de líneas.
  • Si la figura tiene menos puntos de los previstos, compara el conteo con faltantes y filtros antes de interpretar.
  • Si las zonas solo se distinguen por color, añade style="zona" y conserva sus nombres en la leyenda y la tabla.
  • Si el título dice “efecto” o “causa”, vuelve a la pregunta: este ejercicio solo inspecciona pares observados.
  • Si la tabla y la figura parecen contradecirse, revisa qué columna asignaste a cada eje y conserva muestra_id durante la comprobación.

Cierre

Redacta dos hallazgos y una limitación. Cada hallazgo debe poder comprobarse en la tabla y la limitación debe restringir la lectura a las filas observadas.

Lista de comprobación

  • ¿La pregunta aparece antes que la gráfica?
  • ¿Cada eje nombra variable y unidad?
  • ¿La categoría tiene una alternativa al color?
  • ¿La evidencia textual conserva identificadores y valores?
  • ¿La descripción evita causas y generalizaciones no verificadas?

Documentación oficial

Cargando progreso…