创建图

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

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

图数据模型

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

节点

标签

一个节点可以有零个或多个标签。标签表示为字符串。标签可用于在使用时过滤图,例如,通过指定 nodeLabels 参数,仅在节点子集上运行算法。

如果算法可以区分不同的关系类型,这在其文档中通过异构关系特性来指示。

节点属性

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

支持的类型

Neo4j 图数据科学库不支持 Neo4j 数据库支持的所有属性类型。每个支持的类型还定义了一个回退值,用于指示此属性的值未设置。

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

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

Long

Integer

64 位有符号

Long.MIN_VALUE [1]

Double

Float

64 位有符号

Double.NaN

Long 列表

Integer 列表

-

null

Double 列表

Float 列表

-

null

1. 值为 -2^63

定义节点属性的类型

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

自动类型转换

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

自动转换仅在无损转换时发生。因此,我们检查以下内容:

  • LongDouble:Long 值不超过 Double 类型支持的范围。

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

  • Double[]Float[]:数组中任何元素的 Double 值都不超过 Float 类型支持的范围。

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

自动转换的计算成本更高,因此在对性能要求严格的应用程序中应避免使用。

关系

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

类型

一个关系有一个类型,它表示为字符串。该类型可用于在使用时过滤图,例如,通过指定 relationshipTypes 参数,仅在关系子集上运行算法。如果算法可以区分不同的关系类型,这在其文档中通过异构关系特性来指示。

方向

算法是否支持有向或无向关系可从其文档中的无向特性有向特性看出。

属性

Neo4j 图数据科学库不支持 Neo4j 数据库支持的所有属性类型。具体来说,GDS 仅支持数值关系属性,即 LongDouble。请注意,在投影过程中,Long 将转换为 Double

算法是否支持关系属性可从其文档中的加权关系特性看出。

关系 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 作为属性添加到投影图中。
© . All rights reserved.