PythonPandas窗口函数解锁时间序列分析的强大武器

勒令课程 2024-04-13 17:33:02

在Python数据分析与建模领域,Pandas库以其强大的数据处理与分析能力成为众多开发者的首选工具。其中,Pandas提供的窗口函数——rolling与expanding,更是针对时间序列数据进行动态统计分析的关键利器。本文将深入探讨rolling与expanding的工作原理、功能特性,并通过丰富的代码示例展示其在实际项目中的广泛应用。

Pandas窗口函数概述

Rolling:滚动窗口函数,对数据集中的连续子集(窗口)逐个应用指定的聚合函数,窗口大小固定且可滑动。

Expanding:扩张窗口函数,对数据集从起始点开始逐渐包含所有后续观测值的窗口应用指定的聚合函数,窗口大小随时间递增。

Rolling函数基础用法

基础滚动窗口计算:

import pandas as pdimport numpy as np# 假设已加载股票价格数据df = pd.read_csv('stock_prices.csv', index_col='Date', parse_dates=True)# 计算过去10个交易日的移动平均线df['MA_10'] = df['Close'].rolling(window=10).mean()# 计算过去10个交易日的最大值和最小值df['Max_10'] = df['Close'].rolling(window=10).max()df['Min_10'] = df['Close'].rolling(window=10).min()

自定义滚动窗口函数:

# 计算过去10个交易日的标准差df['STD_10'] = df['Close'].rolling(window=10).apply(np.std)# 使用自定义函数计算过去10个交易日的最高价与最低价之差的绝对值def max_min_diff(x): return abs(x.max() - x.min())df['Range_10'] = df['Close'].rolling(window=10).apply(max_min_diff)Expanding函数基础用法

基础扩张窗口计算:

# 计算自起始日至今的累计回报率df['Cumulative_Return'] = df['Close'].pct_change().cumsum()# 计算自起始日至今的累积和df['Cumulative_Sum'] = df['Close'].expanding().sum()# 计算自起始日至今的最大值和最小值df['Max_to_date'] = df['Close'].expanding().max()df['Min_to_date'] = df['Close'].expanding().min()

自定义扩张窗口函数:

# 计算自起始日至今的最高价与最低价之差的绝对值df['Range_to_date'] = df['Close'].expanding().apply(max_min_diff)Rolling与Expanding进阶应用

指定时间频率:

# 按月计算移动平均线df['Monthly_MA'] = df['Close'].resample('M').mean().rolling(window=10).mean()# 按月计算自起始日至今的累积和df['Monthly_Cumulative_Sum'] = df['Close'].resample('M').sum().expanding().sum()

中心化窗口:

# 计算过去10个交易日,以当前日期为中心的移动平均线df['Centered_MA_10'] = df['Close'].rolling(window=10, center=True).mean()Rolling与Expanding在Python Web项目中的应用

实时监控:

# 假设已连接到实时数据源for new_data in stream_data(): df = df.append(new_data, ignore_index=True) # 实时计算最近10分钟的平均值和标准差 rolling_stats = df['Sensor_Readings'].rolling('10T').agg(['mean', 'std']) send_to_dashboard(rolling_stats)

财务指标计算:

# 假设已加载公司财务数据df = pd.read_csv('financial_data.csv', index_col='Period', parse_dates=True)# 计算过去四个季度的营业收入增长率df['Revenue_Growth_QoQ'] = df['Revenue'].rolling(window=4, freq='Q').pct_change()总结

Pandas的rolling与expanding窗口函数为时间序列数据分析提供了强大的工具,使得对历史数据进行动态统计、趋势分析、风险评估等工作变得轻松高效。在Python Web项目中,特别是在实时监控、财务分析、市场研究等领域,合理运用rolling与expanding可以显著提升项目的分析深度和响应速度。

1 阅读:53

勒令课程

简介:感谢大家的关注