一文教你如何利用免费接口在Python中获取并整理基金历史净值数据

2023-10-12 17:10

本文主要是介绍一文教你如何利用免费接口在Python中获取并整理基金历史净值数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一文教你如何利用免费接口在Python中获取并整理基金历史净值数据

  • 一、接口地址与格式
  • 二、获取数据与整理

这篇文章教大家如何在Python中使用免费的数据接口获取我们想要的各基金历史净值数据,以便我们进行后续的基金量化分析。

一、接口地址与格式

这里使用的接口地址是https://api.doctorxiong.club/v1/fund/detail?code=xxx,其中xxx为基金对应代号。

这里我们随便选一个例子,比如“公募一哥”张坤的易方达蓝筹精选混合,代号005827,对应的接口地址就是https://api.doctorxiong.club/v1/fund/detail?code=005827

我们用浏览器打开看看,是下面这样的数据格式:
在这里插入图片描述
分析结果,该接口返回的是一个字典,里面的key有"code",“message”,“data”。
其中"data"又是一个字典,里面包括该基金的各种信息和数据的key,比如"code",“name”,"manager"等等;
该基金的历史单位净值和历史累计净值数据就对应于其中的"netWorthData"和"totalNetWorthData"的key里。(大家可以自行观察一下)

二、获取数据与整理

使用到的库:

import urllib
from bs4 import BeautifulSoup
import json
import pandas as pd

先对接口地址发起请求,并利用beautifulsoup解析标签的功能来获取上面所示的文本信息。

>>> html=urllib.urlopen("https://api.doctorxiong.club/v1/fund/detail?code=005827")
>>> bsobj=BeautifulSoup(html.read())
>>> p_text = bsobj.p.get_text()

此时得到的p_text是unicode类型的文本,我们需要利用json将它转换成字典的数据类型。

>>> text_dict = json.loads(p_text)

现在我们来看一下这个字典里是不是有我们刚刚提到的各种key:

>>> print text_dict['data']['code']
005827
>>> print text_dict['data']['name']
易方达蓝筹精选混合
>>> print text_dict['data']['manager']
张坤

然后取出历史单位净值和历史累计净值,每天的数据都是以列表的形式保存,最后一个对象对应着今天的净值情况,我们输出看一看。

>>> Wdata1 = text_dict['data']['netWorthData']
>>> Wdata2 = text_dict['data']['totalNetWorthData']
>>> print Wdata1[-1]
[u'2021-09-10', u'2.5779', u'2.72', u'']
>>> print Wdata2[-1]
[u'2021-09-10', u'2.5779']

因为这个基金没有过分红派息,所以单位净值和累计净值是一样的,都是2.5779。值得注意的是单位净值里还有日涨幅率的数据,也就是上面的2.72。

最后我们把累计净值数据转换成float类型,并整体保存成DataFrame的数据类型。

>>> for i in Wdata2:i[1] = float(i[1])
>>> Wdf = pd.DataFrame(Wdata2,columns=['Date','Worth'],dtype=float)
>>> print WdfDate   Worth
0    2018-09-05  1.0000
1    2018-09-07  0.9986
2    2018-09-14  0.9985
3    2018-09-21  1.0143
4    2018-09-28  1.0192
5    2018-10-08  0.9972
6    2018-10-09  0.9970
7    2018-10-10  0.9885
8    2018-10-11  0.9731
9    2018-10-12  0.9872
10   2018-10-15  0.9820
11   2018-10-16  0.9793
12   2018-10-18  0.9706
13   2018-10-19  0.9855
14   2018-10-22  1.0084
15   2018-10-23  0.9830
16   2018-10-24  0.9748
17   2018-10-25  0.9623
18   2018-10-26  0.9529
19   2018-10-29  0.9246
20   2018-10-30  0.9201
21   2018-10-31  0.9374
22   2018-11-01  0.9503
23   2018-11-02  0.9893
24   2018-11-05  0.9727
25   2018-11-06  0.9686
26   2018-11-07  0.9667
27   2018-11-08  0.9688
28   2018-11-09  0.9602
29   2018-11-12  0.9593
..          ...     ...
680  2021-08-02  2.5664
681  2021-08-03  2.5785
682  2021-08-04  2.5596
683  2021-08-05  2.5337
684  2021-08-06  2.5355
685  2021-08-09  2.5653
686  2021-08-10  2.6544
687  2021-08-11  2.6350
688  2021-08-12  2.5897
689  2021-08-13  2.5887
690  2021-08-16  2.5718
691  2021-08-17  2.4887
692  2021-08-18  2.5224
693  2021-08-19  2.4838
694  2021-08-20  2.4039
695  2021-08-23  2.4548
696  2021-08-24  2.5038
697  2021-08-25  2.5281
698  2021-08-26  2.4635
699  2021-08-27  2.4561
700  2021-08-30  2.4472
701  2021-08-31  2.4386
702  2021-09-01  2.5119
703  2021-09-02  2.5006
704  2021-09-03  2.5057
705  2021-09-06  2.5506
706  2021-09-07  2.5704
707  2021-09-08  2.5484
708  2021-09-09  2.5097
709  2021-09-10  2.5779[710 rows x 2 columns]

最后的最后,,建议把"Date"转换成datetime的类型,这样方便日后放入各种量化框架中进行测试。

>>> Wdf['Date'] = pd.to_datetime(Wdf['Date'],format='%Y-%m-%d')

这篇关于一文教你如何利用免费接口在Python中获取并整理基金历史净值数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/197247

相关文章

python生成随机唯一id的几种实现方法

《python生成随机唯一id的几种实现方法》在Python中生成随机唯一ID有多种方法,根据不同的需求场景可以选择最适合的方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习... 目录方法 1:使用 UUID 模块(推荐)方法 2:使用 Secrets 模块(安全敏感场景)方法

一文详解如何使用Java获取PDF页面信息

《一文详解如何使用Java获取PDF页面信息》了解PDF页面属性是我们在处理文档、内容提取、打印设置或页面重组等任务时不可或缺的一环,下面我们就来看看如何使用Java语言获取这些信息吧... 目录引言一、安装和引入PDF处理库引入依赖二、获取 PDF 页数三、获取页面尺寸(宽高)四、获取页面旋转角度五、判断

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口

MySQL 迁移至 Doris 最佳实践方案(最新整理)

《MySQL迁移至Doris最佳实践方案(最新整理)》本文将深入剖析三种经过实践验证的MySQL迁移至Doris的最佳方案,涵盖全量迁移、增量同步、混合迁移以及基于CDC(ChangeData... 目录一、China编程JDBC Catalog 联邦查询方案(适合跨库实时查询)1. 方案概述2. 环境要求3.

SpringSecurity整合redission序列化问题小结(最新整理)

《SpringSecurity整合redission序列化问题小结(最新整理)》文章详解SpringSecurity整合Redisson时的序列化问题,指出需排除官方Jackson依赖,通过自定义反序... 目录1. 前言2. Redission配置2.1 RedissonProperties2.2 Red

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

Javaee多线程之进程和线程之间的区别和联系(最新整理)

《Javaee多线程之进程和线程之间的区别和联系(最新整理)》进程是资源分配单位,线程是调度执行单位,共享资源更高效,创建线程五种方式:继承Thread、Runnable接口、匿名类、lambda,r... 目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnab