1.本章利用python爬取2019-nCoV确诊数据并制作pyecharts可视化地图;

2.主要内容为绘制出中国各省疫情数据,疫情数据从四个维度进行可视化展示:累积确诊人数、现存确诊人数、治愈人数、死亡人数。鼠标移动到省份上方,则展示出相关数据;地图上添加的图例,用颜色深浅和界定确诊人数的数量范围直观反应各省份疫情现状况,点击图例的颜色框可以让图上的对应区域颜色显现或消失。
3.上图为丁香园数据疫情图,我们可以从腾讯新闻网站搜索相关疫情数据,附上疫情数据接口:
https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5
打开疫情数据接口链接如下图所示:**


4.密密麻麻的数据我们用Jupyter Notebook分析下疫情数据
请求疫情数据,代码如下,结果如图所示:

from fake_useragent import UserAgent
import requests
import json
ua = UserAgent()
headers = {'User-Agent':ua.chrome}
url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5'
response = requests.get(url,headers)
list_json = json.loads(response.text)
print(type(list_json))
list_json


5.获取疫情数据里的’data‘数据,
代码如下,结果如图所示:

global false,null,true
false = null = true = ""
jo = list_json['data']
type(jo)


6.将获取到的’data‘字符串数据转换成字典类型,方便数据操作;

代码如下,结果如图所示:

data = eval(jo)
data


7.获取数据如下图所示
8.获取各个省份确诊人数的信息
9.疫情数据从四个维度进行可视化展示:累积确诊人数、现存确诊人数、治愈人数、死亡人数。
图中为北京疫情数据:
累积确诊人数(confirm)、
现存确诊人数(nowConfirm)、
治愈人数(heal)、
死亡人数(dead);

10.获取并打印数据
代码如下,结果如图所示:

print(data['areaTree'][0]['children'][0]['name'])
print(data['areaTree'][0]['children'][0]['total']['nowConfirm'])
print(data['areaTree'][0]['children'][0]['total']['confirm'])
print(data ['areaTree'][0]['children'][0]['total']['dead'])
print(data['areaTree'][0]['children'][0]['total']['heal'])


11.整理合并各个省份确诊人数的信息:
代码如下,结果如图所示:

#  地区
area = []
#  现存确诊
nowConfirm = []
#  累积确诊
confirm = []
#  死亡人数
dead = []
#  治愈人数
heal = []
for i in range(34):#  获取添加中国各个省份名称area.append(data['areaTree'][0]['children'][i]['name'])#  获取添加中国各个省份现存确诊人数nowConfirm.append(data['areaTree'][0]['children'][i]['total']['nowConfirm'])#  获取添加中国各个省份累积确诊人数confirm.append(data['areaTree'][0]['children'][i]['total']['confirm'])#  获取添加中国各个省份死亡人数dead.append(data['areaTree'][0]['children'][i]['total']['dead'])#  获取添加中国各个省份治愈人数heal.append(data['areaTree'][0]['children'][i]['total']['heal'])
#  将数据封装成[‘北京’,[325,923,9,589]]这样的形式方便于数据可视化
data_pair = []
for i in range(34):x = []#  添加该省的累积确诊人数x.append(confirm[i])#  添加该省的死亡人数x.append(dead[i])#  添加该省的治愈人数x.append(heal[i])#  添加该省的现存确诊人数x.append(nowConfirm[i])#  将中国各省疫情数据添加到data_pair数组里data_pair.append(x)testv = []for i in range(34):# 向中国各省与该省疫情数据匹配testMap = [area[i],data_pair[i]]#获取整理各个省份确诊人数的信息testv.append(testMap)
lastUpdateTime = data['lastUpdateTime']
print(lastUpdateTime)
testv





12(桥黑板!!!重点!)
画图:获取各个省份确诊人数的信息以及最后更新的时间并制作pyecharts可视化地图
代码如下,结果如图所示:

