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: gráficos de violín y boxplots

17/28
Recursos

Aportes 33

Preguntas 1

Ordenar por:

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

Comparación entre las siguientes variables: Islan, and body_mass_g

Como se puede apreciar en el gráfico de scatterplot, muchos datos se sobrelapan en la isla: Dream entre las especies: Adelie y Chinstrap. Además, en las isla Biscoe se nota que la especie Gentoo es mucho más pesada en que la especie Adelie. Por último, en la isla Torgensen, solamente habitan pinguinos de la especie Adelie, aunque esta especie tiene presencia en todas las islas, mientras que Gentoo solamente tiene presencia en la isla Biscoe, y en cambio, Chinstrap tiene presencia solamente en la isla Dream.

Ahora en la gráfica de cajas y bigotes podemos observar que las especies Adelie, y Chinstrap pesan casi lo mismo en cualquier isla, mientras que la espeice Gentoo es la más pesada como se dijo anteriormente.

Por último, en la gráfica de violín y de scatter, podemos deducir que Chinstrap se acerca a una distribución normal, lo mismo con Adelie en las islas de Torgensen y Biscoe, pero en Dream se encuentra un poco hacia la izquierda.

Código de los gráficos

  • Grafico de puntos
sns.scatterplot(
    data=dataFrame,
    x='variable_categorica',
    y='variable_numerica',
    hue='variable categorica', #agrega un calor distinto por categoria
    palette=nombre_paleta
)
  • Agrega ruido a los puntos para obtener una mejor visualizacion de como se distribuyen los datos
sns.stripplot(
    data=dataFrame,
    x='variable_categorica',
    y='variable_numerica',
    palette=nombre_paleta
)
  • Grafico de boxplots mas grafico de puntos en un mismo grafico
ax = sns.boxplot(
    data=dataFrame,
    x='variable_categorica',
    y='variable_numerica',
    palette=nombre_paleta
)

#grafico de puntos
ax = sns.stripplot(
    data=dataFrame,
    x='variable_categorica',
    y='variable_numerica',
    color = 'black'    
)
  • Grafico de violin mas grafico de puntos en una misma grafica
ax = sns.violinplot(
    data=dataFrame,
    x='variable_categorica',
    y='variable_numerica',
    color='.8'
)

#Grafico de puntos
ax = sns.stripplot(
    data=dataFrame,
    x='variable_categorica',
    y='variable_numerica',
    palette=nombre_paleta    
)
  • Grafico de swarmplot. Muestra todos los puntos de los datos
sns.swarmplot(
    data=dataFrame,
    x='variable_categorica',
    y='variable_numerica',
    palette=nombre_paleta 
)

Island vs Body mass:

sns.swarmplot(
    data=processed_penguins_df,
    x='island',
    y='body_mass_g',
    hue='species',
    palette=penguin_color
);

Graficos de violin y boxplots

Cuando las variables son discretas los puntos se acumulan en linea vertical en un scatterplot lo que entrega poca informacion sobre la distribucion de los puntos.

Cuando analizas la relacion entre una variable numerica y una variable discreta conviene utilizar los graficos de boxplots. Para este caso, la variable discreta va representada en el eje de las x y las variable numerica en el eje de las y.

Noten que desde que utilizamos una variable categórica (o
variable cualitativa) automáticamente debemos pensar en las gráficas que se utilizan para este tipo de variable:

  • countplot
  • barplot
  • boxplot
  • violinplot
  • stripplot
  • swarmplot
  • factorplot

Eligiendo entonces los plots vistos en clase para ver la relación con una variable cuantitativa.

