2-3 合并輸入特征
? ? ?首先定義了數據預處理函數,將連續 n 天的 K 線數據(如開盤價、收盤價、成交量等)合并為一行特征,同時保留對應的目標標簽(buy 列,表示是否應該買入);然后讀取股票代碼列表,對每只股票的數據進行檢查,如果尚未預處理,則讀取擴展數據,篩選出 2017 年底前的數據,并調用預處理函數將多日數據合并為單行特征,最后保存預處理后的文件。這種處理方式將時間序列數據轉換為適合機器學習模型輸入的格式,便于后續進行訓練和預測。為了應用時序上的信息,將前10日的指標數據合并到當日,作為輸入特征。
? ? ? ?程序的核心功能是將股票的時序數據轉換為適合機器學習模型輸入的格式,通過滑動窗口方法構建特征矩陣。具體來說,程序將前 N 天的多項技術指標合并為一行特征向量,并將當日的交易信號作為目標值,為后續的預測模型提供數據準備。
功能總結
- 數據預處理:刪除日期和目標值列,保留技術指標作為特征
- 時序特征構建:使用滑動窗口(長度為 FEATURE_N)將歷史數據轉換為特征向量
- 目標值對齊:將當日的
buy
信號作為對應特征向量的預測目標 - 批量處理:對所有符合條件的股票執行相同的預處理操作
# -*- coding: utf-8 -*-
"""
Created on Thu Jun 5 09:20:50 2025
為了應用時序上的信息,將前10日的指標數據合并到當日,作為輸入特征
@author: Administrator
"""import numpy as np # 導入數值計算庫
import pandas as pd # 導入數據處理庫
import os # 導入操作系統接口庫# 使用前FEATURE_N的K線數據作為輸入特征
FEATURE_N = 10 # 定義時間窗口大小,即使用前10天的數據構建特征# 預處理,將n行數據作為輸入特征
def data_preprocessing(df, stk_code, n):df = df.copy() # 創建數據副本,避免修改原始數據# 刪除無效數據列,保留特征數據ft_df = df.drop(columns=['date', 'buy']) # 移除日期和目標值列,保留技術指標# 返回值out_df = pd.DataFrame() # 初始化輸出DataFrame# 生成新特征數據for i in range(n, df.shape[0]): # 從第n行開始遍歷,確保有足夠的歷史數據# 取n行數據part_df = ft_df.iloc[i - n : i] # 獲取當前行前n天的技術指標數據# 將n行合并為一行new_ft_df = pd.DataFrame(part_df.values.reshape(1, -1)) # 將n行數據展平為一行# 添加到輸出DataFrameout_df = out_df.append(new_ft_df)# 添加目標值(當日的buy信號)out_df['target'] = df.iloc[n:df.shape[0]]['buy'].values # 將當日的交易信號作為預測目標# 重置索引并保存out_df = out_df.reset_index(drop=True) # 重置索引out_df.to_csv('./baostock/data_pre/{}.csv'.format(stk_code), index=False) # 保存處理后的數據return out_df # 返回處理后的DataFrame# 主程序:批量處理所有股票
stk_code_file = './stk_data/dp_stock_list.csv' # 定義股票代碼文件路徑
stk_list = pd.read_csv(stk_code_file)['code'].tolist() # 讀取股票代碼列表for stk_code in stk_list: # 遍歷所有股票# 判斷是否已經經過預處理(文件是否存在)data_file = './baostock/data_pre/{}.csv'.format(stk_code) # 定義預處理后的數據文件路徑if not os.path.exists(data_file): # 檢查文件是否已存在print('processing {} ...'.format(stk_code)) # 打印正在處理的股票代碼# 讀取數據并限制時間范圍df = pd.read_csv('./baostock/data_ext/{}.csv'.format(stk_code)) # 讀取擴展后的股票數據df = df[df['date'] <= '2017-12-31'] # 僅保留2017年底前的數據# 執行數據預處理df = data_preprocessing(df, stk_code, FEATURE_N) # 調用預處理函數