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

相关推荐
千码君20161 小时前
React Native:从react的解构看编程众多语言中的解构
java·javascript·python·react native·react.js·解包·解构
淮北4941 小时前
windows安装minicoda
windows·python·conda
Akamai中国1 小时前
Linebreak赋能实时化企业转型:专业系统集成商携手Akamai以实时智能革新企业运营
人工智能·云计算·云服务
LiJieNiub2 小时前
读懂目标检测:从基础概念到主流算法
人工智能·计算机视觉·目标跟踪
weixin_519535773 小时前
从ChatGPT到新质生产力:一份数据驱动的AI研究方向指南
人工智能·深度学习·机器学习·ai·chatgpt·数据分析·aigc
爱喝白开水a3 小时前
LangChain 基础系列之 Prompt 工程详解:从设计原理到实战模板_langchain prompt
开发语言·数据库·人工智能·python·langchain·prompt·知识图谱
takashi_void3 小时前
如何在本地部署大语言模型(Windows,Mac,Linux)三系统教程
linux·人工智能·windows·macos·语言模型·nlp
OpenCSG3 小时前
【活动预告】2025斗拱开发者大会,共探支付与AI未来
人工智能·ai·开源·大模型·支付安全
生命是有光的3 小时前
【深度学习】神经网络基础
人工智能·深度学习·神经网络
数字供应链安全产品选型3 小时前
国家级!悬镜安全入选两项“网络安全国家标准应用实践案例”
人工智能·安全·web安全