目标网站:实时更新:新冠肺炎疫情最新动态 (qq.com)
1. 进入网页-打开开发者工具-刷新页面
2. 搜索关键字-网络-标头-找到(请求url,请求方法,User-Agent)
3. 网络-预览-找到(对应文件的数据),数据的结构如下图
获取数据- 导入用到的模块
# 请求网页
import requests
# 数据处理
import pandas as pd
# 日期处理
import time
- 请求数据——封装函数只是为了帅
# 获取疫情数据函数
def getdata(url,headers):
data = requests.get(url,headers)
# print(data.status_code)#200
# print(data.encoding)#utf-8
# data.encoding = 'utf-8'
return data
# 调用函数
url = 'https://api.inews.qq.com/newsqa/v1/query/inner/publish/modules/list?modules=statisGradeCityDetail,diseaseh5Shelf'
headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36 Edg/100.0.1185.29'}
data = getdata(url,headers)
# print(data.text)
- 数据处理
# 寻找累计数据
china_data = data.json()['data']['diseaseh5Shelf']['areaTree'][0]['children']
# 存放数据
data_li = []
for child in china_data:
# print(child['name'])
data_dict = {}
# 地区名称
data_dict['province'] = child['name']
# 新增确认
data_dict['nowConfirm'] = child['total']['nowConfirm']
# 死亡人数
data_dict['dead'] = child['total']['dead']
# 治愈人数
data_dict['heal'] = child['total']['heal']
# 累计确诊
data_dict['confirm'] = child['total']['confirm']
# 本土确诊
data_dict['provinceLocalConfirm'] = child['total']['provinceLocalConfirm']
# 死亡率
data_dict['showRate'] = child['total']['showRate']
# 治愈率
data_dict['showHeal'] = child['total']['showHeal']
# 无症状
data_dict['wzz'] = child['total']['wzz']
# print(data_dict)
data_li.append(data_dict)
# print(data_li)
- 存入csv文件
#转化为dataframe类型,根据当天时间命名csv文件
df = pd.DataFrame(data_li)
today = time.strftime('%Y年%m月%d日',time.localtime())
df.to_csv(today+'全国疫情累计数据.csv')
数据可视化
- 导入用到的模块
from matplotlib import pyplot as plt
import pandas as pd
import numpy as np
#matplotlib画图中中文显示会有问题,需要这两行设置默认字体
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
- 多数据系列条形图,显示当前确诊病例和治愈病例。
#matplotlib画图中中文显示会有问题,需要这两行设置默认字体
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
df = pd.read_csv('2022年04月12日全国疫情累计数据.csv')
df=df.sort_values(by='nowConfirm', ascending=False)
x_label=np.array(df["province"])
x=np.arange(5)
y1=np.array(df["nowConfirm"][:5])
y2=np.array(df["heal"][:5])
fig=plt.figure(figsize=(10,10))
plt.subplots_adjust(left=0.1, right=0.9, top=0.9, bottom=0.1)
plt.bar(x,y1,width=0.3,color='#00AFBB',label='nowConfirm',edgecolor='k', linewidth=0.25)
plt.bar(x+0.3,y2,width=0.3,color='#FC4E07',label='heal',edgecolor='k', linewidth=0.25)
plt.xticks(x+0.15,x_label[:5],size=12)
plt.yticks(size=12)
plt.legend(loc=(1,0.5),ncol=1,frameon=False)
plt.grid(axis="y",c=(217/256,217/256,217/256))
结果:
- 堆积系列条形图,显示当前确诊病例,治愈病例,死亡比例。
df = pd.read_csv('2022年04月12日全国疫情累计数据.csv')
x_label = np.array(df["province"])[:5]
n_row,n_col=df.shape
x_value=np.arange(n_row)[:5]
y1=np.array(df["nowConfirm"][:5])
y2=np.array(df["heal"][:5])
y3=np.array(df["dead"][:5])
fig=plt.figure(figsize=(10,10))
plt.subplots_adjust(left=0.1, right=0.9, top=0.9, bottom=0.1)
plt.bar(x_value,y1,width=0.5,color='blue',label='nowConfirm',edgecolor='k', linewidth=0.25)
plt.bar(x_value,y2,width=0.5,color='green',label='heal',bottom=y1,edgecolor='k', linewidth=0.25)
plt.bar(x_value,y3,width=0.5,color='red',label='dead',bottom=np.array(y2)+np.array(y1),edgecolor='k', linewidth=0.25)
plt.xticks(x_value,x_label,size=10)
#plt.tick_params(axis="x",width=5)
plt.legend(loc=(1,0.3),ncol=1,frameon=False)
plt.grid(axis="y",c=(166/256,166/256,166/256))
结果:
- 百分比堆积条形图,显示当前确诊病例,治愈病例,死亡比例的比例。
df = pd.read_csv('2022年04月12日全国疫情累计数据.csv')
x_label = np.array(df["province"])[:5]
n_row,n_col=df.shape
x_value=np.arange(n_row)[:5]
y1=np.array(df["nowConfirm"])[:5]/(df["confirm"])[:5]
y2=np.array(df["heal"])[:5]/(df["confirm"])[:5]
y3=np.array(df["dead"])[:5]/(df["confirm"])[:5]
#bottom_y=np.zeros(n_col)
fig=plt.figure(figsize=(10,10))
#plt.subplots_adjust(left=0.1, right=0.9, top=0.7, bottom=0.1)
plt.bar(x_value,y1,width=0.5,color='blue',label='nowConfirm',edgecolor='k', linewidth=0.25)
plt.bar(x_value,y2,width=0.5,color='green',label='heal',bottom=y1,edgecolor='k', linewidth=0.25)
plt.bar(x_value,y3,width=0.5,color='red',label='dead',bottom=np.array(y2)+np.array(y1),edgecolor='k', linewidth=0.25)
print(plt.gca().get_yticks())
plt.xticks(x_value,x_label,size=10)
plt.gca().set_yticklabels(['{:.0f}%'.format(x*100) for x in plt.gca().get_yticks()])
#plt.tick_params(axis="x",width=5)
plt.legend(loc=(1,0.3),ncol=1,frameon=False)
plt.grid(axis="y",c=(166/256,166/256,166/256))
结果:
数据分析在全国各地严峻的疫情下,需要保持对疫情的足够重视,才能减少感染的可能。
愿疫情远离世间~~~
其他:
除了数据中total下的累计数据,还有today下的当日数据。省内每个地方的数据。
对多天的数据爬取后,可以通过折线图显示疫情的变化走向。
学习的文章:
【爬虫+可视化】Python爬取疫情数据,并做可视化展示_松鼠爱吃饼干的博客-CSDN博客_爬虫可视化
Python爬取疫情数据_FriendshipT的博客-CSDN博客
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)