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

Prepárate para tu próximo empleo comprando hoy a precio especial

Antes: $249

Currency
$209
Suscríbete

Termina en:

8 Días
3 Hrs
9 Min
26 Seg

Estadística descriptiva aplicada: distribuciones

13/28
Recursos

Aportes 36

Preguntas 5

Ordenar por:

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

Les dejo los códigos de las graficas CDF

Primera:

cdf_flipper_length_mm.plot()

q = 200
p = cdf_flipper_length_mm.forward(q)

plt.vlines(
    x=q,
    ymin=0,
    ymax=p,
    color='black',
    linestyle='dashed'
)

plt.hlines(
    y=p,
    xmin=pmf_flipper_length_mm.qs[0],
    xmax=q,
    color='black',
    linestyle='dashed'
)

plt.plot(q,p, 'ro')

Segunda:

cdf_flipper_length_mm.step ( )
p_1 = 8.25 # Specify probability
P_2 = 8.75
ps = ( 0.25 , 0.75 ) # IQR
qs = cdf_flipper_length_mm.inverse(ps)
plt.vlines (
    x = qs,
    ymin = 0,
    ymax=ps,
    color='black',
    linestyle='dashed'
)

plt.hlines(
   y=ps,
   xmin=pmf_flipper_length_mm.qs[0],
   xmax=qs,
   color='black',
   linestyle='dashed'
)

plt.scatter(
   x=qs,
   y=ps,
   color='red',
   zorder=2
)

Estadistica Descriptiva Aplicada: Distribuciones

Funcion de Probabilidad de masas (PMFs)

Nos dice la probabilidad de que una variable aleatoria discreta tome un valor determinado. Ejemplo, la probabilidad de que en un salon hayan personas con una edad especifica

Funcion de Distribucion Acumulada (CDFs)

Devuelve la probabilidad de que una variable sea igual o menor que un valor determinado. Ejemplo, la probabilidad de que en un salon hayan personas menores o iguales a una edad especifica.

Función de Probabilidad de Densidad (PDFs)

Determine la probabilidad de que una variable continua tome un valor determinado. Ejemplo, la probabilidad de que en el salón hayan personar con una altura especifica

Con Pandas, el rango interquartil muestra que 25% es 190 y 75% es 213, mostrando una clara consistencia con la gráfica:

pmf_flipper_length_mm.describe()

Me fascinó esto de hacer preguntas de una probabilidad específica con empiricaldist, no sabía que se podía hacer así.

Calculo de la Funcion Empirica de Probabilidad Acumulada (ECDFs)

  • Calculo de ECDFs utilizando seaborn
sns.ecdfplot(
    data=dataFrame,
    x='nombre_variable'
)
  • Calculo de la ECDFs en formato de tabla utilizando empiricaldist
#calculo de la funcion de probabilidad acumulada
cdf_variable = empiricaldist.Cdf.from_seq(
    dataFrame.nombre_variable,
    normalize=True
)
cdf_variable
  • Calculo de la probabilidad de una variable que sea igual o menor a un valor determinado con La ECDFs
q = 200 #valor de referencia. Todos los menores o iguales a q
p = cdf_variable.forward(q) #probabilidad
print(q, p)
  • Grafica de la probabilidad de que la variable tenga un valor igual o menor a un valor determinado con la ECDFs
#grafica de Cdf
cdf_variable.plot()

#calcular la probabilidad de forma manual
q = 190
p = cdf_variable.forward(q)

#trazo de linea vertical en la grafica
plt.vlines(
    x=q,
    ymin=0,
    ymax=p,
    color='black',
    linestyles='dashed'
)

#trazo de linea horizontal en la grafica
plt.hlines(
    y=p,
    xmin=pmf_variable.qs[0],
    xmax=q,
    color='black',
    linestyles='dashed'
)

plt.plot(q, p, 'ro')
  • Calculo de un valor en funcion de una probabilidad dada con la ECDFs
#definir la probabilidad
ps = 0.25
#obtener el valor dada la probabilidad
qs = cdf_variable.inverse(ps)
#mostrar los valores
print(ps, qs)
  • Relacion entre el IQR y la grafica de la ECDFs
#calculo de un valor en funcion de la probabilidad dada
cdf_variable.step()

#especificar probabilidades
p_1 = 0.25
p_2 = 0.75

#IQR
ps = (0.25, 0.75)

#obtener el valor dada la probabilidad
qs = cdf_variable.inverse(ps)

plt.vlines(
    x=qs,
    ymin=0,
    ymax=ps,
    color='black',
    linestyles='dashed'
)

plt.hlines(
    y=ps,
    xmin=pmf_variable.qs[0],
    xmax=qs,
    color='black',
    linestyles='dashed'
)

plt.scatter(
    x=qs,
    y=ps,
    color='red',
    zorder=2
)

Del codigo anterior, se muestra que los valores obtenidos tanto para la probabilidad 0.25 como para la 0.75 coinciden con los valores correspondientes al IQR

  • Comparando distribuciones. Se realiza cuando la variable en estudio pertenece o varias categorias. Entonces, para cada categoria vamos a tener una distribucion
sns.ecdfplot(
    data=dataFrame,
    x='nombre_variable',
    hue='nombre_category',
    palette=paleta_de_color_definida
)

La libreria empiricaldist nos permite tener un mayor control de las probabilidades que la libreria seaborn. Seaborn es utilizada para un vistazo general de las probabilidades; para responder preguntas de probabilidad y tener una mejor visualizacion se utliza empiricaldist

esta clase deberia estar antes de estadística descriptiva , o deberían usar la misma metodología que esta buena

Calculo de la Funcion de Probabilidad de Masas (PMFs)

  • Funcion de Probabilidad de Masas utilizando seaborn
sns.histplot(
    data=dataFrame,
    x='nombre_variable',
    binwidth=1,
    stat='probability' # parametro que convierte los conteos en probabilidades 
)                      # PMFs
  • Tabla de PMFs de una variable del dataFrame utilizando la librería empiricaldist. Esta libreria posee muchas funcionalidades relacionadas a las probabilidades
pmf_variable = empiricaldist.Pmf.from_seq(
    df.nombre_variable,
    normalize=True  #True muestra las probabilidades, False muestra los conteos
)
  • Gráfica de las PMFs con empiricaldist
pmf_variable.bar()
  • Calculo de la PMFs de un valor especifico

La función de probabilidad de densidad se utiliza para variables continuas. El profesor tiene un error conceptual al explicarla. Y es que según una distribución de probabilidad continua. La probabilidad de un suceso en un punto es 0. Ya que los intervalos se calculan con integrales (el área calculada entre el piso y la curva de la distribución entre los puntos).
Desde un punto de vista teórico, según un pdf, la probabilidad en un punto es de 0.

Empiricaldist: Libreria de Python que representa distribuciones empiricas.

En orden del Deepnote esta lección es la 13 no la 12

En caso de que quieran ver los datos de las probabilidades en porcentajes

result = empiricaldist.Pmf.from_seq(processed_penguins_df.flipper_length_mm)

result_1 = result[:].map('{:.2%}'.format)
result_1
cdf_flipper_length_mm.step ( )
p_1 = 8.25 # Specify probability
P_2 = 8.75
ps = ( 0.25 , 0.75 ) # IQR
qs = cdf_flipper_length_mm.inverse(ps)
plt.vlines (
    x = qs,
    ymin = 0,
    ymax=ps,
    color='black',
    linestyle='dashed'
)

plt.hlines(
   y=ps,
   xmin=pmf_flipper_length_mm.qs[0],
   xmax=qs,
   color='black',
   linestyle='dashed'
)

