新冠疫情来临,我简单的做一次疫情的数据分析温习我的python知识,也希望能帮到各位。分析中我用到的技术有:pyton爬取数据html+css将分析结果排版。用到的工具有excel+tableau进行数据处理分析和绘图。数据分析中还是存在很多的不足,很多地方有待提高,希望大家多多交流。
首先,我们要获取到数据,本次数据分析所需要的疫情数据来自https://ncov.dxy.cn。通过对网站的分析有世界的疫情数据和中国的疫情数据,所以我们要分别爬取到世界和全国的疫情数据。

好了,接下来废话不多说,为了更直观的了解数据爬取的过程,我把爬取世界疫情数据、爬取全国的疫情数据分开来写,虽然有很多相同的代码,不过能更好的理解数据获取的过程。
爬取世界疫情数据的代码:

import json
import requests
import pandas as pd
from bs4 import BeautifulSoup
url = 'https://ncov.dxy.cn/ncovh5/view/pneumonia?from=timeline&isappinstalled=0'
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}
response = requests.get(url,headers = headers)
response.encoding = 'utf-8'
content = response.content.decode('utf-8')#以字节流形式打印网页源码
soup = BeautifulSoup(response.text,'lxml')
#爬取选择网页文档的内容
data = soup.find_all(name = 'script',attrs = {'id':'getListByCountryTypeService2true'})
#转为字符串
account = str(data)
account1 = account[95:-21]#切片截取从52到后面倒数21取到需要的数据
account1_json = json.loads(account1)#提取数据到列表
id = []
continents = []
provinceName = []
currentConfirmedCount = []
confirmedCount = []
confirmedCountRank = []
suspectedCount = []
curedCount = []
deadCount = []
deadCountRank = []
deadRate = []
deadRateRank = []
print(len(account1_json))
i=0
for a in account1_json:if 'id' in a:id.append(a['id'])else:id.append('没有')continents.append(a['continents'])provinceName.append(a['provinceName'])currentConfirmedCount.append(a['currentConfirmedCount'])confirmedCount.append(a['confirmedCount'])if 'confirmedCountRank' in a:confirmedCountRank.append(a['confirmedCountRank'])else:confirmedCountRank.append('没有')suspectedCount.append(a['suspectedCount'])curedCount.append(a['curedCount'])deadCount.append(a['deadCount'])if 'deadCountRank' in a:deadCountRank.append(a['deadCountRank'])else:deadCountRank.append('没有')if 'deadRate' in a:deadRate.append(a['deadRate'])else:deadRate.append('没有')if 'deadRateRank' in a:deadRateRank.append(a['deadRateRank'])else:deadRateRank.append('没有')#转换成pandas数组
df = {'id':pd.Series(id),'所在大洲':pd.Series(continents),'城市':pd.Series(provinceName),'当前确诊':pd.Series(currentConfirmedCount),'累计确诊':pd.Series(confirmedCount),'确诊排名':pd.Series(confirmedCountRank),'疑似病例':pd.Series(suspectedCount),'治愈人数':pd.Series(curedCount),'死亡人数':pd.Series(deadCount),'死亡人数排名':pd.Series(deadCountRank),'死亡率':pd.Series(deadRate),'死亡率排名':pd.Series(deadRateRank)
}
pds = pd.DataFrame(df)
pds.to_excel('1.xlsx', index=False)

以上代码我将数据爬取后用pandas处理过后并写到表格文件里:

国内疫情数据的爬取:

