Datawhale AI夏令营 社会科学赛道 8.7笔记 如何利用baostock爬取相关股票数据(附数据和代码)

接上篇,鉴于陕西能源是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

对于缺失日期的交易数据,采用前向填充,即用上一个日期的数据填充。

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值