小白向!教你如何用Python爬取2019-nCov实时疫情,用Pyecharts绘制疫情图

用Python爬取实时疫情,用Pyechart绘制疫情图

        • 武汉加油!中华不息!为所有在前线与病毒抗战的医护人员表示最高的敬意!
        • 一、爬取疫情信息
        • 二、绘制疫情地图
        • 三、效果图

武汉加油!中华不息!为所有在前线与病毒抗战的医护人员表示最高的敬意!

      2019新型冠状病毒(2019-nCoV), [1]  因2019年武汉病毒性肺炎病例而被发现,2020年1月12日被世界卫生组织命名。冠状病毒是一个大型病毒家族,已知可引起感冒以及中东呼吸综合征(MERS)和严重急性呼吸综合征(SARS)等较严重疾病。新型冠状病毒是以前从未在人体中发现的冠状病毒新毒株。 [2-3] 
       2019年12月以来,湖北省武汉市持续开展流感及相关疾病监测,发现多起病毒性肺炎病例,均诊断为病毒性肺炎/肺部感染。 [4] 
       人感染了冠状病毒后常见体征有呼吸道症状、发热、咳嗽、气促和呼吸困难等。在较严重病例中,感染可导致肺炎、严重急性呼吸综合征、肾衰竭,甚至死亡。目前对于新型冠状病毒所致疾病没有特异治疗方法。但许多症状是可以处理的,因此需根据患者临床情况进行治疗。

本人初学爬虫不久,具体也不是特别的熟练,正好碰上了这次疫情,故想试一试爬一下网上的数据,练一下手。本次参考的大佬会在文章末尾放出,有兴趣的话也可以去看一下大佬的博客。若是有什么地方说的不好的或者错误的,也欢迎大家指出。(第一次写博客,瑟瑟发抖)

一、爬取疫情信息

这次爬取数据的话主要是从几个比较出名的网络平台爬的,接口的话可以参考大佬们的链接,如果你有前端的经验的话也可以自己F12在网页里在JS类型里查找,这里就不再赘述了。
想要爬取数据的话需要引入requests库,若要使用到正则表达式去匹配的话还要用到re库,想要用其他的爬取方法的话,也可以用bs4库等等,因人而异吧,能够爬到数据就好。
要使用到正则表达式的操作,故这里给出一些正则化的常用操作符
小白向!教你如何用Python爬取2019-nCov实时疫情,用Pyecharts绘制疫情图_第1张图片
小白向!教你如何用Python爬取2019-nCov实时疫情,用Pyecharts绘制疫情图_第2张图片
正则表达式的语法可以参考:
正则表达式语法
https://www.runoob.com/regexp/regexp-syntax.html

由于爬取的网站没有反爬虫的设定,爬取起来也很轻松。
代码如下:

result = requests.get(
'https://interface.sina.cn/news/wap/fymap2020_data.d.json?1580097300739&&callback=sinajp_1580097300873005379567841634181')
json_str = re.search("\(+([^)]*)\)+", result.text).group(1)
html = f"{json_str}"
table = json.loads(f"{html}")

爬取之后我们debug一下,看看具体的数据结构是怎么样的:
小白向!教你如何用Python爬取2019-nCov实时疫情,用Pyecharts绘制疫情图_第3张图片
这里我们可以看到我们数据更新的时间以及各种疫情相关的数据。看来我们成功爬取到了疫情数据。接下来便是绘制疫情地图以及其他数据可视化的事情了。

二、绘制疫情地图

由三位大佬制作的项目pyecharts对数据可视化有着很好的应用,当然用matplotlib或者其他库进行数据可视化也是可以的,但是个人还是更加喜欢用pyecharts,所以这次便用这个来绘制疫情图以及各种曲线图。

  1. Pyecharts的安装
    安装与安装其他包没有太大的区别,在Anaconda Prompt 处pip install 一下就可以了,但是由于要使用到中国地图,所以还要额外下载几个地图:
    地图文件被分成了三个 Python 包,分别为:
    全球国家地图: echarts-countries-pypkg (1.9MB)
    中国省级地图: echarts-china-provinces-pypkg (730KB)
    中国市级地图: echarts-china-cities-pypkg (3.8MB)

直接使用python的pip安装即可


选择自己需要的安装的地图
$ pip install echarts-countries-pypkg
$ pip install echarts-china-provinces-pypkg
$ pip install echarts-china-cities-pypkg
$ pip install echarts-china-counties-pypkg
$ pip install echarts-china-misc-pypkg
$ pip install echarts-united-kingdom-pypkg
————————————————

同时我们在这里给出pyecharts的使用手册
https://pyecharts.org/#/zh-cn/intro

  1. 绘制全国实时疫情图
    获取数据,然后绘制疫情图。在这边就不赘述了,大体就是声明一个map对象在添加数据,设置一下标题啥的就可以了,不是很难。
def draw_china_map():
    """获取数据"""
    data = []
    for province in d_list['data']['list']:
        data.append((province['name'], province['value']))
    c=(
        Map()
        .add("确诊",data, "china")
        .set_global_opts(title_opts=opts.TitleOpts(title="全国疫情图"),
            visualmap_opts = opts.VisualMapOpts(max_=800))
    )
    c.render("全国实时疫情.html")  # 生成html文件
    return c

这边需要注意一下,在使用连续型地图的时候,max可以设计地区渲染的阈值,具体见效果图。
3. 绘制广东省实时疫情图
同样的,我们可以绘制出各个省的实时疫情图:

def draw_guangdong_daily():
    data = []
    for city in d_list['data']['list'][2]['city']:
        data.append((city['name']+'市', city['conNum']))

    c=(
        Map()
        .add("确诊",data, "广东")
        .set_global_opts(title_opts=opts.TitleOpts(title="广东疫情图"),
            visualmap_opts = opts.VisualMapOpts(max_=200))
    )
    c.render("广东疫情.html")  # 生成html文件
    return c

当然,如果你想的话,你还可以绘制全球的疫情图,但是由于数据中国家的名字都是中文,而地图包中的国家名字为英文,故我们需要世界各个国家中英文对照的数据集进行匹配,这里我就不赘述了,后面会给大家看到效果图
4. 绘制全国疫情发展曲线
首先,我们获取需要的数据:

def catch_daily():
    """抓取每日疫情数据"""

    date_list = list()  # 日期
    confirm_list = list()  # 确诊
    suspect_list = list()  # 疑似
    dead_list = list()  # 死亡
    heal_list = list()  # 治愈

    for count in d_list['data']['historylist']:
        date_list.append(count['date'])
        confirm_list.append(count['cn_conNum'])
        heal_list.append(count['cn_cureNum'])
        suspect_list.append(count['cn_susNum'])
        dead_list.append(count['cn_deathNum'])
    return date_list, confirm_list, suspect_list, dead_list, heal_list

然后我们将数据添加到折线图line类中:

def draw_daily():
    """绘制全国疫情曲线图"""
    date_list, confirm_list, suspect_list, dead_list, heal_list = catch_daily()  # 获取数据
    date_list.reverse()
    confirm_list.reverse()
    dead_list.reverse()
    heal_list.reverse()
    suspect_list.reverse()
    line = Line()
    line.set_global_opts(title_opts=opts.TitleOpts(title="全国疫情曲线"))
    line.add_xaxis(date_list)
    line.add_yaxis('确诊人数', confirm_list)
    line.add_yaxis('疑似人数', suspect_list )
    line.add_yaxis('死亡人数', dead_list)
    line.add_yaxis('治愈人数', heal_list)
    line.render("全国实时疫情曲线.html")
    return line
  1. 选项合并
    我们使用tab类将我们的疫情图以及一些曲线进行合并,以选项的形式放在同一个html中
tab = Tab()
tab.add(draw_china_map(), "全国实时疫情地图")
tab.add(draw_guangdong_daily(), "广东疫情地图")
tab.add(draw_global(), "世界疫情")
tab.add(draw_daily(), "全国疫情曲线")
tab.add(draw_wuhan_daily(), "武汉疫情曲线")
tab.render('2019-cNov.html')

三、效果图

运行程序后,我们在项目的目录下可以看到文件
小白向!教你如何用Python爬取2019-nCov实时疫情,用Pyecharts绘制疫情图_第4张图片

打开第一个文件,便可以看到我们具体的效果如何

全国实时疫情图
小白向!教你如何用Python爬取2019-nCov实时疫情,用Pyecharts绘制疫情图_第5张图片
广东省疫情图
小白向!教你如何用Python爬取2019-nCov实时疫情,用Pyecharts绘制疫情图_第6张图片
世界疫情图
小白向!教你如何用Python爬取2019-nCov实时疫情,用Pyecharts绘制疫情图_第7张图片
全国疫情曲线
小白向!教你如何用Python爬取2019-nCov实时疫情,用Pyecharts绘制疫情图_第8张图片
武汉疫情曲线
小白向!教你如何用Python爬取2019-nCov实时疫情,用Pyecharts绘制疫情图_第9张图片
小结:在本文章中,用python爬取了网络数据,进行了数据可视化,也许虽然不能对国家疫情抗战做出多大贡献,但也希望早日能够战胜病毒,让人们重新正常的生活。为国家疫情抗战一线的工作人员加油!

参考博客:
https://www.jianshu.com/p/c773289c0bb1

你的点赞是我最大的动力❤

你可能感兴趣的:(小白向!教你如何用Python爬取2019-nCov实时疫情,用Pyecharts绘制疫情图)