创建图

您可以从以下任何数据源创建 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。不支持内容类型混合的列表。

自动类型转换

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

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

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

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

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

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

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

关系

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

类型 (Type)

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

方向 (Direction)

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

属性

Neo4j 图数据科学库并不支持 Neo4j 数据库支持的所有属性类型。具体而言,GDS 仅支持数值型关系属性,即 Long 和 Double。请注意,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 作为属性添加到投影图中。
© . This site is unofficial and not affiliated with Neo4j, Inc.