Python3实现监控新型冠状病毒肺炎疫情的示例代码

1. 引言

新冠病毒自2019年底首次在中国湖北省武汉市爆发以来,迅速蔓延至全球。病毒的传播速度非常快,许多国家和地区都已经采取了各种措施,以遏制病毒的传播。在这个过程中,数据是至关重要的。了解病例数量、死亡人数、治愈人数等信息,对于评估疫情和采取有效的措施至关重要。本文将介绍如何使用Python 3来监控新冠病毒的疫情,并显示病例数量、死亡人数和治愈人数。

2. 环境准备

在开始之前,请确保您的计算机上安装了Python 3和一些必要的库。我们将使用以下库:

requests : 一个用于发送HTTP请求的库。

bs4: 一个用于从HTML和XML文件中提取数据的库。

matplotlib : 一个用于创建图表的库。

pandas : 一个用于处理和分析数据的库。

您可以使用以下命令安装它们:

!pip install requests

!pip install bs4

!pip install matplotlib

!pip install pandas

3. 获取数据

我们将使用一个网站来获取数据,这个网站提供了病例数量、死亡人数和治愈人数的最新统计数据。我们可以从网站上的HTML代码中提取这些数据。

使用Python发送HTTP请求并获取网页:

import requests

url = 'https://covid19.who.int/'

r = requests.get(url)

html_content = r.text

print(html_content)

将网页的HTML代码保存到一个HTML文件中,以便我们可以获得它所需的数据:

with open('covid19.html', 'w', encoding='utf-8') as f:

f.write(html_content)

4. 解析数据

现在,我们需要从HTML代码中提取疫情数据。我们将使用Python中的BeautifulSoup库来解析HTML代码。

首先,我们需要打开HTML文件并将其传递给BeautifulSoup库的构造函数:

from bs4 import BeautifulSoup

with open('covid19.html', 'r', encoding='utf-8') as f:

html_content = f.read()

soup = BeautifulSoup(html_content, 'html.parser')

print(soup.prettify())

现在,我们可以使用BeautifulSoup的find()和find_all()方法来查找特定标记,并提取数据。以下代码找到主要的表并获取其中的所有行:

table = soup.find('table', attrs={'class':'table table-bordered table-hover dataTable no-footer'})

rows = table.find_all('tr')

for row in rows:

print(row.text)

我们可以看到所有行的文本输出。现在,我们需要将每行的文本分割为单独的列,以便可以提取所需的数据。我们还需要删除每列中的换行符:

data = []

for row in rows:

cols = row.find_all('td')

cols = [col.text.strip() for col in cols]

data.append(cols)

print(data)

现在我们已经成功地提取了疫情数据,并将其保存到了一个2D列表中。下一步是将列表转换为DataFrame,这将使我们更容易处理和分析数据。

5. 处理数据

现在,我们需要将2D列表转换为DataFrame:

import pandas as pd

df = pd.DataFrame(data)

print(df)

这个DataFrame包含了表格中的所有数据,但该数据还没被清理。数据包括不需要的列和行,也包括额外的字符。我们需要清理这个数据集,使其更容易使用和分析。

首先,我们需要删除前3行和最后1行,因为它们只包含额外的字符:

df = df.iloc[3:-1]

print(df)

这个DataFrame现在只包含疫情数据,但我们仍然需要对列名进行一些调整。我们需要将列名从列表中提取,并重命名它们:

headers = []

for i in range(len(rows[0].find_all('th'))):

headers.append(rows[0].find_all('th')[i].text)

df.columns = headers

print(df)

现在我们已经重新命名了列,但有一个小问题:最后两列包含了需要删除的字符。我们需要删除这些字符并将这两列的数据转换为整数类型:

df['Total Deaths'] = df['Total Deaths'].map(lambda x: x.lstrip('±').replace(',', '')).astype(int)

df['Total Recovered'] = df['Total Recovered'].map(lambda x: x.replace(',', '')).astype(int)

print(df)

现在我们已经处理过数据了,并且有一个干净的DataFrame,可以方便地用于分析和可视化。

6. 可视化数据

现在我们将使用matplotlib库来创建一个简单的图表,显示每个国家的病例数量、死亡人数和治愈人数。

首先,我们需要选择3个列并创建一个新Dataframe:

cols = ['Name', 'Total Cases', 'Total Deaths', 'Total Recovered']

df2 = df[cols].sort_values('Total Cases', ascending=False).head(10)

print(df2)

现在我们有了一个包含前10个国家的新DataFrame,并且它们是按照病例数量排名的。接下来,我们将使用这个新DataFrame来创建一个图表。

以下是一个简单的散点图,它显示每个国家的病例数量和死亡人数。

import matplotlib.pyplot as plt

plt.scatter(df2['Total Cases'], df2['Total Deaths'])

plt.title('Total Cases vs Total Deaths')

plt.xlabel('Total Cases')

plt.ylabel('Total Deaths')

plt.show()

我们可以使用相同的数据来创建一个堆叠条形图,它显示每个国家的病例数量、死亡人数和治愈人数。

stacked_data = df2[['Total Cases', 'Total Deaths', 'Total Recovered']].apply(lambda x: x/x.sum(), axis=1)

stacked_data.plot(kind="barh", stacked=True)

plt.title("Top 10 Countries affected")

plt.xlabel("Proportion of cases")

plt.legend(loc="lower right")

plt.show()

我们可以看到,中国是最受影响的国家,其病例数量超过了其他国家。但许多国家的死亡率比例要高得多。

7. 总结

本文介绍了如何使用Python 3和一些流行的库来监控新冠病毒的疫情,并分析和可视化疫情数据。我们首先使用requests库从网站中获取数据,然后使用BeautifulSoup库解析HTML代码。接下来,我们将数据转换为Pandas DataFrame,清理数据并进行分析和可视化。最后,我们创建了一个简单的散点图和一个堆叠条形图来显示疫情数据。

Python和相关的库已经成为数据科学家、分析师和工程师的首选语言和工具之一。如今,Python在金融、医疗保健、教育和其他许多行业中都得到了广泛的应用。疫情作为当前全球最重要的问题之一,我们可以使用Python来监控和分析数据,并采取必要的措施。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签