使用Python爬取腾讯新闻疫情数据及可视化分析 您所在的位置:网站首页 考研电脑阅卷选择题会出错吗怎么办 使用Python爬取腾讯新闻疫情数据及可视化分析

使用Python爬取腾讯新闻疫情数据及可视化分析

2023-07-23 16:05| 来源: 网络整理| 查看: 265

使用Python爬取腾讯新闻疫情数据,并使用pyecharts可视化分析

一、选题背景

疫情从2020年开始到现在,一直都是最受人瞩目的事件之一。其上面的数据也是我们最为关注的因素,也是反映最直观的数据,也是最能够反映疫情的状况的方面。近期,国内的疫情又出现了反弹,腾讯新闻网站上的新冠疫情疫情实时追踪上的数据,也日益在更新,在本土现有确诊、现有确诊、累计确诊、无症状感染者、境外输入,都有在实时更新,所以选取这些数据,进行可视化分析,让网页上数据更加清晰明了,也让新冠疫情的局势更加一目了然。

二、主题式网络爬虫设计方案

1.主题式网络爬虫名称

·使用Python爬取腾讯新闻疫情数据

2.主题式网络爬虫爬取的内容与数据特征分析

·所要爬取数据的网址:https://news.qq.com/zt2020/page/feiyan.htm#/

·对于静态网页,我们只需要把网页地址栏中的url传到get请求中就可以轻松地获取到网页的数据。

  以浙江的数据界面为例,根据源代码筐显示,所需要的网址和所需要的数据集都均有体现,我们所要用的网址有了,就可以进行数据爬取。

 

3.主题式网络爬虫设计方案概述

(1)首先进行模块导入,将数据爬取所需要的模块进行导入,方便进行数据爬取

  ·源码:

 

1 import time 2 import json 3 import requests 4 from datetime import datetime 5 import pandas as pd 6 import numpy as np

 

(2)抓取数据,将数据从对应的网址中抓取出来,利用get()语句将数据从网址中提取出来

     ·源码:

1 def Domestic(): 2 url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5' 3 reponse = requests.get(url=url).json() 4 data = json.loads(reponse['data']) 5 return data 6 domestic = Domestic()

(3)将提取的数据导入excel中,方便后面的数据分析及数据可视化,即图像的生成及分析

      ·源码:

1 areaTree = domestic['areaTree'] 2 china_data = areaTree[0]['children'] 3 china_list = [] 4 list_province=[] #柱状图 5 list_nowConfirm=[] #柱状图 6 list_conrirm=[] #累计确证 7 for a in range(len(china_data)): 8 province = china_data[a]['name'] 9 confirm = china_data[a]['total']['confirm'] 10 heal = china_data[a]['total']['heal'] 11 dead = china_data[a]['total']['dead'] 12 nowConfirm = confirm - heal - dead 13 china_dict = {} 14 china_dict['province'] = province 15 china_dict['nowConfirm'] = nowConfirm 16 china_dict['confirm']=confirm 17 china_list.append(china_dict) 18 list_province.append(province) 19 list_nowConfirm.append(nowConfirm) 20 list_conrirm.append(confirm) 21 china_data = pd.DataFrame(china_list) 22 china_data.to_excel('疫情数据.xlsx',index=False) #存储为EXCEL文件 23 china_data.head()

程序运行结果,输出前五行代码进行检验,将下面两图之间的数据进行比对,检查所生成的数据有误与否,经过检验无误,说明数据导出及数据存储成功。

 

 

三、数据可视化分析 

1.pyecharts介绍:

(1)简介:

本次的程序设计采用的是pyecharts可视化,用pyecharts组件技术以各类图表形式(柱状图、折线图、饼图)实现数据可视化模块的展示。pyecharts 是一个用于生成 Echarts 图表的类库。实际上就是 Echarts 与 Python 的对接。Echarts 是百度开源的一个数据可视化JS 库。

(2)优点:

可以很方便的对全世界各国进行地域图表绘制,同时可以在线导入数据和色板设置,让数据更加的直观且生动

2.将excel中的数据提取并进行分析

(1)绘制国内各地区现有确诊人数地图

       ·源码:

