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)