Visualización de datos#

¡Bienvenido/a al Notebook 4: Visualización de Datos! En este cuaderno aprenderás a crear gráficos en Python utilizando dos librerías poderosas: Matplotlib y Seaborn. La visualización de datos es fundamental para analizar y comprender patrones en cualquier tipo de datos, ya sea en ciencia, tecnología o negocios.

#1. Introducción a Matplotlib Matplotlib es una librería fundamental en Python que te permite crear gráficos y personalizarlos para mostrar información de forma visual. Esta es la herramienta más básica para crear gráficos y se utiliza en todo tipo de proyectos científicos, tecnológicos y comerciales.

Cómo usar Matplotlib

Primero, importamos la librería. Importar una librería en Python significa que estamos trayendo funciones y herramientas que otros programadores ya han creado para facilitarnos el trabajo. En este caso, vamos a importar pyplot, que es la parte de Matplotlib que nos permite crear gráficos fácilmente.

import matplotlib.pyplot as plt

Después, podemos crear un gráfico sencillo usando la función plot() y luego mostramos el gráfico usando show().

x = [1, 2, 3, 4, 5]  # Estos son los datos en el eje X
y = [1, 4, 9, 16, 25]  # Estos son los datos en el eje Y

# Creamos el gráfico
plt.plot(x, y)

# Añadimos etiquetas y un título
plt.xlabel('Valores de X')
plt.ylabel('Valores de Y')
plt.title('Gráfico de líneas: Relación entre X e Y')

# Mostramos el gráfico
plt.show()

Explicación paso a paso:

plot(x, y): Esta función crea un gráfico de líneas, uniendo los puntos en los ejes X e Y.

xlabel() y ylabel(): Estas funciones añaden etiquetas a los ejes X e Y para que sepas qué representan.

title(): Coloca un título en la parte superior del gráfico.

show(): Esta función muestra el gráfico en pantalla. Sin ella, el gráfico no aparecería.

Nota: Los gráficos de líneas nos van a ayudar cuando queramos visualizar series temporales, es decir donde nuestra variable independiente es el tiempo.

#2. Introducción a Seaborn Seaborn es una librería de Python que se basa en Matplotlib, pero tiene una sintaxis más simple y genera gráficos más estéticos y detallados automáticamente. Lo usarás mucho para crear gráficos de alta calidad y entender visualmente patrones en datos complejos.

import seaborn as sns

Creando un Histograma con Seaborn

Un histograma es un gráfico que te muestra cómo se distribuyen los valores de una variable. Por ejemplo, puedes usar un histograma para ver cómo se distribuye el gasto promedio de los clientes en una tienda. Vamos a crear uno usando Seaborn.

# Lista de gastos de clientes en una tienda
gasto = [300, 400, 500, 600, 700, 450, 480, 550, 350, 700]

# Creamos el histograma
sns.histplot(gasto, kde=True)

# Añadimos un título
plt.title('Distribución del Gasto Promedio')

# Mostramos el gráfico
plt.show()

Explicación:

histplot(): Esta función de Seaborn crea un histograma. Toma como argumento los datos que quieres visualizar, en este caso la lista de gastos.

kde=True: Activa una curva de densidad que te ayuda a visualizar mejor la distribución de los datos.

plt.title(): Añadimos un título al gráfico, usando la función de Matplotlib, ya que Seaborn se basa en Matplotlib.

#3. Tipos de Gráficos y Cuándo Usarlos ##3.1 Gráfico de Dispersión: Ideal para Analizar la Relación entre Dos Variables El gráfico de dispersión es una excelente herramienta cuando queremos visualizar la relación o correlación entre dos variables cuantitativas. Cada punto en el gráfico representa un par de valores, y la distribución de estos puntos nos permite identificar si hay alguna tendencia o patrón. Se implementa usando scatter().

Ejemplo: Relación entre Peso y Velocidad en Animales

# Datos simulados de ejemplo: Peso en kg y velocidad en m/s de diferentes animales
peso = [2, 5, 10, 15, 25, 35, 50, 65, 80, 100]
velocidad = [30, 28, 25, 20, 18, 16, 12, 10, 8, 7]

# Creamos un gráfico de dispersión
plt.scatter(peso, velocidad)