import requests
import pandas as pd
from bs4 import BeautifulSoup
import re
url = 'https://ncov.dxy.cn/ncovh5/view/pneumonia?from=timeline&isappinstalled=0'
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}
#省级正则表达式
provinceName_re = re.compile(r'"provinceName":"(.*?)",')
provinceShortName_re = re.compile(r'"provinceShortName":"(.*?)",')
currentConfirmedCount_re = re.compile(r'"currentConfirmedCount":(.*?),')
confirmedCount_re = re.compile(r'"confirmedCount":(.*?),')
suspectedCount_re = re.compile(r'"suspectedCount":(.*?),')
curedCount_re = re.compile(r'"curedCount":(.*?),')
deadCount_re = re.compile(r'"deadCount":(.*?),')
comment_re = re.compile(r'"comment":"(.*?)",')
locationId_re = re.compile(r'"locationId":(.*?),')
statisticsData_re = re.compile(r'"statisticsData":"(.*?)",')
cities_re = re.compile(r'"cities":\[\{(.*?)\}\]')#市级正则表达式
cityName_re = re.compile(r'"cityName":"(.*?)",')
currentConfirmedCount_1_re = re.compile(r'"currentConfirmedCount":(.*?),')
confirmedCount_1_re = re.compile(r'"confirmedCount":(.*?),')
suspectedCount_1_re = re.compile(r'"suspectedCount":(.*?),')
curedCount_1_re = re.compile(r'"curedCount":(.*?),')
deadCount_1_re = re.compile(r'"deadCount":(.*?),')
locationId_1_re = re.compile(r'"locationId":(.*?)\},')#爬虫爬取数据
datas = requests.get(url,headers = headers)
datas.encoding = 'utf-8'
soup = BeautifulSoup(datas.text,'lxml')
data = soup.find_all('script',{'id':'getAreaStat'})
data = str(data)
data_str = data[54:-23]#替换字符串内容,避免重复查找
citiess = re.sub(cities_re,'8888',data_str)
#查找省级数据
provinceNames = re.findall(provinceName_re,citiess)
provinceShortNames = re.findall(provinceShortName_re,citiess)
currentConfirmedCounts = re.findall(currentConfirmedCount_re,citiess)
confirmedCounts = re.findall(confirmedCount_re,citiess)
suspectedCounts = re.findall(suspectedCount_re,citiess)
curedCounts = re.findall(curedCount_re,citiess)
deadCounts = re.findall(deadCount_re,citiess)
comments = re.findall(comment_re,citiess)
locationIds = re.findall(locationId_re,citiess)
statisticsDatas = re.findall(statisticsData_re,citiess)#查找市级数据
citiess_str1 = re.findall(cities_re,data_str)
#将市级列表数据转为字符串,方便正则表达式查找
citiess_str = str(citiess_str1)
cityName = re.findall(cityName_re,citiess_str)
currentConfirmedCount_1 = re.findall(currentConfirmedCount_1_re,citiess_str)
confirmedCount_1 = re.findall(confirmedCount_1_re,citiess_str)
suspectedCount_1 = re.findall(suspectedCount_1_re,citiess_str)
curedCount_1 = re.findall(curedCount_1_re,citiess_str)
deadCount_1 = re.findall(deadCount_1_re,citiess_str)# 省级数据转换为pandas数组
df = {'地区代码':pd.Series(locationIds),'省':pd.Series(provinceNames),'省区短名':pd.Series(provinceShortNames),'当前确诊':pd.Series(currentConfirmedCounts),'累计确诊':pd.Series(confirmedCounts),'疑似确诊':pd.Series(suspectedCounts),'治愈人数':pd.Series(curedCounts),'死亡人数':pd.Series(deadCounts),'评论':pd.Series(comments),'统计数据区':pd.Series(statisticsDatas),
}
pds = pd.DataFrame(df)
pds.to_excel('国内疫情统计表1.xlsx',index=True)

获取数据后用Excel进行简单的处理,并和tableau一起将结果绘制成图像。下图是几张成果图:
世界疫情热点地图:

国内疫情热点地图:

将获取处理过的数据可视化以后还差形成报告分析的形式,编写报告的方式很多,不过我选择的是用前端网页的形式呈现出来。这种的方法的优点是:排版的效果更好,更直观,可以自己通过编写代码的形式自己设计想要的排版格式;缺陷是不可打印,难度较大,需要对html和css有一定的基础。数据可在我的个人博客获取,数据的链接如下见路不走个人博客
也有网友给我说能不能获取到历史的的数据,我下载仔细研究了一下,每个省每天都会公布当天的疫情数据,所以只有去爬取每个省每天的公布信息,然后对其挖掘处理便可得到对应省份的历史信息,我重新用java和springboot框架编写爬虫并已经获取了各个省份全部的新冠历史疫情数据,具体的看我的另一篇博文:全国各省新冠肺炎疫情的历史数据

