【问题标题】:How to calculate mean, mode, variance, standard deviation etc. of output in python?如何在python中计算输出的均值、众数、方差、标准差等?
【发布时间】:2017-06-29 20:12:24
【问题描述】:

我有一个基于概率的简单游戏,每天我们掷硬币,如果我们正面朝上,我们赢了,我们得到 20 美元,如果我们抛硬币,我们反面,我们最后损失 19 美元当月(28 天)我们看到我们损失了多少或赚了多少。

def coin_tossing_game():
    random_numbers = [random.randint(0, 1) for x in range(500)] #generate 500 random numbers
    for x in random_numbers:
        if x == 0: #if we get heads
            return 20 #we win $20
        elif x == 1: #if we get tails
            return -19 #we lose $19


for a in range(1, 28): #for each day of the month
    print(coin_tossing_game())

这将返回输出 20 20 -19 -19 -19 -19 -19 20 -19 20 -19 20 -19 20 20 -19 -19 20 20 -19 -19 -19 20 20 20 -19 -19 -19 20 20

这个输出正是我所期望的。我想找到输出和其他描述性统计数据的总和,例如平均值、众数、中位数、标准差、置信区间等。我不得不将这些数据复制并粘贴到 Excel 中来进行数据分析。我希望有一种方法可以在 python 中快速轻松地做到这一点。

【问题讨论】:

  • pandas 是一个 python 库,它可以完成许多 excel 所做的事情。
  • 也许可以查看 scipy stats 模块。 docs.scipy.org/doc/scipy/reference/stats.html
  • 作为起点,您可以从函数中输出一个列表,然后使用一些函数在提供的数字列表上计算统计数据(例如均值、标准差等)。它的基本 python 代码(for 循环,基本数学),你不需要一个库来开始使用这些基本统计数据
  • 从 Python 3.4 开始,他内置了一个 statistics 模块

标签: python random simulation python-3.5 montecarlo


【解决方案1】:

使用 scipy stats 模块并使用 modal 作为众数,使用 scipy.stats.mstats.median_cihs 作为中位数,使用 trim_mean 作为均值。您还可以使用统计模块并使用mean()median()mode() 函数。

【讨论】:

    【解决方案2】:

    是的,有:安装 numpy 和 scipy。使用函数numpy.meannumpy.stdnumpy.medianscipy.stats.mode

    Scipy 还包含scipy.stats 模块,它提供了各种常见的显着性测试。

    【讨论】:

      【解决方案3】:

      你问的是如何。最直接可用的方法是以 statistics 库的形式内置到 Python 中。但同样,你似乎想知道如何做到这一点。下面的代码展示了我近 50 年来没有必要做的基础知识。

      首先,修改您的代码,使其在向量中捕获样本。在我的代码中,它被称为sample

      代码的第一部分只是简单地练习 Python 库。那里没有汗水。

      代码的第二部分显示了如何累积样本中值的总和,以及它们与平均值的偏差的平方和。我留给您在这些统计数据的通常假设下计算如何计算样本方差、样本标准差和置信区间。在对样本进行排序和重命名后,我计算了最大值和最小值(对于某些分布的估计很有用)。最后,我计算排序样本的中位数。我把中位数的计算留给你。

      import random
      
      def coin_tossing_game():
          random_numbers = [random.randint(0, 1) for x in range(500)] #generate 500 random numbers
          for x in random_numbers:
              if x == 0: #if we get heads
                  return 20 #we win $20
              elif x == 1: #if we get tails
                  return -19 #we lose $19
      
      sample = []
      for a in range(1, 28): #for each day of the month
          #~ print(coin_tossing_game())
          sample.append(coin_tossing_game())
      
      ## the easy way
      
      import statistics
      
      print (statistics.mean(sample))
      print (statistics.median(sample))
      print (statistics.mode(sample))
      print (statistics.stdev(sample))
      print (statistics.variance(sample))
      
      ## the hard way
      
      sample.sort()
      orderedSample = sample
      N = len(sample)
      minSample = orderedSample[0]
      maxSample = orderedSample[-1]
      sumX = 0
      for x in sample:
          sumX += x
      mean = sumX / N
      
      sumDeviates2 = 0
      for x in sample:
          sumDeviates2 += ( x-mean )**2
      
      k = N//2
      if N%2==0:
          mode = 0.5* (orderedSample[k]+orderedSample[k-1])
      else:
          mode = orderedSample[k]
      

      【讨论】:

      • 嗨,比尔,我只是想抽出时间对您的帮助表示非常感谢。非常感谢你给我两种方法,我实际上只是在寻找简单的方法,但你给了我两种方法。谢谢
      猜你喜欢
      • 2012-02-24
      • 1970-01-01
      • 1970-01-01
      • 2014-03-21
      • 2021-12-19
      • 1970-01-01
      • 2021-06-15
      相关资源
      最近更新 更多