定制网站利用网络爬虫获取了最定制网站新的世界以及中国的疫情数据,定制网站实现新冠病毒疫情地图。
1.库的准备
定制网站在这里先将pycharm定制网站编辑器配置好Anaconda,定制网站这样就可以满足大部分定制网站的库的使用了。
定制网站但是我们将用到的pyecharts定制网站库还是需要自己下载的。
定制网站在准备用爬虫进行最新定制网站疫情数据的呈现后,了解了、seaborn、plotly定制网站这几个绘图工具,决定使用pyecharts。
Echarts定制网站是一个由百度开源的数定制网站据可视化工具,定制网站凭借着良好的交互性,定制网站精巧的图表设计,定制网站得到了众多开发者的认可。而python定制网站是一门富有表达力的语言,定制网站很适合用于数据处理。定制网站当数据分析遇上了数据可视化时,pyecharts诞生了。
pyecharts的下载
2.获取数据
打开Chrome定制网站在网页右击选择“检查”,点开network,刷新页面,定制网站点击各个请求,定制网站找到数据所在url,并复制,再进过#post定制网站方式请求语句response =requests.post(url=url)。定制网站得到的就是直接获得requests的post定制网站请求的数据。
其中URL是Internet定制网站上描述信息资源的字符串,定制网站主要用在各种WWW定制网站客户程序和服务器程序上。采用URL定制网站可以用一种统一的格式定制网站来描述各种信息资源,包括文件、定制网站服务器的地址和目录等。url:定制网站统一资源定位符。主要作用:定制网站用来定位互联网上的任定制网站意资源的位置。
定制网站可以看到效果,定制网站获取到了我们想要的首页数据,定制网站如果我们查看这个网页的源码,定制网站就可以更加清楚的认知见图7,定制网站可以看到此时不同国家的数据内容,我们获取的内容和网页源码的联系,其实就是网页源码的内容。
现在得到了内容,下一步就是准备对数据的处理,筛选出我们需要的内容。
3.代码块的解释
向url发送请求爬虫代码块1
这是两种方法的使得到的post请求变成json格式。
地图语句代码块2
在两个代码中实现地图绘制的语句。这一步虽说是制作地图,其实不然,地图的制作早就被pyecharts的开发人员给做好了,我只需要调用它即可,然后再给它附上数据,这就成为了这功能独有的地图。
存储数据代码块3
数据处理部分,zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。要使用list解包print(list(data_list)),储存数据。
视觉映射配置项代码块4
都是用visualmap_opts进行视觉映射配置项,包括指定 visualMapPiecewise 组件的最小值,是否显示视觉映射配置,内边距等等作用。
关于Echarts中visualMap组件详解:
视觉映射组件,用于进行『视觉编码』,也就是将数据映射到视觉元素。视觉元素可以是:symbol: 图元的图形类别。symbolSize: 图元的大小。color: 图元的颜色。
4.运行效果
会出现下图这样的网页
点开这个网页如下图在右上角选择适当的浏览器打开,就会得到爬虫的地图。
截止我写这篇文章是爬虫的时间为最新的数据(左上角表明爬取数据的时间为2022.10.27)
鼠标滑到任意一个省份会有该省份的确诊数据。
5.总结(大家写报告的时候可以自取)
在进行疫情的处理中,一开始在网上看相关的资料还是觉得一头雾水,通过老师的细致讲解以及老师给我们的学习资料的学习,我受益匪浅。
Python是一款强大的编程语言,它包含很多第三方库,只要你自己掌握了python的基本语法规则,了解了一些特定的算法,你也可以制作出属于自己的第三方库供自己和别人使用。熟练运用第三方库会给你的编程带来极大的便利。Python应用广泛,例如数据分析与展示、网络爬虫与信息提取、机器学习应用、科学计算三维可视化、云端系统开发与游戏开发等等,这次的上机我们学习的就是基于python语言的数据分析与展示。
我首先了解了Python、Pycharm、Anaconda 三者之间的关系,进而学习了Anaconda和pycharm的安装和使用。Anaconda指的是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项,是一款强大的python编程工具,而PyCharm是一种常用的Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制。使用起来十分的方便快捷。
脱离课本开始自己写代码,才真正深有感触:学如逆水行舟,不进则退。学习编程不能停留在眼过,更要与脑过和手过相结合,多敲多思考。在这数据可视化学习过程中,发现了许多问题,在敲代码时不够细心,有很多细节上的错误,比如对齐有问题,字母拼写错误,符号的错误等等,都是源自我的不细心以及不熟练。在这个方法的学习中我更加了解了地图绘制的原理,从地图的形状,区域的颜色,地图的大小,以及数据如何读取每一步都有了清楚的认识。对python的可视化也有了更深得认识的认识,尤其的python中第三方库的使用。
在爬虫的学习上也是花费了较长的时间,学习了爬虫的原理以及基本步骤。
首先便是理解URL概念,它是Uniform Resource Locator的缩写,译为“统一资源定位符”。通俗地说,URL是Internet上描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上。采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。url:统一资源定位符。主要作用:用来定位互联网上的任意资源的位置。
而数据的抓取过程可以简单的理解为平时使用IE浏览器浏览网页的道理是一样的。比如在浏览器的地址栏中输www.baidu.com这个地址。打开网页的过程其实就是浏览器作为一个浏览的“客户端”,向服务器端发送了一次请求,把服务器端的文件“抓”到本地,再进行解释、展现。HTML是一种标记语言,用标签标记内容并加以解析和区分。浏览器的功能是将获取到的HTML代码进行解析,然后将原始的代码转变成我们直接看到的网站页面。
我们感兴趣的信息分为不同的类型:如果只是做搜索引擎,那么感兴趣的信息就是互联网中尽可能多的高质量网页;如果要获取某一垂直领域的数据或者有明确的检索需求,那么感兴趣的信息就是根据我们的检索和需求所定位的这些信息,此时,需要过滤掉一些无用信息。前者我们称为通用网络爬虫,后者我们称为聚焦网络爬虫。
在图形的绘制工具的选择上我使用的是pyecharts,在两个代码中实现地图绘制的语句。制作地图在制作地图这一步上与方法一相比简单,地图的制作早就被pyecharts的开发人员给做好了,我只需要调用它即可,然后再给它附上数据,这就成为了这功能独有的地图。
数据可视化是将数据用图形化的方式来表示,可以帮助人们迅速明白某些数据的重要性、理解数据的背后含义。数据可视化通常是理解和交流分析的第一步,因为当数据以图形方式而非数字方式呈现时,人们更善于理解数据。比如这次报告中的通过疫情可视化绘制出地图,获得到到更加直观以及快速得到以及想要的内容。数据的收集以及可视化通过交互式(可点击)数据可视化,向下钻取以探索细节,识别模式和异常值,是对数据进行可视化处理,以使得能够明确地、有效地传递信息。我感觉到对数据进行可视化是一件很有意义的事情,借助计算机获得直观的有效的快速的展现,将会给人类的各行各业带来极大的便利。
6.源代码
- from pyecharts import options as opts
- from pyecharts.charts import Map
- from pyecharts.faker import Faker
- import requests
- from datetime import date
- import json
-
- from pyecharts.globals import ThemeType
-
- update_date = date.today()
-
- # 1.疫情接口
- url = "https://lab.isaaclin.cn/nCoV/api/area"
- # 2.向url发请求,并将获取到的数据转换成json格式
- resultJson = requests.get(url).json()
- # 3.定义一个列表存储最终结果
- province_data = []
- # 4.只取国内数据
- for item in resultJson['results']:
- if item['countryName'] == "中国":
- province_data.append(
- [
- item['provinceShortName'],
- item['confirmedCount']
- ]
- )
- c = (
- Map(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))
- .add("全国确诊人数", province_data, "china", is_map_symbol_show=False)
- .set_global_opts(
- title_opts=opts.TitleOpts(
- title="新冠状病毒全国疫情地图",
- subtitle="更新日期:{}".format(update_date),
- ),
- # 视觉映射配置项
- visualmap_opts=opts.VisualMapOpts(
- is_show=True, # 是否显示
- min_=0, # 左下角刻度最小值
- max_=2000
- )
- )
- .render("全国疫情可视化.html")
- )
- import requests
- import json
- import jsonpath
- from pyecharts.charts import Map
- from pyecharts import options as opts
- from datetime import date
- #请求得url
-
-
- url = "https://api.inews.qq.com/newsqa/v1/automation/modules/list?modules=FAutoCountryConfirmAdd,WomWorld,WomAboard"
-
- #post方式请求
- response =requests.post(url=url)
-
- #将json格式转化为字典
- data = json.loads(response.text)
-
- #名称
- name = jsonpath.jsonpath(data,"$..name")
- #人数
- confirm = jsonpath.jsonpath(data,"$..confirm")
-
- #数据处理
- #zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
-
- data_list = zip(name,confirm)
- #要使用list解包
- #print(list(data_list))
-
- #国家名称表中英文的映射
- nameMap = {
- 'Singapore Rep.': '新加坡',
- 'Dominican Rep.': '多米尼加',
- 'Palestine': '巴勒斯坦',
- 'Bahamas': '巴哈马',
- 'Timor-Leste': '东帝汶',
- 'Afghanistan': '阿富汗',
- 'Guinea-Bissau': '几内亚比绍',
- "Côte d'Ivoire": '科特迪瓦',
- 'Siachen Glacier': '锡亚琴冰川',
- "Br. Indian Ocean Ter.": '英属印度洋领土',
- 'Angola': '安哥拉',
- 'Albania': '阿尔巴尼亚',
- 'United Arab Emirates': '阿联酋',
- 'Argentina': '阿根廷',
- 'Armenia': '亚美尼亚',
- 'French Southern and Antarctic Lands': '法属南半球和南极领地',
- 'Australia': '澳大利亚',
- 'Austria': '奥地利',
- 'Azerbaijan': '阿塞拜疆',
- 'Burundi': '布隆迪',
- 'Belgium': '比利时',
- 'Benin': '贝宁',
- 'Burkina Faso': '布基纳法索',
- 'Bangladesh': '孟加拉国',
- 'Bulgaria': '保加利亚',
- 'The Bahamas': '巴哈马',
- 'Bosnia and Herz.': '波斯尼亚和黑塞哥维那',
- 'Belarus': '白俄罗斯',
- 'Belize': '伯利兹',
- 'Bermuda': '百慕大',
- 'Bolivia': '玻利维亚',
- 'Brazil': '巴西',
- 'Brunei': '文莱',
- 'Bhutan': '不丹',
- 'Botswana': '博茨瓦纳',
- 'Central African Rep.': '中非共和国',
- 'Canada': '加拿大',
- 'Switzerland': '瑞士',
- 'Chile': '智利',
- 'China': '中国',
- 'Ivory Coast': '象牙海岸',
- 'Cameroon': '喀麦隆',
- 'Dem. Rep. Congo': '刚果(金)',
- 'Congo': '刚果(布)',
- 'Colombia': '哥伦比亚',
- 'Costa Rica': '哥斯达黎加',
- 'Cuba': '古巴',
- 'N. Cyprus': '北塞浦路斯',
- 'Cyprus': '塞浦路斯',
- 'Czech Rep.': '捷克',
- 'Germany': '德国',
- 'Djibouti': '吉布提',
- 'Denmark': '丹麦',
- 'Algeria': '阿尔及利亚',
- 'Ecuador': '厄瓜多尔',
- 'Egypt': '埃及',
- 'Eritrea': '厄立特里亚',
- 'Spain': '西班牙',
- 'Estonia': '爱沙尼亚',
- 'Ethiopia': '埃塞俄比亚',
- 'Finland': '芬兰',
- 'Fiji': '斐',
- 'Falkland Islands': '福克兰群岛',
- 'France': '法国',
- 'Gabon': '加蓬',
- 'United Kingdom': '英国',
- 'Georgia': '格鲁吉亚',
- 'Ghana': '加纳',
- 'Guinea': '几内亚',
- 'Gambia': '冈比亚',
- 'Guinea Bissau': '几内亚比绍',
- 'Eq. Guinea': '赤道几内亚',
- 'Greece': '希腊',
- 'Greenland': '格陵兰',
- 'Guatemala': '危地马拉',
- 'French Guiana': '法属圭亚那',
- 'Guyana': '圭亚那',
- 'Honduras': '洪都拉斯',
- 'Croatia': '克罗地亚',
- 'Haiti': '海地',
- 'Hungary': '匈牙利',
- 'Indonesia': '印度尼西亚',
- 'India': '印度',
- 'Ireland': '爱尔兰',
- 'Iran': '伊朗',
- 'Iraq': '伊拉克',
- 'Iceland': '冰岛',
- 'Israel': '以色列',
- 'Italy': '意大利',
- 'Jamaica': '牙买加',
- 'Jordan': '约旦',
- 'Japan': '日本',
- 'Kazakhstan': '哈萨克斯坦',
- 'Kenya': '肯尼亚',
- 'Kyrgyzstan': '吉尔吉斯斯坦',
- 'Cambodia': '柬埔寨',
- 'Korea': '韩国',
- 'Kosovo': '科索沃',
- 'Kuwait': '科威特',
- 'Lao PDR': '老挝',
- 'Lebanon': '黎巴嫩',
- 'Liberia': '利比里亚',
- 'Libya': '利比亚',
- 'Sri Lanka': '斯里兰卡',
- 'Lesotho': '莱索托',
- 'Lithuania': '立陶宛',
- 'Luxembourg': '卢森堡',
- 'Latvia': '拉脱维亚',
- 'Morocco': '摩洛哥',
- 'Moldova': '摩尔多瓦',
- 'Madagascar': '马达加斯加',
- 'Mexico': '墨西哥',
- 'Macedonia': '马其顿',
- 'Mali': '马里',
- 'Myanmar': '缅甸',
- 'Montenegro': '黑山',
- 'Mongolia': '蒙古',
- 'Mozambique': '莫桑比克',
- 'Mauritania': '毛里塔尼亚',
- 'Malawi': '马拉维',
- 'Malaysia': '马来西亚',
- 'Namibia': '纳米比亚',
- 'New Caledonia': '新喀里多尼亚',
- 'Niger': '尼日尔',
- 'Nigeria': '尼日利亚',
- 'Nicaragua': '尼加拉瓜',
- 'Netherlands': '荷兰',
- 'Norway': '挪威',
- 'Nepal': '尼泊尔',
- 'New Zealand': '新西兰',
- 'Oman': '阿曼',
- 'Pakistan': '巴基斯坦',
- 'Panama': '巴拿马',
- 'Peru': '秘鲁',
- 'Philippines': '菲律宾',
- 'Papua New Guinea': '巴布亚新几内亚',
- 'Poland': '波兰',
- 'Puerto Rico': '波多黎各',
- 'Dem. Rep. Korea': '朝鲜',
- 'Portugal': '葡萄牙',
- 'Paraguay': '巴拉圭',
- 'Qatar': '卡塔尔',
- 'Romania': '罗马尼亚',
- 'Russia': '俄罗斯',
- 'Rwanda': '卢旺达',
- 'W. Sahara': '西撒哈拉',
- 'Saudi Arabia': '沙特阿拉伯',
- 'Sudan': '苏丹',
- 'S. Sudan': '南苏丹',
- 'Senegal': '塞内加尔',
- 'Solomon Is.': '所罗门群岛',
- 'Sierra Leone': '塞拉利昂',
- 'El Salvador': '萨尔瓦多',
- 'Somaliland': '索马里兰',
- 'Somalia': '索马里',
- 'Serbia': '塞尔维亚',
- 'Suriname': '苏里南',
- 'Slovakia': '斯洛伐克',
- 'Slovenia': '斯洛文尼亚',
- 'Sweden': '瑞典',
- 'Swaziland': '斯威士兰',
- 'Syria': '叙利亚',
- 'Chad': '乍得',
- 'Togo': '多哥',
- 'Thailand': '泰国',
- 'Tajikistan': '塔吉克斯坦',
- 'Turkmenistan': '土库曼斯坦',
- 'East Timor': '东帝汶',
- 'Trinidad and Tobago': '特里尼达和多巴哥',
- 'Tunisia': '突尼斯',
- 'Turkey': '土耳其',
- 'Tanzania': '坦桑尼亚',
- 'Uganda': '乌干达',
- 'Ukraine': '乌克兰',
- 'Uruguay': '乌拉圭',
- 'United States': '美国',
- 'Uzbekistan': '乌兹别克斯坦',
- 'Venezuela': '委内瑞拉',
- 'Vietnam': '越南',
- 'Vanuatu': '瓦努阿图',
- 'West Bank': '西岸',
- 'Yemen': '也门',
- 'South Africa': '南非',
- 'Zambia': '赞比亚',
- 'Zimbabwe': '津巴布韦'
- }
-
- #自定义的每一段的范围
- pieces = [
- {"min":1000000},
- {"min": 100000, "max":999999},
- {"min": 10000, "max": 99999},
- {"min": 1000, "max": 9999},
- {"min": 100, "max": 999},
- {"min":0,"max":99},
- ]
-
- #width:宽度,height:高度,page_title:标题
- #data_pair:数据项,maptype:地图类型,name_map:自定义读取的名称的映射,is_map_symbol_show:是否显示标记图形
- map = Map(opts.InitOpts(width='1300px',height='600px')).add(series_name="世界疫情分布",
- data_pair=list(data_list),
- maptype="world",
- name_map=nameMap,
- is_map_symbol_show=False,
-
- )
- #label_opts:标签配置项设置,is_show:是否显示视觉映射配置
- map.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
-
- #is_piecewise:是否为分段型,pieces:自定义的每一段的范围
- #max_:指定 visualMapPiecewise 组件的最大值,TitleOpts:标题配置
- map.set_global_opts(
- title_opts=opts.TitleOpts(title="世界地图"),
- visualmap_opts=opts.VisualMapOpts
- (max_=1000000,
- is_piecewise=True,
- pieces=pieces))
-
- map.render("世界疫情分布情况.html")