有没有办法在python中绘制z值

时间:2019-11-10 18:05:06

标签: python pandas

我有一个使用matplotlib和pandas绘制比特币价格的滚动平均值和标准差的程序。我想知道如何绘制z值(价格与均值的标准差数)。

import pandas as pd
from matplotlib import pyplot as plt

btc_1_day = pd.read_csv('C:\Users\Oliver\Desktop\data\data1_btcusdt_1day.csv')

df1_btc = pd.DataFrame(btc_1_day)

df1_btc['SMA_10'] = df1_btc.price_close.rolling(10).mean()
df1_btc['SMSD_10'] = df1_btc.price_close.rolling(10).std()


plt.grid(True)
plt.plot(btc_1_day.price_close)
plt.plot(df1_btc['SMA_10'],label='10 day moving average')
plt.plot(df1_btc['SMSD_10'],label='10 day standard deviation')
plt.legend(loc=2)
plt.show()

1 个答案:

答案 0 :(得分:0)

由于我没有您的csv文件,因此我将向您展示如何使用一些随机数据和一个pandas数据框。您可以使用stats.zscore(df['btc']找到z得分,但这将使您获得的数字与示例中试图绘制的数字截然不同。

情节1:

enter image description here

代码1:

import pandas as pd
from matplotlib import pyplot as plt

import statsmodels.api as sm
import pandas as pd
import numpy as np
import datetime
from scipy import stats

# data
np.random.seed(1234)
numdays=100
df = pd.DataFrame({'btc': (np.random.randint(low=-20, high=20, size=numdays).cumsum()+100).tolist()})

# moving averages and standard deviations
df['SMA_10'] = df['btc'].rolling(10).mean()
df['SMSD_10+sigma'] = df['btc'].rolling(10).mean()+df['btc'].rolling(10).std()
df['SMSD_10-sigma'] = df['btc'].rolling(10).mean()-df['btc'].rolling(10).std()

# matplotlib
df['ZScore']=stats.zscore(df['btc'])
plt.figure()
df['btc'].plot()
df['ZScore'].plot()
plt.show()

为了说明您的数据集以及滚动窗口的平均值和标准差,我宁愿使用这样的方法:

图2:

enter image description here

代码2:

import pandas as pd
from matplotlib import pyplot as plt

import statsmodels.api as sm
import pandas as pd
import numpy as np
import datetime
from scipy import stats

# data
np.random.seed(1234)
numdays=100
df = pd.DataFrame({'btc': (np.random.randint(low=-20, high=20, size=numdays).cumsum()+100).tolist()})

# moving averages and standard deviations
df['SMA_10'] = df['btc'].rolling(10).mean()
df['SMSD_10+sigma'] = df['btc'].rolling(10).mean()+df['btc'].rolling(10).std()
df['SMSD_10-sigma'] = df['btc'].rolling(10).mean()-df['btc'].rolling(10).std()

# matplotlib
plt.grid(True)
plt.plot( df['btc'])
plt.plot(df['SMA_10'],label='10 day moving average')
plt.plot(df['SMSD_10+sigma'],label='10 day standard deviation',
         color='green',
         linewidth=0.5)
plt.plot(df['SMSD_10-sigma'],label='10 day standard deviation',
         color='green',
         linewidth=0.5)
plt.plot(df['btc'], color='blue', linewidth=1.5)
plt.legend(loc=2)
plt.show()