python爬取各类基金数据,以『动图可视化』方式展示基金的涨跌情况

01前言

去年接触基金,体会到了基金的香(真香),今天也是过年后基金开始交易的第一天,今天爬取『蛋卷基金』数据,通过pyecharts动图可视化方式展示基金的涨跌情况。

本文将围绕这三点去进行爬取数据,动图可视化展示数据:

  • 近一月涨跌幅前10名

  • 基金各个阶段涨跌幅

  • 近30个交易日净值情况

02数据获取

数据来源

本文的数据来源:『蛋卷基金』

https://danjuanapp.com/

看过我之前的这篇文章基金这么赚钱!!编程实现基金从采集到分析通用模板!(白酒为例)都学会了怎么在『蛋卷基金』爬取数据(ajax异步交互方式),不会的可以去看看,文中有详细步骤!!!

数据分析

接下爬取的数据涉及五大类(五种基金)

  1. 股票型基金

  2. 混合型基金

  3. 债券型基金

  4. 指数型基金

  5. QDII型基金

通过抓包分析ajax异步交互链接的规律:

  • type是对应的五种基金的代号

  • order_by是对应最近多久的基金涨跌幅排序

'近一周':'1w'
'近一月':'1m'
'近三月':'3m'
'近六月':'6m'
'近1年':'1y'
'近2年':'2y'
'近3年':'3y'
'近5年':'5y'

  • page是对应的页数,从第1页开始

备注:『蛋卷基金』这个网站没有反爬!!!,请求不需要cookie!!!

ok,这些都清楚之后,接下来就可以开始爬取数据了!

03数据可视化

由于『蛋卷基金』这个网站没有反爬!!!,所以数据爬取和可视化分析放一起了(直接爬取数据后就进行可视化!)

分析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名")

1.股票型基金

2.混合型基金

3.债券型基金

4.指数型基金

5.QDII型基金

分析

上图中是五大类基金的选取近一个月涨跌幅最高前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'

爬虫代码

####分析2:基金各个阶段涨跌幅
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=[]


        ####防止基金最长时间不够1年、2年、5年的情况报错,用0填充
        ##近1周
        try:
            valuess.append(data['nav_grl1w'])
        except:
            valuess.append(0)
        ##近1月
        try:
            valuess.append(data['nav_grl1m'])
        except:
            valuess.append(0)
        ##近3月
        try:
            valuess.append(data['nav_grl3m'])
        except:
            valuess.append(0)
        ##近6月
        try:
            valuess.append(data['nav_grl6m'])
        except:
            valuess.append(0)
        ##近1年
        try:
            valuess.append(data['nav_grl1y'])
        except:
            valuess.append(0)
        ##近3年
        try:
            valuess.append(data['nav_grl3y'])
        except:
            valuess.append(0)
        ##近5年
        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)  # x轴
            .add_yaxis(series_name="股票型", yaxis_data=dict_values['股票型'])  # y轴
            .add_yaxis(series_name="混合型", yaxis_data=dict_values['混合型'])  # y轴
            .add_yaxis(series_name="债券型", yaxis_data=dict_values['债券型'])  # y轴
            .add_yaxis(series_name="指数型", yaxis_data=dict_values['指数型'])  # y轴
            .add_yaxis(series_name="QDII型", yaxis_data=dict_values['QDII型'])  # y轴
            .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)),
            # 设置x名称和Label rotate解决标签名字过长使用
            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")
    )

1.股票型

2.混合型

3.债券型

4.指数型

5.QDII型

分析

从上面动图可以清楚这五类基金第一名基金近30个交易日净值情况

04总结

以上就是爬取基金数据并通过pyecharts动图可视化方式展示基金的涨跌情况。

围绕这三点去进行爬取数据,动图可视化展示数据:

  • 近一月涨跌幅前10名

  • 基金各个阶段涨跌幅

  • 近30个交易日净值情况

如果你觉得文章还不错,请大家点赞分享留言,因为这将是我持续输出更多优质文章的最强动力!

如果大家对本文代码源码感兴趣,扫码关注Python爬虫数据分析挖掘后台回复:基金可视化 ,获取完整代码以及数据。

------------- 推荐文章 -------------

1.python爬取『大年初一』热映电影,以『可视化及词云秀』方式带你了解热映电影


2.python爬取44130条用户观影数据,分析挖掘用户与电影之间的隐藏信息!


3.python窃取摄像头照片(摄像头拍照+邮箱发送+打包exe)


4.35行代码下载任意网页的图片


5.30行爬虫代码实现中英互译


posted @ 2021-02-18 19:00  Python研究者  阅读(687)  评论(0编辑  收藏  举报