Solución 8
Los datos tienen la siguiente distribución:
percentil 0-10: 0
percentil 10-20: 1
percentil 20-30: 3
percentil 30-40: 8
percentil 40-50: 21
percentil 50-60: 39
percentil 60-70: 17
percentil 70-80: 7
percentil 80-90: 2
percentil 90-100: 2
La siguiente serie cumple estos porcentajes:
[15, 27, 23, 20, 33, 39, 37, 31, 31, 37, 37, 32, 44, 47, 41, 46, 47, 46, 45, 42, 47, 44, 43, 42, 49, 49, 45, 48, 44, 46, 40, 46, 49, 53, 57, 58, 60, 56, 59, 59, 58, 51, 57, 59, 51, 55, 55, 54, 51, 58, 51, 56, 58, 60, 53, 52, 51, 55, 56, 54, 58, 50, 54, 51, 54, 54, 55, 53, 54, 54, 55, 52, 62, 64, 61, 61, 68, 62, 62, 63, 68, 61, 61, 60, 63, 68, 62, 67, 62, 75, 75, 72, 77, 79, 78, 77, 89, 86, 94, 95]
Con lo que el siguiente código nos permitiría calcular la asimertía y la kurtosis:
datos=pd.DataFrame([15, 27, 23, 20, 33, 39, 37, 31, 31, 37, 37, 32, 44, 47, 41, 46, 47, 46, 45, 42, 47, 44, 43, 42, 49, 49, 45, 48, 44, 46, 40, 46, 49, 53, 57, 58, 60, 56, 59, 59, 58, 51, 57, 59, 51, 55, 55, 54, 51, 58, 51, 56, 58, 60, 53, 52, 51, 55, 56, 54, 58, 50, 54, 51, 54, 54, 55, 53, 54, 54, 55, 52, 62, 64, 61, 61, 68, 62, 62, 63, 68, 61, 61, 60, 63, 68, 62, 67, 62, 75, 75, 72, 77, 79, 78, 77, 89, 86, 94, 95])
# Calcular la asimetría y la kurtosis
asimetria = datos[0].skew()
kurtosis = datos[0].kurtosis()
print(f"La distribución tiene una asimetría de {asimetria:.2f}, y una kurtosis de {kurtosis:.2f}")
El siguiente código nos genera valores aleatorios con esos porcentajes, dibuja el gráfico y calcula la asimetría:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# Definir los percentiles y sus correspondientes porcentajes
percentiles = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
porcentajes = [0, 1, 3, 8, 21, 39, 17, 7, 2, 2]
# Calcular la cantidad de datos que se generarán en base a los porcentajes
total_datos = 1000 # Total de datos a generar
# Crear el conjunto de datos
data = []
for i in range(len(porcentajes)):
# Agregar datos en el rango correspondiente al percentil
for _ in range(porcentajes[i]):
value = np.random.uniform(percentiles[i], percentiles[i + 1])
data.append(round(value))
# Convertir la lista a un DataFrame
df = pd.DataFrame(data, columns=["Valores"])
# Visualizar el conjunto de datos
print(df.describe(), df.head())
# Contar la frecuencia de los valores en cada rango de percentil
bins = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
labels = ['0-10', '10-20', '20-30', '30-40', '40-50', '50-60', '60-70', '70-80', '80-90', '90-100']
frecuencias, _ = np.histogram(df['Valores'], bins=bins)
# Crear el gráfico de barras
plt.figure(figsize=(10, 6))
plt.bar(labels, frecuencias, color='skyblue')
plt.xlabel('Rango de Percentiles')
plt.ylabel('Frecuencia')
plt.title('Distribución de Valores por Percentiles')
plt.xticks(rotation=45)
plt.grid(axis='y')
# Mostrar el gráfico
plt.show()
# Calcular la asimetría y la kurtosis
asimetria = df['Valores'].skew()
kurtosis = df['Valores'].kurtosis()
print(asimetria, kurtosis)