La comprensión de las medidas de dispersión es clave para el análisis de datos. Este análisis no solo ayuda a resumir un conjunto de datos, sino que también permite identificar patrones y anomalías que pueden ser de gran valor. En esta clase, aprenderás a calcular estas medidas con Python, utilizando librerías de visualización y análisis de datos.
¿Cómo calcular la desviación estándar?
La desviación estándar es una medida que indica la cantidad de variación o dispersión de un conjunto de datos. En Python, calcularla es bastante sencillo con la librería Pandas.
import pandas as pd
# Suponiendo que el DataFrame 'df' ya ha sido importadodesviacion_estandar = df['Price'].std()print(desviacion_estandar)# Salida aproximada: 6428.0
Esta fórmula muestra cómo encontrar la desviación estándar de la columna 'Price' en un DataFrame.
¿Cómo calcular el rango de una serie de datos?
El rango proporciona una medida rápida y sencilla de la extensión de los datos. Se calcula restando el valor mínimo del máximo.
rango = df['Price'].max()- df['Price'].min()print(rango)# Salida aproximada: 50000
¿Cómo calcular cuartiles y percentiles?
Los cuartiles dividen los datos en cuatro partes iguales, mientras que los percentiles los dividen en cien. Puedes utilizar la función quantile de Pandas para obtener estos valores.
El rango intercuartil (IQR) es la diferencia entre el tercer cuartil (Q3) y el primer cuartil (Q1). Proporciona una medida de dispersión que excluye los valores extremos.
iqr = q3 - q1
print(iqr)# Salida: 6890
¿Cómo identificar outliers?
Los outliers pueden distorsionar los resultados del análisis. Usando el IQR, se pueden definir límites para identificar posibles datos anómalos.
¿Cómo visualizar la distribución de datos con Seaborn?
Visualizar tus datos puede proporcionar insights valiosos. En Python, el uso de la librería Seaborn permite generar gráficos como histogramas y diagramas de caja.
import seaborn as sns
import matplotlib.pyplot as plt
sns.histplot(df['Price'], kde=False)plt.show()sns.boxplot(x=df['Price'])plt.show()
¿Cómo manejar variables categóricas?
El diagrama de caja es especialmente útil para visualizar la distribución de datos categóricos, permitiendo comparar varias categorías de un vistazo.
# Diagrama de caja para variables categóricassns.boxplot(x='EngineType', y='Price', data=df)plt.show()
Este marco conceptual es crucial para aquellos interesados en análisis de datos y busca combinar cálculos numéricos con representaciones gráficas claras. Las herramientas y métodos presentados aquí son fundamentales para estudios estadísticos avanzados. ¡Continúa explorando y desarrollando tus habilidades!
Como vimos en la clase, el hecho de que nuestra distribución tenga una tendencia a la derecha o a izquierda nos representa un problema, ya que no a acorde con una distribución y eso puede afectar a nuestros análisis si no tomamos en cuenta ese sesgo. No siempre hay que confiar en nuestra intuición o lo que vemos a simple vista, hay métodos como:
Primer coeficiente de asimetría de Pearson (asimetría de modo)
Segundo coeficiente de asimetría de Pearson (asimetría mediana)
Coeficiente de Groeneveld y Meeden
Coeficiente de Fisher
Por mencionar algunos.
.
Y por último, no hay que olvidar la curtosis:
Una curtosis grande implica una mayor concentración de valores de la variable tanto muy cerca de la media de la distribución (pico) como muy lejos de ella (colas), al tiempo que existe una relativamente menor frecuencia de valores intermedios. Esto explica una forma de la distribución de frecuencias/probabilidad con colas más gruesas, con un centro más apuntado y una menor proporción de valores intermedios entre el pico y colas.
Una mayor curtosis no implica una mayor varianza, ni viceversa.
Hola MIguel, puedes ampliar un poco el tema de la curstosis? como se calcula o como usarla?
Veo complicado desarrollar más el tema en esta área de aportes y no tendría mucho sentido ya que la curtosis es un tema clásico en estadística descriptiva, lo que sobra es información en internet. Solo deje este apartado para despertar la curiosidad y dudas de las personas, para que a partir de esa duda lo pudieran investigar, así que mejor te dejo un video para que te empapes del tema con calma:
Curtosis para datos agrupados, curtosis desde un cuadro de frecuencias
Otra cosa que pueden hacer si quieren tener un vistaso rápido de las medidtas de dispersión es usar la función y les regresa los valores vistos en la clase, se puede aplicar sobre una columna o toda la tabla:
EXCELENTE! una forma rápida y muy resumida de obtener una lista con todas las medidas de dispersión relevantes! Muy buen aporte!
Lo pasas a tupla y lo guardas con varias variables. Lo demás es pedal y bomba.
Usando plotly.
fantásticos gráficos con plotly, gracias
Gracias man, recuerda instalar en anaconda plotly para que te permita usarlo, porque no viene integrada, en deepnote si corres plotly sin instalar nada.
Es potente, aunque trastabilla en cosas para las cuales hay que usar si o si seaborn, si quieres visualiza este proyecto que desarrolle usando unicamente plotly, e interactua con las graficas, ve que puedes usar zoom multiples veces, si hay legendas puedes deseleccionarlas. Y permite cambiar el fondo de nuestros graficos a dark u otros, en fin, checa el link de deepnote:
https://deepnote.com/@aazg/Proyecto-DataScience-Steam-8a13d638-38aa-4308-b29a-b030e00ced39
Si se van directamente a la base de datos, en cada columna es fácil visualizar el tipo de distribución que continete.
En este dataset no hay ninguna que sea normal xd
df['price_usd'].std(ddof=1) # muestral
df['price_usd'].std(ddof=0) # poblacional
En mi caso, he estado trabajando con la variable odometer_value, así qué analicemos lo siguiente:
Haciendo una descripción general de la variable observamos los valores de los siguientes estadísticos:
Ahora bien, observemos si esta variable presenta una distribución simétrica:
De la gráfica podemos notar que no representa una districuión simétrica
Ahora podemos observar con un boxplot cómo están disperso los datos:
De la caja, podemos observar que si bien los datos no son una representación simétrica, los valores mínimos, máximos y cuartiles no están muy alejados o al menos no los cuartiles.
Pero si comparamos de forma categórica las variables engine_fuel y odometer_value obtenemos el siguiente gráfico:
De éste boxplot podemos observar, por ejemplo, que los autos que son híbridos-diesel y los de diesel, tienden a ser los más usados o con más kilometrajes de recorrido.
Y a diferencia del análisis con la variable price_usd, podemos observar qué los carros eléctricos son los que menos kilómetros recorridos tienen, esto puede deberse a su 1) costo superior en comparación con los otros autos y 2) a su autonomía en carretera.
***(Si consideras que algo d elo dicho aquí está mal, por favor hazmelo saber)
Muy interesante, pero creo que está algo sesgado, pues solo hay dos datos con hybrid-diesel. Con eso no puedes sacar una buena conclusión.
!solo dos
Lo otro es evaluar lo mismo que evaluaste tú pero por región. Allí verás que son pocas las regiones que presentan ese vehículo. Puede ser porque se vende mucho o porque es poco comprado.
!por_region
En el momento de realizar el calculo de la desviación estándar hay que tener en cuenta que al momento de llamar la función .std(), la libreria realiza la operacion con la formula de muestra
N-1, si desean realizar la operacion con todos los datos usen:
df['price_usd].std(ddof=0)
Referencia:
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.std.html
Decir que el Cuantil es tomar el x% de los datos no me parece conceptualmente correcto.
El cuantil solo toma un solo dato ubicado en el punto x%.
No se está tomando x área de la distribución sino un solo punto(dato) de ella.
Infiero que siempre será el valor que esté más pegado a la "frontera" del cuartil siguiente ...
Curtosis la distribución se desplaza entre el eje Y, (muy achatada o apuntalada) mientras que la asimetría el gráfico se desplaza en el eje X (izquierda o derecha).
Hola! alguien sabe como hacer que los gráficos queden más grandes en deepnote? Estoy viendo el repositorio que subió el profesor y los graficos que muestra en la clase 10 se ven mejor y mas grandes que los que me aparecen a mi y eso que tengo el mismo codigo. Hablo especificamente de el ultimo
sns.boxplot(x = 'engine_fuel', y = 'price_usd', data = df)
Gracias!!!
Usa, antes del código de seaborn:
plt.subplots(figsize=(10,7))
x=10, y=7, puedes modificar los números hasta que quede al tamaño que quieras.
Saludos.
los quartiles permiten comparar los datos de la distribución. ejemplo si mi sueldo es 500 $. es poco o es mucho ?. si estoy debajo de la media. la mitad de la población gana más que yo. si estoy en el primer quartil. el 75 % gana más que yo. y si estoy en el tercer Qualtil soy del 75% que más gana
Diagrama de cajas por fabricante
plt.figure(figsize=(18,18))sns.boxplot(x ='price_usd', y ='manufacturer_name', data = df, orient="h", palette="Set2")plt.show()
Otra de las librerías de visualización de datos en Python es matplotlib.
Un diagrama que se usa muchísimo con los cuartiles son los diagramas de caja o en inglés Box Plot.
Por cierto, una forma más sencilla de escribir el código para 'Límites para detección de outliers' es:
minlimit =Q1-1.5*iqr
maxlimit =Q3+1.5*iqr
print(f'rango para detección de outliers: {minlimit}, {maxlimit}')
Vídeo sobre Diagrama de cajas y bigotes | Boxplot
Si quieren aumentar el tamaño de las figuras pueden usar este código:
sns.boxplot(x ="engine_fuel", y ="price_usd", data = df)plt.rcParams["figure.figsize"]=(7.5,7.5)
En el 7:50 dice que la distribución es completamente NO sesgada, se equivocó, cierto?
¡Hola! Acabo de ver el video y parece que fue un error que se le escapó al profesor. Si te das cuenta, más adelante hace un diagrama de caja de la misma variable y dice "está sesgada".
me parece que tener tantos valores atípicos es raro, mi pregunta esto talvez no sucedería si utilizo otro tipo de distribución que se acomode mejor a los datos y a partir de ahí analizar, si alguien sabe a que tipo de distribución se acerca mas
Creo que seria una distribucion Log-normal. La distribucion Log-normal es aplicable a variables aleatorias que estan limitadas por cero, pero que tienen pocos valores grandes.
No entiendo por qué en la clase anterior mencionó que no tiene sentido utilizar el rango intercuartílico cuando la distribución es sesgada (asimétrica) pero sin embargo trabajo con ese ejemplo
Es un ejemplo ilustrativo.
Por que utiliza como segundo cuartil la mediana? no deberia ser la media? es posible que la media y la media coincidan pero son conceptos diferentes.
Q2 será siempre la mediana, la media (promedio) es una estimación algebráica, sin embargo la mediana, en un dataset con cantidad de datos impares, será un número localizado. En el caso de un dataset con datos pares, será el promedio de los dos números mas centrales por lo que posiciona el Q2 perfectamente en la mitad del dataset.
Espero haber resuelto tu duda.
La mediana siempre corresponderá al percentil 50, o lo que es lo mismo segundo cuartil, el rango interquartil en un sns.boxplot(x=" ", y=" ", data=df, palette=(my_palette)) ubica al centro de la caja a la mediana o lo que es lo mismo al percentil 50, mientras que los extremos de la caja corresponden al primer cuartil y tercer cuartil o lo que es lo mismo percentil 25 y 75, por ende los "bigotes" corresponderán al inicio y termino de la distribución de datos, datos por fuera de esre rango corresponderán a outliers o datos atípicos.
# Rango= valor max -valor min
rango = df['price_usd'].max()-df['price_usd'].min()rango
de vez en cuando en platzi te cruzas con cursos que valen oro, este es uno de ellos, entra fácil en mi top5 cursos de platzi, y eso que llevo como 70 creo.