国内 2019-nCoV 得到控制后,我就没怎么再关心过 2019-nCoV ,最近看到一条新闻,全球 2019-nCoV 累计确诊人数已经突破 500w 大关,看到这个数字我还是有点吃惊的。

思来想去,还是写一篇全球 2019-nCoV 的分析的文章,本文包括网络爬虫、全球 2019-nCoV 地图绘制等方面。

网络爬虫

我之前有分享过 2019-nCoV 数据的来源,用的是 AKShare 的数据源,好用是真好用,就是网络太慢了, AKShare 的数据很多是来源于 GitHub ,我的网络访问太平洋彼岸的数据还是有点力不从心。

这次我换了新的数据源,来源腾讯新闻的实时数据,站点链接如下:

  • 腾讯新闻:https://news.qq.com/zt2020/page/feiyan.htm

本来我以为需要解析页面元素,才能获取到数据,但是等我分析了 network 以后发现,竟然可以直接找到数据接口,这大大的方便了我们数据抓取。

获取全球 2019-nCoV 数据接口如下:

https://api.inews.qq.com/newsqa/v1/automation/foreign/country/ranklist

把这个接口放在 PostMan 里面模拟访问一下:

毫无反爬手段,header 神马的都不需要配置,直接访问就能拿到数据,到这里,我们可以开始写爬虫的代码了,最终代码如下:

import requests
from datetime import datetimedef catch_data():"""抓取当前实时数据,并返回 国家、大洲、确诊、疑似、死亡、治愈 列表:return:"""url = 'https://api.inews.qq.com/newsqa/v1/automation/foreign/country/ranklist'data = requests.post(url).json()['data']date_list = list()  # 日期name_list = list() # 国家continent_list = list() # 大洲confirm_list = list()  # 确诊suspect_list = list()  # 疑似dead_list = list()  # 死亡heal_list = list()  # 治愈for item in data:month, day = item['date'].split('.')date_list.append(datetime.strptime('2020-%s-%s' % (month, day), '%Y-%m-%d'))name_list.append(item['name'])continent_list.append(item['continent'])confirm_list.append(int(item['confirm']))suspect_list.append(int(item['suspect']))dead_list.append(int(item['dead']))heal_list.append(int(item['heal']))return date_list, name_list, continent_list, confirm_list, suspect_list, dead_list, heal_listdef save_csv():"""将数据存入 csv 文件:return:"""date_list, name_list, continent_list, confirm_list, suspect_list, dead_list, heal_list = catch_data()fw = open('2019-nCoV.csv', 'w', encoding='utf-8')fw.write('date,name,continent,confirm,suspect,dead,heal\n')i = 0while i < len(date_list):date = str(date_list[i].strftime("%Y-%m-%d"))fw.write(date + ',' + str(name_list[i]) + ',' + str(continent_list[i]) + ',' + str(confirm_list[i]) + ',' + str(suspect_list[i]) + ',' + str(dead_list[i]) + ',' + str(heal_list[i]) + '\n')i = i + 1else:print("csv 写入完成")fw.close()if __name__ == '__main__':save_csv()

最终得到的 csv 文件是这样的:

全球 2019-nCoV 地图

前端或网站开发的朋友应该都使用过强大的 Echarts 插件。 ECharts 是一个纯 Javascript 的图表库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器,底层依赖轻量级的 Canvas 类库 ZRender ,提供直观、生动、可交互、可高度个性化定制的数据可视化图表。 ECharts 提供了常规的折线图、柱状图、散点图、饼图、K线图,用于统计的盒形图,用于地理数据可视化的地图、热力图、线图,用于关系数据可视化的关系图、treemap,多维数据可视化的平行坐标,还有用于 BI 的漏斗图、仪表盘,并且支持图与图之间的混搭。

既然 Echarts 如此强大, Python 肯定有相应的第三方扩展包支持,它就是我们接下来绘制世界地图要用到的 PyEcharts 。 PyEcharts 是一个用于生成 Echarts 图表的类库,即 Echarts 与 Python 的对接。

安装语句如下:

pip install pyecharts

PyEcharts 安装完成后我们就可以开始写接下来的代码了,如下:

from pyecharts import options as opts
from pyecharts.charts import Map
import pandas as pd
import namemapdef read_country_code():"""获取国家中英文字典:return:"""country_dict = {}for key, val in namemap.nameMap.items():  # 将 nameMap 列表里面键值互换country_dict[val] = keyreturn country_dictdef read_csv():"""读取数据,返回国家英文名称列表和累计确诊数列表:return:"""country_dict = read_country_code()data = pd.read_csv("2019-nCoV.csv", index_col=False)countrys_names = list()confirmed_count = list()for x in range(len(data.index)):if data['name'].iloc[x] in country_dict.keys():countrys_names.append(country_dict[data['name'].iloc[x]])confirmed_count.append(data['confirm'].iloc[x])else:print(data['name'].iloc[x])return countrys_names, confirmed_countdef draw_map():"""绘制世界地图遇到一个很神奇的问题:两个列表必须写死数据地图才会渲染数据,如果数据是从方法中获得,则地图不渲染数据:return:"""# countrys_names, confirmed_count = read_csv()# print(countrys_names)# print(confirmed_count)countrys_names = ['United States', 'Brazil', 'Russia'...]confirmed_count = [1666828, 347398, 335882...]c = (Map().add("确诊人数",[list(z) for z in zip(countrys_names, confirmed_count)],is_map_symbol_show=False,maptype="world",label_opts=opts.LabelOpts(is_show=False),itemstyle_opts=opts.ItemStyleOpts(color="rgb(49,60,72)")).set_series_opts(label_opts=opts.LabelOpts(is_show=False)).set_global_opts(title_opts=opts.TitleOpts(title="全球 2019-nCoV 地图"),visualmap_opts=opts.VisualMapOpts(max_=1700000),).render("map_world.html"))if __name__ == '__main__':draw_map()

最终结果如下:

在绘制全球 2019-nCoV 地图的时候,我们最终使用的国家的名称是英文的,所以需要用到一个中英文国家名称对照字典,这个字典我找到了两个版本,一个是 Python 格式的文件 namemap.py ,还有一个是 json 格式的文件 country-code.json , 使用这两个文件中的任意一个将我们在前面获取到的数据中的中文国家名称转换为英文。这两个文件我都会提交到代码仓库,有需要的同学可以在公众号里回复关键字获取。

另外,在最后绘制地图的时候遇到了一个很奇葩的问题,国家名称列表和累计确诊人数列表如果是从前面的方法中获取到的,在最后渲染成 map_world.html 的时候,将不会渲染数字,所有的数字都是 null ,但是如果这两个列表 copy 出来,写死在代码中,就可以成功的渲染,有清楚这个问题的朋友可以在留言中解答一下,万分感激。

您的扫码关注,是对小编坚持原创的最大鼓励:)

