用pandas中的rolling函数计算时间窗口数据
pandas.DataFrame.rolling参数详解
pandas中提供了pandas.DataFrame.rolling这个函数来实现滑动窗口值计算,下面是这个函数的原型:DataFrame.rolling(window,min_periods=None,center=False,win_type=None,on=None, axis=0, closed=None)
window: 也可以省略不写。表示时间窗的大小,注意有两种形式(int or offset)。如果使用int,则数值表示计算统计量的观测值的数量即向前几个数据。如果是offset类型,表示时间窗的大小。
min_periods: 每个窗口最少包含的观测值数量,小于这个值的窗口结果为NA。值可以是int,默认None。offset情况下,默认为1。
center: 把窗口的标签设置为居中。布尔型,默认False,居右
win_type: 窗口的类型。截取窗的各种函数。字符串类型,默认为None。
on: 可选参数。对于dataframe而言,指定要计算滚动窗口的列。值为列名。
axis: int、字符串,默认为0,即对列进行计算
closed: 定义区间的开闭,支持int类型的window。对于offset类型默认是左开右闭的即默认为right。可以根据情况指定为left both等。
通过代码看效果:
首先看下数据结构类型:
import pandas as pd
import matplotlib as mpl
from matplotlib import pyplot as plt
#解决中文
mpl.rcParams['font.sans-serif']=['SimHei']
data=pd.read_csv('platVolume.csv')
data.index=pd.to_datetime(data['date']) #数据类型转成时间类型,赋值给索引
data1=data[data['wdzjPlatId']==59] #取出公司为59的数据
data1['amount'].rolling(window=50,min_periods=20).mean().plot(label='五十日均线').legend() #取出amount成交量数据,窗口设为50,label是为legend图列设置的。
data1['amount'].rolling(window=50,min_periods=1).mean().plot(label='五十日均线').legend() #取出amount成交量数据,窗口设为1,label是为legend图列设置的。
plt.xlabel('X轴')
plt.ylabel('Y轴')
由图中可以看出,min_periods=20时,前面有空白的地方,是因为前20为空,取不到,当min_periods=1时,前面就不会有空白的地方,因为最小区域设为1,当值小于窗口五十,但最小区域值是一,所以小于五十的数字就会以当前个数为数量就平均值给予赋值。
成交量与均线图交互分析
data1['amount'].rolling(window=50,min_periods=1).mean().plot(label='五十日均线').legend() #取出amount成交量数据,窗口设为1,label是为legend图列设置的
data1['amount'].plot(label='2016下半年到2017上半年成交量').legend()
plt.xlabel('X轴')
plt.ylabel('Y轴')