首頁>技術>

Python爬蟲資料分析挖掘

四年的程式設計開發愛好者,分享日常程式設計學習和接私活過程,記錄生活,共同進步。關注小白,程式設計快樂

01

前言

去年接觸基金,體會到了基金的香(真香),這幾天也是過年後開始交易的日子,今天爬取『蛋卷基金』資料,透過pyecharts動圖視覺化方式展示基金的漲跌情況。

本文將圍繞這三點去進行爬取資料,動圖視覺化展示資料:

近一月漲跌幅前10名基金各個階段漲跌幅近30個交易日淨值情況

02

資料獲取

https://danjuanapp.com/

看過我之前的這篇文章醬香科技!用 Python 分析白酒類基金有多賺錢!都學會了怎麼在『蛋卷基金』爬取資料(ajax非同步互動方式),不會的可以去看看,文中有詳細步驟!!!

資料分析

接下爬取的資料涉及五大類(五種基金)

股票型基金混合型基金債券型基金指數型基金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個交易日淨值情況

8
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 教你如何學習開源專案