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, '.')
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())
- 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')
- 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")
- 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.