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

 

A8: Creación de una visualización data storytelling (PEC3)¶

Nombre y apellidos: Andres Ricardo Sanabria Garay

Objetivo¶

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.

Diabetes

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].


Fuente: Alexey Hulsov. Disponible en: https://creazilla.com/nodes/3164032-the-world-day-of-struggle-against-diabetes-clipart#

¿Cuáles son los síntomas de la diabetes?


Relación Médico Paciente
Fuente: Relación Médico Paciente.png. (2021, April 8). Wikimedia Commons. Disponible en: https://commons.wikimedia.org/w/index.php?title=File:Relaci%C3%B3n_M%C3%A9dico_Paciente.png&oldid=551041658

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]:

  • Aumento de la sed y de la micción.
  • Fatiga o cansancio.
  • Visión borrosa.
  • Pérdida de peso inesperada.
  • Aumento del hambre.
  • Llagas de curación lenta e infecciones frecuentes.
  • Encías rojas e inflamadas.
  • Hormigueo o entumecimiento en las manos o los pies.

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.

¿Cómo se diagnóstica la diabetes?

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]:

  • Prueba de hemoglobina glucosilada A1c. Esta prueba indica el nivel promedio de glucosa en la sangre durante los últimos 2 a 3 meses. Se diagnostica diabetes si el resultado es de 6,5 % o más en dos pruebas separadas.
  • Prueba de glucosa plasmática en ayunas. Esta prueba mide el nivel de glucosa en la sangre después de un ayuno de al menos 8 horas. Se diagnostica diabetes si el resultado es de 126 mg/dl o más en dos pruebas separadas.
  • Prueba oral de tolerancia a la glucosa. Esta prueba mide el nivel de glucosa en la sangre antes y después de beber una bebida azucarada. Se diagnostica diabetes si el resultado es de 200 mg/dl o más después de 2 horas.

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.

¿Cómo se trata la diabetes?


Two views of local Extension leaders drilling in physical exercise in middies and bloomers, ...
Fuente: Two views of local Extension leaders drilling in physical exercise in middies and bloomers, ....jpg. (2020, December 23). Wikimedia Commons. Disponible en: https://commons.wikimedia.org/w/index.php?title=File:Two_views_of_local_Extension_leaders_drilling_in_physical_exercise_in_middies_and_bloomers,_....jpg&oldid=520555118.

El tratamiento de la diabetes depende del tipo y el grado de la enfermedad. Algunos aspectos generales del tratamiento son [6]:

  • Seguir un plan de alimentación saludable que ayude a controlar el nivel de glucosa en la sangre, el peso corporal y el riesgo de complicaciones.
  • Realizar actividad física regular que mejore el uso de la glucosa por los músculos y favorezca el control de la presión arterial y el colesterol.
  • Monitorizar el nivel de glucosa en la sangre con frecuencia para ajustar el tratamiento según las necesidades y prevenir las hipoglucemias o hiperglucemias.
  • Tomar la medicación adecuada según el tipo de diabetes. Esto puede incluir fármacos orales o inyectables que ayuden a reducir el nivel de glucosa en la sangre o insulina que sustituya la que no produce el páncreas o que ayude a superar la resistencia a la misma.
  • Saber actuar ante situaciones especiales como enfermedades, viajes, embarazos o complicaciones agudas o crónicas de la diabetes. </ul>

    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.


    ¿Te cansaste de leer?


    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

    https://opendata.paho.org/sites/default/files/data/2023-05/PAHO-Core-indicators-2023-export-20230525.zip

    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.

In [1]:
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
In [2]:
# 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')
In [3]:
# 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)]
In [4]:
# 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)
In [5]:
# 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()
In [6]:
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()
In [7]:
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()
In [8]:
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()
In [9]:
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()
In [10]:
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()

Bibliografía



[1] ¿Qué es la diabetes?. Información Básica. Diabetes. CDC. Disponible en: https://www.cdc.gov/diabetes/spanish/basics/diabetes.html Consultado en: mayo de 2023.

[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>

In [ ]: