接上篇,鉴于陕西能源是23年4月上市,无法覆盖题目给的21-24年数据,而龙源技术是火力发电行业的代表性企业,故这里对龙源技术(sz.300105)的股票日数据进行爬取。如果想爬取其他企业,改变baostock的输入参数即可。
本文爬取的文档资源已附入附件。
数据来源:接入baostock
baostock网站提供免费全面的股票交易数据,接入数据速度快,api文档也很详细,我的毕业论文数据来源也是从上面爬的,这里附上官网链接。www.baostock.com
安装和升级
pip install baostock -i https://pypi.tuna.tsinghua.edu.cn/simple/ --trusted-host pypi.tuna.tsinghua.edu.cn
pip install baostock --upgrade
接入数据
这里爬取了龙源技术(sz.300105)从2021.10.1到2024.04.19的每日最高价、最低价、收盘价、前收盘价、成交量和成交额数据。并选择对数据进行前复权处理。
爬取的数据时间覆盖了比赛时间。后续根据需要进行选择即可。
import pandas as pd
import baostock as bs
#### 登陆系统 ####
lg = bs.login()
# 显示登陆返回信息
print('login respond error_code:'+lg.error_code)
print('login respond error_msg:'+lg.error_msg)
#### 获取沪深A股历史K线数据 ####
# 详细指标参数,参见“历史行情指标参数”章节;“分钟线”参数与“日线”参数不同。“分钟线”不包含指数。
# 分钟线指标:date,time,code,open,high,low,close,volume,amount,adjustflag
# 周月线指标:date,code,open,high,low,close,volume,amount,adjustflag,turn,pctChg
rs = bs.query_history_k_data_plus("sz.300105",
"date,code,high,low,close,preclose,volume,amount",
start_date='2021-10-01', end_date='2024-04-19',
frequency="d", adjustflag="2")
print('query_history_k_data_plus respond error_code:'+rs.error_code)
print('query_history_k_data_plus respond error_msg:'+rs.error_msg)
#### 打印结果集 ####
data_list = []
while (rs.error_code == '0') & rs.next():
# 获取一条记录,将记录合并在一起
data_list.append(rs.get_row_data())
result = pd.DataFrame(data_list, columns=rs.fields)
result
#### 登出系统 ####
bs.logout()
数据处理
为匹配比赛格式,我们对得到的数据进行处理。
股票交易具有停牌、假期日,而比赛数据覆盖近三年的全部日期,并且数据是每隔15分钟出价一次,即一天具有96个数据。
故而我们填补缺失日期,并将爬取的每日数据重复96次。
(baostock提供了15min的高频交易数据,但考虑到股票交易仅在上午、下午有数据,时间过于细化也比较繁琐,这里为方便起见,只提供每日交易信息即可)
填补缺失日期
import pandas as pd
import numpy as np
result['date'] = pd.to_datetime(result['date'])
result.set_index('date', inplace=True)
# 按天重采样,补充缺失日期,并使用前向填充方法填充缺失值
df_re_sampled = result.asfreq('D').fillna(method='ffill')
#将索引列转成数据列
df_re_sampled_= df_re_sampled.reset_index()
# 定义重复次数
n_repeats = 96
# 重复每一行数据
repeated_df = df_re_sampled_.values.repeat(n_repeats, axis=0)
# 将重复的数组转换回DataFrame
repeated_df = pd.DataFrame(repeated_df, columns=df_re_sampled_.columns)
repeated_df
对于缺失日期的交易数据,采用前向填充,即用上一个日期的数据填充。