Python概率论:均值,标准偏差

时间:2018-10-25 09:51:55

标签: python numpy matplotlib probability

因此,我是python的相对新手,也是概率的绝对新秀。我正在通过在python中创建一个简单的程序来学习概率论。

程序正在尝试对动物园中动物的数据进行建模。我们有100只体重从1公斤到6000公斤不等的动物。

有了数据,我们可以从数据中获得一些有趣的统计见解,而我目前还没有这样做?谁能推荐可以应用于数据的模型?或者使用不同的方法或模型以不同的方式绘制数据。 我们欢迎任何显示如何对数据绘制不同见解的链接或示例。同样,任何可以应用于数据的概率或统计的链接。

生成随机数据

def generateRandom():
   animal_weights = []

   animal_weights.append(random.sample(range(4000, 6001), 7))
   animal_weights.append(random.sample(range(2500, 4000), 13))
   animal_weights.append(random.sample(range(800, 2500), 20))
   animal_weights.append(random.sample(range(100, 800), 20))
   animal_weights.append(random.sample(range(25, 100), 20))
   animal_weights.append(random.sample(range(1, 25), 20))

#creates 1 single list
   flat_list_animals = [item for sublist in animal_weights for item in sublist]
   random.shuffle(flat_list_animals)

   return np.array(flat_list_animals)

然后我们获得数据的平均值,标准偏差和从列表中随机选择一只动物将是大象或大型动物的概率。

def do_stats(animal_list):
    animal_mean = np.mean(animal_list)
    print("Mean weight of animal list: ", animal_mean)

    stand_dev = np.std(animal_list, dtype=np.float64)
    print("Standard deviation of animal list: %.2f"%stand_dev)

    stan_error_mean = stand_dev / (math.sqrt(len(animal_list)))
    print("Standard error of the mean: %.2f"% stan_error_mean)

    prob_of_elephants = len(animal_list) / 7
    print("Probability of randomly selecting an elephant or large animal over 4000kg: %.2f"% prob_of_elephants)

然后,我们从列表中随机选择20个元素,进行20次,每次计算平均值和标准偏差。然后,我们计算20个样本均值和标准差的平均值。

def calculate_random_means(animal_list) :
    random_means = []
    random_std_dev = []
    for i in range(20):
        index = np.random.choice(animal_list.shape[0], 20, replace=False) 
        #creates a random list of 20 
        random_list = animal_list[index]
        stand_dev = np.std(random_list, dtype=np.float64)
        random_std_dev.append(stand_dev)

        random_mean = np.mean(random_list)
        random_means.append(random_mean)
        print("Mean of the random sample of the list", random_mean)
    return random_means, random_std_dev

np_random_means, random_std_dev = np.array(calculate_random_means(animal_list))
average_random_mean = np.average(np_random_means)
print("\nAverage mean of 20 random samples: %.2f"% average_random_mean)

average_random_std = np.average(random_std_dev)
print("\nAverage standard devation of 20 random samples: %.2f"% average_random_std)

最后,我们绘制了均值和标准差加上均值和标准差。

materials = ['Mean', 'Average Sample Mean']
x_pos = np.arange(len(materials))

CTEs = [animal_mean, average_random_mean]
error = [stand_dev, average_random_std]
numbers = [0,1000,2000,3000,4000,5000,6000]
fig, ax = plt.subplots()
#align='center'
ax.bar(x_pos, CTEs, yerr=error, ecolor='black', capsize=10)
ax.set_ylabel('X')
ax.set_yticks(numbers)
ax.set_xticks(x_pos)
ax.set_xticklabels(materials)
ax.set_title('Mean and stanard devation')
ax.yaxis.grid(True)

# Save the figure and show
plt.tight_layout()
plt.show()

enter image description here

1 个答案:

答案 0 :(得分:0)

问题是您的数据是一维的。它全部由100只动物的体重组成。

通常在统计信息中,有一个目标变量(您要解释或预测的内容)和一个解释变量(可帮助您解释或预测目标变量的变量)。例如,如果您想建立每只动物的体重的统计模型,并且还知道(例如)每只动物的身高和年龄,则简单的统计模型可能类似于:

体重= a + b *身高+ c *年龄。一种统计方法(例如,最小二乘,可以通过Wikipedia进行选择)将选择数字a,b和c,这将使方程式的左侧尽可能靠近方程式的右侧。因此,该模型可能看起来像:“重量= 10 + 5.6 *高度-2.6 *年龄”(当然,数字完全组成了)。这意味着,如果您知道某个动物的身高和年龄,则可以使用该方程式来预测该动物的体重(例如,得出的结论是,该动物的体重在60kg至90kg之间的可能性为95%(再次,数字组成))

由于您只有1个变量,因此您真正能做的就是绘制直方图,并计算诸如平均重量,重量的标准偏差,最低重量,最高重量,重量百分位等。原木重量可能更清晰可见。

例如,大象的概率就是样本中大象的数量除以动物总数(实际上只是中学数学)