Veremos la última fase del análisis de datos: comparaciones entre variables. Habiendo clasificado nuestras variables, podemos realizar comparaciones.
Librerías que vamos a utilizar:
import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns
Leemos los datos generados en el paso 3:
vehiculos = pd.read_pickle("vehiculospaso3.pkl")
Vamos a crear una función que nos hace un recuento entre dos variables:
def pivot_recuento(df, rows, columns, calc_field): df_pivot = df.pivot_table(values=calc_field, index=rows, columns=columns, aggfunc=np.size ).dropna(axis=0, how='all') return df_pivot
La puedes usar directamente, pasandole qué quieres ver como filas, qué como columnas.
Pero la utilizaremos para crear un heatmap o mapa de calor.
def heatmap_recuento_tipos(df, col1, col2): pivot_table = pivot_recuento(df,col1, col2, "year") sns.heatmap(pivot_table, annot=True, fmt='g') plt.ylabel(col1) plt.xlabel(col2) plt.show()
Entonces podremos crear un gráfico que nos compare, por ejemplo, “clase_tipo” (si son camionetas, coches pequeños, etc), con “consumo_tipo” (si usa combustible normal, premium, híbrido, etc).
heatmap_recuento_tipos(vehiculos, "clase_tipo", "combustible_tipo")
Lo que nos muestra:
De esta forma podemos observar que hay una gran cantidad de coches pequeños que utilizan gasolina normal (6619).
Utilizando ésta herramienta podemos comparar cualquiera de nuestras variables categóricas.
La siguiente función nos permite realizar comparaciones entre dos variables pero analizando la media.
def medias_por_categoria(col_grupo, col_calculo): vehiculos.groupby(col_grupo)[col_calculo].mean().plot.barh() plt.ylabel(col_grupo) plt.xlabel('Valores medios de {}'.format(col_calculo)) plt.show() columnas_numericas = vehiculos.select_dtypes(['int', 'float']).columns columnas_categoricas = vehiculos.select_dtypes(['object', 'category']).columns columnas_tipo = [col for col in vehiculos.columns if col.endswith("_tipo")]
Por ejemplo si queremos analizar el consumo de combustible comparado con la clase de vehículo, podemos indicárselo así:
medias_por_categoria('clase_tipo', "consumo_litros_milla")
Lo que nos arroja:
Donde podemos apreciar que las furgonetas consumen más litros por milla (en promedio) que las camionetas. O que los coches grandes consumen más que los coches familares.
La siguiente función nos permite comparar tres variables, por ejemplo, tal vez deseemos ver el co2 emitido por los diferentes tipos de carros considerando sus diferentes tipos de combustible.
def pivot_media(rows, columns, calc_field): df_pivot = vehiculos.pivot_table(values=calc_field, index=rows, columns=columns, aggfunc=np.mean ).dropna(axis=0, how='all') return df_pivot
Creamos un mapa de calor:
def heatmap_medias_tipos(col1, col2, col3): pivot_table = pivot_media(col1, col2, col3) sns.heatmap(pivot_table, annot=True, fmt='g') plt.ylabel(col1) plt.xlabel(col2) plt.show()
Y probamos el ejemplo que mencionamos hace un momento:
heatmap_medias_tipos("clase_tipo", "combustible_tipo", "co2")
Los que nos muestra:
Un dato que se puede apreciar en los coches pequeños es que los que usan Premiun emiten más co2 que los que usan combustible normal.
Éstas son solo algunas técnicas que se pueden utilizar para comparar variables, pero como te puedes dar cuenta, un análisis más extenso de las diferentes combinaciones entre variables nos puede arrojar mucha más información.