文章目录
数据挖掘案例:利用Python获取新冠状病毒肺炎的疫情数据并进行可视化分析
一、疫情数据报告网站地址
网站地址:https://news.qq.com/zt2020/page/feiyan.htm
数据来源:https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5
1.1 pyecharts介绍
pyecharts在本地就可以进行交互式画图
1.2 要用到的库
request爬虫
json处理数据
pandas处理数据
import request
import json
import pandas as np
1.3 爬取数据
1.3.1 方法1
ua ,cokkies也可以不带,这个页面没有什么拦截,后面拦截的话可以再加
import requests
import json
import pandas as pd
def getData():
url = 'https://news.qq.com/zt2020/page/feiyan.htm'
headers = {
'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1'
}
r = requests.get(url,headers)
if r.status_code == 200:
return r.text
getData()
爬取到了
怎么取出来呢
bs4
正则
xpath
都可以
1.3.2 方法2(采用)
网站上找直接获取数据的地方
1.地址
这里面有每一天的数据
每个省份 地级市的数据
拿出这些数据源的地址
2.自己来获取试试看
import requests
import json
import pandas as pd
def getData():
url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5'
headers = {
'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1'
}
r = requests.get(url,headers)
if r.status_code == 200:
return json.loads(r.text)
getData()
json转换成字典的了
二、爬取的数据初查看
第一行不要,后面的有用
对应之前的网页 ,1751这些都是有的,都不用计算了
三、爬取数据的处理
3.1 只要data的数据
3.2 再变成字典,用两次json.load
3.3 将字典命名成变量
import requests
import json
import pandas as pd
def getData():
url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5'
headers = {
'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1'
}
r = requests.get(url,headers)
if r.status_code == 200:
return json.loads(json.loads(r.text)['data'])
data_dict = getData()
3.4 读取字典的键
data_dict.keys()
dict_keys(['lastUpdateTime', 'chinaTotal', 'chinaAdd', 'isShowAdd', 'showAddSwitch', 'chinaDayList', 'chinaDayAddList', 'dailyNewAddHistory', 'dailyDeadRateHistory', 'dailyHealRateHistory', 'areaTree', 'articleList'])
四、爬取数据的参数解析
1.lastUpdateTime
lastUpdateTime :最后更新时间
'2020-02-19 20:06:10'
2.chinaTotal
chinaTotal :累计值
- confirm 确诊
- heal 治愈
- dead 死亡
- nowConfirm 现有确诊
- suspect 疑似
- nowSevere 重症
{
'confirm': 74281,
'heal': 14479,
'dead': 2009,
'nowConfirm': 57793,
'suspect': 5248,
'nowSevere': 11977}
3.chinaAdd
chinaAdd :每日新增 和 chinaTotal字段一致
-
confirm 确诊
-
heal 治愈
-
dead 死亡
-
nowConfirm 现有确诊
-
suspect 疑似
-
nowSevere 重症
{ 'confirm': 1753, 'heal': 1918, 'dead': 139, 'nowConfirm': -304, 'suspect': -994, 'nowSevere': 236}
4.isShowAdd
前端进行判断的状态码
True
5.showAddSwitch
前端进行判断的状态码
{
'all': True,
'confirm': True,
'suspect': True,
'dead': True,
'heal': True,
'nowConfirm': True,
'nowSevere': True}
6.chinaDayList
每一天的数据(2020.1.13-至今)
- confirm 确诊
- heal 治愈
- dead 死亡
- nowConfirm 现有确诊
- suspect 疑似
- nowSevere 重症
- deadRate 死亡率
- healRate 治愈率
- date 日期
7.chinaDayAddList
同上一天比增加的数据
同比上一天新增加的数据 和 chinaDayList字段一致
- confirm 确诊
- heal 治愈
- dead 死亡
- nowConfirm 现有确诊
- suspect 疑似
- nowSevere 重症
- deadRate 死亡率
- healRate 治愈率
- date 日期
8.dailyNewAddHistory
湖北内外每天新增确诊情况对比
- date 日期
- hubei 湖北新增人数
- country 全国的新增人数
- notHubei 湖北以外的新增人数
[{
'date': '01.20', 'hubei': 72, 'country': 77, 'notHubei': 5},
{
'date': '01.21', 'hubei': 105, 'country': 149, 'notHubei': 44},
{
'date': '01.22', 'hubei': 69, 'country': 131, 'notHubei': 62},
{
'date': '01.23', 'hubei': 105, 'country': 259, 'notHubei': 154},
{
'date': '01.24', 'hubei': 180, 'country': 444, 'notHubei': 264},
{
'date': '01.25', 'hubei': 323, 'country': 688, 'notHubei': 365},
{
'date': '01.26', 'hubei': 371, 'country': 769, 'notHubei': 398},
{
'date': '01.27', 'hubei': 1291, 'country': 1771, 'notHubei': 480},
{
'date': '01.28', 'hubei': 840, 'country': 1459, 'notHubei': 619},
{
'date': '01.29', 'hubei': 1032, 'country': 1737, 'notHubei': 705},
{
'date': '01.30', 'hubei': 1220, 'country': 1982, 'notHubei': 762},
{
'date': '01.31', 'hubei': 1347, 'country': 2102, 'notHubei': 755},
{
'date': '02.01', 'hubei': 1921, 'country': 2590, 'notHubei': 669},
{
'date': '02.02', 'hubei': 2103, 'country': 2829, 'notHubei': 726},
{
'date': '02.03', 'hubei': 2345, 'country': 3235, 'notHubei': 890},
{
'date': '02.04', 'hubei': 3156, 'country': 3893, 'notHubei': 737},
{
'date': '02.05', 'hubei': 2987, 'country': 3697, 'notHubei': 710},
{
'date': '02.06', 'hubei': 2447, 'country': 3143, 'notHubei': 696},
{
'date': '02.07', 'hubei': 2841, 'country': 3401, 'notHubei': 560},
{
'date': '02.08', 'hubei': 2147, 'country': 2656, 'notHubei': 509},
{
'date': '02.09', 'hubei': 2618, 'country': 3062, 'notHubei': 444},
{
'date': '02.10', 'hubei': 2097, 'country': 2484, 'notHubei': 387},
{
'date': '02.11', 'hubei': 1638, 'country': 2022, 'notHubei': 384},
{
'date': '02.12', 'hubei': 14840, 'country': 15153, 'notHubei': 313},
{
'date': '02.13', 'hubei': 4832, 'country': 5093, 'notHubei': 261},
{
'date': '02.14', 'hubei': 2420, 'country': 2644, 'notHubei': 224},
{
'date': '02.15', 'hubei': 1843, 'country': 2009, 'notHubei': 166},
{
'date': '02.16', 'hubei': 1933, 'country': 2051, 'notHubei': 118},
{
'date': '02.17', 'hubei': 1807, 'country': 1891, 'notHubei': 84},
{
'date': '02.18', 'hubei': 1693, 'country': 1751, 'notHubei'