## 1.背景及目的
### 疫情爬取及数据可视化
2020年的疫情对于全世界来说都是一个痛苦的回忆,3月份开始首先在我国爆发,后期在国外更是呈现指数式增长,截至今日,全球的疫情还未根除!为了有效的观察世界疫情局势的变化,我们通过Python爬虫和简单的数据可视化将疫情情况通过图片的形式展示出来从而更方便的帮助大家了解局势,以及做好应对措施!
### 数据资源的获取与分析
本次采用python的requests模块从腾讯疫情网站抓取世界每日疫情变化数据,抓取的数据包括新增死亡、新增治愈、新增确诊以及对应的日期,另外我们也关注世界累计人数,这对于宏观调控也有很大的帮助,抓取的数据有累计死亡、累计治愈、累计确诊以及对应的日期信息!
## 2.Python程序方案设计
包括以下内容:
- Python程序设计总体目标
首先会抓取页面的相关数据信息,将所有信息抓取到后,通过调用对应的函数画出对应的折线图和柱状图,然后存放到新建的文件夹(疫情图片)中!
- Python程序设计总体方案(附总体方案流程图)
![](https://www.writebug.com/myres/static/uploads/2022/6/8/6f1f79823315d2f3d53f14245eac75e2.writebug)
- 总体方案中各组成部分的功能说明
## 3.Python程序编程实现
### Python编程环境说明 (Python程序开发平台及开发工具)
### Python程序设计功能实现
#### 数据导入
通过requests爬取腾讯疫情页面以及通过response.json()按照字典规则进行提取对应属性的数据,通过append()方法把所有同属性的数据存放到一个相同的列表中,方面后面return给别画图函数进行画图!
#### 数据预处理
因为疫情时间太长,如果把每天的数据都保存的话,画图的时候会导致画布整体密集,融合在一起,非常不雅观!于是使用if (I % 30 == 0)语句来每隔30个数据选取一个,这样做既能保证疫情发展总体趋势不变,同时方便画图清晰的展示坐标轴情况!
#### 整体性能测试
因为爬取的数据量不大,加上腾讯疫情的反爬机制不强,所以没有采用多线程以及其他的反爬策略,整个程序运行时间也就20s左右!
## 4.Python程序设计总结
### 系统运行环境配置
计算机配置:Windows10/Pycharm
Pyhton3.6:Python 是用来编写应用程序的高级编程语言。目前,Python 有 两个版本,一个是 2.x 版本,一个是 3.x 版本,这两个版本是不兼容的。现在 3.x 版本越来越普及,所以我们使用的是 python3.6 版本。Python 为了提供非常完善 的基础代码库,覆盖了网络,文件,GUI,数据库等大量内容。许多功能不必从 0 开始写,直接使用现成的即可。例如,此次设计要用到的 matplotlib 模块,numpy 模块等都可以直接使用。且 Python 有相对较少的关键字,结构简单,和一个明 确定义的语法,代码定义的更清晰,学习起来更加简单。Python 的最大的优势之 一是丰富的库,跨平台的,在 UNIX,Windows 和 Macintosh 兼容很好。Python支持互动模式,可以从终端输入执行代码并获得结果的语言,互动的测试和调试代码片断。
### 系统实现方式和结果
#### 爬取相应数据及返回处理后数据
程序代码及详细注释
```python
def data_spyder(number):
# 定义新变量,接收传进的参数
num = number
# 经过分析网页获取到的数据接口
url = 'https://api.inews.qq.com/newsqa/v1/query/inner/publish/modules/list?modules=chinaDayList,chinaDayAddList,cityStatis,nowConfirmStatis,provinceCompare'
response = requests.get(url=url)
# 万能解码,使中文不会以乱码的形式展现
response.encoding = response.apparent_encoding
# 接口的数据是json格式的
html = response.json()
"""下面的代码是获取每天的新增的数目"""
day_add_datas = html['data']['chinaDayAddList']
# 使用列表的append方法将对应种类的新增数目添加到各自的列表中,以便于后面的可视化操作
day_deads = [] # 新增死亡
day_heals = [] # 新增治愈
day_dates = [] # 日期
day_confirms = [] # 新增确诊
# 如果数据全部存在列表中,最后绘图时密密麻麻,于是隔30天写入一次
for i in range(len(day_add_datas)):
if (i % 30 == 0):
day_deads.append(day_add_datas[i]['dead'])
day_heals.append(day_add_datas[i]['heal'])
day_confirms.append(day_add_datas[i]['confirm'])
day_dates.append(day_add_datas[i]['date'])
"""下面的代码是获取当天的各种累计数目"""
day_datas = html['data']['chinaDayList']
# 同样的操作,将各种栏目的数据添加到对应的列表中
deads = []
heals = []
dates = []
confirms = []
for i in range(len(day_datas)):
if(i % 30 == 0):
deads.append(day_datas[i]['dead'])
heals.append(day_datas[i]['heal'])
dates.append(day_datas[i]['date'])
confirms.append(day_datas[i]['confirm'])
# 现在是将上面的代码整体封装成一个函数,通过调用不同的参数获取不同的return返回对象
if num == 1:
# 如果num是1的话返回的是累计的数目
return(dates,deads,heals,confirms)
elif(num == 2):
# 如果num是2的话返回的是每天的新增数目
return(day_dates,day_deads,day_heals,day_confirms)
else:
print('传进的参数有问题,调用失败!')
```
运行结果及分析
成功爬取相应数据,通过给定number不同的值以获取不同的返回数据进行可视化展示
#### 画折线图
1.流程及操作步骤说明:
程序运行后可画出对应的新增/累计三项数据折线图
2.程序代码及详细注释
```python
day_dates, day_deads, day_heals, day_confirms = data_spyder(2)
titles = ['日期','新增死亡数','新增治愈数','新增确诊数']
datas = [day_dates,day_deads,day_heals,day_confirms]
for i in range(1,len(titles)):
plt.plot(day_dates,datas[i],label="每日{}".format(titles[i]),linewidth=3,color='r',marker='o',markerfacecolor='blue',markersize=12)
plt.xlabel('日期')
plt.ylabel(titles[i])
plt.title('每日{}'.format(titles[i]))
# 使中文可以正常显示出来
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.legend()
plt.savefig(path + '/' + titles[i] + '_折线图.jpg')
```
3.运行结果及分析
运行该程序后会在【疫情图集】文件夹下面生成折线图
#### 画柱状图
1.流程及操作步骤说明
程序运行后可画出对应的新增/累计三项数据柱状图
2.程序代码及详细注释
```python
day_dates, day_deads, day_heals, day_confirms = data_spyder(2)
titles = ['日期','新增死亡数','新增治愈数','新增确诊数']
datas = [day_dates,day_deads,day_heals,day_confirms]
for i in range(1,len(titles)):
# 下面时绘制柱状图
plt.bar(day_dates,datas[i])
plt.xlabel('日期')
plt.ylabel(titles[i])
plt.title('每日{}'.format(titles[i]))
# 使中文可以正常显示出来
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.savefig(path + '/' + titles[i] + '_柱状图.jpg')
plt.show()
```
3.运行结果及分析
运行该程序后会在【疫情图集】文件夹下面生成柱状图
## 5.完整结果展现
Pycharm终端截图:
![](https://www.writebug.com/myres/static/uploads/2022/6/8/0e14a855c9b7408bbbdc6d6d4724f9c7.writebug)
效果截图:
![](https://www.writebug.com/myres/static/uploads/2022/6/8/bcaa505cfbb3fbe24d2bf2340
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
资源包含文件:设计报告word+代码 本次采用python的requests模块疫情网站抓取世界每日疫情变化数据,抓取的数据包括新增死亡、新增治愈、新增确诊以及对应的日期,另外我们也关注世界累计人数,这对于宏观调控也有很大的帮助,抓取的数据有累计死亡、累计治愈、累计确诊以及对应的日期信息! 详细介绍参考:https://blog.csdn.net/sheziqiong/article/details/125276429
资源推荐
资源详情
资源评论
收起资源包目录
基于python的requests世界每日疫情变化数据可视化.zip (23个子文件)
demo.py 8KB
LICENSE 1KB
疫情图集
新增治愈数_折线图.jpg 45KB
累计死亡数柱状图.jpg 50KB
新增死亡数_折线图.jpg 43KB
新增治愈数_柱状图.jpg 33KB
世界每日新增确诊数_柱状图.jpg 44KB
世界累计死亡数_柱状图.jpg 44KB
新增死亡数_柱状图.jpg 29KB
世界累计治愈数_柱状图.jpg 36KB
世界累计治愈数_折线图.jpg 41KB
累计死亡数折线图.jpg 40KB
世界累计死亡数_折线图.jpg 45KB
世界累计确诊数_柱状图.jpg 37KB
世界累计确诊数_折线图.jpg 42KB
累计治愈_确诊折线图.jpg 48KB
新增确诊数_柱状图.jpg 34KB
累计治愈_确诊柱状图.jpg 59KB
新增确诊数_折线图.jpg 45KB
世界每日新增确诊数_折线图.jpg 48KB
流程图.eddx 12KB
作业报告.docx 212KB
README.md 8KB
共 23 条
- 1
资源评论
- qw_69189660112023-06-11资源不错,很实用,内容全面,介绍详细,很好用,谢谢分享。
- quinn_W_2022-12-21总算找到了想要的资源,搞定遇到的大问题,赞赞赞!
shejizuopin
- 粉丝: 9401
- 资源: 1288
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功