【问题标题】:Create Population Data创建人口数据
【发布时间】:2021-10-31 00:28:48
【问题描述】:

创建一个包含 5000 个人的群体以及他们每天的电话接听次数,以用于以后的抽样。这是我想出的代码:

def get_population(pickups, pop_size, std):
    pop = np.random.randint(0, pickups, 5000)
    mean = np.mean(pop)
    std = np.std(pop)
    return pop, mean, std

我使用给定的断言错误来提出函数,所以我什至不确定我应该返回什么:

pop_pickups, pop_mean, pop_std = get_population(45, 5000, 42)
assert np.abs(pop_mean - 45) < 0.5, "Get population problem, testing pop_mean, population mean returned does not match expected population mean"
assert np.abs(pop_std - np.sqrt(45)) < 0.5, "Get population problem, testing pop_std, population standard deviation returned does not match expected standard deviation"

我假设我需要生成人口,然后取所说人口的均值和标准差。但是我的代码触发了错误均值的断言错误。最终目标是可视化单一均值的引导。

【问题讨论】:

    标签: python numpy statistics sample bootstrapping


    【解决方案1】:

    查看 numpy.random.randint 的文档: https://numpy.org/doc/stable/reference/random/generated/numpy.random.randint.html

    您在 0 到 45 之间生成 5000 个点。平均值可能在 (45 - 0)/2 左右,而不是 45 左右。您的代码没问题,但断言测试没有检查正确的平均值和 STD。


    编辑: 如果你想生成一个遵循泊松分布的样本,你可以使用这个:

    import numpy as np
    
    param = 45  # Poisson parameter
    nb_samples = 50000
    sample = np.random.poisson(param, nb_samples)
    
    assert np.abs(param - np.mean(sample)) < 0.5, "Get population problem, testing pop_mean, population mean returned does not match expected population mean"
    

    请注意,此代码将运行而不返回任何内容。

    【讨论】:

    • 谢谢!我想我有点困惑,因为断言函数使平均值看起来应该小于 45 的 0.5。断言测试是由该作业的教师给出的,无法编辑。
    • 当 pop_mean 和 45 之间的差值的绝对值大于 0.5 时,此处的 assert 函数返回错误您确保随机样本的平均值与您的平均值相差不大可以期待。如果您减少样本的大小 (5000),那么您还应该增加误差范围 (0.5)。
    • 知道了。我非常感谢您的解释,但老实说,我仍然对如何更改代码以通过断言测试感到困惑!
    • 显然我需要使用泊松分布
    • 你应该在你的回答中注意到许多numpy.random.*函数(包括randintpoisson)已经成为遗留函数,因为NumPy 1.17引入了一个新的PRNG系统。但是,此类功能尚未被弃用,由于向后兼容性,暂时仍可使用。另见:stackoverflow.com/questions/67703875/…
    猜你喜欢
    • 2013-09-26
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    相关资源
    最近更新 更多