- 时间序列数据简介
时间序列数据是按时间顺序排列的连续数据序列,它们通常是事件或事物的度量标准,因此可以用于预测未来或理解过去。如股价、天气、交通流量、人口数量等等都是时间序列数据。时序数据的处理是时间序列分析的核心问题,也是处理AI、机器学习数据的前提之一。Python的pandas和numpy包提供了丰富的时间序列分析功能。
- Python中的时间序列分析
Python中的时间序列分析需要使用pandas的date_range()函数,该函数可以在指定的时间间隔内生成标准时间间隔的时间序列。并且可以通过to_dateime()方法转化为时间序列数据类型。日期的格式可以使用strftime()函数进行格式化,也可以使用pd.to_datetime()函数将字符串转化为日期对象。
例如,生成从2021年1月1号到2021年1月31号每天的日期:
import pandas as pd
date_range = pd.date_range('20210101', '20210131', freq='D')
date_series = pd.to_datetime(date_range)
- 时间序列的可视化
pandas的plot()函数可以将时间序列数据可视化。该函数通过调用matplotlib库生成图表,可以很方便地绘制线图、柱状图等图表。
例如,绘制股票价格的时间序列图:
import pandas as pd
import matplotlib.pyplot as plt
# 读取股票价格数据
df = pd.read_csv('stock_price.csv', index_col=0, parse_dates=True)
# 绘制时间序列图
plt.plot(df.index, df['price'])
plt.xlabel('Date')
plt.ylabel('Price')
plt.title('Stock Price')
plt.show()
- 时间序列数据的特征提取
时间序列数据具有许多不同的特征,例如趋势、周期、季节性和噪声。pandas提供了许多函数用于时间序列数据的特征提取。
例如,提取股票价格的移动平均值:
import pandas as pd
# 读取股票价格数据
df = pd.read_csv('stock_price.csv', index_col=0, parse_dates=True)
# 计算移动平均值
ma_5 = df['price'].rolling(window=5).mean()
# 添加新列到数据框
df['ma_5'] = ma_5
- 时间序列数据的预测
机器学习和AI是时间序列预测中常用的方法。Python中常用的模型有ARIMA、LSTM、随机森林等等。由于时间序列数据通常包含诸如趋势、季节性、周期性等特征,因此需要对数据进行先前处理,并将其转化为各种超参数。pandas的shift()函数可以将数据按照指定步长进行移动,从而创建滞后效应。
例如,使用ARIMA模型预测股票价格:
import pandas as pd
from statsmodels.tsa.arima_model import ARIMA
import numpy as np
# 读取股票价格数据
df = pd.read_csv('stock_price.csv', index_col=0, parse_dates=True)
# 将数据分成训练集和测试集
train_data = df['price'][:'2021-01-01']
test_data = df['price']['2021-01-01':]
# 创建ARIMA模型
model = ARIMA(train_data, order=(1, 1, 1))
# 拟合训练数据
model_fit = model.fit()
# 预测未来数据
predictions = model_fit.forecast(steps=len(test_data))[0]
# 计算误差
error = np.sqrt(np.mean((predictions - test_data) ** 2))
print(f'RMSE: {error:.2f}')
- 示例
例如,使用pandas和ARIMA模型分析在线零售商的月销售数据。首先,我们使用pandas读取数据,并将数据转换为时间序列类型。然后,我们将时间序列数据可视化,检查是否存在趋势、季节性等特征。接着,我们使用ARIMA模型训练数据,并使用该模型预测未来销售数据。
import pandas as pd
from statsmodels.tsa.arima_model import ARIMA
import matplotlib.pyplot as plt
import numpy as np
# 读取销售数据
df = pd.read_csv('online_retail.csv', index_col=0, parse_dates=True)
# 将数据转换为时间序列数据格式
ts = pd.Series(df['sales'], index=pd.to_datetime(df.index))
# 将时间序列数据可视化
plt.plot(ts)
plt.xlabel('Date')
plt.ylabel('Sales')
plt.title('Monthly Sales')
plt.show()
# 训练ARIMA模型并进行预测
model = ARIMA(ts, order=(2, 1, 1))
model_fit = model.fit()
predictions = model_fit.forecast(steps=12)[0]
# 打印预测结果
print(f'Predictions: {predictions}')
# 计算误差
test_data = ts['2011-12-01':'2011-12-31']
error = np.sqrt(np.mean((predictions - test_data) ** 2))
print(f'RMSE: {error:.2f}')
通过ARIMA模型分析,我们发现销售数据具有突显的季节性,预测模型的RMSE为402.61。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python与AI分析时间序列数据 - Python技术站