【发布时间】:2018-04-14 09:11:11
【问题描述】:
我有一个包含 3 列 df=["a", "b", "value"] 的数据框。 (其实这是一个sn-p,解应该可以处理n个变量,比如“a”、“b”、“c”、“d”...)在这种情况下,“value”列已经根据“a”和“b”值生成,执行如下操作:
for a in range(1,10):
for b in range (1,10):
generate_value(a,b)
生成的数据类似于:
a b value
0 1 1 0.23
1 1 2 6.34
2 1 3 0.25
3 1 4 2.17
4 1 5 5.97
[...]
我想知道“a”和“b”的统计上更好的组合,这给了我更大的“价值”。所以我想绘制某种直方图,显示“a”和“b”的哪些值在统计上产生更大的“值”。我尝试过类似的东西:
fig = plot.figure()
ax=fig.add_subplot(111)
ax.hist(df["a"],bins=50, normed=True)
或:
plot.plot(df["a"].values, df["value"].values, "o")
但结果并不好。我认为我应该使用某种直方图或高斯钟形曲线,但我不确定如何绘制它。
那么,如何绘制统计上更好的“a”和“b”以获得最大“值”?
注意:答案 1 对两个变量 a 和 b 来说是完美的,但问题是正确的答案需要对多个变量 a、b 起作用, c, d...
编辑 1: 请注意,虽然我问的是两个变量,但解决方案不能将“a”绑定到 x 轴,将“b”绑定到 y 轴,因为可能变数更多。因此,如果我们有“a”、“b”、“c”、“d”、“e”,则解决方案应该是有效的
编辑 2: 试图更好地解释它:让我们采用以下数据框:
a b c d value
0 1 6 9 7 0.23
1 5 2 3 5 11.34
2 6 7 8 4 0.25
3 1 4 9 3 2.17
4 1 5 9 1 4.97
5 6 6 4 7 25.9
6 3 5 5 2 10.37
7 1 5 1 2 7.87
8 2 5 3 3 8.12
9 1 5 2 1 2.97
10 7 5 4 9 5.97
11 3 5 2 3 9.92
[...]
第 5 行显然是赢家,其值为 25.9,因此 a,b,c,d 的更好值是: 6 6 4 7 。但我们可以看到,从统计上看,这是一个奇怪的结果,它是唯一一个具有 a、b、c、d 值的如此高的结果,因此我们不太可能在未来获得高为 a、b、c、d 选择这些值的值。相反,选择在 8 到 11 之间产生“值”的数字似乎更安全。虽然 8 到 11 的增益小于 25.9,但 a,b,c,d (5,2,3 ,3) 产生这个更高的“价值”更大
编辑 3: 虽然 a、b、c、d 是离散的,但它们的组合/顺序会产生不同的结果。我的意思是,有一个函数会返回一个小范围内的值,例如:value=func(a,b,c,d)。该值不仅取决于 a、b、c、d 的值,还取决于一些随机的东西。因此,例如,func(5,2,3,5) 可以返回 11.34 的值,但它也可以返回类似的值,如 10.8、9.5 或类似的值(8 到 11 之间的范围值)。此外,func(1,6,9,7) 将返回 0.23,或者它可能返回 2.7,但它可能不会返回 10.1,因为它也离它的范围很远。
按照示例,我正在尝试获取最有可能生成 8-11 范围内的数字(嗯,最大值)。可能我想以某种方式可视化的数字将是数字 3,5 和 2 的某种组合。但可能不会有任何 6,7,4 数字,因为它们通常会产生较小的“价值”结果
【问题讨论】:
标签: python pandas dataframe matplotlib statistics