前言
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
目前,我国新冠疫情已经大幅度好转,各省市在3到4月份已经开始复产复工,连受灾最严重的武汉也解封了,全国的情况逐渐步入正轨。
但同时全球疫情十分严峻, 根据美国约翰斯.霍普金斯大学统计的数据显示,截至北京时间19日晚6时38分,全球新冠死亡病例超过16万例,达到161,324例,全球确诊病例突破230万,达2,343,293例。
根据数据,目前死亡病例最多的国家是美国,为33,903例。美国同时还是全球确诊病例最多的国家,累计确诊病例突破70万,达到722,761例。
疫情给全球人民带来的不仅仅是生命的威胁,同样还有经济上的困境以及失业危机。因为疫情的影响,美国陷入了“裁员潮”,很多美国人不得不因为这次疫情被辞退,从而申请失业救济金。
美国失业人数超2200万,抹去11年来所有新增就业
美国劳工部16日公布的数据显示,受新冠疫情在美国蔓延影响,上周美国首次申请失业救济人数达到524.5万,这意味着过去四周美国首次申请失业救济人数已累计达到约2200万,这约占美国劳动力总数的八分之一,基本抹去了08年金融危机以来过去11年所有的新增就业。
特别是这个由美国劳工部统计的失业救济人数动态图,也是引爆全网,从中可以看到自六十年代来,美国的失业救济人数一直是上下波动。而受这次疫情影响,美国失业救济人数像坐了火箭一般,一路飙升。
(结尾高能,一定要看到最后!)
美国每周首次申请失业救济人数
来源:美国劳工部 United States Department of Labor
那么作为一个技术号,我们就来探讨一下这个动态图怎么做。今天我们就教你用Python来实现!
教你用Python绘制美国申请失业险人数动态图
我们使用pyecharts包进行美国申请失业保险人数的动态趋势图的绘制,如果你没有安装pyecharts,可以使用以下代码进行pip安装。
pip install pyecharts
制作这样的一个动态图使用的是Pyecharts中的的TimeLine(时间线轮播图)的类。使用TimeLine的方法,你可以轻松地将绘制带有时间序列的动态图形,比如动态条形图、动态饼图、动态桑基图、动态地图等等。
首先需要导入我们需要使用的包,其中pandas用于数据整理,pyecharts用于绘图。
# 导入包
import pandas as pd
from pyecharts import options as opts
from 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官网 https://pyecharts.org 进行查看。
图形生成在本地的html网页中。
代码实现:
# 实例化一个timeline
t1 = 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年以后的数据进行绘制,最后让我们看到绘制后的成品:最后有结果有点吓人
欢迎点击左上角关注小编,除了分享技术文章之外还有很多福利,私信学习资料可以领取包括不限于Python实战演练、PDF电子文档、面试集锦、学习资料等。
来源:oschina
链接:https://my.oschina.net/u/4347613/blog/4282546