Introducción al análisis exploratorio de datos

1

¿Qué es y para qué sirve el análisis exploratorio de datos?

2

¿Cómo hacer un análisis exploratorio de datos?

3

Tipos de análisis de datos

4

Tipos de datos y análisis de variables

5

Herramientas de software para el análisis exploratorio de datos

6

Conociendo nuestros datos: palmerpenguins

7

Recolección de datos, limpieza y validación

8

Ejercicio de validación de datos

Quiz: Introducción al análisis exploratorio de datos

Análisis univariado

9

Explorando una variable categórica: conteos y proporciones

10

Estadística descriptiva aplicada: medidas de tendencia central

11

Estadística descriptiva aplicada: medidas de dispersión

12

Ejercicio de obtención de medidas de dispersión

13

Estadística descriptiva aplicada: distribuciones

14

Estadística descriptiva aplicada: funciones de densidad de probabilidad

15

Bonus: Teorema del límite central

Quiz: Análisis univariado

Análisis bivariado

16

Estableciendo relaciones: gráficos de puntos

17

Estableciendo relaciones: gráficos de violín y boxplots

18

Estableciendo relaciones: matrices de correlación

19

Limitantes de los coeficientes de correlación lineal

20

Estableciendo relaciones: análisis de regresión simple

21

Limitaciones del análisis de regresión simple

Quiz: Análisis bivariado

Análisis multivariado

22

Análisis de regresión múltiple

23

Visualización del análisis de regresión múltiple

24

Análisis de regresión logística

25

Paradoja de Simpson

26

¿Qué hacer cuando tengo muchas variables?

Quiz: Análisis multivariado

Conclusiones

27

Diversidad de gráficas al explorar datos

28

Continúa aprendiendo sobre EDA

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Estableciendo relaciones: matrices de correlación

18/28
Recursos

Aportes 27

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Resaltar valores con Pandas

penguins_df.corr().style.highlight_between(left=0.65, right=.99,color='lightgreen')

Matrices de Correlación

La correlación expresa hasta que punto dos variables estan relacionadas entre si. Es decir, si cambian conjuntamente. Para cuantificar que tanto estan relacionadas, se utiliza el concepto de Coeficiente de Correlacion.

Coeficiente de Correlación: cuantifica la intensidad de la relación lineal entre dos variables en un análisis de correlación

La Correlación no implica causalidad. Causalidad implica “Cuando algo (la causa) genera otra cosa (efecto)

Para los que no les gusta usar la función assign, acá les dejo otra forma de hacerlo usando la función apply:

Otra forma de pasar variables categóricas a numéricas.

processed_penguins_df['numeric_sex']= processed_penguins_df['sex'].map({'female':0, 'male':1})

Al haber hecho el sexo una variable discreta que solo puede tomar un valor de 0 o 1 al graficar se obtiene dos líneas horizontales, lo cual no muestra ninguna relación entre las dos variables para el ejemplo tome (bill_length_mm), por lo que el coeficiente de Pearson no tiene sentido en este caso.

los coeficiente que muestra el cluster map solo son valores teniendo en cuenta las varianzas del sexo respecto a la variable bill_length.

Un valor maś fácil de recordar para cmap y que también nos ayuda mucho a diferenciar es 'coolwarm'

sns.heatmap(
    preprocess_penguins_df.corr(),
    annot= True,
    cmap='coolwarm'
);

Este código nos da la siguiente gráfica:
.

la variable con mas correlaciones es la del peso del pinguino, q se relaciona fuertemente con el de largo de la aleta y se puede ententeder el porque, a mayor tamaño de aleta mas peso, la variable con la relacion negativa mas alta es la del tamaño de la aleta y la profundidad del pico, aunque no es muy alta (llegando al 60%) es una correlacion interesante, se podria crear un hipotesis de porque esto,tipo si les permite nadar mejor,a ver si se encuentra una correlacion directa

Ahora, para hallar la correlación se debe coocar así:
processed_penguins_df.corr(numeric_only=True)

