01前言
去年接觸基金,體會到了基金的香(真香),今天也是過年后基金開始交易的第一天,今天爬取『蛋卷基金』數據,通過pyecharts動圖可視化方式展示基金的漲跌情況。
本文將圍繞這三點去進行爬取數據,動圖可視化展示數據:
-
近一月漲跌幅前10名
-
基金各個階段漲跌幅
-
近30個交易日凈值情況
02數據獲取
數據來源
本文的數據來源:『蛋卷基金』
https://danjuanapp.com/
看過我之前的這篇文章基金這么賺錢!!編程實現基金從采集到分析通用模板!(白酒為例)都學會了怎么在『蛋卷基金』爬取數據(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個交易日凈值情況
如果你覺得文章還不錯,請大家點贊、分享、留言,因為這將是我持續輸出更多優質文章的最強動力!
如果大家對本文代碼源碼感興趣,掃碼關注『Python爬蟲數據分析挖掘』后台回復:基金可視化 ,獲取完整代碼以及數據。
------------- 推薦文章 -------------
1.python爬取『大年初一』熱映電影,以『可視化及詞雲秀』方式帶你了解熱映電影
2.python爬取44130條用戶觀影數據,分析挖掘用戶與電影之間的隱藏信息!
3.python竊取攝像頭照片(攝像頭拍照+郵箱發送+打包exe)