Python之数据分析(random模块的正确用法)

一、二项分布:numpy.random.binomial(n, p, size)

1、返回值: 返回包含size个的随机数数组,其中每个随机数来自n次尝试中的成功次数,p为每次尝试成功的概率

2、经典案例——猜硬币游戏
初始筹码1000,每轮猜9次,猜对5次或5次以上为赢,筹码加一,否则为输,筹码减一。
用程序模拟10000轮,记录筹码数的变化,即为binomial(9, 0.5, 10000)

3、测试代码

import numpy as np
import matplotlib.pylab as mp

outcomes = np.random.binomial(9, 0.5, 10000)  # 记录成功曲线的数据
chips = [1000]  #记录筹码的变化
for outcome in outcomes:
    if outcome >= 5 :
        chips.append(chips[-1]+1)  # 则将最后一个筹码+1
    else:
        chips.append(chips[-1] - 1)
chips = np.array(chips)  # 变成数组


# 基本图形参数
mp.figure('Binomial', facecolor='lightgray')
mp.title('Binomial', fontsize=20)
mp.xlabel("Round", fontsize=14)
mp.ylabel('Chip', fontsize=14)
mp.tick_params(labelsize=10)
mp.grid(linestyle=':')

猜硬币

二、超几何分布:numpy.random.hypergeometric(ngood, nbad, nsample, size)

1、返回值: 返回包含size个随机数的数组,其中每个随机数来自随机抽取nsample个样本中好样本的个数,ngood个好样本,nbad个坏样本。

2、经典案例——摸球球游戏: 将25个好球和1个坏球放在一起,每一轮摸出3个球,若全为好球则加1分,若有坏球则减6分。模拟程序模拟100轮,记录分值的变化。hypergeometric(25, 1, 3, 100)

3、测试代码

import numpy as np
import matplotlib.pylab as mp

outcomes = np.random.hypergeometric(25, 1, 3, 100)  # 记录成功曲线的数据
scores = [0]  #记录得分的变化
for outcome in outcomes:
    if outcome == 3 :
        scores.append(scores[-1]+1)  # 则将最后一个筹码+1
    else:
        scores.append(scores[-1] - 6)
scores = np.array(scores)  # 变成数组


# 基本图形参数
mp.figure('Hypergeometric', facecolor='lightgray')
mp.title('Hypergeometric', fontsize=20)
mp.xlabel("Round", fontsize=14)
mp.ylabel('Score', fontsize=14)
mp.tick_params(labelsize=10)
mp.grid(linestyle=':')


# 绘制图像
if scores[-1] < scores[0]:  # 小于最开始的筹码数,就是输了
    color = 'orangered'
elif scores[-1] > scores[0]:  # 赢了
    color = 'limegreen'
else:
    color = 'dodgerblue'
mp.plot(scores, c=color, label='Chip')


mp.legend()
mp.show()

摸球球

三、正态分布:numpy.random.normal(size)

1、返回值: 输出包含size个随机数的数组,其中每个随机数服从标准正态分布规律,即平均值为0,标准差为1的正态分布。

2、经典案例

import numpy as np
import matplotlib.pylab as mp

samples = np.random.normal(size=10000)  # 记录成功曲线的数据
# 验证平均值和标准差(接近0和接近1)
print(samples.mean(), samples.std())

# 基本图形参数
mp.figure('Standard Normal', facecolor='lightgray')
mp.title('Standard Normal', fontsize=20)
mp.xlabel("Sample", fontsize=14)
mp.ylabel('Occurrence', fontsize=14)
mp.tick_params(labelsize=10)
mp.grid(axis='y', linestyle=':')  # 只画水平网格线


# 绘制图像(直方图),100表示分成100段,normed表示按照比例显示纵坐标
mp.hist(samples, 100,
        edgecolor='steelblue',
        facecolor='deepskyblue',
        label="Standard Normal")


mp.legend()
mp.show()

3、测试效果
正态分布

猜你喜欢

转载自blog.csdn.net/Viewinfinitely/article/details/107946015