当前位置: 首页 > 科技观察

使用Python可视化神器Plotly动态展示全球疫情趋势

时间:2023-03-21 12:11:13 科技观察

使用Python可视化神器Plotly动态展示全球疫情趋势大家早上好,我叫Lemonbit。最近有很多关于疫情数据可视化的内容。今天用Python可视化申请Plotly,对国外疫情发展进行可视化。以实际项目的形式,在分析了解国外疫情变化趋势的同时,加深大家对Plotly的理解。学会应用。在我们开始之前,让我们来看看一些最终的效果图。如果您有兴趣,不妨继续阅读。作为数据来源的国内疫情已逐渐得到控制,各项指标开始明显好转。不过,国外的情况似乎也不太乐观,已有的功课也没有很好地复制。所以,这次我们主要对国外进行直观的分析。疫情的发展。疫情数据来自开源项目Akshare。由于使用本项目获取的数据有时不稳定,可能会遇到连接失败的情况。因此,我在这里提供保存的数据供您使用。准备工作一如往常,先介绍一下我运行的Mac系统Anaconda(Python3.7)。本次JupyterNotebook使用的Python库包括akshare、pandas、plotly等,导入如下:我们读取已经获取的数据,已经保存的数据截至3月7日。#从akshare获取数据#df_all_history=ak.epidemic_history()#从csv文件获取数据df_all_history=pd.read_csv('epidemic_all_20200307.csv',index_col=0)df_all_history从上面获取的数据,有些数据格式需要调整,对于Date,我们这里会组织两列数据,一列是时间格式的日期(['date']),另一列是字符串格式的日期(['dates'])。这样设置的原因是我们后面需要用到这两种格式的日期。df_all=df_all_history#将字符串格式的日期保存为另一列df_all['dates']=df_all_history['date']#将字符串格式的日期转换为日期格式df_all['date']=pd.to_datetime(df_all['date'])获取国外疫情数据上面的数据是全球数据,我们可以去掉属于中国的数据,就可以获取国外的数据了。#国外,按国家统计df_oversea=df_all.query("country!='China'")df_oversea.fillna(value="",inplace=True)df_oversea先用plotlyexpress看国外疫情总体趋势国家。#海外,按国家统计df_oversea=df_all.query("country!='China'")df_oversea.fillna(value="",inplace=True)df_oversea从上图可以看出,大部分国外疫情从2月10日开始,全国的发展态势更加明显。所以后面我们重点分析这段时间之后的情况。#现有数据演示从2020年2月10日开始df_oversea_oversea_recent=df_oversea.set_index('date')df_oversea_recentdf_oversea_recent=df_oversea_recent['2020-02-10':]df_oversea_recent由于部分国家的数据不是2020年2月10日开始记录,所以添加数据。我们可以手动新建一个excel数据表,将补充日期的值填0。我这里主要补充的是伊朗的数据,因为伊朗发展太快,必须纳入分析范围。对于其他国家,如果有需要补充,后续可以继续完善。#因为有些国家的数据不是从2020年2月10日开始的,所以需要补数据,值为0#补数据是在excel表格里,这里是读df_oversea_buchong=pd.read_excel('epidemic_buchong.xlsx')df_oversea_buchong['dates']=df_oversea_buchong['date'].apply(lambdax:x.strftime('%Y-%m-%d'))df_oversea_buchong.set_index('date',inplace=True)df_oversea_buchong.fillna(value="",inplace=True)print(df_oversea_buchong.info())df_oversea_buchong完成需要补充的数据后,我们可以将以上两部分数据结合起来一起分析。#Mergesupplementarydatadf_oversea_recentdf_oversea_recent_new=df_oversea_recent.append(df_oversea_buchong)df_oversea_recent_new.sort_index(inplace=True)df_oversea_recent_new得到合并后的数据,首先我们用气泡图可视化变化,这里用plotly的散点图表达。PlotlyExpress现已合并到plotly中。个人觉得和plotly原生内容的协同效果比袖扣好。#Mergesupplementarydatadf_oversea_recentdf_oversea_recent_new=df_oversea_recent.append(df_oversea_buchong)df_oversea_recent_new.sort_index(inplace=True)df_oversea_recent_new从上面的动态图中可以明显看出,目前海外国家中,韩国、伊朗、意大利最多严肃的。这三个国家中,从增长趋势来看,伊朗和意大利比韩国更为明显。目前韩国增速放缓,而伊朗和意大利仍处于高速增长过程中,后续情况不容乐观。此外,在这张图中,还有其他几个国家值得关注。日本除钻石外,从数据上看,当地的增长仍处于略好一些的区间。反倒是德国、法国、西班牙个人觉得逐渐壮大起来,不得不提防。而且,由于整个欧盟国家之间人员的自由流动,现在看来,整个欧盟很可能成为疫情的重灾区,其影响将是巨大的。上图左下角这几个国家的走势,我们可以放大看下图的走势,这样德国、法国、西班牙会更明显。在这里,还有另一个国家,美国。虽然从数据和增长情况来看,美国似乎做得不错,但实际情况恐怕要差很多。以上是以气泡图的形式演示变化过程。我们也可以用直方图的形式来展示。需要注意的是,本文中的代码是在JupyterNotebook中运行的。如果是在PyCharm等IDE中运行,需要稍微修改一下代码。最后再次感谢开源项目Akshare提供数据接口。