Вычисление среднего и стандартного отклонения в диапазоне значений - PullRequest
0 голосов
/ 28 сентября 2018

BLUF: (с использованием Python 3.0) С шагом 0,25 я хочу вычислить и сохранить среднее значение / стандартное отклонение для диапазона значений, чтобы затем можно было построить их позже или выполнить дальнейший анализ.

Расчет среднего значения/ std - это просто, но я не могу понять, как правильно настроить итерацию по всему диапазону значений.

Данные: 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 голосов
/ 12 октября 2018

Простой цикл 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, он прекрасно работал.

Но если есть более элегантный способ, я всегда стремлюсь уменьшить / повторно использовать / переработать.

...