0

ファイルには次のデータ行があります (もちろん、さらに多くの行があります)。

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) - ...

もちろん、さまざまな範囲 (より広いまたはより狭い) を簡単に設定したいと思います。それで、グラフを生成したいと思います。

4

2 に答える 2

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]

その後、Python で一連の float 値をヒストグラムにビン化する方法を使用してヒストグラムを作成できますか? . 最後に、合計が 1.0 になるようにビンの値を正規化して (各ビンをすべてのビンの合計で割ります)、確率分布を作成します。データの作成に使用された確率分布ではなく、近似値です。

于 2012-09-21T13:35:11.943 に答える
0

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 の統計関数で他のものを見つけることができます)。

于 2012-09-21T14:23:50.917 に答える