购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.3 获取数据

配置好环境后,下一步是获取需要的数据。通常,数据具有不同的格式和形式。本书中的示例将演示如何处理常见的数据格式。

2.3.1 维基百科数据

在Jupyter环境中打开 Chapter2.ipynb 文件,我们首先定义URL,链接到2019年英国大选中当选的国会议员列表的维基百科页面:

然后,导入Python的requests和Beautiful Soup包,并使用这两个包下载维基百科页面中的文本。接着,运行html parser,提取页面上的所有表格:

Beautiful Soup

Beautiful Soup是一个Python包,使用这个包能从网页上便捷地抓取信息。更多内容可查看 https://oreil.ly/YB8H3

接下来,我们需要在页面中找到想要的表格。在本示例中,我们选择包含“Member returned”(列名)的表格。在该表格中,提取列名作为标题,然后遍历所有剩余的行和元素,构建嵌套列表。随后,将列表加载到pandas DataFrame中,将提取的标题设置为DataFrame列名:

最终结果是一个pandas DataFrame,如图2-1所示。可以使用info方法检查DataFrame的信息。

图2-1:维基百科中的英国国会议员信息

总共有652条数据,分为5列。数据看起来不错,因为在每列中,有650行是非空值,这与英国下议院议会选区的数量相符。

最后,通过只保留需要的列以简化数据集:

2.3.2 TheyWorkForYou数据

现在,我们继续下载第二个数据集,并将其加载到另一个单独的DataFrame中,如图2-2所示。

图2-2:TheyWorkForYou中的议员信息

2024/2025年英国大选之后

如果读者是在2024/2025英国大选之后阅读本书,则TheyWork-ForYou网站很可能会更新议员信息。如果读者是在自己的计算机上操作,请使用随书提供的GitHub仓库中的 mps_they_raw.csv 文件。本书同时也提供了原始的维基百科数据 mps_wiki_raw.csv

图2-3列出了DataFrame的前五行,以便查看这些字段包含的信息。

要判断每位议员是否拥有Facebook账户,需要按照URI列中的链接查看他们的TheyWorkForYou主页。我们需要对每一行都执行此操作,因此我们定义一个可以应用于DataFrame轴的函数。

图2-3:TheyWorkForYou数据集的前五行

添加Facebook链接

该函数同样使用之前用来解析维基百科网页的Beautiful Soup包。在本例中,我们提取所有指向facebook.com的链接,然后检查第一个链接。如果这个链接属于TheyWorkForYou,则该页面没有为议员列出Facebook账户,因此返回空字符串;如果有,则返回该链接:

使用apply方法将函数应用于DataFrame的每一行,调用facelink函数并传递URI值作为URL。函数返回值添加到新列Flink中,再将新列添加到DataFrame上。

因为函数需要做很多工作,你的计算机可能需要运行几分钟时间,要耐心等待。运行完成后,再次查看前几行,如图2-4所示,以检查是否得到了想要的Facebook链接。

最后,只保留需要的列,以简化数据集:

图2-4:TheyWorkForYou数据集的前五行,展示了Facebook链接 jkoyEBU4fyyO3FaCuntgQQPNbts6Jxn/kxVAef2Hru9D0pU7g5z5gVNOObk122F4

点击中间区域
呼出菜单
上一章
目录
下一章
×

打开