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

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

利用python爬取2019-nCoV确诊数据并制作pyecharts可视化地图_第3张图片
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	

利用python爬取2019-nCoV确诊数据并制作pyecharts可视化地图_第4张图片
5.获取疫情数据里的’data‘数据,
代码如下,结果如图所示:

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

利用python爬取2019-nCoV确诊数据并制作pyecharts可视化地图_第5张图片
6.将获取到的’data‘字符串数据转换成字典类型,方便数据操作;

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

data = eval(jo)
data 

利用python爬取2019-nCoV确诊数据并制作pyecharts可视化地图_第6张图片
7.获取数据如下图所示利用python爬取2019-nCoV确诊数据并制作pyecharts可视化地图_第7张图片
8.获取各个省份确诊人数的信息利用python爬取2019-nCoV确诊数据并制作pyecharts可视化地图_第8张图片
9.疫情数据从四个维度进行可视化展示:累积确诊人数、现存确诊人数、治愈人数、死亡人数。
图中为北京疫情数据:
累积确诊人数(confirm)、
现存确诊人数(nowConfirm)、
治愈人数(heal)、
死亡人数(dead);
利用python爬取2019-nCoV确诊数据并制作pyecharts可视化地图_第9张图片
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'])

利用python爬取2019-nCoV确诊数据并制作pyecharts可视化地图_第10张图片
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

利用python爬取2019-nCoV确诊数据并制作pyecharts可视化地图_第11张图片
利用python爬取2019-nCoV确诊数据并制作pyecharts可视化地图_第12张图片
利用python爬取2019-nCoV确诊数据并制作pyecharts可视化地图_第13张图片
利用python爬取2019-nCoV确诊数据并制作pyecharts可视化地图_第14张图片
12(桥黑板!!!重点!)
画图:获取各个省份确诊人数的信息以及最后更新的时间并制作pyecharts可视化地图
代码如下,结果如图所示:

from pyecharts import options as opts
from pyecharts.charts import Map
from pyecharts.commons.utils import JsCode
import os


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 + ' : ' 
                                                                                                + '
' + '现存确诊:'+params.data.value[3] + '
' + '累积确诊:'+params.data.value[0] + '
' + '死亡人数:'+params.data.value[1] + '
' + '治愈人数:'+params.data.value[2]; } """ ) ) ) ) # 默认将会在根目录下生成一个 render.html 的文件,支持 path 参数,设置文件保存位置 .render("China_2019-nCov_map.html"), ) #system函数可以将字符串转化成命令在服务器上运行,其会创建一个子进程在系统上执行命令行,子进程的执行结果无法影响主进程; os.system("China_2019-nCov_map.html")

利用python爬取2019-nCoV确诊数据并制作pyecharts可视化地图_第15张图片
利用python爬取2019-nCoV确诊数据并制作pyecharts可视化地图_第16张图片
利用python爬取2019-nCoV确诊数据并制作pyecharts可视化地图_第17张图片
利用python爬取2019-nCoV确诊数据并制作pyecharts可视化地图_第18张图片
利用python爬取2019-nCoV确诊数据并制作pyecharts可视化地图_第19张图片
完整代码:

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-Agent
    ua = UserAgent()
    def __init__(self):
        #  伪造随机的User-Agent
        ua = 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_json

    def getDateList(self,list_json):
        #将data数据类型str,转成dict类型 方便操作数据
        #  当字典中,有键值为True或则False这种bool类型时,使用eval会报错NameError: name 'false' is not defined
        global false,null,true
        false = null = true = ""
        jo = list_json['data']
        # 将jo字符串数据转换为dict类型方便数据操作
        data = eval(jo)
        return data

    def main(self):
        list_json = self.parse_url()
        data = self.getDateList(list_json)
        return data

nCov_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 + ' : ' 
                                                                                                + '
' + '现存确诊:'+params.data.value[3] + '
' + '累积确诊:'+params.data.value[0] + '
' + '死亡人数:'+params.data.value[1] + '
' + '治愈人数:'+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"代码:




    
    Awesome-pyecharts
            
        



    

结果如图所示,爬取2019-nCoV确诊数据并制作pyecharts可视化地图与丁香园疫情图数据相符合:
利用python爬取2019-nCoV确诊数据并制作pyecharts可视化地图_第20张图片
利用python爬取2019-nCoV确诊数据并制作pyecharts可视化地图_第21张图片

利用python爬取2019-nCoV确诊数据并制作pyecharts可视化地图_第22张图片
利用python爬取2019-nCoV确诊数据并制作pyecharts可视化地图_第23张图片
利用python爬取2019-nCoV确诊数据并制作pyecharts可视化地图_第24张图片

利用python爬取2019-nCoV确诊数据并制作pyecharts可视化地图_第25张图片
利用python爬取2019-nCoV确诊数据并制作pyecharts可视化地图_第26张图片
利用python爬取2019-nCoV确诊数据并制作pyecharts可视化地图_第27张图片
可点击地图旁边的图例,点击颜色框框选择是否要在地图该区域范围渲染上颜色:

利用python爬取2019-nCoV确诊数据并制作pyecharts可视化地图_第28张图片

利用python爬取2019-nCoV确诊数据并制作pyecharts可视化地图_第29张图片
利用python爬取2019-nCoV确诊数据并制作pyecharts可视化地图_第30张图片
利用python爬取2019-nCoV确诊数据并制作pyecharts可视化地图_第31张图片
利用python爬取2019-nCoV确诊数据并制作pyecharts可视化地图_第32张图片

你可能感兴趣的:(利用python爬取2019-nCoV确诊数据并制作pyecharts可视化地图)