plt.scatter(
   x=qs,
   y=ps,
   color='red',
   zorder=2
)
Si alguna vez te has preguntado cómo los matemáticos y estadísticos calculan las chances de que ocurra algo, ¡este post es para ti! Vamos a desglosar tres conceptos clave de una manera sencilla: la Función de Probabilidad de Masas (PMF), la Función de Distribución Acumulada (CDF) y la Función de Densidad de Probabilidad (PDF). ### ¿Qué es la PMF? Imagina que tienes un dado de seis caras y quieres saber la probabilidad de que al lanzarlo, caiga un número específico. La PMF es una herramienta que te dice exactamente eso. Para cada cara del dado (1, 2, 3, 4, 5, 6), la PMF te dirá que la probabilidad de que salga ese número es de 1 en 6. Es como un mapa que te muestra cómo se distribuyen las probabilidades para cada resultado posible de un experimento con resultados contables. **Puntos clave para recordar:** * La suma de las probabilidades de todos los posibles resultados siempre debe dar 1. * La PMF solo se usa para situaciones donde puedes contar los posibles resultados, como lanzar un dado o sacar una carta de una baraja. ### ¿Y la CDF? Ahora, digamos que no solo te interesa un número específico, sino saber la probabilidad de obtener un número igual o menor a cierto valor. Ahí es donde entra la CDF. Usando el ejemplo del dado, si queremos saber la probabilidad de sacar un 3 o menos, sumamos las probabilidades de sacar 1, 2, o 3. Esto nos da 1/2, lo que significa que hay un 50% de posibilidad de que al lanzar el dado, obtengamos un 3 o menos. **Puntos clave para recordar:** * La CDF siempre aumenta o se mantiene constante a medida que avanzas hacia números mayores. * Va de 0 a 1, empezando en cero antes de sacar cualquier número y llegando a 1 cuando has contado todas las posibilidades. ### Finalmente, ¿Qué es la PDF? La PDF es similar a la PMF, pero se usa para situaciones donde los resultados no son cosas que puedes contar fácilmente, sino que varían en un rango continuo. Por ejemplo, el tiempo que te tardas en ir al trabajo. La PDF te diría cómo se distribuyen las probabilidades a lo largo de diferentes intervalos de tiempo, ayudándote a entender, por ejemplo, la probabilidad de que tardes entre 25 y 35 minutos en llegar. **Puntos clave para recordar:** * La integral (una suma de muchas partes pequeñas) de la PDF a lo largo de todo el rango posible de resultados debe ser 1, indicando que cubre todas las posibilidades. * Aunque la PDF puede mostrarte valores muy altos o bajos, las probabilidades que calculas con ella siempre estarán entre 0 y 1. ### Conclusión Estos conceptos, PMF, CDF y PDF, son las herramientas básicas para entender las probabilidades en diferentes situaciones, ya sea lanzando dados, jugando cartas o calculando tiempos de viaje. Nos ayudan a modelar el mundo de una manera matemáticamente precisa, permitiéndonos hacer predicciones y tomar decisiones informadas en ciencia, ingeniería, estadísticas y más. Espero que esta explicación te haya ayudado a entender un poco mejor estos conceptos fundamentales de probabilidad.

A modo de aporte les comparto: Quise hacer una función con el fin de graficar la curva de probabilidad acumulada de modo tal que se pueda utilizar rápidamente con cualquiera de las columnas y el valor que queramos consultar, así quedó:

def graf_prob_acum(columna, medida):
    
    cdf_variable = empiricaldist.Cdf.from_seq(
    process_penguin_df[columna],
    normalize = True
    )
    
    cdf_variable.plot()

    q = medida
    p = cdf_variable.forward(q)
    
    plt.title(columna, loc = 'left')

    plt.vlines(
        x=q,
        ymin=0,
        ymax=p,
        color='black',
        linestyle='dashed'
    )

    plt.hlines(
        y=p,
        xmin=cdf_variable.qs[0],
        xmax=q,
        color='black',
        linestyle='dashed'
    )

    plt.plot(q,p, 'ro')

De esta forma podemos realizar cualquier gráfica únicamente invocando la función:

print(graf_prob_acum('body_mass_g', 3500))

Creo que incluso se podría modificar la función para que quede mucho más genérica y se pueda utilizar con cualquier otro dataframe, añadiendo el parámetro de entrada dataframe y reemplazándolo por el de pinguinos.

empiricaldist

Es una librería de Python que proporciona herramientas para trabajar con distribuciones empíricas, es decir, distribuciones que se basan en datos reales y no en una función matemática teórica.


Esta librería ofrece una forma sencilla de obtener información sobre las distribuciones empíricas, como el cálculo de estadísticas descriptivas, la visualización de histogramas, la estimación de la densidad de probabilidad y la generación de muestras aleatorias


Aquí te muestro un ejemplo de cómo utilizar empiricaldistel conjunto de datos de penguinspara obtener la distribución empírica de la longitud del pico de los pingüinos:

Con Python

import empiricaldist
import palmerpenguins

# Cargamos el dataset de penguins
penguins = palmerpenguins.load_penguins()

# Seleccionamos la longitud del pico de los pingüinos Adelie
adelie_bill_length = penguins.loc[penguins['species']=='Adelie', 'bill_length_mm']

# Creamos una distribución empírica a partir de los datos
adelie_bill_length_dist = empiricaldist.EmpiricalDist(adelie_bill_length)

# Calculamos algunas estadísticas descriptivas
print("Media:", adelie_bill_length_dist.mean())
print("Mediana:", adelie_bill_length_dist.median())
print("Desviación estándar:", adelie_bill_length_dist.std())

