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

Un análisis de correlación es un punto de partida importante para identificar las relaciones entre medidas, es importante aclarar que la correlación no tiene porque significar causalidad, pero si al revés, la causa tiene una relación con el efecto. Un ejemplo famoso de esto es un estudio que se hizo en las escuelas donde se afirmaba que los niños con los pies grandes eran mejores en matemáticas, lo cual era cierto ya que los niños con los píes más grandes eran los más mayores pero no es la causa, a igualdad de edad los niños con los píes más grandes no eran ni mejores ni peores en matemáticas.

Los gráficos de relación se usan para ver la relación entre los datos y pueden usarse para encontrar correlaciones, valores atípicos y grupos de datos.

 

¿Existe una correlación entre el gasto publicitario y las ventas de nuestros productos?
¿Cómo varían los gastos y los ingresos por región y cuál es la desviación?

 

Veamos un ejemplo en la plataforma Sofia2 con un dataset sobre características de los modelos de coche.

%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 los datos

%python
autos = pd.read_csv("http://archive.ics.uci.edu/ml/machine-learning-databases/auto-mpg/auto-mpg.data-original", delim_whitespace = True, header=None,
names=['MPG', 'Cylinders', 'Displacement', 'Horse_Power','Weight', 'Acceleration', 'Model_Year', 'Origin', 'Car_Name'])

Preparamos los datos

%python
# Preparación de los datos
autos['maker'] = autos.Car_Name.map(lambda x: x.split()[0])
autos.Origin = autos.Origin.map({1: 'America', 2: 'Europe', 3: 'Asia'})
autos=autos.applymap(lambda x: np.nan if x == '?' else x).dropna()
autos['Horse_Power'] = autos.Horse_Power.astype(float)
autos.sample()

Pintamos la matriz con la correlación de todas las variables.

%python
sns.heatmap(autos.corr(), square=True, annot=True)

matriz correlacion

El color blanco indica que las variables no están correlacionadas y cuanto más hacia el rojo oscuro mayor es la relación y cuanto más hacia el azul mayor correlación inversa.

En primera aproximación parecen datos poco interesantes porque todas las relaciones que muestran son claras: potencia con cilindros y con cilindrada (Displacement) y con aceleración…

Nos quedamos con la variable MPG que es Millas por Galón de Gasolina que viene a indicar la inversa del consumo del coche y lo cruzamos con los orígenes de fabricación, América, Europa y Asia.

%python
sns.boxplot(x="Origin", y="MPG", data=autos)

boxplot

Se muestra que los coches americanos son los menos ecológicos porque claramente tienen un valor más bajo de MPG que los asiáticos y los europeos.

Veamos como es la relación entre la inversa del consumo (MPG) y la potencia (Hose_Power)

%python
sns.lmplot("Horse_Power", "MPG", hue="Origin", data=autos)

lmplot

Aquí tenemos que se fabrican muy pocos coches europeos y asiáticos con muchos caballos de potencia, no tenemos puntos verdes y rojos a la derecha del gráfico y en cambio los coches americanos se fabrican en todo el espectro de la potencia (eje X), tenemos puntos azules a lo largo del eje.

Ordenamos las correlaciones de más relación a menos de la variable MPG.

%python
corr = autos.corr()
corr_dict = corr['MPG'].to_dict()
del corr_dict['MPG']
print("List the numerical features decendingly by their correlation with MPG:\n")
for ele in sorted(corr_dict.items(), key = lambda x: -abs(x[1])):
    print("{0}: \t{1}".format(*ele))
List the numerical features decendingly by their correlation with MPG:
 
Weight: -0.832244214832
Displacement: -0.80512694671
Horse_Power: -0.778426783898
Cylinders: -0.777617508126
Model_Year: 0.580540966091
Acceleration: 0.423328536903
La relacción más fuerte de MPG la tenemos con el peso que es superior a la potencia del coche.
Mostremos unos gráficos donde se crucen el consumo (MPG), potencia (Horse_Power) y el peso (Weight).
%python
# Pairplot. Para visualizar todas las relaciones entre las variables/columnas
sns.pairplot(autos[["MPG", "Horse_Power", "Weight", "Origin"]], hue="Origin", diag_kind="hist")

Pairplot

En estos gráficos se muestran que en América se fabrican coches mucho más pesados que en Europa y en Asia. Para que estos autos puedan alcanzar la misma velocidad que el resto tienen que incluirles motores más potentes lo que acaba derivando en un mayor consumo de gasolina, si en EEUU están interesados en bajar el consumo de gasolina tienen que conseguir cambiar el gusto por los coches grandes que tienen sus habitantes, además de fomentar el coche eléctrico.

Mostramos una gráfica de la inversa del consumo (MPG) por año del modelo del coche.

%python
sns.boxplot(x="Model_Year", y="MPG", data=autos)

model

Se observa la tendencia de las marcas de fabricar coches con un menor consumo, los años con un mayor MPG son los 3 últimos. Aquí si se aprecia el interés de las marcas, y del público de tender hacia coches más ecológicos y económicos en cuanto a gasto de combustible.

Analítica de datos con Python y Sofia2 (2/4). Gráficos de relació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