新型冠状病毒肺炎疫情最新情况数据分析

本文对新型冠状病毒肺炎疫情最新情况进行分析数据分析

目录

1.准备数据

数据来源:国家卫生健康委员会
因为国家卫健委使用的反爬技术比较高,首先网站是shtml,cookies一直在变,我实测基本在20秒不到就会变化一次;另外做了一些反反爬,但是好像没有用,后来发现武汉市卫生健康委员会官网基本没有反爬,但是数据都是国家卫生健康委员会发布的数据,既然数据相同,再次就走了捷径,使用了武汉市卫生健康委员会官网的数据。
由于时间关系,我只爬取了2020年2月25日-3月3日的数据进行分析。读者可根据我的方法进行二次开发。

2.解析数据
3.对数据进行可视化分析

使用Python Matplotlib进行数据的可视化分析

4.对数据进行保存

在次我先将我爬取到的数据分享给大家,供大家进行二次开发。
链接:https://pan.baidu.com/s/1lvA3J6FfLcgnBepjDSBJog
提取码:f2c0

在这里插入图片描述

正文

1.准备数据

爬取目标
在这里插入图片描述
获取每天报告的url在这里插入图片描述

import requests
import re
from lxml import etree

url = 'http://wjw.wuhan.gov.cn/front/web/list3rd/yes/802'

headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36'}
response = requests.get(url=url,headers=headers)
html_text = response.text
html = etree.HTML(response.text)
data_url_url = html.xpath('//div[@class="xxgksublist"]/a/@href')  
data_title = html.xpath('//div[@class="xxgksublist"]/a/@title')
# print(data_url,data_title)
data_url = []
for i in range(len(data_url_url)):
    if '湖北省新冠肺炎疫情情况' in data_title[i]:
        continue
#     data_url[data_title[i]] = data_url_url[i]
    data_url.append(data_url_url[i])
print(data_url)

爬取部分结果
在这里插入图片描述

2.解析数据

爬取每日报告信息,并存储到列表中备用。

data = []
for i in range(len(data_url)):
    url = data_url[i]
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36'
    }
    response = requests.get(url=url,headers=headers)
    html_text = response.text
    time = re.findall('<div class="showZxftH".*?<h1.*?>(.*?)新型冠状病毒肺炎疫情最新情况</h1>',html_text,re.S)[0]
    show_time = re.findall('<div class="showZxftH".*?<h2>.*?发布时间:......(.*?)......................点击数.*?</h2>',html_text,re.S)[0]
    data_text = re.findall('<div class="TRS_Editor">.*?<span style.*?>(.*?)</span>',html_text,re.S) 
    
    data_one = re.findall('.*?31个省(自治区、直辖市)和新疆生产建设兵团报告新增确诊病例(.*?)例.*?',data_text[0],re.S)
    data_one = int(data_one[0])
    data_two = re.findall('新增死亡病例(.*?)例',data_text[0],re.S)
    data_two = int(data_two[0])
    data_three = re.findall('新增疑似病例(.*?)例',data_text[0],re.S)
    data_three = int(data_three[0])
    data_four = re.findall('当日新增治愈出院病例(.*?)例',data_text[0],re.S)
    data_four = int(data_four[0])
    data_five = re.findall('解除医学观察的密切接触者(.*?)人',data_text[0],re.S)
    data_five = int(data_five[0])
    data_six = re.findall('现有确诊病例(.*?)例',data_text[0],re.S)
    data_six = int(data_six[0])
    data_seven = re.findall('累计治愈出院病例(.*?)例',data_text[0],re.S)
    data_seven = int(data_seven[0])
    data_eight = re.findall('累计死亡病例(.*?)例',data_text[0],re.S)
    data_eight = int(data_eight[0])
    data_nine = re.findall('累计报告确诊病例(.*?)例',data_text[0],re.S)
    data_nine = int(data_nine[0])
    data_ten = re.findall('现有疑似病例(.*?)例',data_text[0],re.S)
    data_ten = int(data_ten[0])
    data_eleven = re.findall('累计追踪到密切接触者(.*?)人',data_text[0],re.S)
    data_eleven = int(data_eleven[0])
    data_twelve = re.findall('尚在医学观察的密切接触者(.*?)人',data_text[0],re.S)
    data_twelve = int(data_twelve[0])

    my_dict = {
        '发布时间:':show_time,
        '日期':time,
        '新增确诊病例':data_one,
        '新增死亡病例':data_two,
        '新增疑似病例':data_three,
        '当日新增治愈出院病例':data_four,
        '解除医学观察的密切接触者':data_five,
        '现有确诊病例':data_six,
        '累计治愈出院病例':data_seven,
        '累计死亡病例':data_eight,
        '累计报告确诊病例':data_nine,
        '现有疑似病例':data_ten,
        '累计追踪到密切接触者':data_eleven,
        '尚在医学观察的密切接触者':data_twelve   
    }
    data.append(my_dict)
for j in range(len(data)):
    print(data[j])

