Visualización De Datos: Dilo Con Gráficos En Python

Angel Das
May 10, 2020

Contents Outline

Visualización De Datos: Dilo Con Gráficos En Python

May 10, 2020 12 minutes read

Una completa guía práctica de las mejores prácticas y conceptos de visualización en Python utilizando matplotlib, pyplot y seaborn.

La Inteligencia de Negocios, BI es un concepto que usualmente involucra la entrega e integración de información de negocios apropiada y valiosa en una organización. Las empresas utilizan el BI para detectar eventos significativos como la obtención de conocimientos sobre el comportamiento de los clientes, la supervisión de los indicadores clave de rendimiento a lo largo del tiempo y la obtención de inteligencia de mercado y de ventas para adaptarse rápidamente a sus negocios cambiantes y dinámicos. La visualización forma la columna vertebral de cualquier BI, por lo tanto un analista o científico de datos necesita entender los matices de la visualización y cómo juega un papel importante en la comunicación de conocimientos y hallazgos de manera efectiva.

Vamos a establecer algunas preguntas de negocios utilizando datos del mundo real y obtener una comprensión de cómo crear presentaciones en Python que son poderosas, eficaces y perspicaces, el PEI Framework de la visualización.


Photo by William Iven on Unsplash


Aquí están las cinco cosas que cubriremos en este artículo:

  • Importancia de la visualización en la industria analítica
  • Cómo decidir qué gráfico utilizar
  • Introducción y antecedentes de matplotlib y seaborn en Python
  • Una serie de gráficos y visualización usando Python para responder a preguntas relevantes de un dato del mundo real
  • Las mejores prácticas de la narración de historias mediante la visualización
¿Por qué es importante la visualización de datos?

Los datos y el análisis están cambiando la base de la competencia. Las empresas líderes están utilizando sus capacidades no sólo para mejorar sus operaciones básicas, sino para lanzar modelos de negocio completamente nuevos. Los KPI (Key Performing Indicators) se están convirtiendo en la necesidad del momento con los CXOs manteniendo un seguimiento constante del mercado siempre dinámico lo que les permite tomar decisiones informadas a escala. Los tableros se están haciendo populares entre los interesados y, con la gran afluencia de datos reunidos en numerosas fuentes de datos, la visualización constituye la clave para analizar esos datos.
En resumen, hay cuatro razones principales para construir imágenes:

  1. Pa el análisis exploratorio de datos, popularmente conocido como EDA 
  2. Comunicar claramente las conclusiones de la línea de base a las diferentes parte interesadas
  3. Compartir una representación imparcial de los datos 
  4. Usar la visualización para apoyar los hallazgos, conocimientos y recomendaciones
Antes de empezar, echemos un vistazo a los fundamentos de los gráficos en la visualización. Los gráficos generalmente caen bajo dos amplias categorías:

  • Las tablas de datos, también llamadas tablas cuantitativas, muestran los números de forma gráfica para hacer un punto. Incluyen gráficos circulares, gráficos de barras, gráficos de barras apilados, gráficos de dispersión, gráficos lineales, etc.
  • Los gráficos conceptuales, también llamados gráficos no cuantitativos, utilizan palabras e imágenes. Los gráficos conceptuales describen una situación, como la interacción, la interrelación, la influencia o las fuerzas que actúan. Algunos ejemplos comunes son los diagramas de flujo de procesos, los diagramas de gantt, las matrices, etc.
Los gráficos de datos son el tipo de gráfico más utilizado en la industria analítica. 
Desde los tableros, los informes regulares hasta las presentaciones, juegan un papel importante en la comunicación de nuestro análisis de una manera que las partes interesadas puedan entender. El cuadro conceptual juega un papel importante en la consultoría y el delineamiento de estrategias, especialmente en los escenarios en los que es importante el delineamiento gradual de la estrategia o los escenarios que requieren un análisis FODA (Fuerza, Debilidad, Oportunidades, Amenaza).

El Framework de selección de gráfica