Conclusion: los pinguinos hembra son menos pesados que los machos y ademas los Gentoo son la especie con mayor peso.

  • Isla Biscoe:

    • En la isla Biscoe se encuentran los pingüinos Gentoo y Adelie
    • Se registraron pingüinos 119 de la especie Gentoo, son los mas pesados dentro de las tres especies con una media de 5050 gr y pesos máximos de 6300 gr.
    • Se registraron pingüinos 44 de la especie Adelie, se destacan por su peso promedio de 3750 gr que es ligeramente superior en comparación a su misma especie en las 2 otras islas.
    • La isla Biscoe consta del mayor registro de pinguinos (163), destaca por tener los pinguinos con peso promedio mas alto.

  • Isla Dream:

    • En la isla Dream se encuentran los pinguinos Chinstrap y Adelie
    • Se registraron pingüinos 68 de la especie Chinstrap sobrepasa su peso promedio (3700 g) y primer cuartil (3487) en comparación a los Adelie. Su distribución es la que más se asemeja a una distribución normal.
    • Se registraron pingüinos 55 de la especie Adelie presentan un peso promedio (3600 g) y peso máximo (4650 g) inferior a su misma especie en las 2 otras islas.
    • La isla Dream consta 123 registros de pingüinos.

  • Isla Torgersen:

    • En la isla Torgersen se encuentran solo los pingüinos Adelie
    • Se registraron pingüinos 47 de la especie Adelie presentan la distribución mas semejante a una normal en comparación de las otras especies y de su misma especie en las otras islas.
  • La especie Adelie no tiene cambios significativos en su masa.

Gráfico y código

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 6))

sns.violinplot(
    data=dfnn,
    x='island',
    y='body_mass_g',
    ax=ax1
)

sns.swarmplot(
    data=dfnn,
    x='island',
    y='body_mass_g',
    hue='sex',
    palette=sex_colour,
    ax=ax1
)

ax1.set_title('Violin Plot and Swarm Plot')

sns.boxplot(
    data=dfnn,
    x='island',
    y='body_mass_g',
    hue='sex',
    palette=sex_colour,
    ax=ax2
)

ax2.set_title('Box Plot')

# Ajustar el diseño de la figura
plt.tight_layout()

plt.show()

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

¿Qué pasa si tengo una variable discreta?

Se agrega un ruido aleatorio para visualizar mejor los datos

Según los resultados de la función que dejo aquí abajo, encuentro que la especie Adelie se encuentra en las 3 islas, la especie Gentoo solo en la isla Biscoe y la especie Chinstrap solo en la isla Dream.

Los gráficos me muestran que las especies adelie y chinstrap tienen una misma distribución de pesos, mientras que la especie gentoo pesa más que el resto, lo que hace la isla Biscoe se suba el promedio de pesos, ya que solo allí están los Gentoo.

def plot_penguins_weight(data):
    unique_islands = data['island'].unique()  # Obtener las islas únicas

    fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(12, 10))

    # Gráfico 1: Swarmplot
    ax = sns.swarmplot(data=data, x='island', y='body_mass_g', hue='species', palette='Set1', ax=axes[0, 0])
    ax.set_title('Swarmplot')

    # Gráfico 2: Violinplot
    ax = sns.violinplot(data=data, x='island', y='body_mass_g', color='.8', ax=axes[0, 1])
    ax.set_title('Violinplot')

    # Gráfico 3: Stripplot
    ax = sns.stripplot(data=data, x='island', y='body_mass_g', palette='Set1', ax=axes[1, 0])
    ax.set_title('Stripplot')

    # Gráfico 4: Boxplot
    ax = sns.boxplot(data=data, x='body_mass_g', y='island', palette='Set1', ax=axes[1, 1])
    ax.set_title('Boxplot')

    # Ajustar los espacios entre los subgráficos
    plt.tight_layout()

    # Mostrar el gráfico combinado
    plt.show()