# Etiquetas y título
plt.xlabel('Peso (kg)')
plt.ylabel('Velocidad (m/s)')
plt.title('Relación entre Peso y Velocidad en Animales')

# Mostramos el gráfico
plt.show()

###¿Cuándo usar un gráfico de dispersión?

Exploración de correlaciones: Si queremos ver cómo varían dos variables entre sí (como el peso y la velocidad, la altura y el rendimiento deportivo, etc.).

Visualización de tendencias: Nos ayuda a detectar si existe una relación lineal, no lineal o si no hay relación entre las variables.

##3.2 Gráfico de Barras: Ideal para Comparar Categorías Los gráficos de barras son perfectos cuando queremos comparar valores entre diferentes categorías. Cada barra representa una categoría y su altura (o longitud, si el gráfico es horizontal) indica el valor de esa categoría.

Se implementa usando bar().

Ejemplo: Consumo de Energía en Diferentes Países

# Datos simulados: Países y consumo de energía en teravatios-hora (TWh)
paises = ['México', 'EE.UU.', 'Canadá', 'Alemania', 'China']
consumo_energia = [300, 4500, 1500, 1600, 6500]

# Creamos el gráfico de barras
plt.bar(paises, consumo_energia)

# Etiquetas y título
plt.xlabel('País')
plt.ylabel('Consumo de Energía (TWh)')
plt.title('Consumo de Energía por País')

# Mostramos el gráfico
plt.show()

###¿Cuándo usar un gráfico de barras? Comparación de categorías: Si tienes diferentes grupos y quieres comparar sus valores, como ventas por región, población por país o consumo de energía.

Mostrar datos agrupados: Es ideal cuando tienes que mostrar datos categóricos o datos discretos.

##3.3 Gráfico de Tarta: Ideal para Visualizar Proporciones Un gráfico de tarta (o pie chart) se utiliza para representar proporciones o partes de un todo. Cada «rebanada» del gráfico representa una parte de los datos y el tamaño de la rebanada refleja su contribución al total.

Se implementa usando bar().

Ejemplo: Distribución de Elementos en la Corteza Terrestre

# Datos simulados: Elementos y su porcentaje en la corteza terrestre
elementos = ['Oxígeno', 'Silicio', 'Aluminio', 'Hierro', 'Calcio', 'Sodio', 'Potasio', 'Magnesio']
porcentaje = [46.6, 27.7, 8.1, 5.0, 3.6, 2.8, 2.6, 2.1]

# Creamos el gráfico de tarta
plt.pie(porcentaje, labels=elementos, autopct='%1.1f%%')

# Añadimos un título
plt.title('Distribución de Elementos en la Corteza Terrestre')

# Mostramos el gráfico
plt.show()

###¿Cuándo usar un gráfico de tarta? Proporciones dentro de un total: Si quieres mostrar cómo se distribuye algo en porcentajes o proporciones, como la participación de mercado de diferentes compañías o la distribución de votos en una elección.

Datos sencillos: Es más adecuado cuando hay pocas categorías, ya que con demasiados segmentos el gráfico puede volverse confuso.

##3.4 Gráfico de Líneas: Ideal para Mostrar Tendencias en el Tiempo El gráfico de líneas es una herramienta ideal cuando queremos visualizar cómo una variable cambia a lo largo del tiempo. La línea conecta puntos consecutivos y nos permite identificar patrones o tendencias temporales.

Se implementa usando plot().

Ejemplo: Evolución del Número de Casos en una Epidemia

# Datos simulados: Días y número de casos
dias = list(range(1, 11))
casos = [10, 50, 150, 300, 500, 800, 1200, 1700, 2300, 3000]

# Creamos el gráfico de líneas
plt.plot(dias, casos, marker='o')

# Añadimos etiquetas y título
plt.xlabel('Días')
plt.ylabel('Número de Casos')
plt.title('Evolución del Número de Casos durante una Epidemia')

# Mostramos el gráfico
plt.show()

###¿Cuándo usar un gráfico de líneas? Tendencias temporales: Si deseas visualizar cómo varía una variable en el tiempo, como la evolución de las ventas mensuales, la temperatura diaria o los casos de una enfermedad.

Datos secuenciales: Es perfecto para mostrar cualquier tipo de datos que sigan una secuencia, como la evolución de precios, niveles de población o rendimiento a lo largo del tiempo.

