【数据挖掘】使用 Python 分析公共数据【01/10】

一、说明

本文讨论了如何使用 Python 使用 Pandas 库分析官方 COVID-19 病例数据。您将看到如何从实际数据集中收集见解,发现乍一看可能不那么明显的信息。特别是,本文中提供的示例说明了如何获取有关疾病在不同国家/地区传播速度的信息。

二、准备您的工作环境

要继续操作,您需要在 Python 环境中安装 Pandas 库。如果您还没有它,您可以使用 pip 命令安装它:

ax 复制代码
pip install pandas 

然后,您需要选择一个实际的数据集来使用。对于本文中提供的示例,我需要一个数据集,其中包含按国家/地区和日期划分的COVID-19确诊病例总数的信息。这样的数据集可以从 Novel Coronavirus (COVID-19) Cases Data - Humanitarian Data Exchange 下载为CSV文件:time_series_covid19_confirmed_global_narrow.csv

三、加载数据并准备进行分析

在将下载的 CSV 文件读取到 pandas 数据帧之前,我手动删除了不必要的第二行:

ax 复制代码
#adm1+name,#country+name,#geo+lat,#geo+lon,#date,#affected+infected+value+num 

然后我把它读到熊猫数据帧中:

ax 复制代码
>>> import pandas as pd
>>> df= pd.read_csv("/home/usr/dataset/time_series_covid19_confirmed_global_narrow.csv") 

Let's now take a closer look at the file structure. The simplest way to do it is with the head method of the dataframe object:

ax 复制代码
>>> df.head()
 Province/State Country/Region Lat Long Date Value
0 NaN Afghanistan 33.0 65.0 2020--04--01 237
1 NaN Afghanistan 33.0 65.0 2020--03--31 174
2 NaN Afghanistan 33.0 65.0 2020--03--30 170
3 NaN Afghanistan 33.0 65.0 2020--03--29 120
4 NaN Afghanistan 33.0 65.0 2020--03--28 110 

由于我们不打算执行考虑受影响国家在地理上彼此距离有多近的复杂分析,因此我们可以安全地从数据集中删除地理纬度和地理经度列。这可以按如下方式完成:

ax 复制代码
<span style="background-color:#f2f2f2"><span style="color:#242424">>>> df.drop("Lat", axis=1, inplace=True)
>>> df.drop("Long", axis=1, inplace=True)</span></span>

我们现在的内容应该如下所示:

ax 复制代码
>>> df.head()
 Province/State Country/Region Date Value
0 NaN Afghanistan 2020--04--01 237
1 NaN Afghanistan 2020--03--31 174
2 NaN Afghanistan 2020--03--30 170
3 NaN Afghanistan 2020--03--29 120
4 NaN Afghanistan 2020--03--28 110 

在我们开始删除不必要的行之前,了解数据集中有多少行也会很有趣:

ax 复制代码
>>> df.count
...[18176 rows x 4 columns]> 

四、压缩数据集

浏览数据集中的行,您可能会注意到某些国家/地区的信息是按地区(例如中国)详细说明的。但您需要的是整个国家的合并数据。要完成此合并步骤,您可以按如下方式将 groupby 操作应用于数据集:

ax 复制代码
>>> df = df.groupby(['Country/Region','Date']).sum().reset_index() 

此操作应该减少数据集中的行数,消除省/州列:

ax 复制代码
>>> df.count
...[12780 rows x 3 columns] 

五、执行分析

假设您需要在初始阶段确定疾病在不同国家的传播速度。比如说,你想知道从至少报告1500例病例的那一天起,疾病达到100例需要多少天。

首先,您需要过滤掉受影响不大且确诊病例人数尚未达到大量国家/地区。这可以按如下方式完成:

ax 复制代码
>>> df = df.groupby(['Country/Region'])
>>> df = df.filter(lambda x: x['Value'].mean() > 1000) 

然后,您可以仅检索满足指定条件的那些行:

ax 复制代码
>>> df = df.loc[(df['Value'] > 100) & (df['Value'] < 1500)] 

完成这些操作后,应显著减少行数。

ax 复制代码
>>> df.count
... Country/Region Date Value
685 Austria 2020--03--08 104
686 Austria 2020--03--09 131
687 Austria 2020--03--10 182
688 Austria 2020--03--11 246
689 Austria 2020--03--12 302
... ... ... ...
12261 United Kingdom 2020--03--11 459
12262 United Kingdom 2020--03--12 459
12263 United Kingdom 2020--03--13 802
12264 United Kingdom 2020--03--14 1144
12265 United Kingdom 2020--03--15 1145[118 rows x 3 columns] 

此时,您可能需要查看整个数据集。这可以通过以下代码行完成:

ax 复制代码
>>> print(df.to_string())Country/Region Date Value
685 Austria 2020--03--08 104
686 Austria 2020--03--09 131
687 Austria 2020--03--10 182
688 Austria 2020--03--11 246
689 Austria 2020--03--12 302
690 Austria 2020--03--13 504
691 Austria 2020--03--14 655
692 Austria 2020--03--15 860
693 Austria 2020--03--16 1018
694 Austria 2020--03--17 1332
1180 Belgium 2020--03--06 109
1181 Belgium 2020--03--07 169... 

剩下的就是计算每个国家/地区的行数。

ax 复制代码
>>> df.groupby(['Country/Region']).size()
>>> print(df.to_string())Country/Region
Austria        10
Belgium        13
China          4
France         9
Germany        10
Iran           5
Italy          7
Korea, South   7
Netherlands    11
Spain          8
Switzerland    10
Turkey         4
US             9
United Kingdom 11 

上述清单回答了某个国家从报告至少1500例病例之日起,该疾病需要多少天才能达到大约100例确诊病例的问题。

六、后记

本系列文本,从这里开头,后边我们将陆续深入进行数据分析过程叙述。

Yuli Vasiliev -- Medium

相关推荐
kuiini5 分钟前
python学习-10【模块】
python·学习
她最爱橘了13 分钟前
AppStore评论爬虫
爬虫·python·gui·pyside6
没枕头我咋睡觉14 分钟前
【大语言模型_1】VLLM部署Qwen模型
python·语言模型
lkasi35 分钟前
python文字转wav音频
开发语言·python
Bruce小鬼1 小时前
最新版本TensorFlow训练模型TinyML部署到ESP32入门实操
人工智能·python·tensorflow
sp_fyf_20241 小时前
计算机人工智能前沿进展-大语言模型方向-2024-09-20
人工智能·搜索引擎·语言模型
kinlon.liu1 小时前
AI与自然语言处理(NLP):中秋诗词生成
人工智能·自然语言处理
白如意i1 小时前
如何在 Ubuntu 16.04 服务器上安装 Python 3 并设置编程环境
linux·python·ubuntu
繁依Fanyi1 小时前
使用 Spring Boot + Redis + Vue 实现动态路由加载页面
开发语言·vue.js·pytorch·spring boot·redis·python·算法
正义的彬彬侠2 小时前
举例说明计算一个矩阵的秩的完整步骤
人工智能·机器学习·矩阵·回归