sas*_*cha 7 python data-analysis pandas
我是熊猫的新手,并尝试学习如何处理我的多维数据.
我们假设,我的数据是列['A','B','C','D','E','F','G']的大CSV.该数据描述了一些模拟结果,其中['A','B',...,'F']是模拟参数,'G'是输出之一(本例中只有现有输出!).
编辑/更新: 正如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
Run Code Online (Sandbox Code Playgroud)
因为参数['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
Run Code Online (Sandbox Code Playgroud)
I:显示这些组中每个场景参数的所有(唯一)值 - > grouped_agg给我一个可迭代的元组,例如,每个位置0的所有条目都给出了'A'的所有值(所以有一个几行python我会得到我的独特价值,但也许有一个功能)
list(set(grouped_agg.index.get_level_values('A')))
(当对'A'感兴趣时;使用set来获取唯一值;如果你需要高性能,可能不是你想要做的事情)[0, 1, 2, 3, 6]
II:生成一些图(较低维度) - >我需要使一些变量保持不变并在绘图之前过滤/选择我的数据(因此我需要的步骤)=>
我如何生成这样的情节?
我认为,重塑我的数据是关键步骤,大熊猫绘图功能将处理它.也许实现一个形状,其中有5列(参数A的每个值一个)和每个索引选择+ param-A选择的相应G值就足够了,但我还没有能够实现那种形式.
感谢您的输入!
(我在enthought冠层内使用熊猫0.12)
萨沙
I:如果我理解你的例子和期望的输出,我不明白为什么分组是必要的。
data.A.unique()
Run Code Online (Sandbox Code Playgroud)
二:更新了……
我将实现您上面所描绘的示例。假设我们对随机种子(“F”)求“G”的平均值,如下所示:
data = data.groupby(['A','B','C','D','E']).agg(({'G' : np.mean})).reset_index()
Run Code Online (Sandbox Code Playgroud)
首先选择 B、C 和 E 具有您指定的一些常量值的行。
df1 = data[(data['B'] == const1) & (data['C'] == const2) & (data['E'] == const3)]
Run Code Online (Sandbox Code Playgroud)
现在我们想要将“G”绘制为“D”的函数,并为“A”的每个值使用不同的颜色。
df1.set_index('D').groupby('A')['G'].plot(legend=True)
Run Code Online (Sandbox Code Playgroud)
我在一些虚拟数据上测试了上面的内容,它的工作原理正如你所描述的那样。与每个“A”相对应的“G”范围在同一轴上以不同的颜色绘制。
III:我不知道如何回答这个广泛的问题。
IV:不,我认为这对你来说不是问题。
我建议使用更简单的小数据集并更加熟悉 pandas。
归档时间: |
|
查看次数: |
2008 次 |
最近记录: |