# Utilizar la función para graficar por isla
plot_penguins_weight(processed_penguins_df)
  • Los gráficos de violín y los boxplots son dos tipos de gráficos utilizados en estadística y visualización de datos para representar distribuciones de datos y detectar valores atípicos.

  • Un gráfico de violín es un gráfico que muestra la distribución de los datos mediante una curva simétrica que se asemeja a un violín. Este gráfico combina un histograma o un gráfico de densidad en la parte central con dos brazos que representan la densidad de los datos en ambos lados. El grosor del violín en cualquier punto representa la densidad de los datos en ese punto.

  • Un boxplot, por otro lado, muestra la distribución de los datos mediante una caja con dos líneas que se extienden desde ella, conocidos como bigotes. La caja representa el rango intercuartil (IQR) de los datos, es decir, el rango entre el primer y tercer cuartil. La línea que divide la caja en dos partes iguales representa la mediana de los datos. Los bigotes se extienden hasta los valores mínimo y máximo dentro de 1,5 veces el rango intercuartil de los datos. Los valores que están más allá de los bigotes se consideran valores atípicos.

me parece interesante esta combinación:

ax = sns.violinplot(
    data= processed_penguins_df, 
    x="species", 
    y='flipper_length_mm',
    color='0.8'
)

ax = sns.swarmplot(
    data= processed_penguins_df, 
    x="species", 
    y='flipper_length_mm',
    palette=penguin_color
)

el resultado:

Habiendo puesto lo mismo (creo), no se porque me sale los puntos del stripplot en otro sitio.

sns.boxplot(
    data= processed_penguins_df,
    x='flipper_length_mm',
    y= 'species',
    hue='species',
    palette=penguin_color
)

ax = sns.stripplot(
    data= processed_penguins_df,
    x='flipper_length_mm',
    y='species',
    color='.3'
)

Alguien me puede decir el fallo?

Llegué a éste interesante gráfico para el desafío, el cual creo es bastante legible y entendible; Donde podemos observar la distribución del peso de los pingüinos en cada isla y como ésta se ve influenciada por las especies que se encuentran en cada isla según su densidad de población.

Gráfica:


Código:

ax = sns.violinplot(
    data=process_penguins_df,
    x='island',
    y='body_mass_g',
    color='.8'
)

ax = sns.swarmplot(
    data=process_penguins_df,
    x='island',
    y='body_mass_g',
    hue='species',
    palette=penguin_color
)

Use conocimientos previos para tratar de llegar a algunas conclusiones relacionadas con la localización de las diferentes especies y sus pesos.

Suponiendo que los datos no presentan sesgos en cuanto a la captura de estos mismos, podríamos decir que:

  • La isla Biscoe es la mas poblada
  • La distribución de las especies no es igual en todas las islas

  • Existen especies que únicamente habitan una sola isla de las que están presentes en los datos

  • La especie Adelie parece ser muy exitosa pues es la única que tiene presencia en las 3 islas consideradas

  • Nuestra especie de interés Adelie no presenta cambios significativos en su masa entre las diferentes islas, esto lo podemos apreciar porque en todas sus distribuciones son muy similares

  • En cuanto a la isla Biscoe, no solo podemos decir que es la isla mas habitada, si no que también posee a los pingüinos de mayor peso, los pertenecientes a la especie Gentoo, esto podria estar indicando una isla de mayor tamaño y/o un acceso a recursos mucho mayor

De todo esto me queda una pregunta, si las condiciones en la isla Biscoe son tan favorables como insinúa mi análisis, por que no hay presencia de la especie Chinstrap en esta?

