爬取疫情数据(python)+可视化

爬取疫情数据(python)+可视化,第1张

信息准备

目标网站:实时更新:新冠肺炎疫情最新动态 (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博客

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/757549.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-01
下一篇 2022-05-01

发表评论

登录后才能评论

评论列表(0条)

保存