图书前言

前    言

由于图数据模型的自然性和它们允许的数据分析范围,人们对图数据库(Graph Database)尤其是Neo4j的兴趣正在增加。本书将引领你在图和Neo4j领域内进行一次旅行。我们将探索Neo4j、Cypher和各种插件(包括官方支持的或来自第三方的插件),这些插件可以扩展数据类型(如APOC和Neo4j Spatial),也可用于数据科学和机器学习(如Graph Data Science插件和GraphAware NLP插件)。

本书有很大一部分都在讨论图算法。你将通过一些著名算法(如最短路径、PageRank或标签传播等)的Python示例实现来了解它们的工作原理,以及如何在Neo4j图中实际使用它们。我们还将提供一些示例应用程序,以启发你何时将这些算法用于合适的用例。

一旦你熟悉了可以在图上运行以提取有关其各个组成部分(节点)或整个图结构信息的不同类型的算法,我们将切换到一些数据科学问题,并探究图结构和图的处理方式。图算法可以增强模型的预测能力。

在完成本书学习之后,你将会理解,Neo4j除了是出色的数据分析工具之外,还可以用于在Web应用程序中公开数据以使分析能实时进行。

本书读者

本书适用于希望存储和处理图数据以获取关键数据见解的数据分析师、业务分析师、图分析师和数据库开发人员。本书还将吸引希望构建适合不同领域的智能图应用程序的数据科学家。阅读本书需要具有一些Neo4j经验。

尽管在本书第2篇“图算法”中使用Python演示了一些算法,但如果你不熟悉Python,也应该可以理解。当然,如果你有使用该语言的经验,则是最好不过,因为本书还应用了Python的一些数据科学库,包括scikit-learn、Pandas和Seaborn等。

 

内容介绍

本书分为4篇共12章,具体介绍如下。

  第1篇是“使用Neo4j进行图建模”,包括第1~3章。

  第1章“图数据库”,阐释了和图数据库相关的概念,包括图论、Neo4j的节点和关系模型定义等。

  第2章“Cypher查询语言”,详细介绍了Neo4j使用的查询语言Cypher的基础知识,本书将使用它来进行数据导入和模式匹配。此外,本章还研究了用于数据导入的APOC实用程序。

  第3章“使用纯Cypher”,解释了如何从结构化和非结构化数据(使用NLP)构建知识图,以及如何应用知识图,并提供了基于图的搜索和推荐引擎等示例。本章使用了GitHub上Neo4j贡献者的图,并将其扩展到自然语言分析和外部公开可用的知识图(如Wikidata)。

  第2篇是“图算法”,包括第4~7章。

  第4章“Graph Data Science库和路径查找”,详细解释了Neo4j的Graph Data Science(GDS)插件的主要原理,并介绍了最短路径算法。

  第5章“空间数据”,介绍了Neo4j Spatial插件的应用,以及如何存储和查询空间数据(点、线和面)。结合Neo4j Spatial和GDS插件,我们创建了一个纽约曼哈顿的路由引擎示例。

  第6章“节点重要性”,演示了不同的中心性算法,其具体应用取决于你如何定义节点重要性、应用场景以及GDS中的用法。

  第7章“社区检测和相似性度量”,介绍了用于检测图中结构的算法,以及如何使用JavaScript库可视化它们。

  第3篇是“基于图的机器学习”,包括第8~10章。

  第8章“在机器学习中使用基于图的特征”,说明了如何从CSV文件开始构建完整的机器学习项目,并阐释了构建预测管道所需的不同步骤(包括特征工程、模型训练和模型评估等)。此外,本章还介绍了如何将CSV数据转换为图,以及如何使用图算法来获得图的特征,增强分类任务的性能。

  第9章“预测关系”,说明了如何在一个随时间变化的图中使用训练集和测试集将链接预测问题表述为机器学习问题。

  第10章“图嵌入—从图到矩阵”,解释了算法如何自动学习图中每个节点的特征。通过使用与单词嵌入类比的方法,我们介绍了DeepWalk算法的工作原理。然后,还深入介绍了图神经网络及其用例。本章使用Python和一些依赖项以及node2vec和GraphSAGE的GDS实现给出了具体应用。

  第4篇是“生产环境中的Neo4j”,包括第11章和第12章。

  第11章“在Web应用程序中使用Neo4j”,介绍了如何使用Python、流行的Flask框架、JavaScript和GraphQL API创建一个Web应用程序。

  第12章“Neo4j扩展”,概述了GDS性能评估和Neo4j 4提供的大数据管理功能(分片技术)。

充分利用本书

学习本书需要可以管理Neo4j数据库(例如更新设置和添加插件等)。建议使用Neo4j Desktop,其下载链接如下:

https://neo4j.com/download/

你可以为每章创建一个图。本书重用了在第2章中开始创建并在第3章中进行了充实的GitHub图。在每章的末尾,还提供了一些思考题。

除第5章“空间数据”和第11章“在Web应用程序中使用Neo4j”中的代码外,本书中其他所有代码均与Neo4j 3.5和Neo4j 4.x兼容。

由于Neo4j Spatial尚未与Neo4j 4.x兼容(在撰写本文时,其最新版本为0.26.2),因此第5章“空间数据”中的代码仅对Neo4j 3.5有效。

同样,在第11章“在Web应用程序中使用Neo4j”中,我们需要使用neomodel软件包(撰写本文时的最新版本为3.3.2),该软件包尚未与Neo4j 4兼容。

本书软硬件和操作系统需求如表P-1所示。

表P-1  软硬件和操作系统需求表

本书涵盖的软件 操作系统/硬件要求

Neo4j(3.5或更高版本) Windows、Linux或macOS;至少8 GB内存

APOC(Neo4j插件)(3.5.0.11或更高版本) Windows、Linux或macOS;至少8 GB内存

neo4j-spatial(插件) Windows、Linux或macOS;至少8 GB内存

续表

本书涵盖的软件 操作系统/硬件要求

Neo4j Graph Data Science(GDS)插件(1.0或更高版本) Windows、Linux或macOS;至少8 GB内存

Python(3.6或更高版本) Windows、Linux或macOS;至少8 GB内存

Node.js(10或更高版本)和npm(仅第11.4节“使用GRANDstack开发React应用程序”) Windows、Linux或macOS;至少8 GB内存

在第11.4节“使用GRANDstack开发React应用程序”中,我们将使用GRANDstack创建一个React应用程序,因此需要在系统上安装Node.js和npm。

建议你通过Github存储库输入自己的代码或下载该代码,这样做将帮助你避免任何与代码的复制和粘贴有关的潜在错误。

下载示例代码文件

读者可以从www.packtpub.com下载本书的示例代码文件。具体步骤如下:

(1)注册并登录:www.packtpub.com。

(2)在页面顶部的搜索框中输入图书名称Hands-On Graph Analytics with Neo4j(不区分大小写,也不必完整输入),即可看到本书,单击打开链接,如图P-1所示。

 

图P-1

(3)在本书详情页面中,找到并单击Download code from GitHub(从GitHub下载代码文件)按钮,如图P-2所示。

 

图P-2  

  提示:

如果你看不到该下载按钮,可能是没有登录packtpub账号。该站点可免费注册账号。

(4)在本书GitHub源代码下载页面中,单击右侧的Code(代码)按钮,在弹出的下拉菜单中选择Download ZIP(下载压缩包),如图P-3所示。

 

图P-3

下载文件后,请确保使用最新版本解压缩或解压缩文件夹:

  WinRAR/7-Zip(Windows系统)。

  Zipeg/iZip/UnRarX(Mac系统)。

  7-Zip/PeaZip(Linux系统)。

你也可以直接访问本书在GitHub上的存储库,其网址如下:

https://github.com/PacktPublishing/Hands-On-Graph-Analytics-with-Neo4j

如果代码有更新,则也会在现有GitHub存储库上更新。

 

下载彩色图像

我们还提供了一个PDF文件,其中包含本书中使用的屏幕截图/图表的彩色图像。可以通过以下地址下载:

https://static.packt-cdn.com/downloads/9781839212611_ColorImages.pdf

本书约定

本书中使用了许多文本约定。

(1)CodeInText:表示文本中的代码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟URL、用户输入和Twitter句柄等。以下段落就是一个示例:

本章代码文件的网址如下:

https://github.com/PacktPublishing/Hands-On-Graph-Analytics-with-Neo4j/

tree/master/ch6

(2)有关代码块的设置如下:

submit = SubmitField('Submit')

(3)要突出代码块时,相关行将加粗显示:

    "name": "Another name", 

    "address": "Earth, Universe", 

    "id": 1,

    "gender": "F",

    "age": 30

}

(4)任何命令行输入或输出都采用如下所示的粗体代码形式:

pip install neo4j

(5)术语或重要单词采用中英文对照形式,在括号内保留其英文原文。示例如下:

有了图之后,你可以考虑创建智能模型来预测将来是否可能连接两个实体。推荐引擎(Recommendation Engine)是这种工具的一种可能的应用。

(6)对于界面词汇或专有名词将保留英文原文,在括号内添加其中文翻译。示例如下:

让人惊讶的是选择节点的时候,浏览器还会显示它们之间的关系,而我们并没有要求它这样做。这来自Neo4j浏览器中的设置,其默认行为是启用节点连接的可视化。可以通过清除Connect result nodes(连接结果节点)复选框来禁用此功能。

(7)本书还使用了以下两个图标。

 表示警告或重要的注意事项。

 表示提示或小技巧。