Enjambres y violines: ``` sns.violinplot( data=processed\_penguins\_df, x='island', y='body\_mass\_g', hue='island', palette=island\_color) swarmplot = sns.swarmplot( data=processed\_penguins\_df, x='island', y='body\_mass\_g',) plt.ylim(2000, 7000) ``` ![](https://static.platzi.com/media/user_upload/image-62c8a4a1-87c1-4c8e-aea5-7f6a3284d821.jpg)
A simple vista con solo la gráfica de violín, podría decir que la distribución de las islas Torgersen y Dream, son muy similares e inclusive con valores cercanos en estadisticos. ![](https://static.platzi.com/media/user_upload/image-d5f462c5-0bca-4728-974f-4b70a9b7bc70.jpg)![](https://static.platzi.com/media/user_upload/image-50e7f361-42e8-4166-b1ff-605dcc91d080.jpg) Pero aplicando una combinación de stripplot y violin, ya no tan similares. ![](https://static.platzi.com/media/user_upload/image-d125f1ad-4dd8-4a31-989f-15166bbee785.jpg) Luego cambiando el stripplot por un swarmplot se puede relacionar mejor la forma de la distribución con los datos. ![](https://static.platzi.com/media/user_upload/image-ae8968dd-127a-4b25-85bc-e4883b96ab6d.jpg)
En la gráfica se observa que en la especie "Adelie" está presente en las tres islas. La especie "Gentoo" solo está presente en la isla "Biscoe" y que la especie "Chinstrap" comparte la isla "Dream" cn la especie "Adelie." Así también se observa claramente que la especie "Gentoo" es la más pesada de todas las especies. Y que las especies "Adelie" y "Chinstrap" tienen pesos similares. ![](https://static.platzi.com/media/user_upload/2.%20Swarmplot-d8bfc8c9-9d16-4bb5-8d23-c08e78e9ede6.jpg)
Comparación usando swarmplot para island y body\_mass\_g: ```python sns.swarmplot( data=processed_penguins_df, x="island", y="body_mass_g", hue="island", ) ```sns.swarmplot( data=processed\_penguins\_df, x="island", y="body\_mass\_g", hue="island",)
Les dejo aquí esta graficación que me pareció muy descriptiva:sns.boxplot(    data= pg,    x= 'island',    y= 'body\_mass\_g',    hue= 'species',    palette= penguin\_color) sns.violinplot(    data= pg,    x= 'island',    y= 'body\_mass\_g',    hue= 'species',    palette= penguin\_color,    alpha= 0.4) sns.stripplot(    data= pg,    x= 'island',    y= 'body\_mass\_g',    hue= 'species',    palette= penguin\_color,    alpha= 0.7) ```js sns.boxplot( data= pg, x= 'island', y= 'body_mass_g', hue= 'species', palette= penguin_color ) sns.violinplot( data= pg, x= 'island', y= 'body_mass_g', hue= 'species', palette= penguin_color, alpha= 0.4 ) sns.stripplot( data= pg, x= 'island', y= 'body_mass_g', hue= 'species', palette= penguin_color, alpha= 0.7 ) ```![](https://static.platzi.com/media/user_upload/image-2e3ccd29-547e-42e4-bb56-41f1253b08f8.jpg)

Relación peso - isla

Para este caso me pareció que la mejor forma de visualizarlo es con grafica de puntos y gráficos de caja. Estas son las observaciones que saqué al respecto.

  • Los pingüinos Adelie están presentes en las tres islas. Sin embargo, las especies Gentoo y Chinstrap solo viven en las islas Biscoe y Dream respectivamente.
  • Los Gentoo son la especie de pingüinos que mas pesa. Su diferencia es bastante notable puesto que los pingüinos mas pesados de las otras dos especies no llegan ni a la media del peso de los Gentoo.
  • El pinguino que menos pesa es un Chinstrap.
sns.swarmplot(
    data = processed_penguins_df,
    y = 'body_mass_g',
    x = 'island',
    hue = 'species',
    palette = 'icefire',
    dodge = True
);

sns.boxplot(
    data=processed_penguins_df,
    y='body_mass_g',
    x='island',
    hue='species',
    palette='coolwarm'
);

Luego de esto, separé la información por sexo lo que nos deja ver que:

  • Las hembras pesan menos que los machos en todas las especies.
  • El pingüino menos pesado de todas las especies es hembra y el mas pesado es macho.
sns.catplot(
    data=processed_penguins_df,
    y='body_mass_g',
    x='island',
    hue='species',
    palette='Paired',
    col='sex',
    kind='box'
);
Les dejo las relaciones entre las variables de la base de datos divididas por la isla de la que provienen. ![](https://static.platzi.com/media/user_upload/image-1431ee2f-651e-4624-9748-d74d036952ee.jpg) Se observan varias conclusiones potenciales, sin embargo, la más importante que observo a simple vista es que: 1. Los picos de los pingüinos de la isla Biscoe son significativamente más largos, pero no más anchos que los de la isla Dream. 2. Los picos de los pingüinos de la isla Torgersen son bastante más pequeños en general que los del resto. Esto seguramente se deba a un motivo adaptativo que habría que estudiar a profundidad, probablemente asociado al tipo de alimentos disponible en la isla Dream.

VIEJO, VIEJO, VIEJO, voy en la mitad del curso y uffff, que belleza.
te explica las cosas bien hermano, bien.
ósea, wao, muy satisfecho con el contenido.

Los mas gorditos estan en la isla SISCOE, la especie ADELE, en las 3 islas mantiene su peso, entonces son adaptables a cualquier isla, mientras q gentoo y chimsrap, crecen en islas por separado![](

sns.swarmplot(
    data=processed_penguins_df,
    x="species",
    y="flipper_length_mm",
    hue="species",
    palette=penguin_color
)

![](
Como se puede observar en el swarmplot, nos muestra algo muy interesante y es que es la isla Torgersen no hay otra especie más que la Adelie. Si observamos la isla Biscoe nos podremos dar cuenta que hay tanto Gentoo como Adelie, sin embargo los pinguinos más gordos son los Gentoo.
En la última isla, la isla Dream , son muy similares en cuanto a peso ambas especies, sin embargo el swarmplot nos ayuda a darnos cuenta que tanto el pinguino menos pesado, como el más pesado, es de la especie Chinstrap.

Conclusiones

  • En la isla Torgersen solo se pueden encontrar la especie Adelie, aunque esta especie se puede localizar en las demás islas.

  • Sin contar a la especie Adelie, En la isla Biscoe se encuentran Los Gento que a su vez tienen un mayor nivel de masa corporal medida en gramos.

  • En la ista Dream conviven las especies Adelie y Chinstrap. Su distribución del peso corporal en gramos es semejante entre estas especie.

Inicialmente observo que la especie Adelie se encuentra en las tres islas, mientras que los Gentoo se localizan en la isla Biscoe y los Chinstrap se localizan solamente en la isla Dream.

Se observa también que en la isla Biscoe los pinguinos Adelie tienden a tener una mediana de masa corporal superior a la de los Adelie de las otras islas. Por otra parte se observa que los pinguinos Gentoo, que son los de mayor masa, superan en general por 500g al pinguino Adelie más pesado de la isla Biscoe. De la isla Biscoe es posible que exista una mayor cantidad de recursos ya que es el hogar de los pinguinos Gentoo (los más pesados) y los Adelie más pesados, además se tomó información de 163 pinguinos en la isla Biscoe, lo que conduce a la hipótesis de que en este sitio existe una mayor cantidad de pinguinos, mientras que la isla Dream se tomaron registros de 123 pinguinos y en la isla Torgersen se tomaron muestras de solamente 47 pinguinos.

Se realiza revisión enfocada por sexo, comenzando con los pinguinos macho, que tienden a representar los pinguinos más pesados.

Los pinguinos hembra representan en su mayoría los pinguinos menos pesados.

Conclusión: los pingüinos de la isla Biscoe son más gorditos

fig,ax=plt.subplots(ncols=1,nrows=2,figsize=(8,6),sharex=True)
sns.violinplot(
    ax=ax[0],
    data=preprocessed_penguins_df,
    x='body_mass_g',
    y='island'
)
sns.boxplot(
    ax=ax[1],
    data=preprocessed_penguins_df,
    x='body_mass_g',
    y='island'
)
sns.scatterplot(
    ax=ax[1],
    data=preprocessed_penguins_df,
    x='body_mass_g',
    y='island',
    color='gray'
)

![](

Se observa que la raza Adelie la distribución de masas más que por la isla la afecta es la raza o especie del pinguino, puesto que la distribución de masas es grande en las islas donde existen varias especies de pinguinos como Biscoe island

Otra clase que hace que se uno se siga enamorando de Seaborn.