# Visualizamos el histograma de la distribución empírica
adelie_bill_length_dist.plot()

En este ejemplo, cargamos el conjunto de datos de penguinsutilizando la función load_penguins()de la librería palmerpenguins, y luego seleccionamos la longitud del pico de los pingüinos de la especie Adelie. A continuación, creamos una distribución empírica utilizando la clase EmpiricalDistde empiricaldist, a partir de los datos de longitud del pico de los pingüinos Adelie. Luego, calculamos algunas estadísticas descriptivas como los medios, la mediana y la desviación estándar de la distribución empírica. Finalmente, visualizamos el histograma de la distribución empírica utilizando el método plot().

Función de probabilidad de masas (PMFs):

  • La función de probabilidad de masas (PMF) es una función que describe la probabilidad de que una variable aleatoria discreta tome un valor específico. En otras palabras, la PMF es una función que asigna una probabilidad a cada posible valor de una variable aleatoria discreta. La PMF se denota a menudo como P(X = x), donde X es la variable aleatoria y x es el valor para el cual queremos calcular la probabilidad.

Función de distribución acumulada (CDFs):

  • Un ejemplo de una CDF sería el tiempo que tarda un autobús en llegar a una parada de autobús. Si la media de tiempo es de 10 minutos y la desviación estándar es de 2 minutos, podemos usar una distribución normal para modelar la variable aleatoria. La CDF para esta variable aleatoria nos daría la probabilidad acumulada de que el autobús llegue en un tiempo igual o menor a cierto valor, como F(8) = 0.1587, F(10) = 0.5, y F(12) = 0.8413.

Función de probabilidad de densidad (PDFs):

  • Un ejemplo de una PDF sería la altura de una población. La variable aleatoria es la altura de una persona, que puede tomar cualquier valor entre 0 y infinito. La PDF para esta variable aleatoria sería una función que nos da la probabilidad relativa de que una persona tenga una altura en un intervalo específico, como f(x) = 0.05 para alturas entre 160 y 170 cm, f(x) = 0.10 para alturas entre 170 y 180 cm, y f(x) = 0.03 para alturas entre 180 y 190 cm.

si tienen problemas para ejecutar el comando empiricaldist esto se debe a que no lo tienes instalado.
No te preocupes yo te ayudo 😏:
paso 1:

  • instala empiricaldist ,como ?
!pip install empiricaldist

paso 2:

  • importalo
import empiricaldist

no te olvides dar ♥️🙃

A mi me funciona pero sin elempiricaldist. que va alcomienzo, es decir en vez de from empiricaldist import Pmf

empiricaldist.Pmf.from_seq(df_penguins.flipper_length_mm, normalize=True)
’’'
Me sirve:

from empiricaldist import Pmf

pmf_flipper_length_mm = Pmf.from_seq(df_penguins.flipper_length_mm, normalize=True)
print(pmf_flipper_length_mm)

