Appearance
移动窗口计算
移动窗口计算是时间序列分析中的重要技术,用于平滑数据、计算趋势等。
滚动窗口
python
import pandas as pd
import numpy as np
dates = pd.date_range('2024-01-01', periods=10)
df = pd.DataFrame({
'销售额': [100, 120, 110, 130, 125, 140, 135, 150, 145, 160]
}, index=dates)
# 简单移动平均
df['MA3'] = df['销售额'].rolling(window=3).mean()
# 移动求和
df['SUM3'] = df['销售额'].rolling(window=3).sum()
# 移动标准差
df['STD3'] = df['销售额'].rolling(window=3).std()
print(df)窗口类型
python
# 标准窗口
df['标准平均'] = df['销售额'].rolling(window=3).mean()
# 指数加权窗口
df['指数平均'] = df['销售额'].ewm(span=3).mean()
# 扩展窗口(累计)
df['累计平均'] = df['销售额'].expanding().mean()
print(df)窗口参数
python
# 最小观测值数
df['最小2'] = df['销售额'].rolling(window=3, min_periods=2).mean()
# 居中对齐
df['居中'] = df['销售额'].rolling(window=3, center=True).mean()
# 窗口类型(如汉明窗)
df['汉明窗'] = df['销售额'].rolling(window=3, win_type='hamming').mean()
print(df)常用聚合函数
python
rolling = df['销售额'].rolling(window=3)
# 统计函数
print(rolling.mean()) # 平均值
print(rolling.sum()) # 求和
print(rolling.std()) # 标准差
print(rolling.var()) # 方差
print(rolling.min()) # 最小值
print(rolling.max()) # 最大值
print(rolling.median()) # 中位数
# 其他函数
print(rolling.apply(lambda x: x.max() - x.min())) # 极差指数加权移动平均
python
# 简单指数平滑
df['EWM_A'] = df['销售额'].ewm(alpha=0.3).mean()
# 使用跨度
df['EWM_SPAN'] = df['销售额'].ewm(span=3).mean()
# 使用半衰期
df['EWM_HALFLIFE'] = df['销售额'].ewm(halflife=3).mean()
# 使用调整
df['EWM_ADJ'] = df['销售额'].ewm(span=3, adjust=False).mean()
print(df)实际应用
趋势分析
python
# 计算趋势
stock_data = pd.DataFrame({
'价格': [100, 102, 101, 105, 103, 107, 106, 108, 110, 112]
}, index=pd.date_range('2024-01-01', periods=10))
# 短期和长期均线
stock_data['MA5'] = stock_data['价格'].rolling(window=5).mean()
stock_data['MA10'] = stock_data['价格'].rolling(window=10).mean()
# 金叉死叉信号
stock_data['信号'] = np.where(
stock_data['MA5'] > stock_data['MA10'], '买入', '卖出'
)
print(stock_data)波动率计算
python
# 计算收益率
returns = stock_data['价格'].pct_change()
# 滚动波动率(标准差)
stock_data['波动率'] = returns.rolling(window=5).std()
print(stock_data)移动窗口计算是时间序列分析的核心工具,广泛应用于金融分析、信号处理等领域。