私はパンダが初めてで、多次元データを処理する方法を学ぼうとしています。
私のデータ
私のデータが列 ['A'、'B'、'C'、'D'、'E'、'F'、'G'] の大きな CSV であると仮定しましょう。このデータは、いくつかのシミュレーション結果を示しています。['A', 'B', ..., 'F'] はシミュレーション パラメーターで、'G' は出力の 1 つです (この例では既存の出力のみです!)。
編集/更新: Boudがコメントで示唆した ように、私のものと互換性のあるデータを生成しましょう:
import pandas as pd
import itertools
import numpy as np
npData = np.zeros(5000, dtype=[('A','i4'),('B','f4'),('C','i4'), ('D', 'i4'), ('E', 'f4'), ('F', 'i4'), ('G', 'f4')])
A = [0,1,2,3,6] # param A: int
B = [1000.0, 10.000] # param B: float
C = [100,150,200,250,300] # param C: int
D = [10,15,20,25,30] # param D: int
E = [0.1, 0.3] # param E: float
F = [0,1,2,3,4,5,6,7,8,9] # param F = random-seed = int -> 10 runs per scenario
# some beta-distribution parameters for randomizing the results in column "G"
aDistParams = [ (6,1),
(5,2),
(4,3),
(3,4),
(2,5),
(1,6),
(1,7) ]
counter = 0
for i in itertools.product(A,B,C,D,E,F):
npData[counter]['A'] = i[0]
npData[counter]['B'] = i[1]
npData[counter]['C'] = i[2]
npData[counter]['D'] = i[3]
npData[counter]['E'] = i[4]
npData[counter]['F'] = i[5]
np.random.seed = i[5]
npData[counter]['G'] = np.random.beta(a=aDistParams[i[0]][0], b=aDistParams[i[0]][1])
counter += 1
data = pd.DataFrame(npData)
data = data.reindex(np.random.permutation(data.index)) # shuffle rows because my original data doesn't give any guarantees
パラメータ ['A', 'B', ..., 'F'] はデカルト積 (つまり、ネストされた for ループ; アプリオリ) として生成されるため、考えられるそれぞれのシミュレーションを取得するために groupby を使用したいと考えています。出力を分析する前にシナリオ」。
パラメータ 'F' は、各シナリオ ('A'、'B'、...、'E' で定義される各シナリオ; 'F' がランダム シードであると仮定します) の複数の実行を記述するため、私のコードは次のようになります。 :
grouped = data.groupby(['A','B','C','D','E'])
# -> every group defines one simulation scenario
grouped_agg = grouped.agg(({'G' : np.mean}))
# -> the mean of the simulation output in 'G' over 'F' is calculated for each group/scenario
私は今何をしたいですか?
I : これらのグループ内の各シナリオ パラメータのすべての (一意の) 値を表示します。 Pythonの数行で一意の値を取得できますが、そのための関数があるかもしれません)
- 更新:私のアプローチ
list(set(grouped_agg.index.get_level_values('A')))
(「A」に関心がある場合。一意の値を取得するために set を使用します。高パフォーマンスが必要な場合は、おそらくやりたいことではありません)- =>
[0, 1, 2, 3, 6]
II : いくつかのプロット (より低い次元の) を生成します -> いくつかの変数を一定にし、プロットする前にデータをフィルタリング/選択する必要があります (したがって、必要な手順) =>
- 'B' 定数
- 'C'、定数
- 'E' 定数
- 'D' = x 軸
- 'G' = y 軸 / 集計からの出力
- 'A' = もう 1 つの次元 = 2D プロット内の複数の色 -> 'A' の値ごとに 1 つの G/y 軸
そのようなプロットをどのように生成しますか?
データの再形成が重要なステップであり、パンダのプロット機能がそれを処理すると思います。おそらく、5 つの列 (パラメーター A の値ごとに 1 つ) と、各インデックス選択 + パラメーター A 選択に対応する G 値がある形状を達成することで十分ですが、私はまだその形状を達成することができませんでした.
ご意見ありがとうございます。
(私は考えられたキャノピー内でパンダ0.12を使用しています)
サーシャ