M2.859 - Visualización de datos aula 1
2022-2 · Máster universitario en Ciencia de datos (Data science)
Estudios de Informática, Multimedia y Telecomunicación
El objetivo de esta prueba de evaluación continua es crear una narrativa de datos con técnicas de visualización, es decir, una visualización tipo storytelling.
La diabetes es una enfermedad crónica que se produce cuando el páncreas no produce suficiente insulina o cuando el cuerpo no usa eficazmente la insulina que produce. La insulina es una hormona que ayuda a que la glucosa de los alimentos entre en las células para usarse como energía [1]. Cuando hay un problema con la insulina, la glucosa se acumula en la sangre y puede causar problemas graves de salud, como enfermedades del corazón, daños en los ojos, los riñones y los nervios [2]. Existen tres tipos principales de diabetes: tipo 1, tipo 2 y gestacional [3].
Los síntomas de la diabetes pueden variar según el tipo y el nivel de azúcar en la sangre. Algunos síntomas comunes son [4]:
Estos síntomas pueden aparecer gradualmente en la diabetes tipo 2 o rápidamente en la diabetes tipo 1. Es importante consultar con un médico si se presentan estos síntomas para recibir un diagnóstico y un tratamiento adecuados.
La diabetes se diagnostica mediante pruebas de sangre que miden el nivel de glucosa en la sangre. Algunas de las pruebas que se usan son [5]:
Estas pruebas pueden variar según el tipo de diabetes y otros factores. Es importante consultar con un médico para saber qué pruebas se necesitan y cómo interpretar los resultados.
El tratamiento de la diabetes depende del tipo y el grado de la enfermedad. Algunos aspectos generales del tratamiento son [6]:
El tratamiento de la diabetes requiere una autogestión por parte del paciente, que debe conocer su enfermedad y cómo manejarla. Para ello, es importante recibir una educación terapéutica que le ayude a tomar decisiones informadas y a mejorar su calidad de vida.
No te preocupes, si llegaste hasta este punto cumplimos nuestro propósito, enseñarte algo más sobre la Diabetes. Además, sabemos que algunas tareas son tediosas y talvez no despiertan el mismo interés en todos nuestros visitantes. Por ello hemos preparado a partir de datos abiertos publicados por la Organización Panamericana de la Salud (OPS) un conjunto de visualizaciones sobre las tendencias de esta enfermedad en materia de mortalidad y nivel alto de glucosa en sangre en los países de América durante varios años.
Puedes acceder a estos datos abiertos a través de los siguientes enlaces:
https://opendata.paho.org/es/indicadores-basicos/descarga-datos
Te invitamos a explorar los mapas y los gráficos de líneas para ver la incidencia de esta enfermedad.
Y si no vives en América, don´t worry, pronto publicaremos esta información para otros continentes.
Nota: Si no te interesa puedes ignorar los bloques de código, son gajes del oficio y en una próxima versión los removeremos. No olvides enviar tu opinión al correo: asanabriaga@uoc.edu
Gracias por tu tiempo.
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
import plotly.express as px
import plotly.subplots as sp
from plotly.subplots import make_subplots
import plotly.graph_objects as go
import plotly.io as pio
import ipywidgets as widgets
from IPython.display import display
import webbrowser
%matplotlib inline
# Iniciamos cargando el conjunto de datos con el que trabajaremos
data = pd.read_csv('PAHO-Core-indicators-2023-export-20230525.csv')
C:\Users\andre\AppData\Local\Temp\ipykernel_17192\3551543623.py:2: DtypeWarning: Columns (10,13,14,20,21,22,23) have mixed types. Specify dtype option on import or set low_memory=False. data = pd.read_csv('PAHO-Core-indicators-2023-export-20230525.csv')
# Para este escenario solo nos interesa conocer aquellos datos asociados con el
# el indicador de diabetes por tanto filtraremos por el mismo
df_diabetes = data[data['nombre_indicador'].str.contains('diabetes', case=False)]
# Eliminamos aquellas columnas que no utilizaremos
columnas_a_eliminar = ['type_statistics','public_private', 'public_private_sp'] # Lista de nombres de columnas a eliminar
df_diabetes = df_diabetes.drop(columnas_a_eliminar, axis=1)
# Ordenar el dataframe por la columna TimeDim
df_diabetes = df_diabetes.sort_values('TimeDim')
# Dividimos el dataframe en cada uno de los indicadores
df_diabetes_1 = df_diabetes[df_diabetes['nombre_indicador'] == 'Tasa de mortalidad por diabetes mellitus (ajustada por edad por 100 000 habs)']
# Crear una figura animada con plotly express
fig = px.choropleth(df_diabetes_1, # DataFrame de origen
locations='SpatialDim_en', # Columna de los nombres de los países
locationmode='country names', # Modo de ubicación usando nombres de países
color='Numeric_value', # Variable a representar en el mapa
animation_frame='TimeDim', # Columna de los años (animación)
color_continuous_scale='YlOrRd', # Escala de colores
range_color=(df_diabetes_1['Numeric_value'].min(), df_diabetes_1['Numeric_value'].max()), # Rango de colores
title='Tasa de mortalidad por diabetes mellitus (ajustada por edad por 100 000 habs) por país y año'
)
# Configurar el diseño del mapa
fig.update_layout(geo=dict(showframe=False, # Ocultar el marco del mapa
showcoastlines=False, # Ocultar las líneas costeras
projection_type='natural earth' # Tipo de proyección
),
title_x=0.5 # Alinear el título al centro
)
# Mostrar la figura animada
fig.show()
# Crear el gráfico de líneas
fig_line = go.Figure()
# Agregar líneas para cada país seleccionado
for country in df_diabetes_1['SpatialDim_en'].unique():
df_country = df_diabetes_1[df_diabetes_1['SpatialDim_en'] == country] # Filtrar datos para el país actual
fig_line.add_trace(go.Scatter(x=df_country['TimeDim'], # Valores en el eje x (años)
y=df_country['Numeric_value'], # Valores en el eje y (indicadores)
name=country)) # Nombre del país para mostrar en la leyenda
# Configurar el diseño del gráfico de líneas
fig_line.update_layout(title='Tendencia de la tasa de mortalidad por diabetes mellitus por país',
xaxis_title='Año',
yaxis_title='Valor del indicador')
# Mostrar el gráfico de líneas
fig_line.show()
df_diabetes_2 = df_diabetes[df_diabetes['nombre_indicador'] == 'Tasa de mortalidad por diabetes mellitus (ajustada por edad por 100 000 habs); mujer']
# Crear una figura animada con plotly express
fig = px.choropleth(df_diabetes_2, # DataFrame de origen
locations='SpatialDim_en', # Columna de los nombres de los países
locationmode='country names', # Modo de ubicación usando nombres de países
color='Numeric_value', # Variable a representar en el mapa
animation_frame='TimeDim', # Columna de los años (animación)
color_continuous_scale='YlOrRd', # Escala de colores
range_color=(df_diabetes_2['Numeric_value'].min(), df_diabetes_2['Numeric_value'].max()), # Rango de colores
title='Tasa de mortalidad por diabetes mellitus en Mujeres (ajustada por edad por 100 000 habs) por país y año'
)
# Configurar el diseño del mapa
fig.update_layout(geo=dict(showframe=False, # Ocultar el marco del mapa
showcoastlines=False, # Ocultar las líneas costeras
projection_type='natural earth' # Tipo de proyección
),
title_x=0.5 # Alinear el título al centro
)
# Mostrar la figura animada
fig.show()
# Crear el gráfico de líneas
fig_line = go.Figure()
# Agregar líneas para cada país seleccionado
for country in df_diabetes_2['SpatialDim_en'].unique():
df_country = df_diabetes_2[df_diabetes_2['SpatialDim_en'] == country] # Filtrar datos para el país actual
fig_line.add_trace(go.Scatter(x=df_country['TimeDim'], # Valores en el eje x (años)
y=df_country['Numeric_value'], # Valores en el eje y (indicadores)
name=country)) # Nombre del país para mostrar en la leyenda
# Configurar el diseño del gráfico de líneas
fig_line.update_layout(title='Tendencia de la tasa de mortalidad por diabetes mellitus en Mujeres por país',
xaxis_title='Año',
yaxis_title='Valor del indicador')
# Mostrar el gráfico de líneas
fig_line.show()
df_diabetes_3 = df_diabetes[df_diabetes['nombre_indicador'] == 'Tasa de mortalidad por diabetes mellitus (ajustada por edad por 100 000 habs); hombre']
# Crear una figura animada con plotly express
fig = px.choropleth(df_diabetes_3, # DataFrame de origen
locations='SpatialDim_en', # Columna de los nombres de los países
locationmode='country names', # Modo de ubicación usando nombres de países
color='Numeric_value', # Variable a representar en el mapa
animation_frame='TimeDim', # Columna de los años (animación)
color_continuous_scale='YlOrRd', # Escala de colores
range_color=(df_diabetes_3['Numeric_value'].min(), df_diabetes_3['Numeric_value'].max()), # Rango de colores
title='Tasa de mortalidad por diabetes mellitus en Hombres (ajustada por edad por 100 000 habs) por país y año'
)
# Configurar el diseño del mapa
fig.update_layout(geo=dict(showframe=False, # Ocultar el marco del mapa
showcoastlines=False, # Ocultar las líneas costeras
projection_type='natural earth' # Tipo de proyección
),
title_x=0.5 # Alinear el título al centro
)
# Mostrar la figura animada
fig.show()
# Crear el gráfico de líneas
fig_line = go.Figure()
# Agregar líneas para cada país seleccionado
for country in df_diabetes_3['SpatialDim_en'].unique():
df_country = df_diabetes_3[df_diabetes_3['SpatialDim_en'] == country] # Filtrar datos para el país actual
fig_line.add_trace(go.Scatter(x=df_country['TimeDim'], # Valores en el eje x (años)
y=df_country['Numeric_value'], # Valores en el eje y (indicadores)
name=country)) # Nombre del país para mostrar en la leyenda
# Configurar el diseño del gráfico de líneas
fig_line.update_layout(title='Tendencia de la tasa de mortalidad por diabetes mellitus en Hombres por país',
xaxis_title='Año',
yaxis_title='Valor del indicador')
# Mostrar el gráfico de líneas
fig_line.show()
df_diabetes_4 = df_diabetes[df_diabetes['nombre_indicador'] == 'Prevalencia de glucosa elevada en sangre/diabetes mellitus en adultos (%)']
# Crear una figura animada con plotly express
fig = px.choropleth(df_diabetes_4, # DataFrame de origen
locations='SpatialDim_en', # Columna de los nombres de los países
locationmode='country names', # Modo de ubicación usando nombres de países
color='Numeric_value', # Variable a representar en el mapa
animation_frame='TimeDim', # Columna de los años (animación)
color_continuous_scale='YlOrRd', # Escala de colores
range_color=(df_diabetes_4['Numeric_value'].min(), df_diabetes_4['Numeric_value'].max()), # Rango de colores
title='Prevalencia de glucosa elevada en sangre/diabetes mellitus en adultos (%) por país y año'
)
# Configurar el diseño del mapa
fig.update_layout(geo=dict(showframe=False, # Ocultar el marco del mapa
showcoastlines=False, # Ocultar las líneas costeras
projection_type='natural earth' # Tipo de proyección
),
title_x=0.5 # Alinear el título al centro
)
# Mostrar la figura animada
fig.show()
# Crear el gráfico de líneas
fig_line = go.Figure()
# Agregar líneas para cada país seleccionado
for country in df_diabetes_4['SpatialDim_en'].unique():
df_country = df_diabetes_4[df_diabetes_4['SpatialDim_en'] == country] # Filtrar datos para el país actual
fig_line.add_trace(go.Scatter(x=df_country['TimeDim'], # Valores en el eje x (años)
y=df_country['Numeric_value'], # Valores en el eje y (indicadores)
name=country)) # Nombre del país para mostrar en la leyenda
# Configurar el diseño del gráfico de líneas
fig_line.update_layout(title='Tendencia de Prevalencia de glucosa elevada en sangre en adultos por país',
xaxis_title='Año',
yaxis_title='Valor del indicador')
# Mostrar el gráfico de líneas
fig_line.show()
df_diabetes_5 = df_diabetes[df_diabetes['nombre_indicador'] == 'Prevalencia de glucosa elevada en sangre/diabetes mellitus en adultos(%); mujer']
# Crear una figura animada con plotly express
fig = px.choropleth(df_diabetes_5, # DataFrame de origen
locations='SpatialDim_en', # Columna de los nombres de los países
locationmode='country names', # Modo de ubicación usando nombres de países
color='Numeric_value', # Variable a representar en el mapa
animation_frame='TimeDim', # Columna de los años (animación)
color_continuous_scale='YlOrRd', # Escala de colores
range_color=(df_diabetes_5['Numeric_value'].min(), df_diabetes_5['Numeric_value'].max()), # Rango de colores
title='Prevalencia de glucosa elevada en sangre/diabetes mellitus en adultos(%); mujer por país y año'
)
# Configurar el diseño del mapa
fig.update_layout(geo=dict(showframe=False, # Ocultar el marco del mapa
showcoastlines=False, # Ocultar las líneas costeras
projection_type='natural earth' # Tipo de proyección
),
title_x=0.5 # Alinear el título al centro
)
# Mostrar la figura animada
fig.show()
# Crear el gráfico de líneas
fig_line = go.Figure()
# Agregar líneas para cada país seleccionado
for country in df_diabetes_5['SpatialDim_en'].unique():
df_country = df_diabetes_5[df_diabetes_5['SpatialDim_en'] == country] # Filtrar datos para el país actual
fig_line.add_trace(go.Scatter(x=df_country['TimeDim'], # Valores en el eje x (años)
y=df_country['Numeric_value'], # Valores en el eje y (indicadores)
name=country)) # Nombre del país para mostrar en la leyenda
# Configurar el diseño del gráfico de líneas
fig_line.update_layout(title='Tendencia de Prevalencia de glucosa elevada en sangre en Mujeres por país',
xaxis_title='Año',
yaxis_title='Valor del indicador')
# Mostrar el gráfico de líneas
fig_line.show()
df_diabetes_6 = df_diabetes[df_diabetes['nombre_indicador'] == 'Prevalencia de glucosa elevada en sangre/diabetes mellitus en adultos(%); hombre']
# Crear una figura animada con plotly express
fig = px.choropleth(df_diabetes_6, # DataFrame de origen
locations='SpatialDim_en', # Columna de los nombres de los países
locationmode='country names', # Modo de ubicación usando nombres de países
color='Numeric_value', # Variable a representar en el mapa
animation_frame='TimeDim', # Columna de los años (animación)
color_continuous_scale='YlOrRd', # Escala de colores
range_color=(df_diabetes_6['Numeric_value'].min(), df_diabetes_6['Numeric_value'].max()), # Rango de colores
title='Prevalencia de glucosa elevada en sangre/diabetes mellitus en adultos(%); hombre por país y año'
)
# Configurar el diseño del mapa
fig.update_layout(geo=dict(showframe=False, # Ocultar el marco del mapa
showcoastlines=False, # Ocultar las líneas costeras
projection_type='natural earth' # Tipo de proyección
),
title_x=0.5 # Alinear el título al centro
)
# Mostrar la figura animada
fig.show()
# Crear el gráfico de líneas
fig_line = go.Figure()
# Agregar líneas para cada país seleccionado
for country in df_diabetes_5['SpatialDim_en'].unique():
df_country = df_diabetes_5[df_diabetes_5['SpatialDim_en'] == country] # Filtrar datos para el país actual
fig_line.add_trace(go.Scatter(x=df_country['TimeDim'], # Valores en el eje x (años)
y=df_country['Numeric_value'], # Valores en el eje y (indicadores)
name=country)) # Nombre del país para mostrar en la leyenda
# Configurar el diseño del gráfico de líneas
fig_line.update_layout(title='Tendencia de Prevalencia de glucosa elevada en sangre en Hombres por país',
xaxis_title='Año',
yaxis_title='Valor del indicador')
# Mostrar el gráfico de líneas
fig_line.show()
[2] ¿Qué es la diabetes? - NIDDK. https://www.niddk.nih.gov/health-information/informacion-de-la-salud/diabetes/informacion-general/que-es Consultado en: mayo de 2023.
[3] Diabetes - OPS/OMS | Organización Panamericana de la Salud - PAHO. https://www.paho.org/es/temas/diabetes Consultado en: mayo de 2023.
[4] Diabetes - Síntomas y causas - Mayo Clinic. https://www.mayoclinic.org/es-es/diseases-conditions/diabetes/symptoms-causes/syc-20371444 Consultado en: mayo de 2023.
[5] Diagnóstico. ADA - American Diabetes Association. https://diabetes.org/diagnostico Consultado en: mayo de 2023.
[6] Tratamiento de la Diabetes. PortalCLÍNIC - Hospital Clínic Barcelona. https://www.clinicbarcelona.org/asistencia/enfermedades/diabetes/tratamiento Consultado en: mayo de 2023.</span>