看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
经典的掷骰子试验是我在学习概率中经常接触的例子,这是利用了骰子在赌博游戏中的随机性,方便我们理解概率的意义。
今天,我们用 Python 来做一个实验,一次掷出两个骰子,每次计算所得点数的和,从而得到这些和的概率。
上边的问题符合经典概率模型,我们可以通过组合数的方法进行计算,先列出所有情况的组合,即笛卡尔积,然后计算他们的和,再求出这不同和的频数和频率。
另外,还可以直接进行模拟试验,生成试验数据,然后相加最终得到实验样本值。
先通过组合数计算得概率:
import pandas as pd
import numpy as np
pd.__version__
# '1.2.1'
# 一次扔两个六面骰子, 和为多少的概率最大? 7 的可能性最大
midx = (pd.MultiIndex
.from_product(([1,2,3,4,5,6],
[1,2,3,4,5,6]),
names=['a', 'b'])
)
(
pd.DataFrame(index=midx)
.reset_index()
.assign(c=lambda d: d.eval('a+b'))
.c
.value_counts()
.plot
.bar()
)
我们可以看到值为 7 的最多,有 6 个。接下来进行实验,用 numpy 生成随机数据再进行计算。
rng = np.random.default_rng()
# 投掷,1 万次
one = rng.integers(1,7, size=10000)
two = rng.integers(1,7, size=10000)
# 查看单次的频数,频数几乎相同
pd.Series(one).hist()
pd.Series(two).hist()
# 相加,7 频数最大
pd.Series(one + two).hist()
最终得知,一次投两个骰子,和为 7 的概率最大。
更新时间:Oct. 24, 2024, 9:16 a.m. 标签:pandas numpy python 概率