web analytics

Análisis estadístico descriptivo con Python / Anova, Pearson y Mapas de Calor

analisisdescriptivo

Análisis estadístico descriptivo con Python / Anova, Pearson y Mapas de Calor

 

[wp_ad_camp_1]

Índice
  1. Análisis estadístico descriptivo
    1. Value Counts / Contar Valores
  2. Básicos de agrupar
    1. Mapas de calor
  3. Correlación y causalidad
    1. Correlación de Pearson
    2. Valor p:
  4. ANOVA
    1. Puntuación de la prueba F:
    2. Valor P:
  5. Conclusión: variables importantes

Análisis estadístico descriptivo

Primero echemos un vistazo a las variables utilizando un método de descripción.

La función "describe" automáticamente calcula estadísticas básicas para todas las variables continuas. Cualquier valor de NaN se omite automáticamente en estas estadísticas.

Esta publicación es la continuación del post anterior Análisis de datos exploratorios con Python

Esto mostrará:

  • el recuento de esa variable.
  • la media aritmética.
  • la desviación estándar (std).
  • el valor mínimo.
  • el IQR (rango intercuartil: 25%, 50% y 75%).
  • el valor máximo.

Podemos aplicar el método "describe" de la siguiente manera:

df.describe()

 

analisisdescriptivo2

La configuración predeterminada de "describe" omite las variables de tipo objeto. Podemos aplicar el método "describe" en las variables de tipo 'objeto' de la siguiente manera:

df.describe(include=['object'])

 

Value Counts / Contar Valores

El conteo de valores es una buena forma de entender cuántas unidades de cada característica / variable tenemos. Podemos aplicar el método "value_counts" en la columna 'drive-wheels'. No olvide que el método "value_counts" solo funciona en series Pandas, no en Pandas Dataframes. Como resultado, solo incluimos un soporte "df ['drive-wheels']" no dos soportes "df [['drive-wheels']]".

df['drive-wheels'].value_counts().to_frame()

 

analisisdescriptivo3

Repitamos los pasos anteriores, pero guardemos los resultados en el dataframe "drive_wheels_counts" y cambiemos el nombre de la columna 'drive-wheels' a 'value_counts'.

[wp_ad_camp_2]

drive_wheels_counts = df['drive-wheels'].value_counts().to_frame()
drive_wheels_counts.rename(columns={'drive-wheels': 'value_counts'}, inplace=True)
drive_wheels_counts

 

analisisdescriptivo4

Podemos repetir el proceso anterior para la variable 'engine-location'.

engine_loc_counts = df['engine-location'].value_counts().to_frame()
engine_loc_counts.rename(columns={'engine-location': 'value_counts'}, inplace=True)
engine_loc_counts.index.name = 'engine-location'
engine_loc_counts.head(10)

 

analisisdescriptivo5

Examinar los recuentos de valores de la ubicación del motor no sería una buena variable predictiva del precio. Esto se debe a que solo tenemos tres autos con motor trasero y 198 con motor delantero, este resultado es sesgado. Por lo tanto, no podemos sacar ninguna conclusión sobre la ubicación del motor.

 

Básicos de agrupar

El método "groupby" agrupa los datos por diferentes categorías. Los datos se agrupan en función de una o varias variables y el análisis se realiza en los grupos individuales.

Por ejemplo, agrupemos por la variable "drive-wheels". Sabemos que hay 3 categorías diferentes de ruedas.

Si queremos saber, en promedio, qué tipo de rueda es más valiosa, podemos agrupar  "drive-wheels" y luego promediarlas.

Te puede interesar:  Inspiración SUD - App flutter de frases ya en PlayStore

Podemos seleccionar las columnas 'drive-wheels', 'body-style' y 'price', luego asignarlo a la variable "df_group_one".

df_group_one = df[['drive-wheels','body-style','price']]
df_group_one.head(10)

 

analisisdescriptivo6

Luego podemos calcular el precio promedio para cada una de las diferentes categorías de datos.

df_group_one = df_group_one.groupby(['drive-wheels'],as_index=False).mean()
df_group_one

 

analisisdescriptivo7

Según nuestros datos, parece que los vehículos con tracción trasera son, en promedio, los más caros, mientras que las 4 ruedas y las ruedas delanteras tienen aproximadamente el mismo precio.

[wp_ad_camp_3]

También puede agrupar con múltiples variables. Por ejemplo, agrupemos por 'drive-wheels' y 'body-style'. Esto agrupa el marco de datos por las combinaciones únicas 'drive-wheels' y 'body-style'. Podemos almacenar los resultados en la variable 'grouped_test1'.

df_gptest = df[['drive-wheels','body-style','price']]
grouped_test1 = df_gptest.groupby(['drive-wheels','body-style'],as_index=False).mean()
grouped_test1

 

analisisdescriptivo9

Estos datos agrupados son mucho más fáciles de visualizar cuando se convierten en una tabla dinámica. Una tabla dinámica es como una hoja de cálculo de Excel, con una variable a lo largo de la columna y otra a lo largo de la fila. Podemos convertir el marco de datos en una tabla dinámica utilizando el método "pivote" para crear una tabla dinámica a partir de los grupos.

