Oh My God!Python 还能帮你理财?!

本文介绍如何使用Python获取并分析基金收益数据,涵盖数据抓取、处理及可视化,助力个人理财决策。

你不理财,财不理你!Python 也能帮你理财?听说金融行业很多分析师都已经开始学 Python 了,本文介绍了如何获取基金收益数据的方式,拿到数据后你可以做的事情就多了!

文 | 白玉无冰 出处 | SegmentFault

效果预览

累计收益率走势图

基本信息结果

如何使用:

python3 + 一些第三方库


   
  1. import requests

  2. import pandas

  3. import numpy

  4. import matplotlib

  5. import lxml

配置 config.jsoncode 配置基金代码, useCache 是否使用缓存。


   
  1. {

  2. "code":[

  3. "002736",

  4. "003328",

  5. "003547",

  6. ],

  7. "useCache":true

  8. }

运行 fund_analysis.py

实现原理

数据获取:

从天天基金网里点开一个基金,在 chrome 开发者工具观察加载了的文件。依次查找发现了一个 js 文件,里面含有一些基金的基本信息。这是一个 js 文件。

获取累计收益率信息需要在页面做些操作,点击累计收益里的3年,观察开发者工具的请求,很容易找到这个数据源是如何获取的。这是个 json 数据。

基金费率表在另一个页面,我们多找几次可以找到信息源地址。这是个 html 数据。

接着通过对 Hearders 的分析,用 request 模拟浏览器获取数据(这里不清楚的话可以参考之前的文章)。最后将其保存在本地作为缓冲使用。以累计收益率信息 json 为例子,主要代码如下。


   
  1. filePath = f'./cache/{fundCode}.json'

  2. requests_url='http://api.fund.eastmoney.com/pinzhong/LJSYLZS'

  3. headers = {

  4. 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36',

  5. 'Accept': 'application/json' ,

  6. 'Referer': f'http://fund.eastmoney.com/{fundCode}.html',

  7. }

  8. params={

  9. 'fundCode': f'{fundCode}',

  10. 'indexcode': '000300',

  11. 'type': 'try',

  12. }

  13. requests_page=requests.get(requests_url,headers=headers,params=params)

  14. with open(filePath, 'w') as f:

  15. json.dump(requests_page.json(), f)

数据分析:

对于 基本信息的 js 文件,读取文件后作为字符串,通过正则表达式获取需要的数据。

例如获取一年收益率可以用以下代码获取。


   
  1. syl_1n=re.search(r'syl_1n\s?=\s?"([^\s]*)"',data).group(1);

对于 累计收益率 json 数据,直接用 json 解析,找到需要数据进行筛选加工处理。

采用了 all_data[基金代码][时间]=累计收益率 的格式存储,再通过 pandas 的 DataFrame 进行向上填充空数据。


   
  1. df = DataFrame(all_data).sort_index().fillna(method='ffill')

对于 基金费率表 html 数据,采用 xpath 解析。xpath 路径可以直接用 chrome 获取。

对于管理费率可以参考以下代码。


   
  1. selector = lxml.html.fromstring(data);

  2. # 管理费率

  3. mg_rate=selector.xpath('/html/body/div[1]/div[8]/div[3]/div[2]/div[3]/div/div[4]/div/table/tbody/tr/td[2]/text()')[0]

数据存储:

使用 DataFrame 中的 plot 可以快速画图,使用 to_excel 保存在 Excel 表中。可以参考以下代码。


   
  1. # 保存数据

  2. fig,axes = plt.subplots(2, 1)

  3. # 处理基本信息

  4. df2 = DataFrame(all_data_base)

  5. df2.stack().unstack(0).to_excel(f'result_{time.time()}.xlsx',sheet_name='out')

  6. df2.iloc[1:5,:].plot.barh(ax=axes[0],grid=True,fontsize=25)

  7. # 处理收益

  8. df=DataFrame(all_data).sort_index().fillna(method='ffill')

  9. df.plot(ax=axes[1],grid=True,fontsize=25)

  10. fig.savefig(f'result_{time.time()}.png')

小结

数据的获取主要采用了爬虫的基本方法,使用的是 requests 库。而数据的解析和保存主要运用的是正则表达式、xpath解析库以及 pandas 数据处理库。

对于一个基金的分析远远不止于这些数据(例如持仓分布,基金经理信息等),这里只是做个引子,希望能给大家一个思路,如果你有想法或者不懂的地方,欢迎留言或私信交流!

参考资料:https://mp.weixin.qq.com/s/DAsc41ziM5KOmlXtLxMeEQ

签到送书计划

自律改变自我!第①期打卡送书活动启动!

我发起了一个签到送书活动,活动结束后将送出 5 本 Python 技术书。签到次数越多,中奖概率越高。活动详情,请点击:自律改变自我!第①期打卡送书活动启动!

下面是今天的签到二维码:

回复下方「关键词」,获取优质资源

回复关键词「 pybook03」,立即获取主页君与小伙伴一起翻译的《Think Python 2e》电子版

回复关键词「入门资料」,立即获取主页君整理的 10 本 Python 入门书的电子版

回复关键词「m」,立即获取Python精选优质文章合集

回复关键词「book 数字」,将数字替换成 0 及以上数字,有惊喜好礼哦~

推荐阅读

题图:pexels,CC0 授权。

好文和朋友一起看~

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值