本文约2100字,建议阅读6分钟。
使用pandas数据分析工具来学习一些基本的pandas命令,并探索数据集中包含的内容。
欧洲疾病预防控制中心()提供全球每日更新的COVID-19数据(
publications-data/download-todays-data-geographic-distribution-covid-19-cases-worldwide),这些数据可以用JSON,CSV或XML格式下载。在本教程中,我们将使用pandas数据分析工具来学习一些基本的pandas命令,并探索数据集中包含的内容。
配置开发环境
安装好Python3版本,本文中还须安装pandas。可以通过以下命令将其安装到新的虚拟环境中:
python-mvenvcovidpandassourcecovidpandas/bin/activatepipinstallpandas
现在,我们准备获取COVID-19数据,并开始使用pandas进行分析。
获取COVID-19数据
在浏览器中下载当前有关全球COVID-19病例地理分布的数据
()屏幕截图如下。
将CSV数据导入Pandas
COVID-19数据存储在CSV中,现在我们需要将其导入pandasDataFrame中。我们需要先导入pandas,以便我们可以读取下载的数据。
frompandasimportread_csvdf=read_csv("")如果您遇到类似UnicodeDecodeError:'utf-8'codeccan'tdecodebyte0xe7的报错信息,请不要担心,直接运行此命令以便pandas可以正确读取CSV。
#makesurethefilenameofthecsvmatchesyourfile'sname!df=read_csv("",encoding="ISO-8859-1")现在,我们将数据加载到pandasDataFrame中,并且可以开始运行代码以生成数据集中的内容。
运行Pandas命令
首先让我们看一下数据样本的大致内容。当我打开某些东西以查找前五行和后五行中包含的内容时,通常会运行head和tail函数。
()
您应该看到6行输出:其中一列是列标题,另一列是CSV数据的前5行:
dateRepdaymonthyearcasesdeathscountriesAndTerritoriesgeoIdcountryterritoryCodepopData2018028/03/20202832020161/03/2020273202000/03/20202632020330/03/2020253202020/03/2020243202061
tail函数查看DataFrame中的最后五行。
()
tail输出如下:
dateRepdaymonthyearcasesdeathscountriesAndTerritoriesgeoIdcountryterritoryCodepopData2018731525/03/2020253202000/03/2020243202001/03/2020233202000/03/2020223202010/03/2020213202010
注意您也可以像(10)一样将整数传递到头部或尾部,以获取前n个行或后n个行。
根据尾函数,我们大约有7320行数据(因为第一行的索引为0),我们可以使用count函数确认每一列中有多少数据。
()
count的输出如下所示:
dateRep7320day7320month7320year7320cases7320deaths7320countriesAndTerritories7320geoId7306countryterritoryCode7254popData20187311dtype:int64
如果我们想查看这些列中的数据,并查找最高值怎么办?
()
在此数据集中,我们得到18695作为输出。如何查看所有列的标准统计值?这就是describe函数派上用场的地方。
describe提供了标准统计量度,例如数据集中所有数据的最小值,最大值,中位数和均值。在本例子中输出如下:
+03+07+08+0325%10.0000001.0000002020.0000000.0000000.0000004.137309e+0650%18.0000002.0000002020.0000000.0000000.0000001.072767e+0775%24.0000003.0000002020.0000005.0000000.0000005.139301e+07+09
快速查看列的数据是否相互关联如何?corr函数是我们所需要的。
()
对于本例的数据集,corr输出如下:
毫不奇怪,我们看到列与其自身之间存在1.000000的相关性。如果我们没有看到那个结果,我们将不得不担心数据的准确性!对于其他列,查看它们的相关性可能没有意义。这是您需要考虑数据的地方。完全不相关的列之间通常存在关联,只是因为数据是以某种方式构造的。
开发人员需要有严格的统计学背景,否则您可能需要先掌握自己的统计知识,然后才能说出数据中是否有问题。
让我们继续探索数据。我们可以选择列并确定其中包含多少个唯一项。例如,列出了多少个国家和地区?
()
本例中的结果是196。
探索数据集
这些函数非常适合用于基本查询以了解数据集中的内容,但是我们如何通过将一些命令串在一起来提出实际问题呢?
由于我们使用了上面的count函数,我们现在知道该集合中有7320行。每行代表一个国家中一天的数据。现在问一个问题。在这些国家中,有多少天报告了10起或更多的病例?
让我们创建一个名为df2的新数据集,找出其中当天仅报告10个或更多案例的行,然后计算其中的行数。
df2=df[df['cases']=10]()
本例中输出的值为1531。在列出的196个国家或地区中,每天有报告1531起10或更多COVID-19病例。但是1531这个数字很难向人们解释清楚含义。我们应该挑选一个国家,并显示一天有10或更多病例报告的次数。例如可以选取越南这个国家来看一下:
df2[df2['countriesAndTerritories']=='Vietnam']
按列输出完整的数据如下:
dateRepdaymonthyearcasesdeathscountriesAndTerritoriesgeoIdcountryterritoryCodepopData2018721728/03/20202832020160/03/20202632020140/03/20202532020110/03/20202332020240/03/20201932020150
我们还可以在此处使用count函数来确认,到目前为止,越南已经有五天报告了10个或更多新病例:
df2[df2['countriesAndTerritories']=='Vietnam'].count()
我们得到列的输出为5,和前述吻合。
总结
本文导入并查看了欧洲疾病预防控制中心的COVID-19数据集。我们学习了一些基本的Pandas命令,建议您仔细阅读DataFrame文档列表(
/),以了解该工具提供给开发人员的所有其他便捷功能。
校对:王欣
—完—