la correlación en su naturaleza es aplicada a variables de base cuantitativa por ende no hace sentido aplicarla a variables de tipo categórica o nominal asi estan puedan expresarse como un numero.

Comentarios sobre correlación de Pearson

  • diseñado para variables cuantitativas continuas
  • la variable ‘year’ no es variable cuantitativa, puede ser variable categórica ordinal o variable temporal
  • Por más que a ‘Male’ le asignemos 1 y a ‘Female’ le asignemos 0, la variable ‘sex’ no se convierte en variable cuantitativa, siguen siendo variable categórica nominal dicotómica.

Excelente las explicaciones del profe. Deja ejemplos super simples y muy claros.

18. Estableciendo relaciones: matrices de correlación

“Expresa hasta qué punto dos variables están relacionadas entre sí. Es decir, si cambian conjuntamente.”

Coeficiente de correlación: utilizamos Correlación de Pearson

Cuantifica la intensidad de la relación lineal entre dos variables en un análisis de correlación.

r = 1 correlación positiva r = 0 sin correlación r = -1 correlación negativa

Correlación no implica causalidad

Causalidad Cuando algo (la causa) genera otra cosa (efecto)

Correlación Cuando dos o más eventos aparentan estar relacionados

Según la representación de la matriz podría decir que los que más se destacan son la correlación fuerte positiva entre el tamaño de las alas y el peso. También la correlación moderada positiva entre el tamaño de las alas y largo del pico. Y que la profundidad del pico y el tamaño del las alas tenga una correlación moderada negativa.

hola esto fue lo que hice para incluir las variables categóricas

data = df.copy()
d_object = data.loc[:,data.dtypes == object]
data.loc[:,data.dtypes == object] = d_object.apply(lambda s:pd.factorize(s)[0]) 

Si queremos el heatmap sin la columna del año:

heatmap_without_year = processed_penguins_df.loc[:, processed_penguins_df.columns!='year']
sns.heatmap(data=heatmap_without_year.corr(),
            cmap=sns.color_palette("coolwarm", as_cmap=True),
            center=0,
            vmin=-1,
            vmax=1,
            linewidth=1,
            annot=True)
correlacion para categorical varibles. categorical vs continus : point beserial correlation 2 variables binarias: tetrachoric correlation basada en el analisis de una tabla de contingencia 3 o mas varibles nominales : cramers V variables ordinales : polychoric correlation .
```js # Coeficiente y matriz de correlacion # la matriz de correlacion utiliza la correlacion de pearson # para establecer si dos variables tienen correlacion # Correlación positiva (r > 0): A medida que una variable aumenta, la otra también tiende a aumentar. # Correlación negativa (r < 0): Cuando una variable aumenta, la otra tiende a disminuir. # Sin correlación (r ≈ 0): No hay una relación lineal clara entre las variables. # Cuidado con la causalidad: Una correlación alta no implica que una variable cause cambios en la otra. # para la matriz de correlacion, primero se debe cambiar las variables categoricas a numericas df_procesado_corr = pd.get_dummies(df_procesado_3, columns=["species", "island", "sex"], drop_first=True) print(df_procesado_corr) # Calcular la matriz de correlación correlation_matrix = df_procesado_corr.corr() # Visualizar la matriz de correlación con un heatmap plt.figure(figsize=(10, 6)) sns.heatmap(correlation_matrix, annot=True, fmt=".2f", cmap="coolwarm", linewidths=0.5) plt.title("Matriz de Correlación - Dataset Penguins") plt.show() ```![](https://static.platzi.com/media/user_upload/image-ff618edc-a233-47ed-b6b1-844a82b19d18.jpg)
### **DEEPNOTE** #### **CÁLCULO DE LA MATRIZ DE CORRELACIÓN** ##### **Código:** processed\_penguins\_df.corr() ##### **Descripción del código:** 1. processed\_penguins\_df.corr(): Calcula la matriz de correlación para todas las columnas numéricas en el DataFrame processed\_penguins\_df. La correlación mide la relación lineal entre pares de variables, con valores entre -1 y 1. ##### **Descripción de la salida:** La salida es una tabla que muestra los coeficientes de correlación entre las columnas del DataFrame. Los valores positivos indican correlaciones directas (cuando una variable aumenta, la otra también), y los valores negativos indican correlaciones inversas (cuando una aumenta, la otra disminuye). La diagonal principal contiene 1s, ya que toda variable está perfectamente correlacionada consigo misma. #### **VISUALIZACIÓN DE LA MATRIZ DE CORRELACIÓN CON UN MAPA DE CALOR (HEATMAP)** ##### **Código:** sns.heatmap(     data=processed\_penguins\_df.corr(),     center=0,     vmin=-1,     vmax=1,     linewidths=0.5,     annot=True ) ##### **Descripción del código:** 1. sns.heatmap: Genera un mapa de calor utilizando Seaborn para visualizar la matriz de correlación. * data=processed\_penguins\_df.corr(): Pasa la matriz de correlación calculada. * center=0: Centra la escala de color en 0 para distinguir entre correlaciones positivas y negativas. * vmin=-1, vmax=1: Define el rango mínimo y máximo de los valores de la correlación. * linewidths=0.5: Establece el grosor de las líneas entre las celdas. * annot=True: Muestra los valores numéricos de las correlaciones dentro de cada celda. ##### **Descripción de la salida:** La salida es un gráfico de mapa de calor con colores que representan la magnitud y el signo de las correlaciones. * Las celdas más oscuras (azules) representan correlaciones negativas, mientras que las celdas más claras (naranjas/rojas) representan correlaciones positivas. * Los valores numéricos dentro de las celdas indican el coeficiente exacto de correlación. **VISUALIZACIÓN DEL MAPA DE CALOR CON UNA PALETA PERSONALIZADA** ##### **Código:** sns.heatmap(     data=processed\_penguins\_df.corr(),     cmap=sns.diverging\_palette(20, 230, as\_cmap=True),     center=0,     vmin=-1,     vmax=1,     linewidths=0.5,     annot=True ) ##### **Descripción del código:** 1. sns.heatmap: Igual que la Celda 2, genera un mapa de calor. * cmap=sns.diverging\_palette(20, 230, as\_cmap=True): Utiliza una paleta de colores personalizada (un gradiente que va de un tono a otro) para una mejor distinción entre valores positivos y negativos. ##### **Descripción de la salida:** La salida es un gráfico de mapa de calor similar al de la Celda 2, pero con una paleta de colores más elaborada que facilita la interpretación visual de las relaciones entre variables. #### **MAPA DE CALOR CON AGRUPACIÓN JERÁRQUICA (CLUSTERMAP)** ##### **Código:** sns.clustermap(     data=processed\_penguins\_df.corr(),     cmap=sns.diverging\_palette(20, 230, as\_cmap=True),     center=0,     vmin=-1,     vmax=1,     linewidths=0.5,     annot=True ) ##### **Descripción del código:** 1. sns.clustermap: Genera un mapa de calor con agrupación jerárquica utilizando Seaborn. * data=processed\_penguins\_df.corr(): Pasa la matriz de correlación como datos de entrada. * cmap=sns.diverging\_palette(20, 230, as\_cmap=True): Utiliza una paleta de colores divergente personalizada para diferenciar valores positivos y negativos. * center=0: Centra la escala de colores en 0. * vmin=-1, vmax=1: Define los límites mínimo y máximo para los valores de la correlación. * linewidths=0.5: Establece el grosor de las líneas entre las celdas. * annot=True: Muestra los valores de las correlaciones en cada celda. ##### **Descripción de la salida:** La salida es un mapa de calor con dendrogramas que agrupan las variables según similitudes en sus correlaciones. * Los colores representan la magnitud y el signo de las correlaciones: azul para negativas y rojo para positivas. * Los dendrogramas en los ejes muestran cómo las variables se agrupan jerárquicamente. #### **CONVERSIÓN DE UNA VARIABLE CATEGÓRICA A NUMÉRICA** ##### **Código:** processed\_penguins\_df = (     processed\_penguins\_df     .assign(         numeric\_sex=lambda df: df.sex.replace(\['female', 'male'], \[0, 1])     ) ) ##### **Descripción del código:** 1. processed\_penguins\_df.assign: Crea una nueva columna en el DataFrame. * numeric\_sex=lambda df: df.sex.replace(\['female', 'male'], \[0, 1]): * Utiliza la función replace para convertir los valores categóricos de la columna sex ('female' y 'male') en valores numéricos (0 y 1, respectivamente). ##### **Descripción de la salida:** La celda no muestra una salida directa, pero su efecto es agregar una nueva columna al DataFrame llamada numeric\_sex, donde: * 'female' se representa como 0. * 'male' se representa como 1. #### **NUEVO MAPA DE CALOR CON AGRUPACIÓN JERÁRQUICA INCLUYENDO LA VARIABLE NUMÉRICA CONVERTIDA** ##### **Código:** sns.clustermap(     data=processed\_penguins\_df.corr(),     cmap=sns.diverging\_palette(20, 230, as\_cmap=True),     center=0,     vmin=-1,     vmax=1,     linewidths=0.5,     annot=True ) ##### **Descripción del código:** Este código es idéntico al de la Celda 1, pero ahora utiliza la nueva matriz de correlación del DataFrame que incluye la variable numeric\_sex. ##### **Descripción de la salida:** La salida es un mapa de calor similar al de la Celda 1, pero incluye la nueva variable numeric\_sex. * Los valores de correlación reflejan cómo esta nueva variable se relaciona con las demás. * Los dendrogramas pueden variar ligeramente debido a la inclusión de la nueva variable.
### **EXPLICACIÓN MEJORADA SOBRE LA CORRELACIÓN** #### **Relación entre Variables** En clases anteriores, aprendiste a identificar relaciones entre pares de variables: * Ambas numéricas. * Una numérica y otra discreta. * Ambas discretas. Ahora, avanzamos un paso más para determinar **si estas variables están correlacionadas**. Esto significa analizar hasta qué punto los cambios en una variable se asocian con cambios en la otra. **Ejemplo:** Si observamos a los pingüinos, podemos medir: 1. La longitud de sus alas. 2. Su peso. Al parecer, un aumento en la longitud del ala está relacionado con un aumento en el peso. Esto tiene sentido: más longitud podría significar más masa y, por lo tanto, más peso. Así que hay una relación, pero necesitamos cuantificar. #### **CUANTIFICACIÓN DE LA RELACIÓN: COEFICIENTE DE CORRELACIÓN** Para medir la intensidad de la relación, usamos el **coeficiente de correlación de Pearson**, que mide la fuerza de una relación **lineal** entre dos variables. Es importante recalcar que este coeficiente solo funciona para relaciones lineales. ##### **¿Cómo Interpretarlo?** El coeficiente de correlación toma valores entre **-1 y 1**: * **1**: Correlación perfecta y positiva. * Un aumento en X implica un aumento proporcional en Y. * **0**: No hay correlación. * **-1**: Correlación perfecta y negativa. * Un aumento en X implica una disminución proporcional en Y. ##### **Ejemplos de Valores:** * **1.0**: Correlación perfectamente positiva. * **0.9**: Correlación alta. * **0.5**: Correlación baja. * **0**: Sin relación lineal. Aunque estos valores son útiles como guía, siempre es fundamental **visualizar los datos** para confirmar si tienen sentido en el contexto. #### **CORRELACIÓN VS. CAUSALIDAD** Un concepto crucial que debes entender es que **correlación no implica causalidad**. * **Causalidad**: Una variable (causa) genera un efecto en otra. * **Correlación**: Dos variables parecen estar relacionadas, pero esto no implica que una cause la otra. **Ejemplo de Causalidad:** Enciendes la estufa → El agua hierve. Aquí, encender la estufa **causa** que el agua hierva. **Ejemplo de Correlación sin Causalidad:** En verano: * Aumentan las ventas de helados. * También aumentan los casos de quemaduras solares. ¿Significa que comer helado causa quemaduras? No. Ambos fenómenos están relacionados porque ocurren en verano, pero uno no causa el otro. Para determinar la causalidad, necesitarías realizar experimentos más complejos y aplicar métodos estadísticos avanzados.
Pase las variables categoricas a discretas y obtuve las siguientes relaciones. ![](https://static.platzi.com/media/user_upload/image-47601354-7c10-42a3-8c6d-8bfaaeba2bac.jpg) Correlaciones: Correlación positiva significativa \- flipper\_length vs body\_mass -> 0.87 \- species vs bill\_length -> 0.78 \- bill\_length vs body\_mass -> 0.6 Correlación positiva media \- species vs island -> 0.46 \- body\_mass vs sex -> 0.42 \- sex vs bill\_depth -> 0.37 \- flipper\_length vs species -> 0.36
### Interpretación de un Heatmap Basado en una Matriz de Correlación #### Concepto Un heatmap, o mapa de calor, basado en una matriz de correlación es una herramienta visual que representa la correlación entre variables en un conjunto de datos. La matriz de correlación es una tabla que muestra los coeficientes de correlación entre variables. Estos coeficientes pueden variar de -1 a 1, donde -1 indica una correlación negativa perfecta, 0 ninguna correlación, y 1 una correlación positiva perfecta. El heatmap utiliza colores para representar estos valores, facilitando la identificación de relaciones entre las variables. La matriz de correlación se calcula utilizando el coeficiente de Pearson para variables cuantitativas o el coeficiente de Spearman para variables que no siguen una distribución normal o son ordinales. El heatmap se genera típicamente con bibliotecas de visualización en lenguajes de programación como Python (usando bibliotecas como Matplotlib, Seaborn) o R.
Métodos para el cálculo de la correlación, solo los 3 primeros los verán en sklearn: * `pearson` (ρ): El valor por defecto. Variables <u>cuantitativas </u>con distribución normal. Debe de cumplir con Homocedasticidad, significa que la varianza permanezca igual a lo largo de toda la variable, esto se visualiza si se mantiene la misma dispersión en las distintas zonas de la variable. Dos test estadísticos utilizados para contrastar la homocedasticidad son: test de *Goldfeld-Quandt* y el de *Breusch-Pagan*. * `spearman` (r): <u>Cualitativas </u>(ordinales o continua), sin distribución normal. También es una alternativa a pearson para variables cuantitativas de distribución NO normal. Menos sensible a outliers. * `kendall` (𝜏): <u>Cualitativas</u> (continuas u ordinales), sin distribución normal. Preferible cuando no hay muchos datos. Suele utilizarse en lugar del coeficiente de Spearman cuando el número de observaciones es pequeño o los valores se acumulan en una región * jackknife correlation: Una alternativa más robusta contra los outliers. Consiste en calcular todos los posibles coeficientes de correlación entre dos variables si se excluye cada vez una de las observaciones. El promedio de todas las *Jackknife correlations* calculadas atenúa en cierta medida el efecto del *outlier*. Para variables ordinales y cuantitativas. Mejor con gran cantidad de datos (muestra grande)Si dos variables tienen un pico o un valle común en una única observación, por ejemplo por un error de lectura, la correlación va a estar dominada por este registro a pesar de que entre las dos variables no haya correlación real alguna. Lo mismo puede ocurrir en la dirección opuesta. Si dos variables están altamente correlacionadas excepto para una observación en la que los valores son muy dispares, entonces la correlación existente quedará enmascarada. Cuando el estudio requiere minimizar al máximo la presencia de falsos positivos, a pesar de que se incremente la de falsos negativos, se puede seleccionar como valor de correlación el menor de entre todos los calculados en el proceso de *Jackknife*. A pesar de eso, si los outliers son muy extremos su influencia seguirá siendo notable. Quizás no logres amortiguar el efecto del outlier, pero sí puede al menos ayudarte a identificar la observación a la que pertenece Aquí les dejo un link para que aumenten sus conocimientos en el correlaciones, para qué tipo de datos se aplican y qué otras cosas hay que evaluar respecto a ellas [Correlacion lineal con python (cienciadedatos.net)](https://cienciadedatos.net/documentos/pystats05-correlacion-lineal-python.html)

Por alguna razon al momento de ejecutar, no me sale la nueva variable en la grafica y no entiendo porque si el codigo es exactamente el mismo que el de la clase

Creo que, en este caso, asignar el valor 1 al género masculino y el valor 0 al género femenino, para codificar la variable categórica sex es correcto.

Sin embargo, hay que tener en cuenta que, en algunos casos, asignar valores numéricos arbitrarios a las variables categóricas puede no ser apropiado, especialmente si los valores numéricos no tienen un significado real. En estos casos, es mejor utilizar técnicas de codificación de variables categóricas más avanzadas, como la codificación one-hot (o one-of-K), que crea una columna separada para cada categoría, y asigna el valor 1 en la columna correspondiente a la categoría y 0 en las demás columnas.

  • Las matrices de correlación son herramientas de visualización que se utilizan para entender las relaciones entre diferentes variables en un conjunto de datos. Una matriz de correlación es una tabla que muestra las correlaciones (normalmente coeficientes de correlación de Pearson) entre todas las posibles pares de variables en un conjunto de datos.

  • En una matriz de correlación, las celdas que están en la diagonal principal siempre son iguales a 1, ya que cada variable está perfectamente correlacionada con sí misma. Las celdas fuera de la diagonal principal indican el grado de correlación entre dos variables diferentes. El valor de una correlación puede variar entre -1 y 1, donde un valor de -1 indica una correlación negativa perfecta (las dos variables se mueven en direcciones opuestas), un valor de 0 indica que no hay correlación, y un valor de 1 indica una correlación positiva perfecta (las dos variables se mueven en la misma dirección).

  • Las matrices de correlación son útiles para explorar la relación entre diferentes variables y pueden ser utilizadas para identificar posibles relaciones importantes para análisis posteriores. Además, las matrices de correlación pueden ser utilizadas para identificar posibles problemas de multicolinealidad en un modelo de regresión.

  • Para crear una matriz de correlación en Python, podemos utilizar la biblioteca pandas. Por ejemplo, para crear una matriz de correlación para las variables numéricas en el conjunto de datos penguins, podemos utilizar el siguiente código:


Otra forma de viasualizarlo por categorias

from scipy.stats import pointbiserialr, spearmanr



# Calculamos el coeficiente de correlación de punto-biserie para las variables categóricas
island_corr, _ = pointbiserialr(penguins['island'].cat.codes, penguins['body_mass_g'])
sex_corr, _ = pointbiserialr(penguins['sex'].cat.codes, penguins['body_mass_g'])

# Calculamos el coeficiente de correlación de rango de Spearman para la variable numérica discreta
spearman_corr, _ = spearmanr(penguins['body_mass_g'], penguins['bill_depth_mm'])

# Creamos la matriz de correlación
corr_matrix = pd.DataFrame({'island': [1.0, island_corr, 0.0], 
                            'sex': [sex_corr, 1.0, 0.0],
                            'body_mass_g': [0.0, spearman_corr, 1.0]},
                            index=['island', 'sex', 'body_mass_g'])

# Mostramos la matriz de correlación
sns.heatmap(corr_matrix, cmap='coolwarm', annot=True)

Code:

# Heatmap matriz de correlaciones
# ==============================================================================
fig, ax = plt.subplots(nrows=1, ncols=1, figsize=(5, 5))

sns.heatmap(
    preprocess_penguins_df.corr(),
    annot     = True,
    cbar      = False,
    annot_kws = {"size": 8},
    vmin      = -1,
    vmax      = 1,
    center    = 0,
    cmap      = sns.diverging_palette(20, 220, n=200),
    square    = True,
    ax        = ax
)

ax.set_xticklabels(
    ax.get_xticklabels(),
    rotation = 45,
    horizontalalignment = 'right',
)

ax.tick_params(labelsize = 10)