Una imagen vale más que mil palabras
Por tal razón, la visualización de datos juega un papel fundamental a la hora de obtener conclusiones y mostrar resultados de nuestros análisis de una manera más clara. Python, nos facilita el uso de diferentes herramientas, que dependiendo del propósito o proyecto que se esté realizando, se puede elegir la que mejor se adapte a tal necesidad; es por eso, que en esta oportunidad compartiremos las principales librerías para la visualización de datos con Python, nombrando cada una de ellas, su aplicación e implementando diferentes tipos de gráficos con un ejemplo práctico.
Así que para iniciar, hablemos sobre qué es la visualización:
La visualización de datos es una representación visual (o gráfica) de datos para encontrar información útil como tendencias y patrones en los datos, y hacer que el proceso de análisis de datos sea más fácil y simple.
Por lo general los colores y figuras captan nuestra atención, lo cual nos permite detectar diferencias y distinguir un elemento de otro. Nos facilita la vida poder ver un gráfico con diferentes características, que darnos a la tarea de revisar minuciosamente un texto o tabla con muchos datos.
Con la ayuda de un gráfico podemos identificar tendencias, valores atípicos y así asimilar mejor lo que nos quieren decir los datos. Al final se convierten en los elementos propicios para contar historias.
Y ¿por qué es importante?
Al realizar un proyecto como entrega final se deben obtener unos resultados y conclusiones que nos den un balance del análisis, modelo e implementación realizada. Dichos resultados por lo general se almacenan en tablas o son datos de gran volumen que difícilmente podrán interpretarse en poco tiempo y es allí donde la visualización toma gran importancia. Mediante gráficas podemos obtener respuestas y sacar conclusiones en cuestión de segundos, además, permite que personas con conocimiento técnico y no técnico puedan interpretar mejor la información.
Otra de las ventajas de poder graficar es que nos permite identificar comportamientos de datos aunque sus características principales sean similares, es decir, podemos visualizar 4 funciones con distribuciones diferentes pero sus propiedades estadísticas son la misma, como ocurre con el cuarteto de Anscombe.
Ahora, veamos algunas herramientas de visualización con Python
Para visualizar datos Python nos brinda una variedad de librerías con las que podemos jugar y crear las gráficas necesarias para nuestro análisis y presentación. Veamos algunas de ellas:
- Matplotlib: Librería basada en Numpy, nos permite crear gráficas en dos dimensiones, con diseños simples y características predeterminadas. Algunas de las gráficas que puedes realizar son histogramas, gráfico de barras, cajas y bigotes, de dispersión, mapas de calor y diagrama de área.
- Seaborn: Es una librería basada en Matplotlib que nos permite crear gráficas con mejor diseño, una variedad de paletas de colores y estilos.
- Plotly: Nos permite crear gráficos interactivos, donde podemos ver datos estadísticos en las gráficas y seleccionar partes de la gráfica que queremos visualizar de manera detallada.
- Bokeh: Es una librería de código abierto y de uso gratuito para cualquier tipo de proyecto, es versátil, se integra muy bien con javascript y un estilo gráfico novedoso. Es una biblioteca interactiva que se creó para que los navegadores web visualicen gráficas y aplicaciones de datos altamente interactivas.
- Pandas: Aunque pandas es una librería utilizada para manipulación de Dataframe, también es posible realizar gráficas básicas ya que fue construida bajo Numpy y Matplotlib.
- Altair: Es una librería creada para la visualización estadística. Se basa en Vega y Vega-Lite, que son gramáticas de visualización que le permiten describir la apariencia visual y el comportamiento interactivo de una visualización en formato JSON.
- Pygal: Es una libreria que permite crear visualizaciones interactivas que se pueden obtener en formato svg con una resolución optima para presentarlas en páginas web usando Flask o Django.
- Dash: Es un framework de Python basado en Flask, Plotly y ReactJS que permite crear dashboards y presentarlas en una página web.
En esta oportunidad vamos a ver cómo graficar con las librerías matplotlib, seaborn y plotly. Así que, ¡Manos a la obra!
Para instalar las librerías usaremos los siguientes comandos:
!pip install matplotlib
!pip install seaborn
!pip install plotly
Para poder utilizarlas en nuestro notebook o script debemos importarlas de la siguiente forma:
import matplotlib.pyplot as plt
import seaborn as sns
import plotly.express as px
Listo! Puedes empezar a usarlas, pero antes vamos a mirar algunas modificaciones generales que le podemos agregar a nuestras gráficas.
Crear una figura y definir el tamaño:
plt.figure(figsize=(ancho, largo))
Definir la inclinación de los valores en los ejes X y Y:
plt.xticks(rotation=valor)
plt.yticks(rotation=valor)
Indicar a que pertenece cada gráfica con ayuda de una leyenda:
plt.legend(‘texto’)
Modificar el nombre de los ejes X y Y:
plt.ylabel(‘texto’)
plt.xlabel(‘texto’)
Mostrar la gráfica:
plt.show()
plt.title(‘texto’)
Definir figuras para presentar distintas gráficas:
plt.subplot(#Filas, #Columnas, indice)
plt.subplots(#Filas, #Columnas)
Definir límites a los ejes X y Y:
plt.xlim(izquierda, derecha)
plt.ylim(izquierda, derecha)
plt.savefig()
Si quieres saber más al respecto puedes visitar el enlace: https://matplotlib.org/stable/api/pyplot_summary.html
Ahora si, iniciemos con el código para crear nuestras graficas
En esta ocasión usaremos el dataset de Google Play Store que contiene información de las aplicaciones decargadas, y cuenta con las siguientes columnas:
- Nombre de la aplicación (Str)
- Categoria (Str)
- Calificación de la aplicación (Float)
- Reseñas (Float)
- Tamaño (Str)
- Instalaciones (Float)
- Es paga o gratis (Str)
- Costo (Str)
- Grupo de edad a quién va dirigido (Str)
- Genero (Str)
- Última actualización (Str)
- Versión actual (Str)
- Versión Android (Str)
Fuente de datos: https://www.kaggle.com/lava18/google-play-store-apps
Ahora que conocemos los aspectos generales para construir una gráfica, veamos cuales son los tipos de gráficas, para qué se usan y cómo implementarlas en las librerías matplotlib, seaborn y plotly de manera que nos ayuden a responder algunas preguntas:
- Gráfica de barras / barras apiladas: El gráfico de barras es también conocido como gráfico de columnas y son el estándar para buscar un valor concreto en categorías diferentes. Ten cuidado porque se pueden volver problemáticos cuando hay un gran número de elementos.
Conozcamos que tipo de aplicaciones les interesa más a los usuarios, ¿gratuitos o pagos?
#Definiendo valores del eje x y del eje y
x_values = datos['Type'].unique()
y_values = datos['Type'].value_counts().tolist()# Matplotlib
plt.bar(x_values, y_values)
plt.xlabel("Type")
plt.ylabel("Cant")
plt.title("Barras")
plt.show()
# Seaborn
sns.barplot(x=x_values, y=y_values, data=datos);
# Plotly
fig = px.bar(x=x_values, y=y_values, color=x_values)
fig.show()
Como lo sospechamos! La mayoría de las aplicaciones son de uso gratuito :D
¿Podemos identificar un patrón entre las calificaciones y las reseñas de las aplicaciones a través de los años?
# Matplotlib
anios_rating= datos.groupby('year')['Rating'].count().reset_index()
anios_review = datos.groupby('year')['Reviews'].count().reset_index()plt.bar(anios_rating['year'], anios_rating['Rating'], label="Rating")plt.bar(anios_review['year'], anios_review['Reviews'], bottom=anios_rating['Rating'], label="Review")plt.legend(loc="upper left")plt.show()
Sin duda, las aplicaciones han ido creciendo con el paso del tiempo y a su vez la cantidad de calificaciones y reseñas que reciben.
- Histograma: los histogramas se distinguen de los gráficos de barras en que estos muestran valores continuos a lo largo de un intervalo.
¿Cuál ha sido el comportamiento de las calificaciones que han recibido las aplicaciones?
# Matplotlib
plt.hist(datos['Rating'])
plt.xlabel("Calificación de la aplicación")
plt.ylabel("Frecuencia")
plt.title("Histograma")
plt.show()
# Seaborn
sns.histplot(data=datos, x="Rating", bins=10)
plt.xlabel("Calificación de la aplicación")
plt.ylabel("Frecuencia")
plt.title("Histograma")
plt.show()
# Plotly
fig = px.histogram(datos, x="Rating", title='Histograma', labels={"count": "Frecuencia","Rating": "Califación de la aplicación"})
fig.show()
En general, las aplicaciones reciben una buena calificación.
- Gráfica de dispersión: Otro de los múltiples gráficos que podemos realizar son los gráficos de dispersión, que ayudan a comprender la visualización de varios conjuntos de datos y la relación entre ellos.
¿Existe relación entre el numero de reseñas que recibe una aplicación y la calificación que le dan los usuarios?
# Matplotlibplt.scatter(datos['Reviews'], datos['Rating'])
plt.xlabel("Numero de reseñas")
plt.ylabel("Calificación")
plt.title("Grafica de dispersión")
plt.show()
# Seaborn
sns.scatterplot(data=datos, x="Reviews", y="Rating", hue="Type")
plt.xlabel("Numero de reseñas")
plt.ylabel("Calificación")
plt.title("Grafica de dispersión")
plt.show()
# Plotly
fig = px.scatter(datos, x='Reviews', y='Rating', color='Type', labels={'Rating':'Calificación', 'Reviews':'Numero de reseñas'}, title='Grafica de dispersión' )
fig.show()
Parece ser que las aplicaciones reciben buenas calificaciones y mayor número de reseñas.
- Boxplot (Diagrama de cajas y bigotes): Es una representación estadística de la distribución de una variable cuantitativa. Nos permite identificar medidas como mediana, cuartiles, el valor máximo y mínimo, e identificar visualmente la existencia de datos atípicos. Existen diferentes tipos de diagrama similares a los de caja o boxplot como diagrama de violín, gráfico de velas.
Aquí están los tipos de observaciones que uno puede hacer al ver un diagrama de cajas y bigotes:
- Cuáles son los valores clave, tales como: el promedio, el percentil 25 medio, etc.
- Valores atípicos y cuáles son sus valores.
- Identificar si los datos son simétricos.
- Cuán estrechamente se agrupan los datos.
- Los datos están sesgados y si es así, en qué dirección.
¿Cuál es la distribución del Rating de las aplicaciones dependiendo del valor de la aplicación (de pago o gratuita)?
# Matplotlib
datos.boxplot(column=['Rating'], by='Type', color='blue')
plt.show()
# Seaborn
sns.boxplot(data=datos, x="Type", y="Rating");
# Plotly
fig = px.box(datos, x="Type", y="Rating")
fig.show()
Las calificaciones que reciben las aplicaciones pagas en general son buenas, y las aplicaciones gratuitas reciben mayores calificaciones cercanas a 4.5
- Gráfica de líneas: Resaltan la forma general de toda una serie de valores, normalmente a lo largo del tiempo.
¿Cómo ha sido el comportamiento de las instalaciones a través de los años?
#Construyamos la columna
agrupando_años=datos.groupby('year', as_index=False).agg({'Installs': 'sum'}).sort_values(by='year', ascending=True)# Matplotlib
plt.plot(agrupando_años.year, agrupando_años.Installs)
plt.xlabel("Year")
plt.ylabel("Installs")
plt.title("Grafico de Lineas")
plt.show()
# Seaborn
sns.lineplot( data= agrupando_años, x= 'year', y='Installs');
# Plotly
fig = px.line(agrupando_años, x='year', y="Installs")
fig.show()
Evidentemente con el aumento del uso de la tecnología y los dispositivos la demanda de aplicaciones ha aumentado con el paso de los años.
- Pie/Donut: Son representaciones circulares, divididas en sectores, a estos sectores también se denominan porciones. La longitud del arco de cada sector es proporcional a la cantidad que estamos describiendo. Es una forma efectiva de representar información cuando estamos interesados principalmente en comparar la porción con todo el pastel, en lugar de las porciones entre sí.
¿Cuál es la porción mayor del contenido que se califica por rango de edad de acuerdo a quien va dirigido?
#Agrupar datos
data_agrupada = datos.groupby('Content Rating')['Rating'].count().reset_index()# Matplotlib
plt.pie(data_agrupada['Rating'], labels=data_agrupada['Content Rating'])
plt.show()
# Matplotlib
datos.groupby('Content Rating').size().plot(kind='pie')
plt.show()
# Plotly
fig = px.pie(datos, values='Rating', names='Content Rating', title='Tipo de Contenido', color_discrete_sequence=px.colors.sequential.RdBu)
fig.show()
# Plotly
fig = go.Figure(data=[go.Pie(labels=data_agrupada['Content Rating'], values=data_agrupada['Rating'], hole=.3)])
fig.show()
Más del 70% de las aplicaciones son para uso de cualquier persona sin restricciones de edad.
- Mapa de calor: Son la mejor herramienta para visualizar información compleja y simple en comparación con gráficos o tablas de diferentes colores donde el color representa valores.
Veamos cuál es la correlación de las variables numéricas
# Matplotlib
plt.imshow(datos.corr())
plt.show()
# Seaborn
sns.heatmap(datos.corr(), annot=True, cmap = 'coolwarm')
# Plotly
fig = px.imshow(datos.corr(), title='correlacion de datos numericos', text_auto=True)
fig.show()
Existe una relación entre la cantidad de reseñas y la cantidad de instalaciones que tiene una aplicación. Así mismo, parece ser que las calificaciones no tienen una relación significativa con la cantidad de instalaciones o de reseñas.
- Área: Son similares a los gráficos de línea, pero con el área debajo de la línea relleno con un determinado color o textura. Al igual que los gráficos de líneas, los gráficos de área se utilizan para mostrar el desarrollo de valores cuantitativos durante un intervalo de tiempo. Se utiliza normalmente para mostrar tendencias en lugar de transmitir valores específicos.
¿Cómo ha sido el comportamiento del promedio de reseñas por año?
#Agrupar los datos
agrupar_año = datos.groupby('year')['Reviews'].mean().reset_index()# Matplotlib
plt.fill_between(agrupar_año['year'], agrupar_año['Reviews'])
plt.show()
# Seaborn
plt.stackplot(agrupar_año['year'], agrupar_año['Reviews']);
# Plotly
fig = px.area(agrupar_año, x="year", y="Reviews")
fig.show()
Como lo vimos anteriormente, las reseñas han ido aumentando con el paso de los años.
Puedes ver con detalle el código y graficas adicionales en el repositorio:
Ya tienes algunas herramientas que te pueden ayudar a crear visualizaciones y presentar tus resultados. Para complementar, queremos compartirte algunos tips que te pueden ayudar a la hora de crear tu visualizaciones:
- Realizar una limpieza previa a los datos con el fin de tener mejor claridad en las gráficas y evitar errores que afecten la interpretación.
- Ten siempre presente a quién va dirigido el dashboard o la presentación y quién va a leer esa información. El conocer tu público objetivo te ayudará a decidir qué tipo de gráfica usar y cómo puedes comunicar los resultados.
- Ordena los valores de mayor a menor para facilitar la lectura.
- Usa los pie chart con cuidado, en su lugar se recomienda usar gráficas de barras, treemaps o barras apiladas.
- Usa títulos y nombres de ejes claros que faciliten la lectura de la gráfica.
- Procura que el nombre de los axis y labels no se corten y sean muy especificos.
- Añade texto en las gráficas para mayor claridad, si deseas poner énfasis en un punto o separar las líneas puedes poner texto o leyendas para identificar más rápido las variables y valores.
- Utiliza números y porcentajes en las gráficas, en la medida de lo posible, esto ayuda a comprender mejor la información y resaltar lo que se desea presentar.
- Señala con un recuadro o línea partes importantes de la gráfica que ayuden a comunicar el mensaje que deseas transmitir.
- Intenta resaltar tus datos jugando con parámetros como el tamaño, saturación, color, forma, posición, longitud, entre otras.
- Debajo de cada visualización menciona algunos hallazgos. Esto te ayudará a crear una historia para tu grupo de interés.
- Usa colores que vayan acorde a tu cliente, la marca, o que puedas aplicar teoría del color para que el gráfico sea fácil de interpretar.
- Deja solo los elementos necesarios, es decir, una gráfica con sombreado puede verse bien pero también puede distraer del objetivo y saturar la presentación.
La visualización nos permite compartir una representación imparcial de los datos y comunicar claramente las conclusiones a diferentes partes interesadas haciendo uso de recursos como el tamaño y color que facilitan la interpretación de los resultados. Es importante tener claro que se quiere transmitir o mostrar dependiendo del público al que va dirigido, y tener las preguntas de negocio claras, estas son la clave para realizar una visualización.
Es esencial usar la gráfica más acertada en función de los tipos de datos y las preguntas que se quieren responder. Una vez tengas claro estos detalles importantes, podrás dar respuesta a la necesidad y contar una historia a través de los datos. Recuerda que no necesariamente una gráfica más robusta o especializada te permitirá transmitir de manera clara la idea.
A continuación, te dejamos una infografía con información sobre las principales gráficas, esperamos que pueda ayudarte al momento de crear una visualización:
Te recomendamos visitar los enlaces que te compartimos previamente de las librerías, allí encontrarás ejemplos y descripción de cada uno de los parámetros que tienen las gráficas. Adicionalmente, puedes visitar los siguientes enlaces:
- Catálogo de gráficas: https://datavizcatalogue.com/index.html
- Tipos de gráficas con su uso y algunos ejemplos: https://datavizproject.com
- Galería de gráficas con explicación de su uso y código en python: https://www.python-graph-gallery.com
- Guia complementaria de visualización de datos con Python utilizando las librerías Pandas, Matplotlib, Seaborn y Plotly: https://towardsdatascience.com/data-visualization-with-python-8bc988e44f22
- Visualización de datos con Python por Realpython: https://realpython.com/learning-paths/data-visualization-python/
- Blog de visualización por Tableau: https://www.tableau.com/es-mx/learn/articles/data-visualization
Esta publicación la realizamos en compañía de Katerine Valencia:
Hola! mi nombre es Katerine Valencia, soy Ingeniera de Sistemas👩🏽💻, entusiasta de los datos📊. Me encanta crear sinergia y compartir conocimiento con otras personas. Apoyo como voluntaria en las comunidades de Data Science Fem y Pyladies Colombia. Me apasiona la fotografía, viajar y descubrir nuevos lugares🌎. Por aquí puedes encontrar un poco más, te comparto mis redes 👉 https://linktr.ee/katerinevach