利用 python 分析基金,合理分析數據讓賺錢贏在起跑線!


前言

本文的文字及圖片來源於網絡,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯系我們以作處理。

作者: 白玉無冰

PS:如有需要Python學習資料的小伙伴可以加點擊下方鏈接自行獲取

http://note.youdao.com/noteshare?id=3054cce4add8a909e784ad934f956cef

你不理財,財不理你!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 文件。

在這里插入圖片描述

獲取累計收益率信息需要在頁面做些操作,點擊累計收益里的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 文件,讀取文件后作為字符串,通過正則表達式獲取需要的數據。

在這里插入圖片描述

例如獲取一年收益率可以用以下代碼獲取。

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

 

對於 累計收益率 json 數據,直接用 json 解析,找到需要數據進行篩選加工處理。

在這里插入圖片描述

采用了 all_data基金代碼 = 累計收益率 的格式存儲,再通過 pandas 的 DataFrame 進行向上填充空數據。

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 數據處理庫。

對於一個基金的分析遠遠不止於這些數據(例如持倉分布,基金經理信息等),這里只是做個引子,希望能給大家一個思路,如果你有想法或者不懂的地方,歡迎留言或私信交流!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM