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

相关推荐
jndingxin1 小时前
OpenCV CUDA模块设备层-----高效地计算两个 uint 类型值的带权重平均值
人工智能·opencv·计算机视觉
Sweet锦1 小时前
零基础保姆级本地化部署文心大模型4.5开源系列
人工智能·语言模型·文心一言
笑稀了的野生俊2 小时前
在服务器中下载 HuggingFace 模型:终极指南
linux·服务器·python·bash·gpu算力
Naiva2 小时前
【小技巧】Python+PyCharm IDE 配置解释器出错,环境配置不完整或不兼容。(小智AI、MCP、聚合数据、实时新闻查询、NBA赛事查询)
ide·python·pycharm
hie988942 小时前
MATLAB锂离子电池伪二维(P2D)模型实现
人工智能·算法·matlab
晨同学03272 小时前
opencv的颜色通道问题 & rgb & bgr
人工智能·opencv·计算机视觉
路来了2 小时前
Python小工具之PDF合并
开发语言·windows·python
蓝婷儿2 小时前
Python 机器学习核心入门与实战进阶 Day 3 - 决策树 & 随机森林模型实战
人工智能·python·机器学习
大千AI助手2 小时前
PageRank:互联网的马尔可夫链平衡态
人工智能·机器学习·贝叶斯·mc·pagerank·条件概率·马尔科夫链
AntBlack3 小时前
拖了五个月 ,不当韭菜体验版算是正式发布了
前端·后端·python