去年接触基金,体会到了基金的香(真香),这几天也是过年后开始交易的日子,今天爬取『蛋卷基金』数据,通过pyecharts动图可视化方式展示基金的涨跌情况。
本文将围绕这三点去进行爬取数据,动图可视化展示数据:
近一月涨跌幅前10名
基金各个阶段涨跌幅
近30个交易日净值情况
数据来源
本文的数据来源:『蛋卷基金』
看过我之前的这篇文章酱香科技!用 Python 分析白酒类基金有多赚钱!都学会了怎么在『蛋卷基金』爬取数据(ajax异步交互方式),不会的可以去看看,文中有详细步骤!!!
数据分析
接下爬取的数据涉及五大类(五种基金)
股票型基金
混合型基金
债券型基金
指数型基金
QDII型基金
通过抓包分析ajax异步交互链接的规律:
'近一周':'1w'
'近一月':'1m'
'近三月':'3m'
'近六月':'6m'
'近1年':'1y'
'近2年':'2y'
'近3年':'3y'
'近5年':'5y'
备注:『蛋卷基金』这个网站没有反爬!!!,请求不需要cookie!!!
ok,这些都清楚之后,接下来就可以开始爬取数据了!
由于『蛋卷基金』这个网站没有反爬!!!,所以数据爬取和可视化分析放一起了(直接爬取数据后就进行可视化!)
分析1:近一月涨跌幅前10名
爬虫代码
dict_type={"股票型":1,"混合型":3,"债券型":2,"指数型":5,"QDII型":11}
dict_time={'近一周':'1w','近一月':'1m','近三月':'3m','近六月':'6m','近1年':'1y','近2年':'2y','近3年':'3y'
,'近5年':'5y'}
for key in dict_type:
url = "https://danjuanapp.com/djapi/v3/filter/fund?type="+str(dict_type[key])+"&order_by=1w&size=10&page=1"
res = requests.get(url, headers=headers)
res.encoding = 'utf-8'
s = json.loads(res.text)
s = s['data']['items']
name = []
value = []
for i in range(0,len(s)):
print(s[i]['fd_name']+":"+s[i]['yield'])
name.append(s[i]['fd_name'])
value.append(s[i]['yield'])
pie(name, value, str(key)+"基金涨跌幅", "["+str(key)+"]基金近一月涨跌幅前10名")
饼状图可视化代码
def pie(name,value,picname,tips):
c = (
Pie()
.add(
"",
[list(z) for z in zip(name, value)],
center=["35%", "50%"],
)
.set_colors(["blue", "green", "yellow", "red", "pink", "orange", "purple"])
.set_global_opts(
title_opts=opts.TitleOpts(title=""+str(tips)),
legend_opts=opts.LegendOpts(type_="scroll", pos_left="70%", orient="vertical"),
)
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
.render(str(picname)+".html")
)
这里将饼状图可视化代码封装成函数,绘制五种基金的饼状图只需调用这个函数即可
###开始绘图
pie(name, value, str(key)+"基金涨跌幅", "["+str(key)+"]基金近一月涨跌幅前10名")
分析
上图中是五大类基金的选取近一个月涨跌幅最高前10名的基金进行绘图。
同理近一周、近三个月、近一年也可以通过这个代码进行绘制,只需要将参数order_by修改即可
'近一周':'1w'
'近一月':'1m'
'近三月':'3m'
'近六月':'6m'
'近1年':'1y'
'近2年':'2y'
'近3年':'3y'
'近5年':'5y'
分析2:基金各个阶段涨跌幅
上面分析中可以清楚这五类基金近一个月最高的涨跌幅排名情况,下面从排名中选取第一名基金(五类中各选取第一名)分别展示该基金各个阶段的涨跌幅情况
阶段情况:
'近一周':'1w'
'近一月':'1m'
'近三月':'3m'
'近六月':'6m'
'近1年':'1y'
'近2年':'2y'
'近3年':'3y'
'近5年':'5y'
爬虫代码
def analysis2():
name =['近1周','近1月','近3月','近6月','近1年','近3年','近5年']
dict_value={}
for key in dict_type:
url = "https://danjuanapp.com/djapi/v3/filter/fund?type="+str(dict_type[key])+"&order_by=1w&size=10&page=1"
res = requests.get(url, headers=headers)
res.encoding = 'utf-8'
s = json.loads(res.text)
fd_code = s['data'
]['items'][0]['fd_code']
fu_url = "https://danjuanapp.com/djapi/fund/derived/"+str(fd_code)
res = requests.get(fu_url, headers=headers)
res.encoding = 'utf-8'
s = json.loads(res.text)
data = s['data']
valuess=[]
try:
valuess.append(data['nav_grl1w'])
except:
valuess.append(0)
try:
valuess.append(data['nav_grl1m'])
except:
valuess.append(0)
try:
valuess.append(data['nav_grl3m'])
except:
valuess.append(0)
try:
valuess.append(data['nav_grl6m'])
except:
valuess.append(0)
try
:
valuess.append(data['nav_grl1y'])
except:
valuess.append(0)
try:
valuess.append(data['nav_grl3y'])
except:
valuess.append(0)
try:
valuess.append(data['nav_grl5y'])
except:
valuess.append(0)
dict_value[key]=valuess
bars(name,dict_value)
可视化代码
def bars(name,dict_values):
c = (
Bar(
init_opts=opts.InitOpts(
theme=ThemeType.MACARONS,
animation_opts=opts.AnimationOpts(
animation_delay=1000, animation_easing="cubicOut"
))
)
.add_xaxis(xaxis_data=name)
.add_yaxis(series_name="股票型", yaxis_data=dict_values['股票型'])
.add_yaxis(series_name="混合型", yaxis_data=dict_values['混合型'])
.add_yaxis(series_name="债券型", yaxis_data=dict_values['债券型'])
.add_yaxis(series_name="指数型", yaxis_data=dict_values['指数型'])
.add_yaxis(series_name="QDII型", yaxis_data=dict_values['QDII型'])
.set_global_opts(
title_opts=opts.TitleOpts(title='涨跌幅', subtitle='李运辰绘制',
title_textstyle_opts=opts.TextStyleOpts(
font_family='SimHei', font_size=25, font_weight='bold', color='red',
), pos_left="90%", pos_top="10",
),
xaxis_opts=opts.AxisOpts(name='阶段', axislabel_opts=opts.LabelOpts(rotate=45)),
yaxis_opts=opts.AxisOpts(name='涨跌点'),
)
.render("基金各个阶段涨跌幅.html")
)
分析
从上面动图可以清楚这五类基金第一名基金各个阶段的涨跌幅情况。
有的基金最长时间没有达到3年或者5年,这里使用填充0处理。
分析3:近30个交易日净值情况
同理,上面分析中可以清楚这五类基金近一个月最高的涨跌幅排名情况,下面从排名中选取第一名基金(五类中各选取第一名)分别展示该基金近30个交易日净值情况。
爬虫代码
####分析3:近30个交易日净值情况
def analysis3():
for key in dict_type:
#### 获取排名第一名基金代号
url = "https://danjuanapp.com/djapi/v3/filter/fund?type=" + str(
dict_type[key]) + "&order_by=1w&size=10&page=1"
res = requests.get(url, headers=headers)
res.encoding = 'utf-8'
s = json.loads(res.text)
###取第一名
fd_code = s['data']['items'][0]['fd_code']
#### 获取排名第一名基金近30个交易日净值情况
fu_url = "https://danjuanapp.com/djapi/fund/nav/history/"+str(fd_code)+"?size=30&page=1"
res = requests.get(fu_url, headers=headers)
res.encoding = 'utf-8'
s = json.loads(res.text)
data = s['data']['items']
name=[]
value=[]
for k in range(0,len(data)):
name.append(data[k]['date'])
value.append(data[k]['nav'])
silder(name, value,key)
可视化代码
###拉伸图
def silder(name,value,tips):
c = (
Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK))
.add_xaxis(xaxis_data=name)
.add_yaxis(tips, yaxis_data=value)
.set_global_opts(
title_opts=opts.TitleOpts(title=str(tips)+"近30个交易日净值情况"),
datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_="inside")],
)
.render(str(tips)+"近30个交易日净值情况.html")
)
分析
从上面动图可以清楚这五类基金第一名基金近30个交易日净值情况。
以上就是爬取基金数据并通过pyecharts动图可视化方式展示基金的涨跌情况。
围绕这三点去进行爬取数据,动图可视化展示数据:
近一月涨跌幅前10名
基金各个阶段涨跌幅
近30个交易日净值情况
点击下方阅读原文加入社区会员