用python画出全球疫情趋势变化图

前言

文的文字及图片来源于网络,仅供学习、交流使用,不具备任何商业用途,版权归原做者全部,若有问题请及时联系咱们以做处理。python

做者:谦睿科技编程

PS:若有须要Python学习资料的小伙伴能够加点击下方连接自行获取http://t.cn/A6Zvjdunjson

Pythonapi

Python的设计哲学是“优雅、明确、简单”。它的语言方式与天然语言很接近 ,具备很好的可阅读性,固然理解起来也就不是晦涩难懂,更容易让人亲近。微信

 

Python语言(Python原意是一种“大蟒蛇”)网络

 

Python在最新的编程语言排名中第三名app

 

目前我国也正在逐步将Python归入教学体系,浙江省已归入高考,7选3。山东省甚至将其做为小学六年级的信息学教材。南京市列入中考特招项。echarts

 

当前全球的疫情还在持续中,咱们如用python来制做疫情趋势变化图?编程语言

在遇到难题时固然要学会去GitHub找找思路,只须要在GitHub上搜索疫情数据就能看到不少大神作的疫情数据爬虫ide

甚至有些会项目提供数据接口(https://lab.isaaclin.cn/nCoV/),按照使用说明调用端口便可。注意请求频率哦

AkShare 是基于 Python 的开源数据接口库, 目的是实现对期货, 期权, 基金等衍生金融产品和另类数据从数据采集, 数据清洗加工, 到数据下载的工具, 知足金融数据科学家, 数据科学爱好者在数据获取方面的需求。那么这个提供金融数据的库目前也采集了网易和丁香园的疫情数据提供给你们

使用起来也很简单

import akshare as ak
epidemic_hist_all_df = ak.epidemic_hist_all() #获取所有历史数据

最近国内疫情已经有所好转,可是国外的状况不容乐观,那么怎样用Python去制做动态图表来看全球疫情变化趋势呢?好比下面的国内外疫情发展趋势:

其实用Python实现并不难,简单来讲就分为三步:

  • 获取数据(requests)
  • 数据清洗(pandas)
  • 数据可视化(pyecharts)

数据获取与处理

 

疫情数据获取并非很难,在目前互联网上已经有许多提供数据的网站。

接下来两行命令就能拿下全部历史数据

data = requests.get('https://lab.isaaclin.cn/nCoV/api/area?latest=0')
data = data.json()

先来看下数据量

能够看到一共采集到了7584条数据,因为脏数据比较多,因此这一部分的工做量是比较大的。

首先要将全部数据从字典提取出来并对时间戳进行转换,而后将数据保存到pandas里

data = requests.get('https://lab.isaaclin.cn/nCoV/api/area?latest=0')
data = data.json()
res = data['results']
df = pd.DataFrame(res)
def time_c(timeNum):
    timeTemp = float(timeNum/1000)
    tupTime = time.localtime(timeTemp)
    stadardTime = time.strftime("%Y-%m-%d %H:%M:%S", tupTime)
    return stadardTime

for i in range(len(df)):

    df.iloc[i,16] = time_c(df.iloc[i,16])

for i in range(len(df)):

    df.iloc[i,16] = df.iloc[i,16][5:10]

如今数据就成了这样

这样看起来就舒服多了,可是仍是不可使用,由于API天天会采集不少次数据,因此里面有不少重复数据和异常数据,因此接下来重点处理这一部分。对于重复数据咱们只保留最新一个,对于空数据咱们选择前一天的数据填充。

#去重部分代码
tem = df1[df1['updateTime'] == '03-02']
tem = tem.drop_duplicates(['provinceShortName'], keep='last')
for i in date[1:41]:
    tem1 = df1[df1['updateTime'] == i]
    tem1 = tem1.drop_duplicates(['provinceName'], keep='last')
    tem = tem.append(tem1)

tem = tem.reset_index(drop=True)
tem

因为篇幅缘由,就再也不贴出更多的代码,咱们来看下最终处理完的数据

数据可视化

 

首先是国内外疫情趋势

public class MyActivity extends AppCompatActivity from pyecharts.faker import Faker
from pyecharts import options as opts
from pyecharts.charts import Bar, Page, Pie, Timeline,Grid


def timeline_bar() -> Timeline:
    x = ['国内','国外']
    tl = Timeline()
    tl = Timeline()
    tl.add_schema(is_auto_play = True,
    play_interval = 500,
    is_loop_play = False)
    k= 0
    for i in date:
        bar = (
            Line()
            .add_xaxis(date)
            .add_yaxis("国内", hs(c1,k))
            .add_yaxis("国外", hs(c,k))
            .extend_axis(
            yaxis=opts.AxisOpts(
            )
        )
            .set_series_opts(
            areastyle_opts=opts.AreaStyleOpts(opacity=0.5),
            label_opts=opts.LabelOpts(is_show=False),
        )
            .set_global_opts(title_opts=opts.TitleOpts("{}国内外疫情趋势".format(i)))
        )
        tl.add(bar, "{}".format(i))
        k = k + 1
    return tl
timeline_bar().render_notebook()

能够看出,国内的增加已经处于平缓状态,而国外自二月底来忽然爆发,目前还处于上升期,这也是为何如今要严防境外输入病例。再来看看国外具体的病例占比吧(微信GIF只能上传5M因此有点糊):

能够看出在最近几天韩国、日本、意大利忽然爆发,这三个国家的病例数量就占到了约75%。最后再来看看全球疫情的变化趋势吧!

 

至此,咱们就彻底使用Python对疫情数据进行了一次动态可视化,最后仍是要说一句,疫情仍未散去,你们要继续作好防御!

相关文章
相关标签/搜索