Python基金数据实战分析:偏债混合基金篇
如何从众多的基金中选择适合自己的
时代不同了。随着各类基金规模的不断扩大,一方面基金看重的股票往往基本面较为优质,另一方面其资金优势也可采用“抱团”战法。于是,与其参考基金选股做一名股民,不如直接选基金购买做一名基民。那么,如何从众多的基金中选择适合自己的呢?本篇尝试用Python爬取基金数据,找出其中收益较稳定(年化收益率8%)的偏债混合基金。
需求场景
通常,家庭主管财政的老头老太,投资风格都较保守,喜欢投资“稳赚不赔”的存款和相关理财产品。但是,“稳赚不赔”的背后也是有代价的:年收益率只有4%上下。因此,建议拿出一部分资金,尝试一些“低风险”的品种------偏债混合基金。
从基金网站获取基金代码
根据前人的经验及其相关文章和代码,天天基金网是一个很不错的网站。其中,获取基金代码可以通过这个JS接口:
‘http://fund.eastmoney.com/js/fundcode_search.js’
相关Python代码如下:
import pandas as pd
import requests
import time
import execjs
# import os
import matplotlib.pyplot as plt
# os.environ["EXECJS_RUNTIME"] = "JScript"
plt.rcParams['font.sans-serif']='SimHei'
plt.rcParams['axes.unicode_minus']=False
url = 'http://fund.eastmoney.com/js/fundcode_search.js'
content = requests.get(url)
jsContent = execjs.compile(content.text)
rawData = jsContent.eval('r')
jjcode=[]
jjcodeHHC = [] #混合C基金另存以备后用
jjname=[]
jjtype=[]
for code in rawData:
if len(code) > 2:
jjcode.append(code[0])
jjname.append(code[2])
jjtype.append(code[3])
#建议各类基金分类保存,固收/货币型基金与股指/股票型基金差异太大
name = code[2]
if code[3] == '混合型' and name[-1] == 'C':
jjcodeHHC.append(code[0])
jjinfo=pd.DataFrame({
'代码':jjcode, '名称':jjname, '类型':jjtype})
# 写入到本地文件,注意:如用EXCEL打开CSV文件,会发现基金代码没有前置0
# 这只是EXCEL的缺省显示问题,用NOTEPAD打开CSV可知文件本身正常
jjinfo.to_csv('./data/jjcode.csv', encoding='utf_8_sig', index=False)
jjinfo.head()
显示:
代码 名称 类型
0 000001 华夏成长混合 混合型
1 000002 华夏成长混合(后端) 混合型
2 000003 中海可转债债券A 债券型
3 000004 中海可转债债券C 债券型
4 000005 嘉实增强信用定期债券 定开债券
注:如果上述代码运行之后,报错:execjs UnicodeDecodeError: ‘gbk’ codec can’t decode byte,那么最可能的原因是您另安装了nodejs,而execjs选择nodejs去执行js有兼容性的问题。解决方法是增加:os.environ[“EXECJS_RUNTIME”] = “JScript”,即把上面代码里os语句的#号去掉。
先整体看一下基金情况
# 按照类型进行分组
分组数量=jjinfo.groupby('类型').agg(基金数量=('类型','count')).\
sort_values(by='基金数量',ascending=False).reset_index('类型')
# 图表展示
plt.style.use('ggplot')
fig=plt.figure(figsize=(20,8))
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)
plt.bar(x='类型',height='基金数量',data=分组数量)
for