Analítica de datos con Python y Sofia2 (1/4). Gráficos de distribución

Si existe algún tema sobre el que haya consenso en el mundo de las Tecnología de la Información es sin lugar a dudas la importancia de los datos. Son necesarios para entender el presente (análisis descriptivo), para predecir el futuro (análisis predictivo) y para obtener información que nos permita actuar para cambiar el futuro (análisis prescriptivo). Es una materia prima de alto valor en el presente y lo será más en el futuro, pero el simple acopio de grandes volúmenes de datos no aporta valor este se consigue por su interpretación y la aplicación de el conocimiento extraído en el negocio.

Una de las mejores formas de entender la información de los datos es mediante su visualización en gráficos.

 

Existen 4 tipos de visualizaciones básicas de los datos: Gráficos de distribución, de relación, de comparación y de composición.
Los gráficos de distribución/histogramas se usan para conocer la frecuencia de los como valores de una variable y responden a preguntas del estilo:

¿Número de clientes qué tengo por grupo de edad? ¿Cuántos días tardan nuestros pagos?

 

Si la representación es de una única variable y son pocos los datos que hay se utiliza gráficos de barras (Bar histogram). Por ejemplo: Número de habitantes por Comunidad Autónoma.

 

Si la representación es de una única variable y hay muchos datos se utilizan gráfico lineales (Line histogram).

 

Si se quiere representar dos variables hay varias opciones como utilizar gráfico de Scatter plot o de barras con distinto color o varios gráficos.
Posiblemente el “Hola Mundo” de la analítica de datos sea los datos de los pasajeros del Titanic así que los utilizaremos para mostrar las gráficas de distribución.

 

Vamos a utilizar las capacidades analíticas de la plataforma Sofia2 en el CloudLab que utiliza el notebook Zeppelin y un cluster de Cloudera con Spark para la paralelización del procesamiento.


%python
import matplotlib
import matplotlib.pyplot as plt
import os
import numpy as np
import pandas as pd
import seaborn as sns
import StringIO

matplotlib.use('Agg')
matplotlib.rcParams['figure.figsize'] = (9.0, 6.0)

Cargamos el dataset del Titanic y cambiamos los valores de la columna Survived

titanic = pd.read_csv("https://gist.github.com/tpetricek/263fb1bee9366170b2ef/raw/90d012bac3713e8618d3ae2f83f2f6535b6bebd9/titanic.csv")
titanic['Survived'].replace([0,1],['No','Si'], inplace=True)

Mostramos en una gráfica todos los pasajeros con la edad que tenían por aquel entonces.

plt.plot(titanic.Age, '.')

Titanic Edad de los pasajeros

 

Y aunque se pueden extraer conclusiones como que viajaban 3 pasajeros con más de 80 años y que hay 7 que tenían entre 70 y 80 años no es una gráfica útil para obtener un conocimiento claro sobre la edades de los viajeros.

Para obtener una visión más clara de la distribución de los pasajeros por edad lo mejor es realizar una gráfica con el número de viajeros por su edad.

# distplot -> histograma
# Para mostrar la distribución de los valores de una variable numérica.
sns.distplot(titanic.Age.dropna())

Titanic Distribución por edad 1

  • Donde por ejemplo se aprecia una distribución más o menos uniforme pero con una pequeña montaña entre los 0 y los 10 años lo que indica que viajaban más familias con hijos pequeños que con hijos más mayores parece que a las familias con hijos menores les atrae más el empezar una nueva vida en América que a las que tienen hijos más mayores.

En los gráficos de distribución se pueden mostrar dos variables así que añadimos la única variable continua que tenemos que es el campo fare que es el precio de billete e incluimos la regresión lineal entre las dos variables, edad y precio del pasaje.

sns.jointplot(data=titanic, x='Age', y='Fare', kind='reg', color='g')

 

Titanic Distribución por edad 2

  • Se aprecia una ligera correlacción entre la edad y el precio del pasaje (coeficiente de Pearson de 0.096) pero si nos fijamos en la alta densidad de puntos que hay en la parte inferior izquierda y la ausencia de puntos en la derecha (edades pequeñas) nos indica que el precio del pasaje de los niños es más barato que el de los adultos (parece lógico) y que está bajando la recta de la correlación por la derecha y aumentando su pendiente así que si excluyésemos a los niños tendríamos que el precio del pasaje no está correlacionado con la edad (a excepción del caso de los niños).

Comparemos la supervivencia al accidente del Titanic distribuida por edad.

fare_bins = np.arange(0, 100, 4)
sns.distplot(titanic[titanic['Survived']=='Si'].Age.dropna(), bins=fare_bins, color="b")
sns.distplot(titanic[titanic['Survived']=='No'].Age.dropna(), bins=fare_bins, color="r")

Titanic Distribución por edad 3

  • De 0 hasta los 20 años los supervivientes del accidente del Titanic superan ampliamente a los muertos se cumplió la máxima de los niños primero
  • De los 20 años hasta mediados de los 40 murieron más que sobrevivieron, a partir de esa edad cambía la tendencia hasta los 60 donde se vuelven a salvar más que a morir así que también se cumplió lo de los mayores primero y muchos jóvenes hicieron de héroes anónimos prefirieron ayudar antes que salvarse.
  • Y en el último tramo de edad, a partir de los 60, hay otro giro y vuelven a morir más que a sobrevivir parece que a los más abueletes no les incluyeron en el grupo de de los mayores primero y sus menores facultades físicas comparadas con los de 45 a los 60 años en una situación como la del Titanic no les favoreció.

 

Resumiendo los gráficos de distribución o histograma son útiles para tener una “primera vista” general de la distribución de la muestra respecto a una característica, cuantitativa y continua. Ofrecen una visión de grupo y permiten observar una preferencia, o tendencia, por parte de la muestra y poder utilizarlos a partir de un dataset que esté en Internet con Sofia2 y Zeppelin es muy sencillo.

Analítica de datos con Python y Sofia2 (1/4). Gráficos de distribución

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s