在数值的移动范围内计算平均值和标准偏差

时间:2018-09-28 10:58:16

标签: loops iteration data-visualization mean standard-deviation

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)

enter image description here

现在我要做的是计算均值/标准差(再次在下面):

 S = temp.std()
 M = temp.mean()

但是要循环执行以覆盖“ y”变量从0到8的整个范围。我想将这些结果保留为一种格式,以便以后可以对其进行绘制或进一步操作(列表,数组,等)。

1 个答案:

答案 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以下的最高和最低限制时,效果很好。

但是,如果有一种更优雅的方法,我总是在寻求减少/重复使用/回收。