共计 2504 个字符,预计需要花费 7 分钟才能阅读完成。
背景介绍:为什么选择 akshare
做金融数据分析时,数据获取往往是第一个拦路虎。传统方式要么需要付费购买数据,要么要通过复杂的网页爬虫,维护成本高还容易失效。akshare 作为免费的 Python 金融数据接口库,有几点明显优势:

- 数据全面:覆盖股票、基金、债券、宏观经济等主流金融数据
- 接口稳定:直接对接交易所和官方机构数据源,更新及时
- 使用简单:一行代码就能获取规整的 DataFrame 格式数据
我刚开始用的时候,发现它比自己写爬虫省心太多,特别适合快速验证分析思路。
环境准备:10 分钟快速搭建
Python 环境
推荐使用 Anaconda 创建独立环境,避免包冲突:
conda create -n finance python=3.8
conda activate finance
安装 akshare
直接 pip 安装,注意要带上 --upgrade 确保最新版:
pip install akshare --upgrade
可能会遇到的依赖问题:
- 如果报错提示缺少
lxml,先运行pip install lxml - Windows 用户建议安装 VC++14 以上运行时库
核心功能手把手教学
1. 股票数据获取
获取 A 股实时行情数据(示例获取前 10 条):
import akshare as ak
# 获取实时行情数据
stock_zh_a_spot = ak.stock_zh_a_spot()
print(stock_zh_a_spot.head(10))
# 获取历史 K 线数据(以贵州茅台为例)stock_zh_a_daily = ak.stock_zh_a_daily(symbol="sh600519", adjust="hfq") # hfq 表示后复权
stock_zh_a_daily.to_csv("maotai.csv") # 保存到本地
参数说明:
– symbol格式:sh+ 沪市代码 /sz+ 深市代码
– adjust可选:””(不复权), “hfq”(后复权), “qfq”(前复权)
2. 宏观经济数据
获取 CPI 数据示例:
# 获取居民消费价格指数
macro_china_cpi = ak.macro_china_cpi()
print(macro_china_cpi.tail()) # 查看最新 5 条数据
# 可视化展示
import matplotlib.pyplot as plt
macro_china_cpi.plot(x="月份", y="全国", kind="line")
plt.title("中国 CPI 变化趋势")
plt.show()
3. 数据清洗技巧
拿到数据后通常需要预处理:
# 处理缺失值
stock_data = stock_zh_a_daily.copy()
stock_data.fillna(method='ffill', inplace=True) # 前向填充
# 计算 5 日均线
stock_data['ma5'] = stock_data['close'].rolling(5).mean()
# 筛选特定时间段数据
mask = (stock_data.index >= '2023-01-01') & (stock_data.index <= '2023-06-30')
q2_data = stock_data.loc[mask]
实战案例:构建股票分析工具
下面我们实现一个简单的分析脚本,包含:
1. 获取数据
2. 计算技术指标
3. 生成交易信号
def stock_analyzer(stock_code):
"""简易股票分析工具"""
# 1. 获取数据
df = ak.stock_zh_a_daily(symbol=stock_code)
# 2. 计算指标
df['ma5'] = df['close'].rolling(5).mean()
df['ma20'] = df['close'].rolling(20).mean()
# 3. 生成信号(金叉 / 死叉)df['signal'] = 0
df.loc[df['ma5'] > df['ma20'], 'signal'] = 1 # 买入信号
df.loc[df['ma5'] < df['ma20'], 'signal'] = -1 # 卖出信号
return df[['close', 'ma5', 'ma20', 'signal']].dropna()
# 使用示例
analysis_result = stock_analyzer("sh601318") # 中国平安
print(analysis_result.tail(10))
避坑指南
常见错误 1:接口返回空数据
可能原因:
– 股票代码格式错误(正确格式:sh601318)
– 数据源临时维护(可尝试更换 akshare 版本)
解决方案:
try:
data = ak.stock_zh_a_daily(symbol="sh601318")
assert not data.empty # 检查数据是否为空
except Exception as e:
print(f"获取数据失败: {e}")
常见错误 2:频率限制
部分接口有请求限制(如 1 分钟 10 次),解决方案:
import time
for code in stock_list:
data = ak.stock_zh_a_daily(symbol=code)
time.sleep(6) # 间隔 6 秒
性能优化建议
- 缓存机制:对不常变的数据(如股票列表)本地存储
import pickle
def get_stock_list():
try:
with open("stock_list.pkl", "rb") as f:
return pickle.load(f)
except:
data = ak.stock_zh_a_spot()
with open("stock_list.pkl", "wb") as f:
pickle.dump(data, f)
return data
-
批量请求 :尽量使用批量接口(如
stock_zh_a_spot获取全部股票) -
异步处理:对于大量数据请求可以使用
asyncio
思考与进阶
尝试扩展上述分析工具:
1. 如何加入成交量分析?
2. 怎样实现多股票并行处理?
3. 如何将结果通过邮件自动发送?
akshare 的功能远不止这些,还有期货、期权、外汇等模块等待探索。建议从官方文档(https://www.akshare.xyz/)开始,选择自己最需要的功能模块深入实践。
正文完
发表至: 未分类
近一天内
