创建图

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

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

图数据模型

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

节点

标签

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

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

节点属性

Neo4j 图数据科学库能够用其他属性增强节点。这些属性可以在投影图时从数据库中加载。许多算法还可以将其结果作为一种或多种节点属性保留,当它们以mutate模式运行时。

支持的类型

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

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

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

Long

Integer

64 位有符号

Long.MIN_VALUE [1]

双精度浮点数

单精度浮点数

64 位有符号

Double.NaN

Long 列表

Integer 列表

-

Double 列表

Float 列表

-

1. -2^63 的值

定义节点属性的类型

在创建指定一组节点属性的图投影时,这些属性的类型会使用加载器为任何指定属性读取的第一个属性值自动确定。所有整数数值类型都解释为Long值,所有浮点值都解释为Double值。列表值由数组包含的值的类型明确定义,例如,不支持将Integer 列表转换为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 被添加为投影图的属性。