Al trabajar con plataformas como Excel, Python, R, Tableau, R Shiny, Power BI o Qliksense, los usuarios están expuestos a múltiples diseños de gráficos que son atractivos y llamativos. Sin embargo, en el mundo de la analítica más que crear una visualización atractiva, es importante crear una visualización que sea efectiva e impactante. A continuación se presenta el marco de selección que constituye la base de cualquier selección de gráfico.

El framework de selección de la gráfica

Introducción a la visualización de datos en Python

Historia y arquitectura de Matplotlib

Matplotlib es una de las bibliotecas de visualización de datos más utilizadas en Python. Fue creado por John Hunter, que era neurobiólogo y trabajaba en el análisis de las señales de electrocorticografía. Su equipo tuvo acceso a una versión con licencia de software propietario para el análisis y sólo pudo utilizarlo por turnos. Para evitar esta limitación, John desarrolló una versión basada en MATLAB que, en las últimas etapas, estaba equipada con una interfaz de scripting para la generación rápida y fácil de gráficos, actualmente conocida como matplotlib.

Matplotlib funciona con un sistema de arquitectura de tres capas, la capa de fondo, la capa de artista y la capa de escritura.

Matplotlib Architecture

Veamos el código de abajo:

# — — — — — — — — — — — — - Backend Layer, Figure Canvas Layer: Encompases area in which figures are drawn — — — — — — — — — — — — -
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanva

#— — — — — — — — — — — — -Desde la capa de Artista, importando la Figura de Artista: La capa de artista sabe cómo usar un renderizador para dibujar un objeto----------------------
from matplotlib.figure import Figure
fig=Figure()
canvas=FigureCanvas(fig) #-----pasando el objeto de la capa del artista a la capa del fondo (Figure Canvas)

#— — — — — — — — — — — — -Usando numpy para crear variables aleatorias----------------------
import numpy as np
x=np.random.rand(100)

#— — — — — — — — — — — — -Trazando un histograma---------------------
ax=fig.add_subplot(111)
ax.hist(x,100)
ax.set_title('Normal Distribution')
fig.savefig('matplotlib_histogram.png')

Podemos ver que para trazar un histograma de números aleatorios usando una combinación de fondo y capa de artista, necesitamos trabajar en múltiples líneas del fragmento de código. Para reducir este esfuerzo, Matplotlib introdujo la capa de guión llamada Pyplot.

"matplotlib.pyplot" es una colección de funciones de estilo de comando que hacen que matplotlib funcione como MATLAB. Cada función pyplot realiza algunos cambios en una figura, por ejemplo, crea una figura, crea un área de trazado en una figura, traza algunas líneas en un área de trazado, decora el trazado con etiquetas, etc. En matplotlib.pyplot se conservan varios estados a través de las llamadas de función de manera que se mantiene un registro de cosas como la figura actual y el área de trazado, y las funciones de trazado se dirigen a los ejes actuales.


import matplotlib.pyplot as plt
#— — — — — — — — — — — — -Using numpy to create random variables----------------------
import numpy as np
x=np.random.rand(100)
plt.hist(x,100) #-----100 refers to the number of bins
plt.title(‘Normal distribution Graph’)
plt.xlabel(‘Random numbers generated’)
plt.ylabel(‘Density’)
plt.show()
La misma salida puede ser generada directamente a través de pyplot usando menos líneas de código.

Echemos un vistazo al siguiente ejemplo para entender cómo podemos crear diferentes tramas usando matplotlib y pyplot en python. Usaremos los datos de la visión general de las tasas de suicidio de Kaggle para trazar algunos de los gráficos discutidos anteriormente.


#— — — — — — — — — — — — -Leyendo dataset — — — — — — — — — — — -
import pandas as pd
suicide_data=pd.read_csv(‘C:/Users/91905/Desktop/master.csv’)
suicide_data.head()
#Podemos resumir los datos por múltiples columnas como país, año, edad, 
#generación, etc. En aras de la simplicidad, intentaremos responder a la siguiente pregunta


#1. Cómo el número total de suicidios en el mundo cambió con el tiempo
#2. Total de suicidios por sexo y edad por separado
#3. Total de suicidios por sexo a través de los cubos de edad
#4. Proporción de suicidios por generación
#5. Distribución de los suicidios hasta la fecha utilizando el diagrama de caja y el histograma


#— — — — — — — — — — — — -Dado que los datos están en diferentes niveles, intentaremos resumir los datos por año, --------------
#— — — — — — — — — — — — -sex, age, sex+age y generation--------------


year_summary=suicide_data.groupby('year').agg(tot_suicide=('suicides_no','sum')).sort_values(by='year',ascending=True)

gender_summary=suicide_data.groupby('sex').agg(tot_suicide=('suicides_no','sum')).sort_values(by='sex',ascending=True)

age_summary=suicide_data.groupby('age').agg(tot_suicide=('suicides_no','sum')).sort_values(by='tot_suicide',ascending=True)

#— — — — — — — — — — — — -Gráfico de líneas para ver la tendencia a lo largo de los años-----------------

import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
year_summary.plot(kind='line', figsize=(10,6));
plt.title('Summary of Suicides by Year');
plt.xlabel('Year');
plt.ylabel('#Suicides');

#— — — — — — — — — — — — -Gráfico de barras para comparar los suicidios por gender y age-------------

gender_summary.plot(kind='bar', figsize=(10,6));
plt.title('Summary of Suicides by Gender');
plt.xlabel('Sex');
plt.ylabel('#Suicides');
age_summary.plot(kind='bar', figsize=(10,6));
plt.title('Summary of Suicides by Age');
plt.xlabel('Age');
plt.ylabel('#Suicides');
#— — — — — — — — — — — — -Total de suicidios por age y gender juntos----

gender_age_summary=suicide_data.groupby(['sex','age']).agg(tot_suicide=('suicides_no','sum')).unstack()
gender_age_summary.head()
gender_age_summary.plot(kind='bar', figsize=(10,6), stacked=True);
plt.title('Summary of Suicides by Genger & Age');
plt.xlabel('Age');
plt.ylabel('#Suicides');

#— — — — — — — — — — — — -Proporción de suicidios por generación— — — — — — — — — — — — -
generation_summary=suicide_data.groupby('generation').agg(tot_suicide=('suicides_no','sum')).sort_values(by='tot_suicide',ascending=False).reset_index()
generation_summary.head(10)

#— — — — — — — — — — — — -Trazando un gráfico circular— — — — — — — — — — — — -
fig1, ax1 = plt.subplots();
fig1.set_size_inches(8,6)
ax1.pie(generation_summary['tot_suicide'],labels=generation_summary['generation'],autopct='%1.0f%%',shadow=True);
ax1.axis('equal')  # Equal aspect ratio ensures that pie is drawn as a circle.
plt.title('% Suicides across Generation')
plt.show();

#— — — — — — — — — — — — -Gráfica de Histograma— — — — — — — — — — — — -
year_summary.plot(kind='box', figsize=(10,6)); #----------To plot histogram change kind='box' to kind='hist'
plt.title('Distribution of suicide figures');




Visualization of Suicide data using Matplotlib and Pyplot

Seaborn
Seaborn es una biblioteca de visualización de datos de Python basada en matplotlib. Proporciona una interfaz de alto nivel para dibujar gráficos estadísticos atractivos e informativos. Seaborn suele estar orientada a la visualización de datos estadísticos, pero proporciona diseños más inteligentes y mejorados.

Useful tips — use sns.set(color_codes=True) before using the seaborn functionality. This adds a nice background to your visualization.

Intentemos recrear los gráficos anteriores usando Seaborn


import seaborn as sns
sns.set(color_codes=True)

#— — — — — — — — — — — — -Suicidios por Año, (year)--------------------------
year_summary=suicide_data.groupby('year').agg(tot_suicide=('suicides_no','sum')).sort_values \
                                    (by='year',ascending=True).reset_index()
