创建图
您可以从以下任何数据源创建 GDS 图
此外,Python 客户端提供了多种便捷方法来创建图,例如从 Pandas DataFrame 或某些知名数据集。
图数据模型
以下描述了可与图的节点和关系关联的信息。
节点
标签
一个节点可以有零个或多个标签。标签表示为字符串。标签可用于在使用时过滤图,例如,通过指定 nodeLabels 参数,仅在节点子集上运行算法。
如果算法可以区分不同的关系类型,这在其文档中通过异构关系特性来指示。
节点属性
Neo4j 图数据科学库能够为节点增加额外属性。当图被投影时,这些属性可以从数据库加载。许多算法在以 mutate
模式运行时,也可以将其结果作为或多或少一个节点属性持久化。
支持的类型
Neo4j 图数据科学库不支持 Neo4j 数据库支持的所有属性类型。每个支持的类型还定义了一个回退值,用于指示此属性的值未设置。
下表列出了支持的属性类型及其对应的回退值。
Java 类型 | Cypher 类型 | 精度 | 回退值 |
---|---|---|---|
Long |
Integer |
64 位有符号 |
|
Double |
Float |
64 位有符号 |
|
Long 列表 |
Integer 列表 |
- |
|
Double 列表 |
Float 列表 |
- |
|
1. 值为 -2^63 |
关系
GDS 中的关系可以是定向的或无向的。此外,我们支持两个节点之间存在多个关系以及自循环。您应该创建定向关系还是无向关系取决于关系的语义以及您想要运行的算法。
类型
一个关系有一个类型,它表示为字符串。该类型可用于在使用时过滤图,例如,通过指定 relationshipTypes 参数,仅在关系子集上运行算法。如果算法可以区分不同的关系类型,这在其文档中通过异构关系特性来指示。
属性
Neo4j 图数据科学库不支持 Neo4j 数据库支持的所有属性类型。具体来说,GDS 仅支持数值关系属性,即 Long
、Double
。请注意,在投影过程中,Long
将转换为 Double
。
算法是否支持关系属性可从其文档中的加权关系特性看出。
关系 ID
投影的 GDS 图中的关系仅由其源节点和目标节点标识。Neo4j 关系 ID 不会被投影,GDS 也无法访问。为了访问关系的 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 作为属性添加到投影图中。 |