python库baostock获取股票数据

import baostock as bs
import pandas as pd
import numpy as np

# 登录baostock系统
lg = bs.login()
print('登录返回代码:', lg.error_code)
print('登录返回信息:', lg.error_msg)

# 获取股票数据
# 示例:获取上证指数(000001.SH)2023年的日K线数据
start_date = '2025-01-01'
end_date = '2025-9-30'
stock_code = 'sh.600938'

# 获取日K线数据
rs = bs.query_history_k_data_plus(stock_code,
    "date,code,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,isST",
    start_date=start_date, end_date=end_date, frequency="d", adjustflag="3")

print('获取K线数据返回代码:', rs.error_code)
print('获取K线数据返回信息:', rs.error_msg)

# 解析数据并存储到DataFrame
data_list = []
while (rs.error_code == '0') & rs.next():
    data_list.append(rs.get_row_data())

# 创建DataFrame
column_names = ["date","code","open","high","low","close","preclose","volume","amount","adjustflag","turn","tradestatus","pctChg","isST"]
df = pd.DataFrame(data_list, columns=column_names)

# 数据类型转换 - 将字符串转换为数字格式
numeric_columns = ["open","high","low","close","preclose","volume","amount","adjustflag","turn","pctChg"]
for col in numeric_columns:
    # 替换可能存在的非数字字符
    df[col] = pd.to_numeric(df[col], errors='coerce')

# 处理可能的缺失值
# 1. 查看缺失值情况
print("缺失值统计:")
print(df.isnull().sum())

# 2. 填充缺失值(可以根据实际需求选择填充方式)
# 对于价格类数据,使用前一天的值填充
price_columns = ["open","high","low","close","preclose"]
df[price_columns] = df[price_columns].fillna(method='ffill')

# 对于交易量、成交额等,使用0填充
volume_columns = ["volume","amount"]
df[volume_columns] = df[volume_columns].fillna(0)

# 对于其他数值列,使用均值填充
other_numeric = list(set(numeric_columns) - set(price_columns) - set(volume_columns))
for col in other_numeric:
    if not df[col].empty and df[col].notna().any():
        df[col] = df[col].fillna(df[col].mean())

# 转换日期格式
df['date'] = pd.to_datetime(df['date'])

# 输出数据基本信息
print("\n数据基本信息:")
print(df.info())
print("\n数据前5行:")
print(df.head())
print("\n数据后5行:")
print(df.tail())

# 保存数据为CSV文件(适合SPSS Modeler导入)
output_file = 'stock_data_numeric.csv'
df.to_csv(output_file, index=False, encoding='utf-8-sig')
print(f"\n数据已保存至:{output_file}")

# 登出系统
bs.logout()

# 提示用户如何在SPSS Modeler中使用该数据
print("\n提示:")
print("1. 已将所有数值列转换为数字格式,适合SPSS Modeler分析")
print("2. 日期列已转换为标准日期格式")
print("3. 缺失值已进行处理")
print("4. 您可以在SPSS Modeler中通过'CSV数据源'节点导入此文件进行分析")
print("5. 如需获取其他股票或时间段数据,请修改代码中的start_date、end_date和stock_code参数")

下面是使用baostock获取的股票数据中各个字段的详细说明:

数据处理说明 数据类型转换:代码中已将所有数值字段(open、high、low、close、preclose、volume、amount、adjustflag、turn、pctChg)通过pd.to_numeric()转换为数字格式

缺失值处理:

价格类数据(open、high、low、close、preclose)使用前一天的值填充 交易量、成交额等(volume、amount)使用0填充 其他数值列使用均值填充 日期格式:date字段已通过pd.to_datetime()转换为标准日期格式

这些处理确保了数据适合在SPSS Modeler中进行各种统计分析,如相关性分析、回归分析等。

需要查看当前的 stocks_baostock.py 文件内容,了解其中包含的数据字段,然后为这些字段提供详细说明。

toolName: view_files
status: success

filePath: c:\Users\czliu\Documents\python\stocks_baostock.py

下面是使用baostock获取的股票数据中各个字段的详细说明:

1. 基本字段

字段名中文名称数据类型说明
date日期日期类型交易日期,格式为YYYY-MM-DD
code股票代码字符串如”sh.600938″,其中sh表示上海证券交易所

2. 价格相关字段

字段名中文名称数据类型说明
open开盘价浮点数当日股票开盘价格
high最高价浮点数当日股票交易的最高价格
low最低价浮点数当日股票交易的最低价格
close收盘价浮点数当日股票收盘价格
preclose前收盘价浮点数前一个交易日的收盘价格
pctChg涨跌幅浮点数当日涨跌幅百分比,计算公式:(收盘价-前收盘价)/前收盘价*100%

3. 交易量相关字段

字段名中文名称数据类型说明
volume成交量整数当日股票成交的数量,单位为股
amount成交额浮点数当日股票成交的金额,单位为元
turn换手率浮点数当日换手率百分比,计算公式:(成交量/流通股数)*100%

4. 状态相关字段

字段名中文名称数据类型说明
adjustflag复权状态整数表示数据的复权类型,代码中的adjustflag=”3″表示”前复权”
tradestatus交易状态整数表示股票的交易状态,1表示正常交易,0表示停牌
isST是否ST字符串表示股票是否为ST股票,1表示是ST股票,0表示非ST股票

数据处理说明

  1. 数据类型转换:代码中已将所有数值字段(open、high、low、close、preclose、volume、amount、adjustflag、turn、pctChg)通过pd.to_numeric()转换为数字格式
  2. 缺失值处理
    • 价格类数据(open、high、low、close、preclose)使用前一天的值填充
    • 交易量、成交额等(volume、amount)使用0填充
    • 其他数值列使用均值填充
  3. 日期格式:date字段已通过pd.to_datetime()转换为标准日期格式

这些处理确保了数据适合在SPSS Modeler中进行各种统计分析,如相关性分析、回归分析等。