year_summary.head()

#— — — — — — — — — — — — -Usando Seaborn para trazar la tendencia del suicidio con el tiempo-------------------------------
fig, ax = plt.subplots(figsize=(10,6));
plt.title('#Suicides across Years')
sns.lineplot(year_summary['year'],year_summary['tot_suicide']);

#— — — — — — — — — — — — -Resumen por Genero------------------------------------------
gender_summary=suicide_data.groupby('sex').agg(tot_suicide=('suicides_no','sum')).sort_values(by='sex',ascending=True).reset_index()

fig, ax = plt.subplots(figsize=(10,6));
plt.title('#Suicides across Years')

ax=sns.barplot(gender_summary['sex'],gender_summary['tot_suicide']);
ax.set(xlabel='Gender', ylabel='#Suicides');
plt.show()

#— — — — — — — — — — — — -Resumen por Gender/age------------------------------------------
gender_age_summary=suicide_data.groupby(['sex','age']).agg(tot_suicide=('suicides_no','sum')).reset_index()
gender_age_summary.head()

fig, ax = plt.subplots(figsize=(10,6));
plt.title('#Suicides across Years')

ax=sns.barplot(x=gender_age_summary['sex'],y=gender_age_summary['tot_suicide'],hue=gender_age_summary['age']);
ax.set(xlabel='Gender', ylabel='#Suicides');
plt.show()

gender_age_summary1=suicide_data.groupby(['sex','age']).agg(tot_suicide=('suicides_no','sum')).unstack()
gender_age_summary1.head()

#— — — — — — — — — — — — -Barra de apilamiento--------------------------------
sns.set()
gender_age_summary1.plot(kind='bar', stacked=True)

#— — — — — — — — — — — — -Comprobación de la correlación entre el suicidio, la población y el PIB per cápita
sns.pairplot(suicide_data[['suicides_no', 'population', 'gdp_per_capita ($)']], size=4, aspect=1);

#— — — — — — — — — — — — -Boxplot— — — — — — — — — — — — -
sns.boxplot(gender_age_summary['sex'],gender_age_summary['tot_suicide']);






Visualization of Suicide data using Seaborn

Las mejores prácticas de la narración de historias mediante la visualización

A continuación se presentan algunas de las mejores prácticas que deben seguirse al crear una presentación o visualización:

  1. Definir claramente el enunciado del problema y utilizar un enfoque de arriba hacia abajo para dividirlo en múltiples hipótesis. En el estudio del caso anterior, el planteamiento del problema implica la comprensión de las tasas de suicidio en los diferentes países y los factores que influyen en ellas. Así pues, antes de saltar a una lista de visualización, se deben enumerar todos los factores posibles que podrían afectar a las tasas de suicidio, por ejemplo, la edad, el género, el PIB, la población, el crecimiento, la generación, etc.Id
  2. entifica los factores clave que pueden añadir valor a tu historia. Piensa en cómo se pueden interconectar los factores para tener una visión más amplia de lo que está sucediendo. Por ejemplo, en lugar de mirar los suicidios por edad y género por separado, intenta comparar la tasa de suicidios en ambos grupos. Puedes obtener información de calidad como: Los hombres con edades comprendidas entre los 18 y los 25 años tienen tasas de suicidio más altas.
  3. Una vez que decidas los factores, asegúrate de usar el marco de selección de gráficos para decidir qué gráfico es el mejor.
  4. Asegura la consistencia en el formato de todos tus gráficos que incluye el color, el tamaño del texto, el tamaño del título, el espacio entre ejes, la posición de la leyenda y la alineación de los objetos del gráfico.
  5. Debajo de cada visualización menciona algunos hallazgos. Esto te ayudará a crear una historia para tu grupo de interés.

Join our private community in Discord

Keep up to date by participating in our global community of data scientists and AI enthusiasts. We discuss the latest developments in data science competitions, new techniques for solving complex challenges, AI and machine learning models, and much more!