En este caso, dejaremos la variable drive-wheels como las filas de la tabla y giraremos el body-style para convertirlas en las columnas de la tabla:

grouped_pivot = grouped_test1.pivot(index='drive-wheels',columns='body-style')
grouped_pivot

 

analisisdescriptivo10

A menudo, no tendremos datos para algunas de las celdas dinámicas. Podemos llenar estas celdas faltantes con el valor 0, pero cualquier otro valor también podría usarse. Cabe mencionar que la falta de datos es un tema bastante complejo y es un curso completo por sí solo.

grouped_pivot = grouped_pivot.fillna(0) 
grouped_pivot

 

Mapas de calor

Usemos un mapa de calor para visualizar la relación entre Body Style vs Price.

plt.pcolor(grouped_pivot)
plt.colorbar()
plt.show()

 

analisisdescriptivo11

El mapa de calor traza la variable objetivo (precio) proporcional al color con respecto a las variables 'drive-wheel' y 'body-style' en los ejes vertical y horizontal, respectivamente. Esto nos permite visualizar cómo se relaciona el precio con 'drive-wheel' y 'body-style'.

[wp_ad_camp_4]

Las etiquetas predeterminadas no nos transmiten información útil. Cambiemos eso:

fig, ax = plt.subplots()
im = ax.pcolor(grouped_pivot, cmap='RdBu')

#label names
r
ow_labels = grouped_pivot.columns.levels[1]
col_labels = grouped_pivot.index

#move ticks and labels to the center
ax.set_xticks(np.arange(grouped_pivot.shape[1]) + 0.5, minor=False)
ax.set_yticks(np.arange(grouped_pivot.shape[0]) + 0.5, minor=False)

#insert labels
ax.set_xticklabels(row_labels, minor=False)
ax.set_yticklabels(col_labels, minor=False)

#rotate label if too long
plt.xticks(rotation=90)

fig.colorbar(im)
plt.show()

 

Te puede interesar:  Clases en Python [Guía Completa]

analisisdescriptivo12

 

La visualización es muy importante en la ciencia de datos, y los paquetes de visualización de Python proporcionan una gran libertad. Vamos a profundiza sobre esto en otras publicaciones.

La pregunta principal que queremos responder en este módulo es "¿Cuáles son las características principales que tienen el mayor impacto en el precio del automóvil?".

Para obtener una mejor medición de las características importantes, observamos la correlación de estas variables con el precio del automóvil, en otras palabras: ¿cómo depende el precio del automóvil de esta variable?

 

Correlación y causalidad

Correlación: una medida del grado de interdependencia entre variables.

Causalidad: la relación entre causa y efecto entre dos variables.

Es importante saber la diferencia entre estos dos y que la correlación no implica causalidad. Determinar la correlación es mucho más simple que la causalidad determinante ya que la causalidad puede requerir experimentación independiente.

Correlación de Pearson

La correlación de Pearson mide la dependencia lineal entre dos variables X e Y.

El coeficiente resultante es un valor entre -1 y 1 inclusive, donde:

  • 1: correlación lineal positiva total.
  • 0: Sin correlación lineal, las dos variables probablemente no se afectan entre sí.
  • -1: correlación lineal negativa total.

Correlación de Pearson es el método predeterminado de la función "corr". Como antes, podemos calcular la correlación de Pearson de las variables 'int64' o 'float64'.

df.corr()

 

  1. cloud computing dice:

    very nice blog have a good info.

  2. MarkAcuri dice:

    Muchas gracias por el tutorial, me cae como anillo al dedo.

  3. CarlosP dice:

    Justo lo que andaba buscando para un proyecto de la Universidad. Muchas gracias!

    1. Rubén dice:

      Enhorabuena!

  4. Lorena dice:

    Todo bien, solo que hay unas partes que no comprendí =(

  5. Andrade dice:

    Gracias! Justo lo que estaba buscando.

  6. Barcia dice:

    Gracias por el tutorial!

  7. Angel Revilla dice:

    Todo bien! Unas partes aún tengo duda pero igual muchas gracias

  8. Marcos Cáceres dice:

    ¿Sabes cómo hacer para que te muestre la tabla anova completa y no solo los valores? Lo he hecho en excel pero necesito en python. Agradecería tu pronta respuesta.

    1. Rubén dice:

      Te cuento que yo también tuve esa duda, y me tocó presentar la tabla en excel pero los otros cálculos en python. Ya estoy viendo cómo hacerlo.

  9. Allieza dice:

    I think the admin of this web page is actually working
    hard in favor of his site, because here every stuff is quality
    based data.

  10. Andersson dice:

    Hola, creo que este trabajo es excelente, solo falta complementarlo con el aprendizaje en un red neuronal densa (al menos como un ejemplo) y ver si la predicción del precio es acertada.

    1. Rubén dice:

      Sí!
      Aún queda mucho por explicar. Gracias por el comentario.

Deja una respuesta

Subir