新冠疫情分析(疫情数据爬取+数据分析+网页排版展示)相关推荐

  1. Tableau培训学习笔记3:空间数据分析——科比投篮以及新冠肺炎分析(带数据)

    Tableau培训学习笔记 Tableau培训学习笔记3:空间数据分析--科比投篮以及新冠肺炎分析 1.科比投篮分析 2. 新冠肺炎流出数据分析 Tableau培训学习笔记3:空间数据分析--科比投篮 ...

  2. 链家网杭州租房信息数据爬取+数据分析

    参考https://mp.weixin.qq.com/s/vvZ2yBb2eMKP800LUPoAWg 需求分析¶ 过去一个月,全国热点城市的房租如脱缰野马.一线的房租同比涨了近20%.一夜醒来,无产 ...

  3. 基金数据爬取与分析评估

    对量化投资感兴趣的朋友,可关注微信公众号:Quant_Reserch ,与我们交流.公众号中有每日的复盘,研究策略分享. 目录 基金数据爬取 代码 遇到的坑 基金数据分析 代码 结果分析 基金数据爬取 ...

  4. 基于python的数据爬取与分析_基于Python的网站数据爬取与分析的技术实现策略

    欧阳元东 摘要:Python为网页数据爬取和数据分析提供了很多工具包.基于Python的BeautifulSoup可以快速高效地爬取网站数据,Pandas工具能方便灵活地清洗分析数据,调用Python ...

  5. DOTA2利雅得大师赛利用api多线程对选手数据和战队数据爬取与分析

    首先恭喜中国战队LGD夺下本次利雅得大师赛冠军! 目录 数据的爬取 选手数据以及战队数据爬取 数据分析 数据(因为原数据的英雄都是id,这里进行连接将英雄id替换为英雄名 ) 选手KDA前十名 选手参 ...

  6. 招聘数据爬取、数据处理与可视化(v2--解析JS渲染页面)

    招聘数据爬取.数据处理与可视化(v2--解析JS渲染页面) 更新说明 程序说明 数据爬取 观察网页结构 页面解析 将数据写入csv文件中 通过观察页面链接,爬取所有页面 爬虫程序完整代码 爬取数据结果 ...

  7. 爬虫实战入门级教学(数据爬取->数据分析->数据存储)

    爬虫实战入门级教学(数据爬取->数据分析->数据存储) 天天刷题好累哦,来一期简单舒适的爬虫学习,小试牛刀(仅供学习交流,不足之处还请指正) 文章讲的比较细比较啰嗦,适合未接触过爬虫的新手 ...

  8. python实现数据爬取-清洗-持久化存储-数据平台可视化

    基于python对淘宝模特个人信息进行筛选爬取,数据清洗,持久化写入mysql数据库.使用django对数据库中的数据信息筛选并生成可视化报表进行分析. 数据爬取,筛选,存库: # -*- codin ...

  9. [Pyhon疫情大数据分析] 一.腾讯实时数据爬取、Matplotlib和Seaborn可视化分析全国各地区、某省各城市、新增趋势

    思来想去,虽然很忙,但还是挤时间针对这次肺炎疫情写个Python大数据分析系列博客,包括网络爬虫.可视化分析.GIS地图显示.情感分析.舆情分析.主题挖掘.威胁情报溯源.知识图谱.预测预警及AI和NL ...

  10. [转载] python+selenium定时爬取丁香园的新冠病毒每天的数据,并制作出类似的地图(部署到云服务器)

    参考链接: Python vars() python+selenium定时爬取丁香园的新冠病毒每天的数据,并制作出类似的地图(部署到云服务器) 声明:仅供技术交流,请勿用于非法用途,如有其它非法用途造 ...

最新文章

  1. OpenVINO 2020版没有cpu_extension.dll问题解决
  2. 网页实现人脸识别PHP,奇思妙想-用HTML5进行人脸识别
  3. php如何检测图片背景是白色,javascript – 用PHP检测白色图像背景?
  4. ElasticSearch快速入门二(Restful介绍)
  5. 传统品牌vs新消费品牌社交营销差异化分析报告
  6. 2017.5.9 货车运输 思考记录
  7. 替罪羊树—BZOJ3224: Tyvj 1728 普通平衡树
  8. 解决github clone慢的问题
  9. Linux下Qt5: QMediaRecorder的问题,以及使用QCamera相关类进行摄像头视频采集
  10. 浅谈前端H5自定义分享实现方法
  11. 手游开发之lua的class函数详解
  12. VC++每个版本对应的vcredist
  13. 移动办公系统现状分析
  14. win10找回BitLocker密钥的方法
  15. 基于深度学习的音乐推荐系统(一)音频频谱图绘制
  16. 不忘初心牢记使命文化墙励志标语墙贴
  17. VBA·编译错误:ByRef参数类型不符
  18. 720P、1080P、1440P、2160P、HD、FHD、UHD、2K屏、4K屏是什么意思
  19. Code 39码与Code 128码区别
  20. 印度人教小孩学的数学(乘法口诀表背到19*19)

热门文章

  1. CSS outline 属性
  2. 牛客面经 | BAT、美团、360、滴滴新锐……2W字干货,这不仅仅是一篇面经
  3. 没有你不会的CAD?CAD知识整理下集
  4. 洛谷每日三题之第三天(第四天补做)
  5. 华为事件对我们个人成功的启示:为什么自强自立不是出路?
  6. 在openEuler上搭建LFS
  7. 滑铁卢大学容易转计算机专业吗,滑铁卢大学计算机科学专业好吗
  8. 华为网络设备-构建简单IPv6网络实验
  9. 夏普Sharp MX-B6581D 一体机驱动
  10. 无线射频专题《IEEE 802.11协议讲解1@路由高级配置项,Beacon周期、RTS阈值、DTIM》