微信登录

股票价格预测 - 数据处理 - 处理股票历史数据

TensorFlow 股票价格预测 - 数据处理 - 处理股票历史数据

引言

在金融领域,股票价格的预测一直是一个备受关注的问题。准确的股票价格预测可以帮助投资者做出更明智的决策,从而获得更高的收益。随着机器学习和深度学习技术的发展,利用这些技术进行股票价格预测成为了一个热门的研究方向。TensorFlow 作为一个强大的深度学习框架,在股票价格预测中有着广泛的应用。而在使用 TensorFlow 进行股票价格预测之前,对股票历史数据的处理是至关重要的一步,本文将详细介绍如何使用 Python 和 TensorFlow 相关工具来处理股票历史数据。

数据获取

首先,我们需要获取股票的历史数据。有许多途径可以获取这些数据,例如雅虎财经、Tushare 等。这里我们以 Tushare 为例,Tushare 是一个免费、开源的 Python 财经数据接口包,提供了丰富的金融数据。

  1. import tushare as ts
  2. # 设置 tushare 的 token
  3. ts.set_token('your_token')
  4. pro = ts.pro_api()
  5. # 获取某只股票的历史数据,这里以 000001.SZ 为例
  6. df = pro.daily(ts_code='000001.SZ', start_date='20200101', end_date='20231231')
  7. # 按日期升序排序
  8. df = df.sort_values(by='trade_date')
  9. df.reset_index(drop=True, inplace=True)
  10. print(df.head())

在上述代码中,我们首先设置了 Tushare 的 token,然后使用 pro.daily 函数获取指定股票在指定日期范围内的历史数据,最后对数据按日期进行升序排序。

数据探索与可视化

在处理数据之前,我们需要对数据进行探索和可视化,以了解数据的基本特征和分布情况。

  1. import matplotlib.pyplot as plt
  2. # 绘制收盘价的时间序列图
  3. plt.figure(figsize=(12, 6))
  4. plt.plot(df['trade_date'], df['close'])
  5. plt.xlabel('Date')
  6. plt.ylabel('Close Price')
  7. plt.title('Stock Close Price Time Series')
  8. plt.xticks(rotation=45)
  9. plt.show()

这段代码使用 matplotlib 库绘制了股票收盘价的时间序列图,通过观察该图,我们可以直观地了解股票价格的走势。

数据清洗

在实际的数据中,可能会存在缺失值、异常值等问题,需要对数据进行清洗。

  1. # 检查缺失值
  2. print('缺失值情况:')
  3. print(df.isnull().sum())
  4. # 处理缺失值,这里简单地使用前向填充
  5. df.fillna(method='ffill', inplace=True)
  6. # 检查异常值,这里以收盘价为例,简单地将超过均值 3 倍标准差的值视为异常值
  7. mean_close = df['close'].mean()
  8. std_close = df['close'].std()
  9. upper_bound = mean_close + 3 * std_close
  10. lower_bound = mean_close - 3 * std_close
  11. df = df[(df['close'] >= lower_bound) & (df['close'] <= upper_bound)]

在上述代码中,我们首先检查了数据中的缺失值情况,然后使用前向填充的方法处理缺失值。接着,我们以收盘价为例,将超过均值 3 倍标准差的值视为异常值,并将这些异常值所在的行删除。

特征工程

为了提高模型的预测性能,我们可以进行一些特征工程,例如计算移动平均线、收益率等。

  1. # 计算简单移动平均线(SMA)
  2. df['sma_5'] = df['close'].rolling(window=5).mean()
  3. df['sma_20'] = df['close'].rolling(window=20).mean()
  4. # 计算收益率
  5. df['returns'] = df['close'].pct_change()
  6. # 删除包含 NaN 的行
  7. df.dropna(inplace=True)

在这段代码中,我们计算了 5 日和 20 日的简单移动平均线(SMA),并计算了每日的收益率。最后,我们删除了包含 NaN 的行。

数据标准化

在使用深度学习模型进行训练之前,通常需要对数据进行标准化处理,以加快模型的收敛速度。

  1. from sklearn.preprocessing import MinMaxScaler
  2. # 选择需要进行标准化的特征
  3. features = ['open', 'high', 'low', 'close', 'sma_5', 'sma_20', 'returns']
  4. scaler = MinMaxScaler()
  5. df[features] = scaler.fit_transform(df[features])

这里我们使用 MinMaxScaler 将数据缩放到 [0, 1] 的范围内。

数据划分

最后,我们需要将数据划分为训练集和测试集。

  1. train_size = int(len(df) * 0.8)
  2. train_data = df[:train_size]
  3. test_data = df[train_size:]
  4. # 准备训练数据和测试数据
  5. X_train = train_data[features].values
  6. y_train = train_data['close'].values
  7. X_test = test_data[features].values
  8. y_test = test_data['close'].values

在上述代码中,我们将 80% 的数据作为训练集,20% 的数据作为测试集,并准备好输入特征和目标值。

结论

通过以上步骤,我们完成了股票历史数据的处理,包括数据获取、探索与可视化、清洗、特征工程、标准化和划分。这些处理后的数据可以用于后续的 TensorFlow 深度学习模型的训练和预测。在实际应用中,我们还可以根据具体情况对数据处理的方法进行调整和优化,以提高模型的预测性能。