【问题标题】:Graphing a normal distribution with panda rolling standard deviations?用熊猫滚动标准差绘制正态分布?
【发布时间】:2020-09-11 10:47:47
【问题描述】:

我正在尝试根据滚动标准偏差获取数据帧的分布。

我虽然想使用pd.count,但后来我意识到它不允许改变标准偏差。 scipy.stats.pmf 也有同样的问题。

所以我最终决定使用 for 循环:

from pandas_datareader import data as web

data = web.DataReader('AAPL', data_source='yahoo')
window = 20

data['stan_dev'] = data['Adj Close'].rolling(window).std()
data['ma'] = data['Adj Close'].rolling(window).mean()
data.dropna(inplace=True)


data['difference'] = data['Adj Close'] - data.ma
bins = [0]*7

for i in range(len(data)):
    for j in range(-3, 3):
        if (j*data.iloc[i]['stan_dev']) < data.iloc[i]['difference'] <= ((j+1)*data.iloc[i]['stan_dev']):
            bins[j + 3] += 1

问题是,它很慢,我什至不确定它是否有效。

有没有更 Pythonic 的方式来处理它?

【问题讨论】:

  • 您能否提供一些数据以使 sn-p 正常工作?

标签: python python-3.x pandas matplotlib statistics


【解决方案1】:

我找到了一种更好的方法,使用 zscore:

data['zscore'] = (data['Adj Close'] - data.ma) / data.stan_dev
bins = [-3, -2, -1, 0, 1, 2, 3]
cut_df = pd.cut(data.zscore, bins=bins)

ax = cut_df.value_counts(sort=False, normalize=True) * 100
ax.plot.bar()
plt.show()

【讨论】:

    猜你喜欢
    • 2017-04-06
    • 1970-01-01
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多