CDA數據分析師 出品
目前,我國新冠疫情已經大幅度好轉,各大省市在3、4月份都已經開始復產復工,中小學生開課回校的地區也不斷增加,連受災最嚴重的武漢也解封了,全國的經濟社會運作逐漸步入正軌。
但此起彼伏,全球疫情此時仍處於非常嚴峻的當下, 根據美國約翰斯.霍普金斯大學統計的數據顯示,截至北京時間19日晚6時38分,全球新冠死亡病例超過16萬例,達到161,324例,全球確診病例突破230萬,達2,343,293例。
根據數據,目前死亡病例最多的國家是美國,為33,903例。美國同時還是全球確診病例最多的國家,累計確診病例突破70萬,達到722,761例。
疫情給全球人民帶來的不僅僅是生命的威脅,同樣還有經濟上的困境以及失業危機。因為疫情的影響,美國陷入了「裁員潮」,很多美國人不得不因為這次疫情被辭退,從而申請失業救濟金。
01
美國失業人數超2200萬
抹去11年來所有新增就業
美國勞工部16日公布的數據顯示,受新冠疫情在美國蔓延影響,上周美國首次申請失業救濟人數達到524.5萬,這意味著過去四周美國首次申請失業救濟人數已累計達到約2200萬,這約佔美國勞動力總數的八分之一,基本抹去了08年金融危機以來過去11年所有的新增就業。
特別是這個由美國勞工部統計的失業救濟人數動態圖,也是引爆全網,從中可以看到自六十年代來,美國的失業救濟人數一直是上下波動。而受這次疫情影響,美國失業救濟人數像坐了火箭一般,一路飆升。
(結尾動態圖高能,一定要看到最後!)
美國每周首次申請失業救濟人數
來源:美國勞工部 United States Department of Labor
那麼這讓人眼前一亮的動態圖,究竟是如何實現的呢?,今天我們就來教你用Python輕鬆實現!
02
教你用Python繪製
美國申請失業險人數動態圖
我們使用pyecharts包進行美國申請失業保險人數的動態趨勢圖的繪製,如果你沒有安裝pyecharts,可以使用以下代碼進行pip安裝。
pip install pyecharts
製作這樣的一個動態圖使用的是Pyecharts中的的TimeLine(時間線輪播圖)的類。使用TimeLine的方法,你可以輕鬆地將繪製帶有時間序列的動態圖形,比如動態條形圖、動態餅圖、動態桑基圖、動態地圖等等。
首先需要導入我們需要使用的包,其中pandas用於數據整理,pyecharts用於繪圖。
# 導入包import pandas as pdfrom pyecharts import options as optsfrom pyecharts.charts import Timeline, Line
首先使用pandas讀入數據,我們選取的數據來自於美國勞工部官方網站,數據包含了從1967年07月01日~2020年04月04日的申請失業保險人數,這是一份帶有時間序列的面板數據,適合進行動態可視化繪圖使用。
# 讀入數據df = pd.read_excel('USA_UI_1967_2020.xlsx')df.head()
在繪圖之前,首先我們需要梳理一下生成動圖的邏輯和思路。
我們將繪圖數據分為維度和度量來思考,在這個條形圖的繪製中,時間就是維度,S.A.(申請失業保險人數)就是度量值,繪製動態折線圖就是把每天的數據製作成一張截止到當天的折線圖然後輪動,下面使用Pandas對時間數據進行簡單的處理,並選取2000年以後的數據進行圖形的繪製,處理後的數據如下所示:
# 時間處理df['time_index'] = pd.to_datetime(df['time_index'])df['time_index'] = df['time_index'].dt.date.astype('str')# 選取子集df_sel = df.loc[:, ['time_index', 'S.A.']]df_sel['time_2'] = df_sel['time_index'].copy()df_sel = df_sel.set_index('time_index') df_sel = df_sel.loc[(df_sel.index>='2000-01-01')] df_sel.head()
接下來使用Pyecharts庫中的TimeLine和Line類進行圖形的繪製,代碼說明如下,其中的配置項可以看到pyecharts官網 ht tps://pyec harts.org 進行查看。
圖形生成在本地的html網頁中。
代碼實現:
# 實例化一個timelinet1 = Timeline(init_opts=opts.InitOpts(width='1350px', height='750px'))# 添加配置項t1.add_schema(play_interval=1, # 播放的速度is_loop_play=False, # 是否循環播放 linestyle_opts=opts.LineStyleOpts(width=0.5), )# 時間數據time_date = df_sel.index.values.tolist()for i in time_date: # 繪製線形圖 line = Line() line.add_xaxis(df_sel.loc[:i, 'time_2'].values.tolist()) line.add_yaxis('', df_sel.loc[:i, 'S.A.'].values.tolist()) line.set_global_opts(title_opts=opts.TitleOpts('美國申請失業保險{}日人數'.format(i)) ) line.set_series_opts(label_opts=opts.LabelOpts(is_show=False), linestyle_opts=opts.LineStyleOpts(width=2) ) # 添加到t1中 t1.add(line, '{}'.format(i))# 生成HTML文檔t1.render('美國申請失業保險動態折線圖.html')
這裡我們選至2000年後的數據進行繪製,讓我們看看這成品,最後幾秒你一定驚嘆: