本文将展示如何使用Python生成的数据来填充数据库。我还将向你展示如何使用Neo4j沙箱,这样就可以使用不同的Neo4j数据库设置。
可以在这里找到一个谷歌Colab笔记本:https://colab.research.google.com/drive/1J9__HotNoINHpucoipLH-4qWc48GALAk?usp=sharing
里面有这篇文章的代码。(那本笔记本上有如何连接Colab和Kaggle的说明,可以让你更快地下载数据。)
现在我们可以开始用Python做一些数据处理了。
为了写这篇文章,我们将使用在Kaggle上找到的arXiv数据集,其中包含超过170万篇STEM学术论文。(在写这篇文章的时候,已经是第18版了。)你可以将数据下载到本地机器
https://www.kaggle.com/Cornell-University/arxiv
现在进入笔记本,我们可以开始查看数据。我通过以下方式加载数据:
(你不必使用tqdm,但我发现在文件大小超过179万个条目时检查进度很有帮助。)
可以通过df看到,我们的数据结构为:
假设我们想用这个数据框构建一个图,我们想知道哪些作者发表了哪些论文,以及这些论文与哪些类别相关联。
然后,我们希望有三种不同的节点类型与之对应:作者、论文和类别。
每个节点类型都有一两个属性。对于作家来说,有作者的名字。论文可以有ID和标题。最后,类别有自己的名称。我们也有一些关系:作者和作者,论文和论文。
因此,我们的目标是拥有以下数据模型(用arrows.app绘制):
有一些列对我们很有用。例如,我打算保留id,这样我们就可以使用它作为每个论文的唯一索引。之后,我想要得到每个作者的个人列表。此外,authors_parsed列为我们提供了一个更清晰的所有作者列表。当然,我们将保留标题栏作为论文的主要属性。最后,我想保留categories列。
下一步是稍微清理一下数据,这样数据帧的每行有一个作者,每行有一个类别。例如,我们看到authors_parsed列给出了一个列表,其中每个条目在名称后面都有一个多余的逗号。
如果我们简单地将其导入到数据库中,我们将得到author节点,如(显示一个小示例):
由于这不是一件令人愉快的事情(并且会导致查询不是最优雅的),我们需要稍微清理一下。我们还看到categories列可以有一个单独的类别,也可以有几个不采用传统列表格式的类别(如本示例的最后一行所示):
我们可以在Cypher中这样做,但为了这篇文章的目的,我们将在Python中做清理,以便说明。
创建两个帮助函数来清理这两列:
得到的数据帧:
热门跟贴