创建图

您可以从以下任何数据源创建 GDS 图:

此外,Python 客户端提供了多种便捷方法来创建图,例如从 Pandas DataFrames 或一些 知名数据集 创建。

图数据模型

以下内容描述了可以与图的节点和关系相关联的信息。

节点

标签 (Labels)

一个节点可以拥有零个或多个标签。标签以字符串形式表示。标签可用于在图的使用过程中进行过滤,例如,通过指定 nodeLabels 参数,仅对节点的一个子集运行算法。

如果算法能够区分不同的关系类型,其文档中会通过 异构关系特性 (Heterogeneous relationships trait) 指出。

节点属性

Neo4j 图数据科学库能够通过额外的属性来增强节点。这些属性可以在投影图时从数据库中加载。许多算法在以 mutate 模式运行时,也可以将其结果作为一项或多项节点属性进行持久化。

支持的类型

Neo4j 图数据科学库并不支持 Neo4j 数据库支持的所有属性类型。每种受支持的类型都定义了一个回退值 (fallback value),用于指示该属性值未设置。

下表列出了支持的属性类型及其对应的回退值。

表 1. 类型
Java 类型 Cypher 类型 精度 回退值

Long

整数

64 位有符号

Long.MIN_VALUE [1]

双精度浮点数

浮点数

64 位有符号

Double.NaN

Long 列表

整数列表

-

null

Double 列表

浮点数列表

-

null

1. -2^63 的值

定义节点属性的类型

在创建指定了一组节点属性的图投影时,这些属性的类型会由加载器读取的第一个属性值自动确定。所有整型数值都被解释为 Long 值,所有浮点数值都被解释为 Double 值。列表值由数组中包含的值的类型明确定义;例如,不支持将 List of Integer 转换为 List of Long。不支持内容类型混合的列表。

自动类型转换

大多数能够使用节点属性的算法都需要特定的属性类型。如果所提供的属性类型与所需类型不匹配,库将尝试将属性值转换为所需类型。

自动转换仅在无损转换时才会发生。因此,我们检查以下情况:

  • LongDouble:Long 值没有超出 Double 类型支持的范围。

  • DoubleLong:Double 值不包含任何小数位。

  • Double[]Float[]:数组中的任何元素所对应的 Double 值都没有超出 Float 类型支持的范围。

如果任何节点属性值不满足这些条件,算法计算将会失败。

自动转换在计算上的开销更大,因此在对性能要求极高的应用中应避免使用。

关系

GDS 中的关系可以是定向的,也可以是非定向的。此外,我们支持两个节点之间存在多个关系以及自环。您应该创建定向关系还是非定向关系,取决于关系的语义以及您想要运行的算法。

类型 (Type)

关系具有类型,以字符串形式表示。该类型可用于在图的使用过程中进行过滤,例如,通过指定 relationshipTypes 参数,仅对关系的一个子集运行算法。如果算法能够区分不同的关系类型,其文档中会通过 异构关系特性 指出。

方向 (Direction)

算法是否支持定向或非定向关系,可以通过其文档中的 非定向特性 (Undirected trait)定向特性 (Directed trait) 来查看。

属性

Neo4j 图数据科学库并不支持 Neo4j 数据库支持的所有属性类型。具体而言,GDS 仅支持数值型关系属性,即 LongDouble。请注意,Long 在投影期间会被转换为 Double

算法是否支持关系属性,可以通过其文档中的 加权关系特性 (Weighted relationships trait) 来查看。

关系 ID

投影 GDS 图中的关系仅由其源节点和目标节点标识。Neo4j 的关系 ID 不会被投影,GDS 也无法直接访问。为了访问关系的 ID,可以将其作为属性添加到关系投影中。

以下语句将使用 Cypher 投影来投影一个包含关系 ID 作为属性的图。
MATCH (source)-[r]->(target)
RETURN gds.graph.project(
    'graph', source, target,
    {
         sourceNodeLabels: labels(source),
         targetNodeLabels: labels(target),
         relationshipType: type(r),
         relationshipProperties: { relationship_id: id(r) }  //  (1)
    }
)
1 关系 ID 作为属性添加到投影图中。