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

相关推荐
远洋录5 分钟前
Ethan独立开发产品日报 | 2025-04-29
人工智能·程序员·副业·独立开发·赚钱
James. 常德 student6 分钟前
深度循环神经网络
人工智能·rnn·深度学习
一眼青苔9 分钟前
conda添加新python版本环境,如何激活和销毁
开发语言·python·conda
EasyDSS10 分钟前
EasyRTC嵌入式音视频实时通话SDK技术,打造低延迟、高安全的远程技术支持
网络·人工智能
EasyGBS15 分钟前
哪些因素会影响远程视频监控的质量?浅述EasyCVR视频智能诊断技术
大数据·网络·人工智能·音视频
hvinsion16 分钟前
【开源工具】Python打造智能IP监控系统:邮件告警+可视化界面+配置持久化
python·tcp/ip·开源·ip监控
EasyDSS18 分钟前
国标GB28181视频平台EasyGBS在物业视频安防管理服务中的应用方案
网络·人工智能
陈奕昆21 分钟前
1.1探索 LLaMA-Factory:大模型微调的一站式解决方案
人工智能·llama·大模型微调
winner888126 分钟前
从 BERT 到 GPT:Encoder 的 “全局视野” 如何喂饱 Decoder 的 “逐词纠结”
人工智能·gpt·bert·encoder·decoder
Humbunklung1 小时前
Sigmoid函数简介及其Python实现
开发语言·python·深度学习·机器学习