爬取结果
在这里插入图片描述

3.对数据进行可视化分析

这里只展示部分分析结果,读者可根据爬取到的数据进行其他方面的数据挖掘和分析。
注意:以下部分代码需要字体文件,没有.ttf,这里奉上下载地址,下载后放到代码文件根目录即可。

from matplotlib import pyplot as plt
from matplotlib import font_manager
x= []
y= []
for i in range(len(data)):
    plt.rcParams['font.sans-serif'] = ['FangSong']
    x.append(data[i]['日期'])
    y.append(data[i]['新增确诊病例'])
x.reverse()
y.reverse()
plt.figure(figsize=(15,8),dpi=250)

# 绘制条形图
rects = plt.bar(range(len(x)),[int(i) for i in y],width=0.3,color= 'red')

plt.xticks(range(len(x)),x)
plt.yticks(range(0,1050,50),range(0,1050,50))
plt.title('新增确诊病例')
plt.xlabel('日期')
plt.ylabel('新增确诊病例')
# 在条形图上加标注(水平居中)
for rect in rects:
    height = rect.get_height()
    plt.text(rect.get_x() + rect.get_width() / 2, height+10, str(height),ha="center")
plt.show()

在这里插入图片描述

import matplotlib.pyplot as plt
import matplotlib.font_manager as fm  #字体管理器

x_data = []
y_data = []
y_data2 = []
for i in range(len(data)):
    plt.rcParams['font.sans-serif'] = ['FangSong']
    x_data.append(data[i]['日期'])
    y_data.append(data[i]['新增确诊病例'])
    y_data2.append(data[i]['新增死亡病例'])
x_data.reverse()
y_data.reverse()
y_data2.reverse()

ln1, = plt.plot(x_data,y_data,color='red',linewidth=2.0,linestyle='-')
ln2, = plt.plot(x_data,y_data2,color='blue',linewidth=2.0,linestyle='-')

my_font = fm.FontProperties(fname="华文仿宋.ttf")

plt.title("数据",fontproperties=my_font) #设置标题及字体

plt.legend(handles=[ln1,ln2],labels=['新增确诊病例','新增死亡病例'],prop=my_font)

ax = plt.gca()
ax.spines['right'].set_color('none')  # right边框属性设置为none 不显示
ax.spines['top'].set_color('none')    # top边框属性设置为none 不显示

plt.show()

在这里插入图片描述

from matplotlib import pyplot as plt
x= []
y= []
for i in range(len(data)):
    plt.rcParams['font.sans-serif'] = ['FangSong']
    x.append(data[i]['日期'])
    y.append(data[i]['新增确诊病例'])
x.reverse()
y.reverse()
# 传入x和y, 通过plot画折线图
plt.plot(x, y, marker='o') 
plt.title('新增确诊病例')
plt.show()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.对数据进行保存

将爬取到的数据保存到Excel文件中。

import xlrd
import xlwt

new_excel=xlwt.Workbook(encoding='utf-8')
sheet1=new_excel.add_sheet('sheet')
sheet1.write(0,0,'发布时间')
sheet1.write(0,1,'日期')
sheet1.write(0,2,'新增确诊病例')
sheet1.write(0,3,'新增死亡病例')
sheet1.write(0,4,'新增疑似病例')
sheet1.write(0,5,'当日新增治愈出院病例')
sheet1.write(0,6,'解除医学观察的密切接触者')
sheet1.write(0,7,'现有确诊病例')
sheet1.write(0,8,'累计治愈出院病例')
sheet1.write(0,9,'累计死亡病例')
sheet1.write(0,10,'累计报告确诊病例')
sheet1.write(0,11,'现有疑似病例')
sheet1.write(0,12,'累计追踪到密切接触者')
sheet1.write(0,13,'尚在医学观察的密切接触者')
for i in range(1,len(data)+1):
    sheet1.write(i,0,data[i-1]['发布时间:'])
    sheet1.write(i,1,data[i-1]['日期'])
    sheet1.write(i,2,data[i-1]['新增确诊病例'])
    sheet1.write(i,3,data[i-1]['新增死亡病例'])
    sheet1.write(i,4,data[i-1]['新增疑似病例'])
    sheet1.write(i,5,data[i-1]['当日新增治愈出院病例'])
    sheet1.write(i,6,data[i-1]['解除医学观察的密切接触者'])
    sheet1.write(i,7,data[i-1]['现有确诊病例'])
    sheet1.write(i,8,data[i-1]['累计治愈出院病例'])
    sheet1.write(i,9,data[i-1]['累计死亡病例'])
    sheet1.write(i,10,data[i-1]['累计报告确诊病例'])
    sheet1.write(i,11,data[i-1]['现有疑似病例'])
    sheet1.write(i,12,data[i-1]['累计追踪到密切接触者'])
    sheet1.write(i,13,data[i-1]['尚在医学观察的密切接触者'])
new_excel.save('提取信息.xls')

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45104240/article/details/104662089