【数据挖掘】使用 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

相关推荐
2503_9317124810 分钟前
2026 论文文献综述逻辑理不清,AI 论文工具快速完成文献综述写作
人工智能
只会安静敲代码的 小周11 分钟前
AI应用开发
python
txg66613 分钟前
Agent 攻击 Agent:自动检测 LLM Agent 中的污点式漏洞
人工智能·深度学习·安全·网络安全
FriendshipT16 分钟前
Ultralytics:解读C3Ghost模块
人工智能·pytorch·python·深度学习·目标检测
Black蜡笔小新16 分钟前
企业AI算力工作站DLTM深度学习推理工作站AI视觉检测助力医疗影像分析
人工智能·深度学习·视觉检测
AI应用苏大大18 分钟前
企业AI采购决策架构缺陷:服务商主导选型导致技术绑架与成本失控的优化方案
人工智能·架构
fu159357456819 分钟前
【边缘计算实战】P3:把卸载策略接到线上——弱网 / 过载 / 节点宕机注入
人工智能·边缘计算
mounter62520 分钟前
探索未来 AI 算力网络的基石:从传统 RoCE 走向 SRv6 驱动的弹性弹性网络(解析 Netdev 0x1A 创新实践)
linux·网络·人工智能·linux kernel·kernel·rdma·rocev2
Java面试题总结20 分钟前
Vue3流式调用大模型接口完整实践
后端·python
江瀚视野20 分钟前
极摩客跑通DSV4 Flash优化模型,本地AI风口已来?
人工智能