1 #绘制国内各地区现有确诊人数地图 2 3 import pyecharts.options as opts 4 from pyecharts.charts import Map 5 from pyecharts.globals import CurrentConfig, NotebookType 6 CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_LAB 7 m = Map() 8 m.add("", [ 9 list(z) 10 for z in zip(list(china_data["province"]), list(china_data["nowConfirm"])) 11 ], 12 maptype="china", 13 is_map_symbol_show=False) 14 m.set_global_opts( 15 title_opts=opts.TitleOpts(title="COVID-19中国现有地区现有确诊人数地图"), 16 visualmap_opts=opts.VisualMapOpts( 17 is_piecewise=True, 18 pieces=[ 19 { 20 "min": 5000, 21 "label": '>5000', 22 "color": "#893448" 23 }, # 不指定 max,表示 max 为无限大 24 { 25 "min": 1000, 26 "max": 4999, 27 "label": '1000-4999', 28 "color": "#ff585e" 29 }, 30 { 31 "min": 500, 32 "max": 999, 33 "label": '500-1000', 34 "color": "#fb8146" 35 }, 36 { 37 "min": 101, 38 "max": 499, 39 "label": '101-499', 40 "color": "#ffA500" 41 }, 42 { 43 "min": 10, 44 "max": 100, 45 "label": '10-100', 46 "color": "#ffb248" 47 }, 48 { 49 "min": 1, 50 "max": 9, 51 "label": '1-9', 52 "color": "#fff2d1" 53 }, 54 { 55 "max": 1, 56 "label": '0', 57 "color": "#ffffff" 58 } 59 ])) 60 61 m.render("地图.html") 62 m.render_notebook()

此方法最难的点在于,将图标在jupyter notebook上显示,需要导入很多模块,最终在网络资源汇总上,解决了这个问题。还有一个点是,将对应数据形成图表。

·程序运行结果:国内各地区确诊人数地图

数据分析:根据图像可知,现在疫情较为严重的地区在陕西、浙江、台湾,属于中风险的地区为内蒙古、山东、四川、云南、广西、广东、福建、湖南、河南、天津、北京;低风险地区有安徽、江苏、海南、甘肃、黑龙江、吉林、辽宁;其余地区现阶段还未出现有确诊病例。

(2)绘制国内各地区现有确诊人数柱状图

柱状图能够反映一组数据的最大值,最小值,以及数据大小之间的对比,能够直观的反应出确诊人数的分布情况。

       · 源码:

1 #国内各地区现有确诊人数柱状图 2 from pyecharts import options as opts 3 from pyecharts.charts import Bar 4 bar = ( 5 Bar() 6 .add_xaxis(list_province) 7 .add_yaxis("柱状图", list_nowConfirm) 8 .set_global_opts( 9 title_opts=opts.TitleOpts(title="COVID-19中国现有地区现有确诊人数柱状图"), 10 yaxis_opts=opts.AxisOpts(name="现有确证病例"), 11 xaxis_opts=opts.AxisOpts(name="地区"), 12 datazoom_opts=opts.DataZoomOpts(type_="slider") 13 ) 14 ) 15 bar.render("柱状图.html") 16 bar.render_notebook()

程序运行结果:

数据分析:从图标中可以看出,台湾的确诊人数是最多的,达到2339个,陕西、浙江的确诊人数居后,结合上一个国内确诊地图,将两个图像结合考虑,能够更直观的反映现阶段国内的疫情。

(3)绘制国内各地区现有确诊人数折线图

折线图,能够直观的反映数据的走向,也能够对数据之后的发展趋势进行分析

      ·源码:

1 #国内各地区现有确诊人数折线图 2 import pyecharts.options as opts 3 from pyecharts.charts import Line 4 line=( 5 Line() 6 .add_xaxis(xaxis_data=list_province) 7 .add_yaxis( 8 series_name="折线图", 9 y_axis=list_nowConfirm, 10 is_connect_nones=True 11 ) 12 .set_global_opts(title_opts=opts.TitleOpts(title="COVID-19中国现有地区现有确诊人数折线图"), 13 yaxis_opts=opts.AxisOpts(name="现有确证病例"), 14 xaxis_opts=opts.AxisOpts(name="地区"), 15 datazoom_opts=opts.DataZoomOpts(type_="slider") 16 ) 17 ) 18 line.render("折线图.html") 19 line.render_notebook()

·程序运行结果展示:

 

 

 

 

 

 ·数据分析:从图表中可以得出,台湾的疫情是最严重的,这组数据呈现的结果跟柱状图的相类似。

 

(4)绘制国内各地区累计确诊人数地图

       ·源码:

