欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

利用 python 分析基金,合理分析数据让赚钱赢在起跑线!

程序员文章站 2024-02-03 20:07:22
前言 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。 作者: 白玉无冰 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 http://note.youdao.com/noteshare?id=3054cce ......

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

作者: 白玉无冰

ps:如有需要python学习资料的小伙伴可以加点击下方链接自行获取

你不理财,财不理你!python 也能帮你理财?

利用 python 分析基金,合理分析数据让赚钱赢在起跑线!

效果预览

累计收益率走势图

利用 python 分析基金,合理分析数据让赚钱赢在起跑线!

基本信息结果

利用 python 分析基金,合理分析数据让赚钱赢在起跑线!

如何使用:

python3 + 一些第三方库

1 import requests
2 import pandas
3 import numpy
4 import matplotlib
5 import lxml

 

配置 config.json 。code 配置基金代码, usecache 是否使用缓存。

{
  "code":[
    "002736",
    "003328",
    "003547",
  ],
  "usecache":true
}

 

运行 fund_analysis.py

实现原理

数据获取:

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

利用 python 分析基金,合理分析数据让赚钱赢在起跑线!

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

利用 python 分析基金,合理分析数据让赚钱赢在起跑线!

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

利用 python 分析基金,合理分析数据让赚钱赢在起跑线!

接着通过对 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 文件,读取文件后作为字符串,通过正则表达式获取需要的数据。

利用 python 分析基金,合理分析数据让赚钱赢在起跑线!

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

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

 

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

利用 python 分析基金,合理分析数据让赚钱赢在起跑线!

采用了 all_data = 累计收益率 的格式存储,再通过 pandas 的 dataframe 进行向上填充空数据。

df = dataframe(all_data).sort_index().fillna(method='ffill')

 

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

利用 python 分析基金,合理分析数据让赚钱赢在起跑线!

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

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 数据处理库。

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