##3.5 Heatmap: Ideal para Visualizar Matrices y Correlaciones Los mapas de calor son una herramienta visual muy útil para identificar patrones en matrices de datos bidimensionales, donde los valores se representan a través de colores. Este tipo de gráfico es especialmente útil cuando se quieren identificar puntos de interés, como máximos, mínimos o áreas donde los datos cambian más abruptamente.

Se implementa usando heatmap().

¿Cuándo se usa?

Un mapa de calor es ideal cuando necesitas visualizar cómo un conjunto de datos varía en dos dimensiones. Es perfecto para representar fenómenos físicos o científicos que dependen de dos variables, como la temperatura y la presión, o para analizar grandes cantidades de datos en los que los valores pueden ser difíciles de distinguir en una tabla numérica. En ciencia de materiales, ingeniería de fluidos y otras áreas, este tipo de gráfico permite ver rápidamente las relaciones entre las variables.

Ejemplo: Imagina que estás estudiando cómo varía la viscosidad de un fluido en función de la temperatura y la presión. Los científicos utilizan este tipo de análisis en simulaciones de dinámica de fluidos o en estudios de materiales para observar cómo los cambios en la temperatura y la presión afectan la fluidez de ciertos materiales.

Aquí simularemos los datos para observar cómo la viscosidad depende de estas dos variables.

import numpy as np

# Simulamos datos de temperatura (eje X) y presión (eje Y)
temperatura = np.linspace(20, 150, 10)  # grados Celsius
presion = np.linspace(1, 10, 10)  # atmósferas

# Simulamos la viscosidad en función de temperatura y presión
# Relación inversa entre viscosidad y temperatura, y directa con presión
viscosidad = np.outer(1 / temperatura, presion)

# Crear el mapa de calor
plt.figure(figsize=(8, 6))
sns.heatmap(viscosidad, xticklabels=np.round(temperatura, 1), yticklabels=np.round(presion, 1), cmap="coolwarm")
plt.title("Mapa de calor de la viscosidad dinámica en función de Temperatura y Presión")
plt.xlabel("Temperatura (°C)")
plt.ylabel("Presión (atm)")
plt.show()

###Explicación:

Datos simulados: Creamos dos conjuntos de datos, uno para la temperatura y otro para la presión.

La temperatura varía entre 20°C y 150°C, lo que podría corresponder a un estudio de fluidos industriales.

La presión varía entre 1 y 10 atmósferas, simulando distintos niveles de presión en un entorno controlado.

Relación entre las variables: La viscosidad depende inversamente de la temperatura (los fluidos tienden a ser menos viscosos a mayor temperatura) y directamente de la presión (mayor presión aumenta la viscosidad).

Mapa de calor: Utilizamos la función sns.heatmap() para generar el mapa de calor, donde los colores representan la viscosidad en función de la temperatura y la presión. En este gráfico, puedes identificar rápidamente los puntos donde la viscosidad es más alta o baja.

#4. Ejercicios ##Ejercicio 1: Visualización del flujo sanguíneo en órganos Contexto:

En un experimento de biomedicina, se están estudiando los niveles de flujo sanguíneo en varios órganos en diferentes momentos del día. Sabemos que algunos órganos, como el cerebro o el hígado, reciben una mayor cantidad de sangre durante la noche, mientras que otros, como el sistema digestivo, experimentan mayor flujo durante el día. Los datos reflejan la cantidad de sangre (en mililitros por minuto) que llega a cada órgano.

Instrucciones:

Completa el código para graficar el flujo sanguíneo en los órganos a lo largo del día usando un gráfico de líneas.

# Datos de flujo sanguíneo (mililitros por minuto)
tiempo = ['6 AM', '12 PM', '6 PM', '12 AM']
cerebro = [750, 700, 720, 800]
hígado = [1000, 900, 850, 1100]
sistema_digestivo = [600, 1200, 1100, 500]

# Importar las bibliotecas necesarias
import matplotlib.pyplot as ___

# Completa el código para crear el gráfico de líneas
plt.plot(tiempo, cerebro, label='_______', color='blue')
___.plot(tiempo, ______, label='Hígado', color='green')
plt.____(______, sistema_digestivo, label='Sistema digestivo', color='red')

# Añadir etiquetas y título
___.xlabel('Tiempo del día')
plt.y_____('Flujo sanguíneo (ml/min)')
___.title('Flujo sanguíneo en diferentes órganos a lo largo del día')

# Completa la función para mostrar la leyenda y visualizar el gráfico
___.legend()
___.show()

##Ejercicio 2: Relación entre temperatura y concentración de CO₂ en la atmósfera Contexto:

En un estudio sobre el cambio climático, se han registrado niveles de concentración de CO₂ en la atmósfera a lo largo de los años, así como los cambios en la temperatura promedio global. Queremos visualizar cómo la concentración de CO₂ ha afectado a la temperatura global.

Instrucciones:

Completa el código para crear un gráfico de dispersión que muestre la relación entre la concentración de CO₂ (en partes por millón) y la temperatura global (en grados Celsius).

# Datos de concentración de CO₂ (ppm) y temperatura promedio (°C)
concentracion_CO2 = [320, 330, 340, 350, 360, 370, 380, 390, 400, 410]
temperatura_global = [13.9, 14.0, 14.1, 14.2, 14.3, 14.4, 14.5, 14.6, 14.7, 14.8]

# Completa el código para crear el gráfico de dispersión
___.scatter(concentracion_CO2, temperatura_global, color='orange')

# Añadir etiquetas y título
___.______('Concentración de CO₂ (ppm)')
___.______('Temperatura Global (°C)')
___._____('Relación entre la concentración de CO₂ y la temperatura global')

# Mostrar el gráfico
___.show()

##Ejercicio 3: Comparación de Superficies de Planetas Contexto: Supón que quieres analizar las superficies de varios planetas del sistema solar en función de su tamaño. Los datos de la superficie (en millones de km²) están disponibles para planetas como la Tierra, Marte y Júpiter. Usa estos datos para decidir cuál es el tipo de gráfico más adecuado para mostrar las diferencias de tamaño.

Paso a paso para el gráfico:

Revisa los datos de las superficies planetarias disponibles. Piensa en cómo comparar mejor la magnitud de las superficies entre diferentes planetas.

Escribe el código que visualiza la comparación usando el gráfico más adecuado, considerando un gráfico de barras como opción recomendada.

Pistas:

Usa los nombres de los planetas en el eje X.

Asegúrate de que los valores de la superficie estén bien representados en el eje Y.

No olvides agregar etiquetas y título para que tu gráfico sea claro.

# Datos de las superficies de los planetas (millones de km²)

# Crear gráfico de barras

# Añadir etiquetas y título

# Mostrar gráfico
_images/ba774f9e42db6d553c252e540954646af754ac2be0e4aac93053ee41eb69acc8.png

##Ejercicio 4: Distribución de Notas de Examen en Diferentes Facultades Contexto:

Estás analizando los resultados de un examen de conocimientos generales aplicado en diferentes carreras o facultades de una universidad. Los datos deben representan las notas obtenidas por los estudiantes en cada carrera/facultad. Debes determinar cuál es el mejor gráfico para mostrar cómo están distribuidas las notas y realizar la visualización correspondiente.

Paso a paso para el gráfico:

Consigue o simula los datos.

Analiza los datos sobre las notas en cada facultad.

Decide cuál es el mejor gráfico para visualizar la distribución de los datos.

Escribe el código para visualizar cómo están distribuidas las notas en las distintas carreras/facultades.

Consejo:

Piensa en qué te gustaría mostrar o visualizar.

#5. Conclusión

¡Felicidades por completar el notebook sobre visualización de datos! Ahora has aprendido a crear gráficos claros y poderosos con Matplotlib y Seaborn. Saber cuándo y cómo usar los diferentes tipos de gráficos no solo te permitirá presentar datos de manera atractiva, sino que también facilitará la comprensión de la información, ayudando a contar historias significativas con datos.

Recuerda que la elección del gráfico adecuado depende del contexto de tus datos y del mensaje que quieras transmitir. Desde gráficos de dispersión para mostrar relaciones entre variables, hasta mapas de calor para representar patrones en grandes volúmenes de datos, la visualización es clave para el análisis y la toma de decisiones informadas.

Te animamos a seguir practicando, explorando más tipos de gráficos y aplicando lo que has aprendido en tus propios proyectos científicos o profesionales. La visualización es tanto arte como ciencia, así que diviértete experimentando con tus datos.

¡Nos vemos en el próximo notebook!