Python 绘制全球 2019-nCoV 地图相关推荐

  1. 玩转PYthon,用Python绘制全球疫情变化地图(好东西,值得一看~~~)

    用Python绘制全球疫情变化地图 目前全球疫情仍然比较严重,为了能清晰地看到疫情爆发以来至现在全球疫情的变化趋势,我绘制了一张疫情变化地图,完整代码共 230 行,需要的朋友在公众号回复关键字 疫情 ...

  2. 用Python绘制地理图,将地图展现可视化,得取数据

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 本文章来自腾讯云 作者:计算机与AI 想要学习Python?有问题得不到第一时间解 ...

  3. 探秘谷歌地球,它如何绘制全球98%的地图?

    全文共3319字,预计学习时长10分钟 来源:bbs 萨鲁·布里尔利与父母分离时才5岁.他和哥哥古杜从家乡乘坐火车到了70公里以南的另一个城市.萨鲁在车站的长凳上睡着了,醒来时哥哥已不见了. 五岁的弟 ...

  4. 新型冠状病毒全球实时跟踪地图,多国研发疫苗,在中国或致8042例感染,爆发峰值预计2月中上旬 | 最新nCoV研究大汇总...

    导读 约翰·霍普金斯大学的全球冠状病毒实时扩散地图 新型冠状病毒溯源取得阶段性进展,武汉华南海鲜市场存在大量新型冠状病毒 多国加紧研发新型冠状病毒疫苗和治疗药物 北大课题组:新型冠状病毒中间宿主或为水 ...

  5. 百度地图 绘制运动轨迹_百度地图创新破局:声音个性表达、出行精准预估与全球无碍...

    12月20日-22日,在"极客公园创新大会十周年GeekPark IFX"未来趋势论坛上,百度地图事业部总经理李莹发表了题为<AI时代,地图的破局与思考>主题演讲,分享 ...

  6. python用cartopy包画地图_python绘制地图的利器Cartopy使用说明

    python绘制地图一般使用Basemap绘图包,但该包配置相对较繁琐,自定义性不强,这里介绍一个绘制地图的利器Cartopy,个人认为该工具方便.快捷,附上一些自己写的程序. 准备工作,工欲善其事, ...

  7. [数据分析与可视化] Python绘制数据地图2-GeoPandas地图可视化

    本文主要介绍GeoPandas结合matplotlib实现地图的基础可视化.GeoPandas是一个Python开源项目,旨在提供丰富而简单的地理空间数据处理接口.GeoPandas扩展了Pandas ...

  8. 【Python实用工具】速来!!一篇文章十分钟教你如何使用Python第三方库basemap进行地图绘制

    basemap地图绘制 basemap地图绘制 1 basemap的使用 1.1 basemap安装 1.2 basemap使用 1.3 缩放区域与绘图 2 basemap综合示例 2.1 美国人口分 ...

  9. Python绘图:使用Basemap绘制全球地形图

    目的 基于NOAA-NGDC的全球地形数据ETOPO2v2,绘制全球地形图. 思路 读取全球地形数据 绘制全球地形图 数据来源 ETOPO2v2c_f4.nc下载地址:https://www.ngdc ...

最新文章

  1. [java手把手教程][第二季]java后端博客系统文章系统——No10
  2. 详解六大伤硬盘软件及解决方法
  3. c++ const 类型检查
  4. Lambda使用——JDK8新特性
  5. 向量点乘 推导及应用
  6. C/C++预处理宏的总结
  7. 牛客多校第六场 G Is Today Friday? 蔡勒公式/排列
  8. NVIDIA控制面板打不开
  9. MySQL中varchar,varbinary的区别
  10. 字体文件夹在哪?xp\win7\win8\win10系统字体文件夹位置
  11. Ubuntu下搭建Hadoop分布式集群
  12. 如何下载网站的在线视频
  13. 计算机毕业设计源代码 javaSSM274基于VUE酒店客房管理系统 论文答辩ppt
  14. ADF Faces Core 标记库信息
  15. 阿里云实时音视频直播鉴权java代码示例
  16. LightGBM详解--原理+技巧+参数
  17. python推荐引擎_python-doc/Python中一个简单的基于内容的推荐引擎.md at master · ictar/python-doc · GitHub...
  18. 卫生纸玫瑰花折法5步_卫生纸折纸玫瑰花的折法视频教程
  19. python前端页面显示_Python flask框架如何显示图像到web页面
  20. Python石头剪刀布游戏简单易懂

热门文章

  1. 【大数据发展篇】分布式技术
  2. PTA(java,C++)查找电话号码
  3. 切断传染,城市大数据如何在人海中找到“B”类人群?
  4. [软考]信息安全工程师-第6章 认证技术原理与应用 课件知识点整理
  5. 【数据可视化】Python 热力图(seaborn.heatmap)
  6. 微信正在变成另外一个超级浏览器
  7. Unity塔防游戏的制作与实现
  8. Bash 脚本中的错误处理
  9. 会员管理软件的使用价值
  10. (随笔) 是我们眼界太狭隘了