中 北 大 学 软 件 学 院
团队实践报告
班 级:
专 业:
18130Y03
软件工程
方 向:
云计算与大数据方向
课程名称:
云计算与大数据导论
学号姓名:
1813004748 乔保杰
2020 年 11 月
1 . 实 验 名 称
爬 取 中 国 和 世 界 疫 情 情 况
2 . 实 验 目 标
目 标 一 : 爬 取 中 国 各 省 份 的 新 冠 确 诊 情 况 ,并 且 使 用 中 国 地 图
将 结 果 可 视 化
目 标 二 : 爬 取 世 界 各 国 家 的 新 冠 确 诊 情 况 , 并 且 使 用 世 界 地 图
将 结 果 可 视 化
3 . 实 验 内 容
( 写 清 楚 实 验 要 分 几 步 或 者 几 个 阶 段 完 成 ,每 个 阶 段 主 要 是 干
什 么 , 要 获 得 什 么 结 果 )
1. 发 起 请 求
第 一 个 阶 段 肯 定 是 先 获 取 目 标 网 址 进 行 访 问 发 送 请 求 。 我
选 择 在 腾 讯 新 闻 的 抗 肺 炎 功 能 中 来 寻 找 数 据 , 在 浏 览 器 中 寻
找 到 存 储 中 国 各 省 份 和 世 界 各 国 的 文 件 并 且 获 取 到 它 的 文 件
网 址 , 对 网 址 发 送 请 求 。
2. 获 取 响 应 内 容
对 目 标 网 址 以 r e q u e s t 请 求 发 送 请 求 后 获 取 中 国 各 省 份 从
疫 情 开 始 累 计 确 诊 人 数 , 以 及 全 国 累 计 死 亡 人 数 , 治 愈 人 数
和 当 天 疑 似 人 数 和 世 界 各 国 家 当 前 确 诊 人 数 以 j s o n 形 式 保 存
在 d a t a 中
3. 数 据 处 理
获 取 到 的 数 据 分 为 两 种 , 需 要 分 别 进 行 处 理 :
( 1 ) . 中 国 各 省 份 从 疫 情 开 始 累 计 确 诊 人 数 , 以 及 全 国 累 计 死
亡 人 数 , 治 愈 人 数 和 当 天 疑 似 人 数
a . 由 于 获 取 的 到 数 据 是 j s o n 形 式 , 需 要 将 它 的 类 型 转 化
为 字 典 形 式 方 便 对 数 据 进 行 处 理 。
b . 可 视 化 的 时 候 需 要 调 用 p y e c h a r t s 的 G e o 地 图 ,中 国 地
图 中 各 省 份 的 名 称 是 汉 字 , 不 需 要 进 行 映 射 , 对 获 取 的 内 容
将 各 个 省 份 的 名 字 和 各 省 份 对 应 的 确 诊 人 数 以 键 值 对 的 形 式
保 存 在 列 表 中 。
c . 对 列 表 中 的 数 据 按 照 确 诊 人 数 从 大 到 小 进 行 排 序 ,使 用
了 冒 泡 排 序 。
( 2 ) . 世 界 各 国 家 当 前 确 诊 人 数
a . 由 于 获 取 的 到 数 据 是 j s o n 形 式 , 需 要 将 它 的 类 型 转 化
为 字 典 形 式 方 便 对 数 据 进 行 处 理 。
b . 可 视 化 的 时 候 需 要 调 用 p y e c h a r t s 的 M a p 地 图 ,这 里 需
要 注 意 的 是 世 界 地 图 中 各 个 国 家 的 名 称 是 英 文 , 因 此 需 要 创
建 一 个 国 家 的 中 英 文 名 字 的 映 射 集 合 , 对 获 取 的 内 容 将 各 个
国 家 的 名 字 和 各 国 家 对 应 的 确 诊 人 数 以 键 值 对 的 形 式 保 存 在
列 表 中 。 需 要 注 意 的 是 获 取 的 国 家 中 是 没 有 中 国 的 数 据 的 因
此 我 们 需 要 对 我 们 国 家 的 数 据 进 行 单 独 的 获 取 然 后 将 其 添 加
到 世 界 各 国 数 据 列 表 中 。
c . 获 取 到 数 据 后 将 世 界 各 国 的 确 诊 人 数 数 据 存 入 到 英 文
国 家 名 字 的 列 表 中 。
d . 同 样 我 们 需 要 对 世 界 各 国 家 按 照 确 诊 人 数 从 大 到 小 排
序 。
4. 数 据 可 视 化
( 1 ) . 中 国 地 图 使 用 p y e c h a r t s 中 的 M a p 地 图 ,将 数 据 带 入 ,
并 设 置 属 性
( 2 ) . 世 界 地 图 使 用 p y e c h a r t s 中 的 G e o 地 图 ,将 数 据 带 入 ,
并 设 置 属 性
5. 保 存 数 据
将 中 国 各 省 份 数 据 和 世 界 各 国 数 据 分 别 保 存 在 两 个
e x e c l 中 ,分 别 命 名 为‘ c h i n a _ c o n f i r m _ ’+ 当 前 时 间 +‘ . x l s x ’
和 ‘ w o r l d _ c o n f i r m _ ’ + 当 前 时 间 + ’ . x l s x ’ 。
4. 实 验 环 境
1 ) 计 算 机 系 统 版 本 : window10
2 ) python 版 本 : 3.8.3
3 ) 编 辑 器 : pycharm
5. 实 验 结 果 及 说 明 :
1. 爬 取 的 中 国 各 省 市 疫 情 情 况 可 视 化 结 果 :
图 1
图 2
图 3
结 果 说 明 :
图 4
(1).图 1 中鼠标移动到省份会出现黄色的高亮,所有省份对应的亮标还会有浮动的效果,
地图的中上方会显示累计中国的确诊人数,治愈人数,今日疑似和更新时间。
(2).图 2 中将鼠标移动到省份的圆圈处会显示此省的确诊人数。
(3).图 3 中用鼠标将左下角的程度条向下移地图上就会减少相对比较严重的地区。
(4).图 4 将数据保存到 execl 中。
2. 爬 取 的 世 界 各 国 家 疫 情 情 况 可 视 化 结 果 :
图 1
图 2
图 3
结 果 说 明 :
(1).图 1 中鼠标移动到国家会出现黄色的高亮,地图的左上方会显示累计更新时间。
(2).图 2 中将鼠标移动到国家的地理区域内会显示此国家的确诊人数。
(3).图 3 中用鼠标将左下角的程度条向下移地图上就会减少相对比较严重的地区。
(4).图 4 将数据保存到 execl 中。
6. 实 验 过 程 或 核 心 代 码
1.china_confirm.py ( 中 国 疫 情 )
import requests
import json
import jsonpath
from pyecharts.charts import Map, Geo
from pyecharts import options as opts
from pyecharts.globals import GeoType, RenderType
# 1.目标网址
url = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5"
# 2.模拟浏览器是先访问 url,获取数据,由于数据是 json 形式,因此将其转化为字典形式,
data = json.loads(requests.get(url).json()['data'])
# 3.从网页源代码中提取数据
china = data['areaTree'][0]['children']
china_total = "确诊:" + str(data['chinaTotal']['confirm']) + \
" 疑似:" + str(data['chinaTotal']['suspect']) + \
" 死亡:" + str(data['chinaTotal']['dead']) + \
" 治愈:" + str(data['chinaTotal']['heal']) + \
" 更新日期:" + data['lastUpdateTime']
# 4.将中国累计确诊,今日疑似,累计死亡,累计治愈,更新日期保存在数据中,显示在
地图中上方
excel0 = [data['chinaTotal']['confirm'], data['chinaTotal']['suspect'], data['chinaTotal']['dead'],
data['chinaTotal']['heal'], data['lastUpdateTime']]
# 5.将中国各省市名称和对应的确诊人数存放在列表中
data = []
for i in range(len(china)):
data.append([china[i]['name'], china[i]['total']['confirm']])
# 6.将数据保存在另外,因为在下面会将 data 赋值为空
excel1 = data
# 7.对确诊人数进行从大到小的排序,使用冒泡排序
for i in range(len(china) - 1):
for j in range(len(china) - 1 - i):
if excel1[j][1] < excel1[j + 1][1]:
excel1[j], excel1[j + 1] = excel1[j + 1], excel1[j]
# 8.调用 pyecharts 中的 Geo 中国地图,并进行一些属性的设置,将各个国家的数据赋值到
地图中
geo = Geo(init_opts=opts.InitOpts(width="1750px", height="800px", bg_color="#404a59",
page_title="全国疫情时事报告",
renderer=RenderType.SVG, theme="white"))
# 设
置绘图尺寸,背景色
geo.add_schema(maptype="china", itemstyle_opts=opts.ItemStyleOpts(color="rgb(49,60,72)",
border_color="rgb(0,0,0)"))
# 中国地图,地图区域颜色,区域边界颜色