【Python量化金融实战】-第2章:金融市场数据获取与处理:2.1 数据源概览:Tushare、AkShare、Baostock、通联数据(DataAPI)

本章将详细介绍四大主流金融数据源(Tushare、AkShare、Baostock、通联数据(DataAPI)),分析其特点与适用场景,并通过实战案例展示数据获取与处理的全流程。

👉 点击关注不迷路
👉 点击关注不迷路
👉 点击关注不迷路


文章大纲

      • 2.1.1 Tushare
      • 2.1.2 AkShare
      • 2.1.3 Baostock
      • 2.1.4 通联数据(Data API)
      • 2.1.5 选择建议与注意事项
      • 2.1.6 常见问题解决方案


2.1.1 Tushare

Tushare 是国内最知名的开源金融数据接口之一,提供股票、期货、基金、外汇、数字货币等多种数据。其特点包括:

  • 高频数据:提供Level2行情、资金流向等特色数据

  • 数据覆盖广:支持A股、港股、美股的历史行情、财务数据、市场新闻等。

  • 易用性高:返回数据格式为Pandas DataFrame,便于直接分析与可视化。

  • 免费与付费结合:基础数据(如日线行情)免费,但部分高频数据需通过积分或付费获取。

  • 实战案例:获取A股行情与资金流分析
    在这里插入图片描述

  • 运行效果展示:
    在这里插入图片描述


2.1.2 AkShare

AkShare 是完全开源且免费的金融数据接口库,数据源涵盖东方财富、新浪财经等多个平台,特点包括:

  • 多维度数据:提供股票、期货、期权、宏观经济、区块链等数据,支持实时和历史行情。

  • 社区活跃:通过官方微信群和文档持续更新,适合需要灵活爬取数据的用户。

  • 局限性:部分高频数据(如分钟级)获取有限,需结合其他工具补充。
    示例代码:

    import akshare as ak
    import pandas as pd
    import matplotlib.pyplot as plt
    import seaborn as sns# 获取 A 股日线数据,以平安银行(000001.SZ)为例
    stock_daily = ak.stock_zh_a_daily(symbol="sz000001", start_date="20230101", end_date="20231231", adjust="qfq")# 数据统计:计算收盘价的均值、最大值和最小值
    close_stats = stock_daily['close'].describe()[['mean', 'max', 'min']]
    print("收盘价统计信息:")
    print(close_stats)# 可视化:绘制收盘价折线图
    plt.figure(figsize=(12, 6))
    plt.plot(stock_daily['date'], stock_daily['close'], label='Close Price')
    plt.title('Ping An Bank Daily Close Price in 2023')
    plt.xlabel('Date')
    plt.ylabel('Close Price')
    plt.legend()
    plt.xticks(rotation=45)
    plt.show()# 可视化:绘制收盘价的箱线图
    plt.figure(figsize=(8, 6))
    sns.boxplot(y=stock_daily['close'])
    plt.title('Box Plot of Ping An Bank Daily Close Price in 2023')
    plt.ylabel('Close Price')
    plt.show()
    

2.1.3 Baostock

Baostock 是一个专注于国内证券数据的开源平台,无需注册即可使用,特点包括:

  • 分钟级数据:免费提供股票、指数的分钟线数据,适合高频策略研究。
  • 数据质量高:数据经过清洗和标准化,可直接用于回测和建模。
  • 接口简洁:支持Python直接调用,返回结构清晰的DataFrame。

示例代码:

import baostock as bs
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns# 登陆系统
lg = bs.login()
# 显示登陆返回信息
print('login respond error_code:'+ lg.error_code)
print('login respond  error_msg:'+ lg.error_msg)# 获取沪深 300 指数成份股
rs = bs.query_hs300_stocks()
hs300_stocks = []
while (rs.error_code == '0') & rs.next():# 获取一条记录,将记录合并在一起hs300_stocks.append(rs.get_row_data())
hs300_df = pd.DataFrame(hs300_stocks, columns=rs.fields)# 选择其中一只股票,如中国平安(601318.SH)
stock_code = 'sh.601318'
start_date = '2023-01-01'
end_date = '2023-12-31'# 获取股票历史 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")
data_list = []
while (rs.error_code == '0') & rs.next():# 获取一条记录,将记录合并在一起data_list.append(rs.get_row_data())
df = pd.DataFrame(data_list, columns=rs.fields)# 数据类型转换
df['date'] = pd.to_datetime(df['date'])
df[['open', 'high', 'low', 'close', 'preclose', 'volume', 'amount', 'turn', 'pctChg']] = df[['open', 'high', 'low', 'close', 'preclose', 'volume', 'amount', 'turn', 'pctChg']].astype(float)# 数据统计:计算收盘价的均值、最大值、最小值
close_stats = df['close'].describe()[['mean', 'max', 'min']]
print("收盘价统计信息:")
print(close_stats)# 可视化:绘制收盘价折线图
plt.figure(figsize=(12, 6))
plt.plot(df['date'], df['close'], label='Close Price')
plt.title('Ping An Bank Daily Close Price in 2023')
plt.xlabel('Date')
plt.ylabel('Close Price')
plt.legend()
plt.xticks(rotation=45)
plt.show()# 可视化:绘制收盘价的箱线图
plt.figure(figsize=(8, 6))
sns.boxplot(y=df['close'])
plt.title('Box Plot of Ping An Bank Daily Close Price in 2023')
plt.ylabel('Close Price')
plt.show()# 可视化:绘制成交量柱状图
plt.figure(figsize=(12, 6))
plt.bar(df['date'], df['volume'], label='Volume')
plt.title('Ping An Bank Daily Volume in 2023')
plt.xlabel('Date')
plt.ylabel('Volume')
plt.legend()
plt.xticks(rotation=45)
plt.show()# 可视化:绘制收盘价和成交量的散点图
plt.figure(figsize=(8, 6))
sns.scatterplot(x=df['close'], y=df['volume'])
plt.title('Scatter Plot of Ping An Bank Close Price and Volume')
plt.xlabel('Close Price')
plt.ylabel('Volume')
plt.show()# 登出系统
bs.logout()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.1.4 通联数据(Data API)

通联数据通过优矿(UQER)等平台提供API接口,特点包括:

  • 专业级数据:涵盖股票、因子、财报、行业大数据等,适合深度量化研究。
  • 免费与开放:注册优矿账号后可免费获取大部分基础数据,部分高频数据需企业合作。
  • 集成工具链:支持数据清洗、合并、标准化等操作,可直接在Notebook中分析。

示例代码(优矿平台):

import datapipe
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns# 替换为你自己的 API Token
token = "your_api_token"
client = datapipe.DatapipeClient(token)# 获取某只股票(如 000001.SZ 平安银行)在指定日期范围的日线数据
symbol = "000001.SZ"
start_date = "2023-01-01"
end_date = "2023-12-31"try:df = client.get_historical_bars(symbol, start_date=start_date, end_date=end_date)print("成功获取股票日线数据:")print(df.head())
except Exception as e:print(f"获取数据时出错:{e}")# 计算收盘价的基本统计信息
close_stats = df['close'].describe()
print("收盘价的基本统计信息:")
print(close_stats)# 计算成交量的总和与平均值
volume_sum = df['volume'].sum()
volume_mean = df['volume'].mean()
print(f"成交量总和: {volume_sum}")
print(f"成交量平均值: {volume_mean}")# 设置图片清晰度
plt.rcParams['figure.dpi'] = 300# 绘制收盘价折线图
plt.figure(figsize=(12, 6))
plt.plot(df['date'], df['close'], label='Close Price')
plt.title(f'{symbol} 收盘价走势 ({start_date} - {end_date})')
plt.xlabel('日期')
plt.ylabel('收盘价')
plt.legend()
plt.xticks(rotation=45)
plt.show()# 绘制成交量柱状图
plt.figure(figsize=(12, 6))
plt.bar(df['date'], df['volume'], label='Volume')
plt.title(f'{symbol} 成交量走势 ({start_date} - {end_date})')
plt.xlabel('日期')
plt.ylabel('成交量')
plt.legend()
plt.xticks(rotation=45)
plt.show()# 绘制收盘价的箱线图
plt.figure(figsize=(8, 6))
sns.boxplot(y=df['close'])
plt.title(f'{symbol} 收盘价箱线图')
plt.ylabel('收盘价')
plt.show()# 绘制收盘价和成交量的散点图
plt.figure(figsize=(8, 6))
sns.scatterplot(x=df['close'], y=df['volume'])
plt.title(f'{symbol} 收盘价与成交量散点图')
plt.xlabel('收盘价')
plt.ylabel('成交量')
plt.show()

2.1.5 选择建议与注意事项

  • 1. 免费性与适用场景:
    • TushareAkShare适合基础研究,Baostock 适合高频数据需求,通联数据适合专业因子分析。
  • 2. 数据更新与稳定性:
    • TushareAkShare 依赖社区维护,可能存在接口变动风险;Baostock 和通联数据由官方维护,稳定性更高。
  • 3. 合规与限制:
    • 部分接口(如Tushare)需遵守数据调用频率限制,避免因超额请求被封禁。

2.1.6 常见问题解决方案

  • API限制报错:
    • 使用time.sleep(60)在循环中增加延迟
    • 升级付费套餐或切换备用API密钥
  • 时区不一致:
      # 统一为北京时间
    data = data.tz_localize('UTC').tz_convert('Asia/Shanghai')
    
  • 中文乱码处理:
    plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置中文字体
    plt.rcParams['axes.unicode_minus'] = False    # 解决负号显示问题
    

  • 学习路径建议
      1. 新手阶段:从Yahoo Finance开始练习基础数据处理
      1. 进阶阶段:通过Alpha Vantage学习实时数据接口调用
      1. 专业阶段:使用Tushare+Quandl构建A股多因子模型
      1. 高阶应用:结合多源数据进行宏观经济与市场的联动分析

通过灵活运用不同数据源,开发者可以构建覆盖全球市场的量化分析系统。实际应用中需特别注意数据授权协议与更新频率,确保策略的合规性与时效性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/23754.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文讲解Redis的持久化方式及各自的区别

一文讲解Redis的持久化方式及各自的区别 Redis 的持久化机制保证了 Redis 服务器在重启后数据不丢失,通过 RDB 和 AOF 文件来恢复内存中原有的数据。 这两种持久化方式可以单独使用,也可以同时使用。 三分恶面渣逆袭:Redis持久化的两种方式…

STM32 利用SysTick实现高精度计时

