大家好,我是涛哥,本文内容来自 涛哥聊Python ,转载请标原创。
更多Python学习内容:http://ipengtao.com
在数据分析和处理过程中,时间序列数据(时序数据)是非常常见且重要的一类数据。Python的pandas库提供了强大的功能来处理和分析时序数据。本文将详细介绍pandas时序统计的高级用法,涵盖数据加载与预处理、时间索引与切片、重采样与窗口函数、缺失值处理以及时序数据的可视化等内容,帮助更高效地进行时序数据分析。
数据加载与预处理
示例数据
使用一个简单的股票价格数据集作为示例数据。假设数据包含日期、开盘价、最高价、最低价、收盘价和交易量。
import pandas as pd
# 示例数据
data = {
'Date': ['2022-01-01', '2022-01-02', '2022-01-03', '2022-01-04', '2022-01-05'],
'Open': [100, 102, 104, 106, 108],
'High': [110, 112, 114, 116, 118],
'Low': [95, 97, 99, 101, 103],
'Close': [105, 107, 109, 111, 113],
'Volume': [1000, 1500, 2000, 2500, 3000]
}
df = pd.DataFrame(data)
# 将Date列转换为datetime类型并设置为索引
df['Date'] = pd.to_datetime(df['Date'])
df.set_index('Date', inplace=True)
print(df)
输出:
Open High Low Close Volume
Date
2022-01-01 100 110 95 105 1000
2022-01-02 102 112 97 107 1500
2022-01-03 104 114 99 109 2000
2022-01-04 106 116 101 111 2500
2022-01-05 108 118 103 113 3000
时间索引与切片
时间索引与切片是时序数据处理的基础操作。pandas提供了丰富的功能来处理这些操作。
按日期范围选择数据
# 选择特定日期范围的数据
df_subset = df['2022-01-02':'2022-01-04']
print(df_subset)
输出:
Open High Low Close Volume
Date
2022-01-02 102 112 97 107 1500
2022-01-03 104 114 99 109 2000
2022-01-04 106 116 101 111 2500
按年、月、日选择数据
# 选择2022年的数据
df_2022 = df['2022']
print(df_2022)
输出:
Open High Low Close Volume
Date
2022-01-01 100 110 95 105 1000
2022-01-02 102 112 97 107 1500
2022-01-03 104 114 99 109 2000
2022-01-04 106 116 101 111 2500
2022-01-05 108 118 103 113 3000
重采样与窗口函数
重采样和窗口函数是处理时序数据的重要工具,可以用于降采样和升采样,以及计算滑动统计量。
重采样
# 按月重采样,计算每月的平均值
df_monthly = df.resample('M').mean()
print(df_monthly)
输出:
Open High Low Close Volume
Date
2022-01-31 104.0 114.0 99.0 109.0 2000.0
窗口函数
# 计算7天的滑动平均
df['7D_MA'] = df['Close'].rolling(window=7).mean()
print(df)
输出:
Open High Low Close Volume 7D_MA
Date
2022-01-01 100 110 95 105 1000 NaN
2022-01-02 102 112 97 107 1500 NaN
2022-01-03 104 114 99 109 2000 NaN
2022-01-04 106 116 101 111 2500 NaN
2022-01-05 108 118 103 113 3000 NaN
由于示例数据仅有5天,因此7天滑动平均值为NaN。
缺失值处理
在时序数据中,缺失值是常见的问题。pandas提供了多种方法来处理缺失值。
填充缺失值
# 向前填充缺失值
df['7D_MA'] = df['7D_MA'].fillna(method='ffill')
print(df)
删除缺失值
# 删除包含缺失值的行
df_cleaned = df.dropna()
print(df_cleaned)
时序数据的可视化
可视化是时序数据分析的重要部分,pandas与matplotlib集成,可以方便地进行时序数据的可视化。
import matplotlib.pyplot as plt
# 绘制收盘价和7天滑动平均
df[['Close', '7D_MA']].plot(figsize=(10, 5))
plt.title('收盘价和7天滑动平均')
plt.xlabel('日期')
plt.ylabel('价格')
plt.show()
高级时序分析
自相关与偏自相关
自相关和偏自相关是时序分析中用于检查数据序列中的依赖关系。
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
# 绘制自相关图
plot_acf(df['Close'], lags=20)
plt.show()
# 绘制偏自相关图
plot_pacf(df['Close'], lags=20)
plt.show()
ARIMA模型
ARIMA(AutoRegressive Integrated Moving Average)模型是时序分析中的经典模型,用于预测和分析时序数据。
from statsmodels.tsa.arima_model import ARIMA
# 拟合ARIMA模型
model = ARIMA(df['Close'], order=(5, 1, 0))
model_fit = model.fit(disp=0)
# 打印模型总结
print(model_fit.summary())
# 绘制预测结果
model_fit.plot_predict(dynamic=False)
plt.show()
总结
本文详细介绍了Python pandas在时序统计中的高级用法,包括数据加载与预处理、时间索引与切片、重采样与窗口函数、缺失值处理以及时序数据的可视化和高级分析技术。通过具体的示例代码,展示了如何有效地处理和分析时序数据,深入挖掘数据中的趋势和模式。掌握这些技巧和方法,可以在实际工作中更高效地进行时序数据分析,提高数据处理的能力和效率。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。