emipircaldist no me funcionaba (23/ENERO/2023

https://anaconda.org/conda-forge/empyrical-dist

y si la instale usando pip PERO al ejecutarla me decia que falta un modulo llamado spicy

yo uso conda ya que me parce mas facil, ahi use este codigo << conda install -c conda-forge empyrical-dist >> y me descargo la libreria para importarla y usarla en un cuaderno la escribo empyrical_dist y de esta forma no me presenta problema

segun lo que lei esta libreria no cumple con unos estandares asi gg

No entiendo para que sirve la función .forward() si sin ella igual serviría.
Tampoco porqué siempre ponía pmf_flipper_length_mm.qs[0], y no cdf_flipper_length_mm.qs[0], si aún asi da el mismo resultado.
Debería explicar un poco mejor el código y más si estaba hecho y solo era copiar y pegarlo.

import plotly.figure_factory as ff

hist_data = []
hist_color = []

group_labels = ['Adelie', 'Gentoo', 'Chinstrap'] # name of the dataset

for x in group_labels:
    hist_data.append(processed_penguins_df[processed_penguins_df['species'] == x]['flipper_length_mm'])
    hist_color.append(penguin_color[x])

fig = ff.create_distplot(hist_data, group_labels, histnorm='probability density', bin_size=1, colors=hist_color)
fig.show()
fig = px.ecdf(processed_penguins_df, x="flipper_length_mm", color='species', marginal="box", color_discrete_map=penguin_color)
fig.show()

Otra clase muy enriquesedora, gran curso 🥇

Es interesante el uso de las distribuciones para obtener datos de probabilidad de los campos numericos y categoricos. Es muy util a tener en cuenta en un trabajo real.

Para pruebas de bondad de ajuste con Python recomiendo
Phitter Library

import phitter

data: list[int | float] = [...]

phitter_cont = phitter.PHITTER(
    data=data,
    fit_type="continuous",
    num_bins=15,
    confidence_level=0.95,
    minimum_sse=1e-2,
    distributions_to_fit=["beta", "normal", "fatigue_life", "triangular"],
)
phitter_cont.fit(n_workers=6)

Probability Distribution Functions (PMF, PDF, CDF)
https://www.youtube.com/watch?v=YXLVjCKVP7U

La función inversa de la Función de Distribución Acumulada para los valores 0.25 y 0.75

Por si no entiendes los calculos que hay detrás de las funciones importadas, aquí les comparto un código que va a aclarar esas dudas. Para el caso de la función de probabilidad de masas lo único que debemos hacer es hacer un conteo por el flipper\_length en nuestra población y eso, dividirlo entre el total de individuos. Para la función acumulada debemos ir sumando esas probabilidades. Como se aprecia en la imagen. ```python penguins = pd.read_csv("penguins_size.csv") #Funciónd de probabilidad de masa penguins["count"] = 1 penguins_flipper_count = penguins[["flipper_length_mm", "count"]].groupby(["flipper_length_mm"]).count().reset_index() penguins_flipper_count["probs"] = penguins_flipper_count["count"] /penguins_flipper_count["count"].sum() plt.bar(x= penguins_flipper_count.flipper_length_mm, height= penguins_flipper_count.probs) # Funcion de distribución acumulada penguins_flipper_count.loc[0,"probs_acum"] = penguins_flipper_count.loc[0,"probs"] for i in range(1, len(penguins_flipper_count)): penguins_flipper_count.loc[i,"probs_acum"] = penguins_flipper_count.loc[i,"probs"]+penguins_flipper_count.loc[i-1,"probs_acum"] plt.plot(penguins_flipper_count["flipper_length_mm"], penguins_flipper_count["probs_acum"], c = "red") ```![]()![](https://static.platzi.com/media/user_upload/image-46edd328-f46c-40c7-9d15-ecd2dfe582e7.jpg)

¡Qué dolor de cabeza este recurso utilizado en Deepnote: demasíado lento y el notebook sin escritura, entonces, triplemente lento… Así el curso no rinde: esperando que deepnote funcione…zzzz)! Una leeción de 17 minutos se convierte en una hora o más.

¡por favor @Platzi: no vuelvan a usar Deepnote!

si la libreria de empiricaldist no les funciona, intenten con este:
from empiricaldist import Pmf, Cdf

13. Estadística descriptiva aplicada: distribuciones

¿Cómo visualizar una distribución?

  • Histograma.
  • Función de probabilidad de masas (PMFs): Nos dice la probabilidad de que una variable aleatoria discreta tome un valor determinado.
  • Función de distribución acumulada (CDFs): Devuelve la probabilidad de que una variable sea igual o menor que un valor determinado.
  • Función de probabilidad de densidad (PDFs): Determina la probabilidad de que una variable continua tome un valor determinado.

La clase se pone cada vez mas interesante.

PMF = Función de probabilidad de masas (cuando quiero saber la probabilidad de que una variable discreta tome un valor)
empiricaldist.Pmf.from_seq(data.variable)
CDFs = Función de probabilidad acumulada ( probabilidad de que una variable sea igual o menor a un valor).
empiricaldist.Cdf.from_seq(data.variable)
PDFs = Función de probabilidad de densidad (cuando quiero saber la probabilidad de que una variable continua tome un valor)

Antes de continuar con el curso, tuve que ver el curso de probabilidad (No lo había terminado) para poder entender mejor de aqui para adelante. Ahora cuándo habla de ciertos conceptos lo puedo seguir de una mejor manera 👾

Me gustaron estas las aplicaciones de la librería empiricaldist, no las conocía, gracias profe!

In probability and statistics, a probability mass function is a function that gives the probability that a discrete random variable is exactly equal to some value. Sometimes it is also known as the discrete density function. The probability mass function is often the primary means of defining a discrete probability distribution, and such functions exist for either scalar or multivariate random variables whose domain is discrete.
A probability mass function differs from a probability density function (PDF) in that the latter is associated with continuous rather than discrete random variables. A PDF must be integrated over an interval to yield a probability.
The value of the random variable having the largest probability mass is called the mode.