STM32 HAL库利用ARM Cortex-M内核自带的24位递减计数器SysTick(系统节拍),它属于 NVIC的一部分,且可以产生 SysTick 异常(异常类型#15)。通过读取并判断计数值来实现精确延时,从0xFFFFFF向下计数到0。可以用作I2C、SPI通信中的时序控制,RTOS环…

图像金字塔

图像金字塔(MATLAB 版本) 目录 图像金字塔(MATLAB 版本)一、 生成图像金字塔二、 Matlab实践操作三、实践问题 一、 生成图像金字塔 在 MATLAB 中,可以使用 impyramid 函数来生成图像金字塔。 代码示例: m…

2024-2025 学年广东省职业院校技能大赛 “信息安全管理与评估”赛项 技能测试试卷(一)

2024-2025 学年广东省职业院校技能大赛 “信息安全管理与评估”赛项 技能测试试卷(一) 第一部分:网络平台搭建与设备安全防护任务书DCRS:DCFW:DCWS:WAF: 第二部分:网络安全事件响应、数字取证调查、应用程序安全任务书任务 1&…

20250212:https通信

1:防止DNS劫持:使用 https 进行通信。 因为是SDK授权开发,需要尽量压缩so库文件和三方依赖。所以第一想法是使用 head only 的 cpp-httplib 进行开发。 cpp-httplib 需要 SSL 版本是 3.0及以上。但本地已经在开发使用的是1.0.2a版本,不满足需求。 方案1:升级OpenSSL 将Op…

一、C#基础入门课程【学习20天】01-07

✨博客主页: https://blog.csdn.net/m0_63815035?typeblog 💗《博客内容》:.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 📢博客专栏: https://blog.csdn.net/m0_63815035/cat…

基于SpringBoot + Vue的共享汽车(单车)管理系统设计与实现+毕业论文+开题报告+指导搭建视频

本系统包含管理员、用户两个角色。 管理员角色:个人中心管理、用户管理、投放地区管理、汽车信息管理、汽车投放管理、汽车入库管理、使用订单管理、汽车归还管理。 用户角色:注册登录、汽车使用下单、汽车归还。 本共享汽车管理系统有管理员和用户。管…

DeepSeek+Kimi生成高质量PPT

DeepSeek与Kimi生成PPT全流程解析 一、工具分工原理 DeepSeek核心作用:生成结构化PPT大纲(擅长逻辑构建与内容优化)Kimi核心作用:将文本转换为视觉化PPT(提供模板库与排版引擎) 二、操作步骤详解 1. 通…

Android KMP初探

Android KMP初探 前言: 最近线上听了Kotlin官网举行的KMP会议,感觉听神奇的,于是就把官方demo下载下来尝试了一下,下载插件和所需要的依赖都用了很久,但是发现里面的代码很少,于是尝试自己手写了一下&…

鸿蒙NEXT应用App测试-通用测试

注意:大家记得学完通用测试记得再学鸿蒙专项测试 https://blog.csdn.net/weixin_51166786/article/details/145768653 注意:博主有个鸿蒙专栏,里面从上到下有关于鸿蒙next的教学文档,大家感兴趣可以学习下 如果大家觉得博主文章…

GO 快速升级Go版本

由于底层依赖升级了,那我们也要跟着升,go老版本已经不足满足需求了,必须要将版本升级到1.22.0以上 查看当前Go版本 命令查看go版本 go version [rootlocalhost local]# go version go version go1.21.4 linux/amd64 [rootlocalhost local]# …

Redis——用户签到BitMap,UV统计

目录 BitMap 使用场景 1. 用户签到系统 2. 用户行为标记 3. 布隆过滤器(Bloom Filter) BitMap介绍 Redis中的使用 Redis功能示例 添加: 获取: 批量获取: java中实现 统计本月连续签到次数 UV统计 UV 统计…

Redis|持久化

文章目录 总体介绍RDB(Redis DataBase)官网介绍案例演示优势劣势 总体介绍 官网地址:https://redis.io/docs/manual/persistence/ 持久化双雄: RDB(Redis DataBase):RDB 是 Redis 默认的持久化…

51单片机编程学习笔记——点亮LED

大纲 器件51单片机开发板总结 安装驱动点亮LED烧录 随着最近机器人爆火,之前写的ROS2系列博客《Robot Operating System》也获得了更多的关注。我决定在机器人领域里再走一步,于是想到可以学习单片机。研究了下学习路径,最后还是选择先从51单…

基于Spring Boot的公司资产网站设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

华为2025年技术发布会:智能汽车核心技术大爆发

近日,华为在鸿蒙智行尊界技术发布会上发布了多项智能汽车核心技术,涵盖智能驾驶、安全防护、通信系统、座舱交互及电池技术等领域,标志着其从“被动智能”向“自主智能”的战略升级。 以下是核心技术的综合梳理: 六大核心创新 途…

ctfshow做题笔记—栈溢出—pwn57~pwn60

目录 前言 一、pwn57(先了解一下简单的64位shellcode吧) 二、pwn58 三、pwn59(64位 无限制) 四、pwn60(入门难度shellcode) 前言 往前写了几道题,与shellcode有关,关于shellc…

测试面试题:以一个登录窗口为例,设计一下登录界面测试的思路和方法

在测试登录窗口时,可以从 表单测试、 逻辑判断和 业务流程三个方面设计测试思路和方法。以下是一个详细的测试方案: 1. 表单测试 表单测试主要关注输入框、按钮等UI元素的正确性和用户体验。 测试点: 输入框测试 用户名和密码输入框是否正常显示。输入框是否支持预期的字符类…

小型字符级语言模型的改进方向和策略

小型字符级语言模型的改进方向和策略 一、回顾小型字符级语言模型的处理流程 前文我们已经从零开始构建了一个小型字符级语言模型,那么如何改进和完善我们的模型呢?有哪些改进的方向?我们先回顾一下模型的流程: 图1 小型字符级语言模型的处理流程 (1)核心模块交互过程:…

基于数据可视化+SpringBoot+安卓端的数字化施工项目计划与管理平台设计和实现

博主介绍:硕士研究生,专注于信息化技术领域开发与管理,会使用java、标准c/c等开发语言,以及毕业项目实战✌ 从事基于java BS架构、CS架构、c/c 编程工作近16年,拥有近12年的管理工作经验,拥有较丰富的技术架…