from pyecharts import options as opts
from pyecharts.charts import Map
from pyecharts.commons.utils import JsCode
import osc=(Map()#主要方法,用于添加图表的数据和设置各种配置项.add(#这个参数必须有,必须写,哪怕你传递一个空字符串,也要写,因为不写这个参数,会报错series_name = "",## 数据项data_pair = testv,# mapType显示地图范围,为china,显示中国地图maptype = "china",#  去掉地图标识小红点is_map_symbol_show=False,#  是否显示标签label_opts =opts.LabelOpts(is_show = True),)#设置全局配置项.set_global_opts(title_opts = opts.TitleOpts(title="2020中国疫情地图",subtitle = "XinXinM"+"\n\n\n全国各省份确诊人数分布\n\n截至: "+lastUpdateTime,),visualmap_opts = opts.VisualMapOpts(# 是否为分段型is_piecewise=True,# 自定义的每一段的范围,以及每一段的文字,以及每一段的特别的样式pieces= [# 不指定 max,表示 max 为无限大(Infinity)。{"max": 0,"label":"0","color":"#ffffff"},{"min": 1, "max": 10,"color":"#ebb4a8"},{"min": 10, "max": 100,"color":"#e09694"},{"min": 100, "max": 500,"color":"#cb8382"},{"min": 500, "max": 1000,"color":"#b27372"},{"min": 1000, "color":"#976461"},],# 是否反转 visualMap 组件is_inverse=True,# visualMap 组件离容器右侧的距离pos_right='right',),tooltip_opts=opts.TooltipOpts(# 提示框浮层的背景颜色。background_color='white',# 提示框浮层的边框宽。border_width=1,# 文字样式配置项,参考 `series_options.TextStyleOpts`textstyle_opts=opts.TextStyleOpts(color='#00C791'),# 回调函数,回调函数格式:# (params: Object|Array) => string# 参数 params 是 formatter 需要的单个数据集。formatter=(JsCode("""function(params){return params.name + ' : ' + '<br/>'+ '现存确诊:'+params.data.value[3] + '<br/>'+ '累积确诊:'+params.data.value[0] + '<br/>'+ '死亡人数:'+params.data.value[1] + '<br/>'+ '治愈人数:'+params.data.value[2];}"""))))#   默认将会在根目录下生成一个 render.html 的文件,支持 path 参数,设置文件保存位置.render("China_2019-nCov_map.html"),)
#system函数可以将字符串转化成命令在服务器上运行,其会创建一个子进程在系统上执行命令行,子进程的执行结果无法影响主进程;
os.system("China_2019-nCov_map.html")






完整代码:

from fake_useragent import UserAgent
import requests
import json
from pyecharts import options as opts
from pyecharts.charts import Map
from pyecharts.commons.utils import JsCode
import os
class nCov_2019:#  伪造随机的User-Agentua = UserAgent()def __init__(self):#  伪造随机的User-Agentua = UserAgent()#  设置了一个headers,在构建request时传入,在请求时,就加入了headers传送,服务器若识别了是浏览器发来的请求,就会得到响应。self.headers = {#  伪造Chrome浏览器用户代理'User-Agent':ua.chrome}#  腾讯新闻网站疫情数据接口self.url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5'#  解析接口数据def parse_url(self):response = requests.get(self.url,headers=self.headers)# 将请求到的数据转化为字典类型list_json = json.loads(response.text)#  返回接口数据信息return list_jsondef getDateList(self,list_json):#将data数据类型str,转成dict类型 方便操作数据#  当字典中,有键值为True或则False这种bool类型时,使用eval会报错NameError: name 'false' is not definedglobal false,null,truefalse = null = true = ""jo = list_json['data']# 将jo字符串数据转换为dict类型方便数据操作data = eval(jo)return datadef main(self):list_json = self.parse_url()data = self.getDateList(list_json)return datanCov_2019 = nCov_2019()
data = nCov_2019.main()
#  数据最新更新时间
lastUpdateTime = data['lastUpdateTime']
#  地区
area = []
#  现存确诊
nowConfirm = []
#  累积确诊
confirm = []
#  死亡人数
dead = []
#  治愈人数
heal = []
for i in range(34):#  获取添加中国各个省份名称area.append(data['areaTree'][0]['children'][i]['name'])#  获取添加中国各个省份现存确诊人数nowConfirm.append(data['areaTree'][0]['children'][i]['total']['nowConfirm'])#  获取添加中国各个省份累积确诊人数confirm.append(data['areaTree'][0]['children'][i]['total']['confirm'])#  获取添加中国各个省份死亡人数dead.append(data['areaTree'][0]['children'][i]['total']['dead'])#  获取添加中国各个省份治愈人数heal.append(data['areaTree'][0]['children'][i]['total']['heal'])
#  将数据封装成[‘北京’,[325,923,9,589]]这样的形式方便于数据可视化
data_pair = []
for i in range(34):x = []#  添加该省的累积确诊人数x.append(confirm[i])#  添加该省的死亡人数x.append(dead[i])#  添加该省的治愈人数x.append(heal[i])#  添加该省的现存确诊人数x.append(nowConfirm[i])#  将中国各省疫情数据添加到data_pair数组里data_pair.append(x)testv = []for i in range(34):# 向中国各省与该省疫情数据匹配testMap = [area[i],data_pair[i]]#获取整理各个省份确诊人数的信息testv.append(testMap)c=(Map()#主要方法,用于添加图表的数据和设置各种配置项.add(#这个参数必须有,必须写,哪怕你传递一个空字符串,也要写,因为不写这个参数,会报错series_name = "",## 数据项data_pair = testv,# mapType显示地图范围,为china,显示中国地图maptype = "china",#  去掉地图标识小红点is_map_symbol_show=False,#  是否显示标签label_opts =opts.LabelOpts(is_show = True),)#设置全局配置项.set_global_opts(title_opts = opts.TitleOpts(title="2020中国疫情地图",subtitle = "XinXinM"+"\n\n\n全国各省份确诊人数分布\n\n截至: "+lastUpdateTime,),visualmap_opts = opts.VisualMapOpts(# 是否为分段型is_piecewise=True,# 自定义的每一段的范围,以及每一段的文字,以及每一段的特别的样式pieces= [# 不指定 max,表示 max 为无限大(Infinity)。{"max": 0,"label":"0","color":"#ffffff"},{"min": 1, "max": 10,"color":"#ebb4a8"},{"min": 10, "max": 100,"color":"#e09694"},{"min": 100, "max": 500,"color":"#cb8382"},{"min": 500, "max": 1000,"color":"#b27372"},{"min": 1000, "color":"#976461"},],# 是否反转 visualMap 组件is_inverse=True,# visualMap 组件离容器右侧的距离pos_right='right',),tooltip_opts=opts.TooltipOpts(# 提示框浮层的背景颜色。background_color='white',# 提示框浮层的边框宽。border_width=1,# 文字样式配置项,参考 `series_options.TextStyleOpts`textstyle_opts=opts.TextStyleOpts(color='#00C791'),# 回调函数,回调函数格式:# (params: Object|Array) => string# 参数 params 是 formatter 需要的单个数据集。formatter=(JsCode("""function(params){return params.name + ' : ' + '<br/>'+ '现存确诊:'+params.data.value[3] + '<br/>'+ '累积确诊:'+params.data.value[0] + '<br/>'+ '死亡人数:'+params.data.value[1] + '<br/>'+ '治愈人数:'+params.data.value[2];}"""))))#   默认将会在根目录下生成一个 render.html 的文件,支持 path 参数,设置文件保存位置.render("China_2019-nCov_map.html"),)
#system函数可以将字符串转化成命令在服务器上运行,其会创建一个子进程在系统上执行命令行,子进程的执行结果无法影响主进程;
os.system("China_2019-nCov_map.html")

生成的"China_2019-nCov_map.html"代码:

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>Awesome-pyecharts</title><script type="text/javascript" src="https://assets.pyecharts.org/assets/echarts.min.js"></script><script type="text/javascript" src="https://assets.pyecharts.org/assets/maps/china.js"></script></head>
<body><div id="486804f5cd794d05b9ce1fcdcef941b8" class="chart-container" style="width:900px; height:500px;"></div><script>var chart_486804f5cd794d05b9ce1fcdcef941b8 = echarts.init(document.getElementById('486804f5cd794d05b9ce1fcdcef941b8'), 'white', {renderer: 'canvas'});var option_486804f5cd794d05b9ce1fcdcef941b8 = {"animation": true,"animationThreshold": 2000,"animationDuration": 1000,"animationEasing": "cubicOut","animationDelay": 0,"animationDurationUpdate": 300,"animationEasingUpdate": "cubicOut","animationDelayUpdate": 0,"color": ["#c23531","#2f4554","#61a0a8","#d48265","#749f83","#ca8622","#bda29a","#6e7074","#546570","#c4ccd3","#f05b72","#ef5b9c","#f47920","#905a3d","#fab27b","#2a5caa","#444693","#726930","#b2d235","#6d8346","#ac6767","#1d953f","#6950a1","#918597"],"series": [{"type": "map","label": {"show": true,"position": "top","margin": 8},"mapType": "china","data": [{"name": "\u5317\u4eac","value": [928,9,595,324]},{"name": "\u9999\u6e2f","value": [1268,7,1156,105]},{"name": "\u4e0a\u6d77","value": [716,7,681,28]},{"name": "\u56db\u5ddd","value": [596,3,581,12]},{"name": "\u7518\u8083","value": [167,2,154,11]},{"name": "\u9655\u897f","value": [320,3,311,6]},{"name": "\u6cb3\u5317","value": [349,6,337,6]},{"name": "\u8fbd\u5b81","value": [156,2,150,4]},{"name": "\u5e7f\u4e1c","value": [1643,8,1631,4]},{"name": "\u53f0\u6e7e","value": [449,7,438,4]},{"name": "\u5929\u6d25","value": [199,3,194,2]},{"name": "\u91cd\u5e86","value": [582,6,574,2]},{"name": "\u798f\u5efa","value": [363,1,360,2]},{"name": "\u6fb3\u95e8","value": [46,0,45,1]},{"name": "\u6d59\u6c5f","value": [1269,1,1267,1]},{"name": "\u5185\u8499\u53e4","value": [239,1,237,1]},{"name": "\u4e91\u5357","value": [186,2,183,1]},{"name": "\u6c5f\u82cf","value": [654,0,653,1]},{"name": "\u9ed1\u9f99\u6c5f","value": [947,13,934,0]},{"name": "\u897f\u85cf","value": [1,0,1,0]},{"name": "\u5e7f\u897f","value": [254,2,252,0]},{"name": "\u65b0\u7586","value": [76,3,73,0]},{"name": "\u5409\u6797","value": [155,2,153,0]},{"name": "\u5c71\u897f","value": [198,0,198,0]},{"name": "\u6e56\u5317","value": [68135,4512,63623,0]},{"name": "\u6e56\u5357","value": [1019,4,1015,0]},{"name": "\u6cb3\u5357","value": [1276,22,1254,0]},{"name": "\u5b81\u590f","value": [75,0,75,0]},{"name": "\u8d35\u5dde","value": [147,2,145,0]},{"name": "\u6d77\u5357","value": [171,6,165,0]},{"name": "\u9752\u6d77","value": [18,0,18,0]},{"name": "\u5b89\u5fbd","value": [991,6,985,0]},{"name": "\u5c71\u4e1c","value": [792,7,785,0]},{"name": "\u6c5f\u897f","value": [932,1,931,0]}],"roam": true,"zoom": 1,"showLegendSymbol": false,"emphasis": {}}],"legend": [{"data": [""],"selected": {"": true},"show": true,"padding": 5,"itemGap": 10,"itemWidth": 25,"itemHeight": 14}],"tooltip": {"show": true,"trigger": "item","triggerOn": "mousemove|click","axisPointer": {"type": "line"},"formatter":                                                                                                                                                         function(params){                                                                                                                                                                        return params.name + ' : '                                                                                                 + '<br/>'                                                                                                + '\u73b0\u5b58\u786e\u8bca\uff1a'+params.data.value[3]                                                                                                 + '<br/>'                                                                                                + '\u7d2f\u79ef\u786e\u8bca\uff1a'+params.data.value[0]                                                                                                 + '<br/>'                                                                                                + '\u6b7b\u4ea1\u4eba\u6570\uff1a'+params.data.value[1]                                                                                                 + '<br/>'                                                                                                + '\u6cbb\u6108\u4eba\u6570\uff1a'+params.data.value[2];                                                                            }                                                                       ,"textStyle": {"color": "#00C791"},"backgroundColor": "white","borderWidth": 1},"title": [{"text": "2020\u4e2d\u56fd\u75ab\u60c5\u5730\u56fe","subtext": "XinXinM\n\n\n\u5168\u56fd\u5404\u7701\u4efd\u786e\u8bca\u4eba\u6570\u5206\u5e03\n\n\u622a\u81f3: 2020-07-05 19:41:18","padding": 5,"itemGap": 10}],"visualMap": {"show": true,"type": "piecewise","min": 0,"max": 100,"inRange": {"color": ["#50a3ba","#eac763","#d94e5d"]},"calculable": true,"inverse": true,"splitNumber": 5,"orient": "vertical","right": "right","showLabel": true,"itemWidth": 20,"itemHeight": 14,"borderWidth": 0,"pieces": [{"max": 0,"label": "0","color": "#ffffff"},{"min": 1,"max": 10,"color": "#ebb4a8"},{"min": 10,"max": 100,"color": "#e09694"},{"min": 100,"max": 500,"color": "#cb8382"},{"min": 500,"max": 1000,"color": "#b27372"},{"min": 1000,"color": "#976461"}]}
};chart_486804f5cd794d05b9ce1fcdcef941b8.setOption(option_486804f5cd794d05b9ce1fcdcef941b8);</script>
</body>
</html>

结果如图所示,爬取2019-nCoV确诊数据并制作pyecharts可视化地图与丁香园疫情图数据相符合:






可点击地图旁边的图例,点击颜色框框选择是否要在地图该区域范围渲染上颜色:




利用python爬取2019-nCoV确诊数据并制作pyecharts可视化地图相关推荐

  1. 利用python爬取58同城简历数据

    利用python爬取58同城简历数据 最近接到一个工作,需要获取58同城上面的简历信息(http://gz.58.com/qzyewu/).最开始想到是用python里面的scrapy框架制作爬虫.但 ...

  2. 利用python爬取58同城简历数据_利用python爬取58同城简历数据-Go语言中文社区

    利用python爬取58同城简历数据 最近接到一个工作,需要获取58同城上面的简历信息(http://gz.58.com/qzyewu/).最开始想到是用python里面的scrapy框架制作爬虫.但 ...

  3. python爬取b站数据_如果利用Python爬取B站上千万数据?B站直播都是大屌萌妹吗?...

    粉丝独白 说起热门的B站相信很多喜欢玩动漫的,看最有创意的Up主的同学一定非常熟悉.我突发奇想学Python这么久了,为啥不用Python爬取B站中我关注的人,已经关注的人他们关注的人,看看全站里面热 ...

  4. python获取币安k线数据_如何利用Python 爬取币乎的数据

    1LSGO软件技术团队 贡献人:李金原 如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习. If you like the content here, the gre ...

  5. 利用python爬取58同城简历数据_python爬虫程序 58同城二手交易信息爬取

    本脚本分为5部分: spider_main    主程序 url_manager    url管理器 html_downloader    网页下载器 html_parser    网页解析器 htm ...

  6. Python爬取微博热搜数据之炫酷可视化

    可视化展示 看完记得点个赞哟 微博炫酷可视化音乐组合版来了! 项目介绍 背景 现阶段,微博.抖音.快手.哗哩哗哩.微信公众号已经成为不少年轻人必备的"生活神器".在21世纪的今天, ...

  7. 【Python】手把手教你用Python爬取某网小说数据,并进行可视化分析

    网络文学是以互联网为展示平台和传播媒介,借助相关互联网手段来表现文学作品及含有一部分文字作品的网络技术产品,在当前成为一种新兴的文学现象,并快速兴起,各种网络小说也是层出不穷,今天我们使用seleni ...

  8. 利用python爬取_在知乎上利用Python爬取了三百万数据!服务器崩了!企业级大项目...

    请各位注意: 以下所有分析结果都基于我抓取到的这300万用户的个人信息,非权威分析,仅供参考. 数据抓取时间为2017年7月份,用户数据会随着时间推移而变化,所以该报告具有一定时效性. 知乎的用户个人 ...

  9. Python爬取京东任意商品数据实战总结

    利用Python爬取京东任意商品数据 今天给大家展示爬取京东商品数据 首先呢还是要分思路的,我分为以下几个步骤: 第一步:得到搜索指定商的url 第二步:获得搜索商品列表信息 第三步:对得到的商品数据 ...

最新文章

  1. 2020新款手机,吃鸡贼爽!包邮送一个!
  2. 但是如果你按照官网的说明进行输入:比如 [{0: 1, 1: 1}, {0: 1, 1: 5}, {0: 1, 1: 1}, {0: 1, 1: 1}]就会报错,经过实践,多分类希望给各个label不
  3. 适配器模式(为被封装对象提供不同的接口)
  4. html搞笑注释,9个最有趣的代码注释
  5. 查找mysql临时文件_SQL查询时生成的临时文件对数据库查询的影响
  6. android打开iso,安卓手机端如何运行iso镜像文件
  7. chrome浏览器美化插件:让您的浏览器页面冒水泡, 游小鱼儿
  8. 银行利率bps是什么意思,贷款利率bps是什么意思
  9. Android中仿微信选择图片并展示在RecyclerView中
  10. 使用ThreeJs搭建BIM模型浏览器,超大模型的分时渲染
  11. 对y_pred强制二分类
  12. nginx之root alias proxy_pass测试
  13. Python办公自动化Excel
  14. veket linux能运行qq么,【veket系统】Veket Linux系统下载 v8.07 官方正式版-开心电玩...
  15. 如何查看linux系统的状态,如何查看Linux和Mac机器的系统状态
  16. 各行各业利润大曝光!电脑、服装、房子、奶茶等等利润大曝光,快进来瞧瞧吧~
  17. 2020-10-05
  18. 网络协议 14 - 流媒体协议
  19. ESXi最新补丁升级步骤
  20. 图解 K8S(06):调度利器之污点与容忍度(压力驱逐)

热门文章

  1. 神经网络模型应用实例,神经网络模型数学建模
  2. java架构师培训:java最佳测试框架JBehave的基本介绍
  3. w10运行游戏计算机中丢失xinput1-3.dll,解决win10运行绝地求生吃鸡提示缺少xinput1_3.dll文件的方法...
  4. win10升级工具_Win7进入死亡倒计时!最后一次机会免费升级至win10,你抓住了吗?...
  5. 计算机全息图的制作与在线,计算机全息图
  6. “互联网汽车”又添新成员,上汽斯柯达接入斑马智行互联系统
  7. 如何使用智能默认值来减少认知负担
  8. 网页自动提交Form表单的方法
  9. 芯片是如何制造的 芯片制造过程全景展示
  10. 操作系统(第三章)——思维导图总结