1 #国内各地区累计确诊人数地图 2 import pyecharts.options as opts 3 from pyecharts.charts import Map 4 from pyecharts.globals import CurrentConfig, NotebookType 5 CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_LAB 6 m1 = Map() 7 m1.add("", [ 8 list(z) 9 for z in zip(list(china_data["province"]), list(china_data["confirm"])) 10 ], 11 maptype="china", 12 is_map_symbol_show=False) 13 m1.set_global_opts( 14 title_opts=opts.TitleOpts(title="COVID-19中国现有地区累计确诊人数地图"), 15 visualmap_opts=opts.VisualMapOpts( 16 is_piecewise=True, 17 pieces=[ 18 { 19 "min": 5000, 20 "label": '>5000', 21 "color": "#893448" 22 }, # 不指定 max,表示 max 为无限大 23 { 24 "min": 1000, 25 "max": 4999, 26 "label": '1000-4999', 27 "color": "#ff585e" 28 }, 29 { 30 "min": 500, 31 "max": 999, 32 "label": '500-1000', 33 "color": "#fb8146" 34 }, 35 { 36 "min": 101, 37 "max": 499, 38 "label": '101-499', 39 "color": "#ffA500" 40 }, 41 { 42 "min": 10, 43 "max": 100, 44 "label": '10-100', 45 "color": "#ffb248" 46 }, 47 { 48 "min": 1, 49 "max": 9, 50 "label": '1-9', 51 "color": "#fff2d1" 52 }, 53 { 54 "max": 1, 55 "label": '0', 56 "color": "#ffffff" 57 } 58 ])) 59 m1.render("地图1.html") 60 m1.render_notebook()

·程序运行结果展示:

 

数据分析:从图像可知,颜色的深浅层度放映了确诊人数的多少,颜色越深,累计确诊人数越多。从图像可知台湾的累计确诊数量最多,湖北比台湾少些。

(5)绘制国内各地区累计确诊人数柱状图

       ·源码

1 #国内各地区累计确诊人数柱状图 2 from pyecharts import options as opts 3 from pyecharts.charts import Bar 4 bar = ( 5 Bar() 6 .add_xaxis(list_province) 7 .add_yaxis("累计确诊柱状图", list_conrirm) 8 .set_global_opts( 9 title_opts=opts.TitleOpts(title="COVID-19中国现有地区累计确诊人数树状图"), 10 yaxis_opts=opts.AxisOpts(name="累计确诊病例"), 11 xaxis_opts=opts.AxisOpts(name="地区"), 12 datazoom_opts=opts.DataZoomOpts(type_="slider") 13 ) 14 ) 15 bar.render("累计确诊柱状图.html") 16 bear.render_notebook()

·程序运行结果展示:

 

 

 

 

· 数据分析:在这图表中显示,香港累计确诊的人数,比台湾少点,但比湖北还要多,这在地图上并不能很明显的放映,所以柱形图数据的清晰度要比地图来的高。

(6)绘制国内各地区累计确诊人数折线图

      ·源码:

1 #国内各地区累计确诊人数折线图 2 import pyecharts.options as opts 3 from pyecharts.charts import Line 4 line=( 5 Line() 6 .add_xaxis(xaxis_data=list_province) 7 .add_yaxis( 8 series_name="累计确诊折线图", 9 y_axis=list_conrirm, 10 is_connect_nones=True 11 ) 12 .set_global_opts(title_opts=opts.TitleOpts(title="COVID-19中国地区累计现有确诊人数折线图"), 13 yaxis_opts=opts.AxisOpts(name="累计确诊病例"), 14 xaxis_opts=opts.AxisOpts(name="地区"), 15 datazoom_opts=opts.DataZoomOpts(type_="slider") 16 ) 17 ) 18 line.render("累计确诊折线图.html") 19 line.render_notebook()

·程序运行结果展示:

 

 

 

 ·数据分析:折线图的美观程度要比柱状图来的美观,数据的凸显度和柱状图差不多。

 

3.数据的持久性:

程序采用了将数据爬取后,进行了excel文件的存储,保证了数据的持久性,且每次提取都会将excel文件中的数据更新,保证了数据的及时更新性,且保存数据有利于为这个时间点爬取的数据分析,预留时间,也可以将其每次爬取的数据进行存储,方便日后数据的对比。

4.以上就是本次课程设计,完整代码如下:

1 #导入库 2 from pyecharts.charts import Bar 3 from pyecharts import options as opts 4 from pyecharts.render import make_snapshot 5 from pyecharts.faker import Collector, Faker 6 #导入模块 7 import time 8 import json 9 import requests 10 from datetime import datetime 11 import pandas as pd 12 import numpy as np 13 14 #抓取数据 15 def Domestic(): 16 url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5' 17 reponse = requests.get(url=url).json() 18 data = json.loads(reponse['data']) 19 return data 20 domestic = Domestic() 21 22 #提取数据并写入excel 23 areaTree = domestic['areaTree'] 24 china_data = areaTree[0]['children'] 25 china_list = [] 26 list_province=[] #柱状图 27 list_nowConfirm=[] #柱状图 28 list_conrirm=[] #累计确证 29 for a in range(len(china_data)): 30 province = china_data[a]['name'] 31 confirm = china_data[a]['total']['confirm'] 32 heal = china_data[a]['total']['heal'] 33 dead = china_data[a]['total']['dead'] 34 nowConfirm = confirm - heal - dead 35 china_dict = {} 36 china_dict['province'] = province 37 china_dict['nowConfirm'] = nowConfirm 38 china_dict['confirm']=confirm 39 china_list.append(china_dict) 40 list_province.append(province) 41 list_nowConfirm.append(nowConfirm) 42 list_conrirm.append(confirm) 43 china_data = pd.DataFrame(china_list) 44 china_data.to_excel('疫情数据.xlsx',index=False) #存储为EXCEL文件 45 china_data.head()#生成前五个数据 46 47 #使用pyecharts可视化 48 49 #绘制国内各地区现有确诊人数地图 50 51 import pyecharts.options as opts 52 from pyecharts.charts import Map 53 from pyecharts.globals import CurrentConfig, NotebookType 54 CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_LAB 55 m = Map() 56 m.add("", [ 57 list(z) 58 for z in zip(list(china_data["province"]), list(china_data["nowConfirm"])) 59 ], 60 maptype="china", 61 is_map_symbol_show=False) 62 m.set_global_opts( 63 title_opts=opts.TitleOpts(title="COVID-19中国现有地区现有确诊人数地图"), 64 visualmap_opts=opts.VisualMapOpts( 65 is_piecewise=True, 66 pieces=[ 67 { 68 "min": 5000, 69 "label": '>5000', 70 "color": "#893448" 71 }, # 不指定 max,表示 max 为无限大 72 { 73 "min": 1000, 74 "max": 4999, 75 "label": '1000-4999', 76 "color": "#ff585e" 77 }, 78 { 79 "min": 500, 80 "max": 999, 81 "label": '500-1000', 82 "color": "#fb8146" 83 }, 84 { 85 "min": 101, 86 "max": 499, 87 "label": '101-499', 88 "color": "#ffA500" 89 }, 90 { 91 "min": 10, 92 "max": 100, 93 "label": '10-100', 94 "color": "#ffb248" 95 }, 96 { 97 "min": 1, 98 "max": 9, 99 "label": '1-9', 100 "color": "#fff2d1" 101 }, 102 { 103 "max": 1, 104 "label": '0', 105 "color": "#ffffff" 106 } 107 ])) 108 109 m.render("地图.html") 110 m.render_notebook() 111 112 #国内各地区现有确诊人数柱状图 113 from pyecharts import options as opts 114 from pyecharts.charts import Bar 115 bar = ( 116 Bar() 117 .add_xaxis(list_province) 118 .add_yaxis("柱状图", list_nowConfirm) 119 .set_global_opts( 120 title_opts=opts.TitleOpts(title="COVID-19中国现有地区现有确诊人数柱状图"), 121 yaxis_opts=opts.AxisOpts(name="现有确证病例"), 122 xaxis_opts=opts.AxisOpts(name="地区"), 123 datazoom_opts=opts.DataZoomOpts(type_="slider") 124 ) 125 ) 126 bar.render("柱状图.html") 127 bar.render_notebook() 128 129 #国内各地区现有确诊人数折线图 130 import pyecharts.options as opts 131 from pyecharts.charts import Line 132 line=( 133 Line() 134 .add_xaxis(xaxis_data=list_province) 135 .add_yaxis( 136 series_name="折线图", 137 y_axis=list_nowConfirm, 138 is_connect_nones=True 139 ) 140 .set_global_opts(title_opts=opts.TitleOpts(title="COVID-19中国现有地区现有确诊人数折线图"), 141 yaxis_opts=opts.AxisOpts(name="现有确证病例"), 142 xaxis_opts=opts.AxisOpts(name="地区"), 143 datazoom_opts=opts.DataZoomOpts(type_="slider") 144 ) 145 ) 146 line.render("折线图.html") 147 line.render_notebook() 148 149 #国内各地区累计确诊人数地图 150 import pyecharts.options as opts 151 from pyecharts.charts import Map 152 from pyecharts.globals import CurrentConfig, NotebookType 153 CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_LAB 154 m1 = Map() 155 m1.add("", [ 156 list(z) 157 for z in zip(list(china_data["province"]), list(china_data["confirm"])) 158 ], 159 maptype="china", 160 is_map_symbol_show=False) 161 m1.set_global_opts( 162 title_opts=opts.TitleOpts(title="COVID-19中国现有地区累计确诊人数地图"), 163 visualmap_opts=opts.VisualMapOpts( 164 is_piecewise=True, 165 pieces=[ 166 { 167 "min": 5000, 168 "label": '>5000', 169 "color": "#893448" 170 }, # 不指定 max,表示 max 为无限大 171 { 172 "min": 1000, 173 "max": 4999, 174 "label": '1000-4999', 175 "color": "#ff585e" 176 }, 177 { 178 "min": 500, 179 "max": 999, 180 "label": '500-1000', 181 "color": "#fb8146" 182 }, 183 { 184 "min": 101, 185 "max": 499, 186 "label": '101-499', 187 "color": "#ffA500" 188 }, 189 { 190 "min": 10, 191 "max": 100, 192 "label": '10-100', 193 "color": "#ffb248" 194 }, 195 { 196 "min": 1, 197 "max": 9, 198 "label": '1-9', 199 "color": "#fff2d1" 200 }, 201 { 202 "max": 1, 203 "label": '0', 204 "color": "#ffffff" 205 } 206 ])) 207 m1.render("地图1.html") 208 m1.render_notebook() 209 210 #国内各地区累计确诊人数柱状图 211 from pyecharts import options as opts 212 from pyecharts.charts import Bar 213 bar = ( 214 Bar() 215 .add_xaxis(list_province) 216 .add_yaxis("累计确诊柱状图", list_conrirm) 217 .set_global_opts( 218 title_opts=opts.TitleOpts(title="COVID-19中国现有地区累计确诊人数树状图"), 219 yaxis_opts=opts.AxisOpts(name="累计确诊病例"), 220 xaxis_opts=opts.AxisOpts(name="地区"), 221 datazoom_opts=opts.DataZoomOpts(type_="slider") 222 ) 223 ) 224 bar.render("累计确诊柱状图.html") 225 bear.render_notebook() 226 227 #国内各地区累计确诊人数折线图 228 import pyecharts.options as opts 229 from pyecharts.charts import Line 230 line=( 231 Line() 232 .add_xaxis(xaxis_data=list_province) 233 .add_yaxis( 234 series_name="累计确诊折线图", 235 y_axis=list_conrirm, 236 is_connect_nones=True 237 ) 238 .set_global_opts(title_opts=opts.TitleOpts(title="COVID-19中国地区累计现有确诊人数折线图"), 239 yaxis_opts=opts.AxisOpts(name="累计确诊病例"), 240 xaxis_opts=opts.AxisOpts(name="地区"), 241 datazoom_opts=opts.DataZoomOpts(type_="slider") 242 ) 243 ) 244 line.render("累计确诊折线图.html") 245 line.render_notebook()

四、总结:

1.预期与结果

(1)本次课程设计较好的完成了预期的目标,成功的将所需的数据集爬取出来,并进行了excel文件的生成,保证了数据保存和数据分析的准确性;

(2)利用了pyecharts进行数据可视化分析,使得数据能够更直观,更明了的展示,这也给数据分析提供了便利,也让数据分析更加准确。

2.不足之处:

(1)在进行利用pyecharts进行可视化分析的时候,有许多知识点和语句都是含糊不清,为了让数据更加的清晰,花费了过多的时间;

(2)在于jupyter notebook上图标的显示上也花费了不少的时间,需要将其需要的库进行下载安装,也花费了不少的时间;

3.收获:

通过这次的课程设计,对于pyecharts的数据分析更加的熟练,但还是需要改进,也懂得了如何在pyecharts可视化分析的时候,需要什么库,要怎么样才能在jupyter notebook上显示图表。

 

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有