当前位置:首页 > 编程知识 > 正文

Python新型冠状病毒表格之数据处理与可视化

在新型冠状病毒疫情肆虐的背景下,数据成为了一个非常重要的指标。本文将从数据获取、数据处理与可视化三个方面介绍如何使用Python对疫情表格进行处理和可视化展示。

一、获取数据

首先,我们需要获得最新的新型冠状病毒数据。网上有很多提供数据统计的公开网站,比如http://ncov.dxy.cn/ncovh5/view/pneumonia,它的结构是通过http请求来获取的,因此我们可以通过requests库向网站发送http请求,然后使用beautifulsoup库来解析获取到的html,找到想要的数据。

import requests
from bs4 import BeautifulSoup
url = 'http://ncov.dxy.cn/ncovh5/view/pneumonia'
response=requests.get(url)
response.encoding=response.apparent_encoding
soup = BeautifulSoup(response.text,'html.parser')
data = soup.find_all('script', attrs={'id': 'getAreaStat'})[0].string

在这段代码中,requests库向http://ncov.dxy.cn/ncovh5/view/pneumonia 发送请求,beautifulsoup库解析返回的html,找到id为getAreaStat的script标签,并返回这个标签的text内容,也就是json格式的疫情数据。

二、数据处理

获取到完整的疫情数据之后,我们需要对它进行处理,把它变成我们想要的格式。这里我们使用pandas来对json数据进行读取和处理。

import pandas as pd
import json
data = json.loads(data.replace('try { window.getAreaStat = ','')[:-14]+ '}catch(e){}')
data_processed = pd.json_normalize(data)

上面的代码中,json.loads将json字符串转为python对象,.replace是将javascript的全局变量转化成空,因为我们只需要json数据。[:-14]表示从字符串截取来保留有效的json数据。pd.json_normalize可以将json数据变成表格形式,更方便地进行数据处理。

三、可视化展示

最后,我们使用matplotlib库对数据进行可视化展示。

import matplotlib.pyplot as plt
import numpy as np
x = data_processed[data_processed['provinceName']=='湖北']['confirmedCount']
y = data_processed[data_processed['provinceName']=='湖北']['deadCount']
z = data_processed[data_processed['provinceName']=='湖北']['curedCount']
pie_labels = ['死亡','治愈','确诊']
pie_values = [x[y.index[0]],z[y.index[0]],y[y.index[0]]]
plt.subplot(1,2,1)
plt.pie(pie_values, labels=pie_labels, autopct='%1.1f%%')
plt.title('湖北省-新型冠状病毒数据统计')
plt.subplot(1,2,2)
index = np.arange(len(x))
bar_width = 0.3
opacity = 0.4
plt.bar(index, x, bar_width, alpha=opacity, color='b', label='确诊病例')
plt.bar(index+bar_width, z, bar_width, alpha=opacity, color='g', label='治愈病例')
plt.bar(index+bar_width+bar_width, y, bar_width, alpha=opacity, color='r', label='死亡病例')
plt.xlabel('日期')
plt.ylabel('数量')
plt.title('湖北省-新型冠状病毒数据趋势')
plt.xticks(index+bar_width, data_processed[data_processed['provinceName']=='湖北']['updateDate'],rotation=90)
plt.legend()
plt.tight_layout()
plt.show()

在这段代码中,我们使用plt.pie和plt.bar分别画出了湖北省的疫情统计饼图和疫情趋势直方图。plt.subplot可以将多个图放在一个图像中显示,plt.pie和plt.bar分别用于饼图和直方图的绘制,plt.xticks用于将X轴的标签旋转90度,使标签不会重叠。

四、总结

本文介绍了如何使用Python对新型冠状病毒疫情数据进行获取、处理和可视化。具体而言,我们使用requests和beautifulsoup库获取数据,使用pandas库对数据进行处理,将json格式的数据转化为表格形式,最后使用matplotlib库对数据进行可视化展示。