【问题标题】:Getting probability distribution in Python在 Python 中获取概率分布
【发布时间】:2012-09-21 12:42:19
【问题描述】:

我在文件中有以下几行数据(当然更多行):

data1 0.20
data2 2.32
data3 0.02
dataX x.xx

data1 1.13
data2 3.10
data3 0.96
dataX x.xx

....

我想为每个数据创建概率分布*。我可以手动做到这一点,但也许有一个库可以让我更自动地做到这一点。理想情况下,我想避免预先格式化行(并用上述行提供库,但如果不可能,我将不得不这样做)。

更新

抱歉,不准确。我想找到的是有多少数字属于自定义范围。 示例:

[0.0 - 0.1) - 2 numbers;
[0.1 - 0.2) - 3 numbers;
[0.2 - 0.3) - ...

当然我想轻松设置不同的范围(更宽或更窄) 然后 - 有了它 - 我想生成图表。

【问题讨论】:

  • SciPy 中有很多概率的东西。你追求什么样的分布?
  • 您的意思是您正在尝试构建不同数据集的直方图吗?您的想法不是很清楚。
  • 也许statlib模块就是你所追求的。

标签: python distribution probability


【解决方案1】:

“概率”的概念有点微妙 - 如果数据是平稳随机过程的输出,那么您可以通过测量过去的输出来估计该过程未来输出的概率。但是相同的数据集可以确定性地生成,在这种情况下不涉及概率,并且每次运行该过程时,您都会得到相同的数据(而不是具有相似分布的不同数据)。

在任何一种情况下,您都可以通过将数据分箱为直方图来获得数据的分布。可以通过以下方式将数据格式化为单独的列表:

import collections, re

data = ["data1 0.20", "data2 2.32", "data3 0.02",
        "data1 1.13", "data2 3.10", "data3 0.96" ]

hist = collections.defaultdict(list)
for d in data:
    m = re.match("data(\d+)\s+(\S+)", d)
    if m:
        hist[int(m.group(1))].append(float(m.group(2)))
for k in hist.keys():
    print(k, hist[k])

制作:

1 [0.2, 1.13]
2 [2.32, 3.1]
3 [0.02, 0.96]

然后您可以使用Howto bin series of float values into histogram in Python? 构建直方图。最后,对 bin 值进行归一化,使其总和为 1.0(每个 bin 除以所有 bin 的总和)以形成概率分布。不是用于创建数据的概率分布,而是它的近似值。

【讨论】:

    【解决方案2】:

    您可以使用scipy stats norm(和集合)。

    拆分您的数据(我认为您的意思是采用这种形式):

    raw_data = ( line.split() for line in raw_data.split('\n') )
    
    data = collections.defaultdict(list)
    for item in raw_data:
        data[item[0]] = item[1]
    
    data['data1'] # [0.2, 1.13...]
    

    那么对于每个数据集:

    for i in xrange(X):
        scipy.stats.norm.fit(data['data'+i]) # (mean, standard deviation)
    
    scipy.stats.norm.fit(data['data1']) # (0.66499999999999992, 0.46499999999999991)
    

    目前尚不清楚您想到的确切概率,但均值和标准差是一个好的开始(您可以在scipy's statistical functions 中找到其他概率)。

    【讨论】:

      猜你喜欢
      • 2016-07-09
      • 1970-01-01
      • 1970-01-01
      • 2011-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多