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股票 |
数据处理说明
- 数据类型转换:代码中已将所有数值字段(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中进行各种统计分析,如相关性分析、回归分析等。