Python 获取全球冠状病毒的确诊、康复、死亡病例
冠状病毒大流行对世界各地的数十亿人生活造成了影响。这次大流行引发了人们的广泛关注。为了确定和获取关于总死亡人数、康复病例、确诊病例等准确信息,开发了多个应用程序。在开发与大流行相关的应用程序时,获取和分析这些信息对开发人员很重要。本文将介绍如何获取COVID-19病例的统计数据。
使用APIs
API(应用程序编程接口)在现代编程和软件开发中非常重要。它使软件应用程序能够相互交互。它定义了其他应用程序可以使用的一组协议,以与软件应用程序进行交互、交换数据、功能等。API可以采用各种形式,例如Web API、库API、操作系统API或硬件API。基于HTTP的Web API通常是最常见的。它们使开发人员能够通过对特定端点进行HTTP请求来访问数据和服务。
对于我们接下来的示例,我们将使用以下API: https://disease.sh/v3/covid-19/all
示例
在以下代码中,我们首先导入了所有必要的模块。接下来构建了fetch_data函数,我们使用该函数使用API获取数据的JSON格式。process_data函数将从获取的数据中返回一个数据帧。analyze_cases通过预处理数据帧返回确诊、康复和死亡病例。接下来,我们创建了visualize_data函数,用于绘制数据的条形图。我们使用matplotlib来绘制条形图。我们使用了一个主函数作为我们的驱动代码。
import requests
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
def fetch_data(url):
response = requests.get(url)
data = response.json()
return data
def process_data(data):
df = pd.DataFrame(data, index=[0])
return df
def analyze_cases(df):
confirmed_cases = df['cases'].iloc[0]
recovered_cases = df['recovered'].iloc[0]
death_cases = df['deaths'].iloc[0]
return confirmed_cases, recovered_cases, death_cases
def visualize_data(confirmed_cases, recovered_cases, death_cases):
labels = ['Confirmed', 'Recovered', 'Deaths']
values = [confirmed_cases, recovered_cases, death_cases]
plt.figure(figsize=(8, 6))
sns.barplot(x=labels, y=values)
plt.xlabel("Cases")
plt.ylabel("Count")
plt.title("Global COVID-19 Cases")
plt.show()
def main():
url = "https://disease.sh/v3/covid-19/all"
data = fetch_data(url)
df = process_data(data)
confirmed_cases, recovered_cases, death_cases = analyze_cases(df)
print("Global COVID-19 Cases:")
print("Confirmed cases:", confirmed_cases)
print("Recovered cases:", recovered_cases)
print("Death cases:", death_cases)
visualize_data(confirmed_cases, recovered_cases, death_cases)
if __name__=='__main__':
main()
输出
Global COVID-19 Cases:
Confirmed cases: 690148376
Recovered cases: 662646473
Death cases: 6890206
使用Beautifulsoup进行Web Scrapping
BeautifulSoup是Python中常用的用于Web Scrapping的库。Web Scrapping是从网页中提取有意义数据的过程。该库帮助解析HTML和XML格式的文档。它提供了一个强大且方便的方法来搜索和过滤解析文档中的元素。对于我们的用例,我们可以首先使用Python的requests库获取数据,然后使用BeautifulSoup库提取文本。
Python中的requests库帮助与Web服务进行交互并处理HTTP请求。该库提供了一种用户友好的方式来发送请求并处理响应。使用requests库,开发者可以轻松发送各种HTTP请求,如GET、POST、PUT、DELETE等。它支持不同类型的数据载荷,包括URL编码的表单数据、JSON和文件上传,使其对不同的Web交互非常灵活。
示例
在下面的代码中,我们首先导入了request、BeautifulSoup、seaborn等库。我们创建了fetch_data函数,使用requests库获取数据并返回HTML解析后的内容。extract_case函数利用BeautifulSoup方法提取所需信息。visualize_data函数使用matplotlib库绘制了柱状图,将确诊病例、康复病例和死亡病例作为参数。我们创建了主函数,它是程序的驱动代码。
import requests
from bs4 import BeautifulSoup
import matplotlib.pyplot as plt
import seaborn as sns
def fetch_data(url):
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')
return soup
def extract_cases(soup):
confirmed_cases = int(soup.find('div', class_='maincounter-number').span.text.replace(',', ''))
recovered_cases = int(soup.find_all('div', class_='maincounter-number')[2].span.text.replace(',', ''))
death_cases = int(soup.find_all('div', class_='maincounter-number')[1].span.text.replace(',', ''))
return confirmed_cases, recovered_cases, death_cases
def visualize_data(confirmed_cases, recovered_cases, death_cases):
labels = ['Confirmed', 'Recovered', 'Deaths']
values = [confirmed_cases, recovered_cases, death_cases]
plt.figure(figsize=(8, 6))
sns.barplot(x=labels, y=values)
plt.xlabel("Cases")
plt.ylabel("Count")
plt.title("Global COVID-19 Cases")
plt.show()
def main():
url = "https://www.worldometers.info/coronavirus/"
soup = fetch_data(url)
confirmed_cases, recovered_cases, death_cases = extract_cases(soup)
print("Global COVID-19 Cases:")
print("Confirmed cases:", confirmed_cases)
print("Recovered cases:", recovered_cases)
print("Death cases:", death_cases)
visualize_data(confirmed_cases, recovered_cases, death_cases)
if __name__=='__main__':
main()
输出
Global COVID-19 Cases:
Confirmed cases: 690148376
Recovered cases: 662646473
Death cases: 6890206
使用Selenium库进行网页抓取
Selenium是一个强大的Python库,用于自动化浏览器操作。它允许程序员通过程序控制浏览器,从而帮助他们自动化任务。Selenium支持包括Chrome、Firefox、Safari和Microsoft Edge在内的各种浏览器。它通过与浏览器交互的WebDriver来桥接Selenium库和浏览器。我们可以使用Selenium来自动获取网页内容,以满足我们的特定需求。
示例
在下面的示例中,我们首先导入了必要的模块和库,如webdriver、BeautifulSoup等。接下来,我们使用webdriver方法创建了driver对象。我们使用requests库获取URL的响应。get_html函数返回HTML内容。extract_cases函数是一个用户定义的函数,从已解析的HTML文本中提取数据。接下来,我们创建了visualize_data函数,它从数据中绘制了一个条形图。main函数包含了我们的主要代码。
from selenium import webdriver
from bs4 import BeautifulSoup
import matplotlib.pyplot as plt
import seaborn as sns
def get_html(url):
driver = webdriver.Chrome()
driver.get(url)
html = driver.page_source
driver.quit()
return html
def extract_cases(soup):
confirmed_cases = int(soup.find('div', class_='maincounter-number').span.text.replace(',', ''))
recovered_cases = int(soup.find_all('div', class_='maincounter-number')[2].span.text.replace(',', ''))
death_cases = int(soup.find_all('div', class_='maincounter-number')[1].span.text.replace(',', ''))
return confirmed_cases, recovered_cases, death_cases
def visualize_data(confirmed_cases, recovered_cases, death_cases):
labels = ['Confirmed', 'Recovered', 'Deaths']
values = [confirmed_cases, recovered_cases, death_cases]
plt.figure(figsize=(8, 6))
sns.barplot(x=labels, y=values)
plt.xlabel("Cases")
plt.ylabel("Count")
plt.title("Global COVID-19 Cases")
plt.show()
def main():
url = "https://www.worldometers.info/coronavirus/"
html = get_html(url)
soup = BeautifulSoup(html, 'html.parser')
confirmed_cases, recovered_cases, death_cases = extract_cases(soup)
print("Global COVID-19 Cases:")
print("Confirmed cases:", confirmed_cases)
print("Recovered cases:", recovered_cases)
print("Death cases:", death_cases)
visualize_data(confirmed_cases, recovered_cases, death_cases)
if __name__ == '__main__':
main()
输出
Global COVID-19 Cases:
Confirmed cases: 690148376
Recovered cases: 662646473
Death cases: 6890206
结论
在本文中,我们了解了如何获取关于COVID-19的统计数据。我们既分析了数据,也可视化了数据。Python是一种通用脚本语言,提供了处理网络抓取和API的各种方式。因此,我们有多种选项,比如API,网络抓取等来获取相关数据。我们首先使用第三方应用程序提供的API来获得相关数据。接下来,我们使用了网络抓取的概念从网页中提取所需数据。