BLUF :(使用Python 3.0)我想以0.25为增量来计算和存储一系列值的均值/标准差,以便稍后进行绘制或作进一步分析。
计算均值/标准差很容易,但是我不能完全正确地在值范围内进行迭代。
数据:https://www.dropbox.com/s/y78pynq9onyw9iu/Data.csv?dl=0
到目前为止,我得到的是归一化的玩具数据,看起来像弹枪爆炸,目标区域之一在黑线之间隔离,增量为0.25:
import csv
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import pyplot as plt
import seaborn as sns
Data=pd.read_csv("Data.csv")
g = sns.jointplot(x="x", y="y", data=Data)
bottom_lim = 0
top_lim = 0.25
temp = Data.loc[(Data.y>=bottom_lim)&(Data.y<top_lim)]
g.ax_joint.axhline(top_lim, c='k', lw=2)
g.ax_joint.axhline(bottom_lim, c='k', lw=2)
# we have to create a secondary y-axis to the joint-plot, otherwise the kde
might be very small compared to the scale of the original y-axis
ax_joint_2 = g.ax_joint.twinx()
sns.kdeplot(temp.x, shade=True, color='red', ax=ax_joint_2, legend=False)
ax_joint_2.spines['right'].set_visible(False)
ax_joint_2.spines['top'].set_visible(False)
ax_joint_2.yaxis.set_visible(False)
# calculating the StdDev of the y-axis band above
S = temp.std()
M = temp.mean()
print("StdDev", S)
print("Mean", M)
现在我要做的是计算均值/标准差(再次在下面):
S = temp.std()
M = temp.mean()
但是要循环执行以覆盖“ y”变量从0到8的整个范围。我想将这些结果保留为一种格式,以便以后可以对其进行绘制或进一步操作(列表,数组,等)。
答案 0 :(得分:0)
一个简单的while
循环完成了我们在这里想要的:
bottom_lim, top_lim = 0, 0.25
g = sns.jointplot(x="x", y="y", data=data)
while bottom_lim < 7.75 and top_lim < 8:
temp = data.loc[(data.y>=bottom_lim)&(data.y<top_lim)]
g.ax_joint.axhline(top_lim, c='g', lw=2)
g.ax_joint.axhline(bottom_lim, c='g', lw=2)
ax_joint_2 = g.ax_joint.twinx()
sns.kdeplot(temp.x, shade=True, color='green', ax=ax_joint_2, legend=False)
ax_joint_2.spines['right'].set_visible(False)
ax_joint_2.spines['top'].set_visible(False)
ax_joint_2.yaxis.set_visible(False)
# calculating the StdDev of the band above
S = temp.std()
M = temp.mean()
print("StdDev", S)
print("Mean", M)
bottom_lim+=0.25
top_lim+=0.25
由于没有数据的切片会引发错误,因此我们必须调整顶部/底部的限制以解决数据丢失的问题,但是当我将此代码用于2以下的最高和最低限制时,效果很好。
但是,如果有一种更优雅的方法,我总是在寻求减少/重复使用/回收。