三角形计数
简介
三角形计数算法用于计算图中每个节点的三角形数量。三角形是由三个节点组成的集合,其中每个节点都与另外两个节点存在关系。在图论术语中,这有时被称为 3-clique。Neo4j 图形分析应用程序中的三角形计数算法仅在无向图中查找三角形。
三角形计数在社交网络分析中越来越受欢迎,它用于检测社区并衡量这些社区的凝聚力。它还可以用于确定图的稳定性,并且经常作为网络指标(例如聚类系数)计算的一部分。
有关此算法的更多信息,请参阅
-
三角形计数和聚类系数已被证明可作为将给定网站内容分类为垃圾邮件或非垃圾邮件的有用特征。这在“大规模图中局部三角形计数的高效半流算法”中有所描述。
语法
本节介绍用于执行三角形计数算法的语法。
CALL Neo4j_Graph_Analytics.graph.triangle_count(
'CPU_X64_XS', (1)
{
['defaultTablePrefix': '...',] (2)
'project': {...}, (3)
'compute': {...}, (4)
'write': {...} (5)
}
);
1 | 计算池选择器。 |
2 | 表引用的可选前缀。 |
3 | 项目配置。 |
4 | 计算配置。 |
5 | 写入配置。 |
名称 | 类型 | 默认值 | 可选 | 描述 |
---|---|---|---|---|
computePoolSelector |
字符串 |
|
否 |
用于运行三角形计数作业的计算池选择器。 |
configuration |
映射 |
|
否 |
图项目、算法计算和结果回写配置。 |
配置映射包含以下三个条目。
有关以下项目配置的更多详细信息,请参阅项目文档。 |
名称 | 类型 |
---|---|
nodeTables |
节点表列表。 |
relationshipTables |
关系类型到关系表的映射。 |
名称 | 类型 | 默认值 | 可选 | 描述 |
---|---|---|---|---|
mutateProperty |
字符串 |
|
是 |
将回写到 Snowflake 数据库的节点属性。 |
relationshipWeightProperty |
字符串 |
|
是 |
用作权重的关系属性名称。如果未指定,算法将运行无权重计算。 |
seedProperty |
字符串 |
|
是 |
用于设置节点的初始分量。属性值必须是数字。 |
threshold |
浮点数 |
|
是 |
权重值超过该值时,关系将被纳入计算。 |
maxDegree |
整数 |
|
是 |
在三角形计数中考虑的节点的最大度数。度数高于此值的节点将被排除,并被分配一个三角形计数 |
有关以下写入配置的更多详细信息,请参阅写入文档。 |
名称 | 类型 | 默认值 | 可选 | 描述 |
---|---|---|---|---|
nodeLabel |
字符串 |
|
否 |
内存图中要写入节点属性的节点标签。 |
nodeProperty |
字符串 |
|
是 |
将回写到 Snowflake 数据库的节点属性。 |
outputTable |
字符串 |
|
否 |
节点属性写入的 Snowflake 数据库中的表。 |
示例
在本节中,我们将展示在具体图上运行三角形计数算法的示例。目的是说明结果是什么样子,并提供在实际设置中如何使用该算法的指南。我们将在一个由少量节点以特定模式连接组成的小型社交网络图上进行此操作。示例图如下所示

CREATE OR REPLACE TABLE EXAMPLE_DB.DATA_SCHEMA.PERSON (NODEID STRING);
INSERT INTO EXAMPLE_DB.DATA_SCHEMA.PERSON VALUES
('Alice'),
('Michael'),
('Karin'),
('Chris'),
('Will'),
('Mark');
CREATE OR REPLACE TABLE EXAMPLE_DB.DATA_SCHEMA.KNOWS (SOURCENODEID STRING, TARGETNODEID STRING);
INSERT INTO EXAMPLE_DB.DATA_SCHEMA.KNOWS VALUES
('Michael', 'Karin'),
('Michael', 'Chris'),
('Will', 'Michael'),
('Mark', 'Michael'),
('Mark', 'Will'),
('Alice', 'Michael'),
('Will', 'Chris'),
('Chris', 'Karin');
此图具有由节点之间关系形成的多个三角形。例如,Michael、Chris 和 Karin 之间存在一个三角形,因为他们都相互连接。该算法将计算每个节点的这些三角形。
在以下示例中,我们将演示在此图上使用三角形计数算法。
运行作业
运行三角形计数作业涉及三个步骤:项目、计算和写入。
要运行查询,需要为应用程序、您的消费者角色和您的环境设置必要的授权。有关更多信息,请参阅入门页面。
我们还假设应用程序名称是默认的 Neo4j_Graph_Analytics。如果您在安装过程中选择了不同的应用程序名称,请将其替换为该名称。
CALL Neo4j_Graph_Analytics.graph.triangle_count('CPU_X64_XS', {
'defaultTablePrefix': 'EXAMPLE_DB.DATA_SCHEMA',
'project': {
'nodeTables': ['PERSON'],
'relationshipTables': {
'KNOWS': {
'sourceTable': 'PERSON',
'targetTable': 'PERSON',
'orientation': 'UNDIRECTED'
}
}
},
'compute': {},
'write': [
{
'nodeLabel': 'PERSON',
'outputTable': 'TRIANGLE_COUNT_BY_PERSON'
}
]
});
JOB_ID | JOB_START | JOB_END | JOB_RESULT |
---|---|---|---|
job_492026bbeaa6422eb4502a18def04cd6 |
2025-04-30 13:53:53.702000 |
2025-04-30 13:54:00.716000 |
{ "project_1": { "graphName": "snowgraph", "nodeCount": 6, "nodeMillis": 218, "relationshipCount": 16, "relationshipMillis": 541, "totalMillis": 759 }, "triangle_count_1": { "computeMillis": 15, "configuration": { "concurrency": 2, "jobId": "4a766a5a-57ee-4438-bcca-9294a8bd6743", "logProgress": true, "maxDegree": 9223372036854775807, "mutateProperty": "triangles", "nodeLabels": [ "*" ], "relationshipTypes": [ "*" ], "sudo": false }, "globalTriangleCount": 3, "mutateMillis": 3, "nodeCount": 6, "nodePropertiesWritten": 6, "postProcessingMillis": 0, "preProcessingMillis": 8 }, "write_node_property_1": { "exportMillis": 2268, "nodeLabel": "PERSON", "nodeProperty": "triangles", "outputTable": "EXAMPLE_DB.DATA_SCHEMA.TRIANGLE_COUNT_BY_PERSON", "propertiesExported": 6 } } |
返回的结果包含有关作业执行和结果分布的信息。此外,每个节点的三角形计数已回写到 Snowflake 数据库。作业结果显示全局三角形计数为 3,表示图中三角形的总数。我们可以像这样查询单个节点的三角形计数
SELECT * FROM EXAMPLE_DB.DATA_SCHEMA.TRIANGLE_COUNT_BY_PERSON;
节点 ID | 三角形 |
---|---|
Alice |
0 |
Michael |
3 |
Karin |
1 |
Chris |
2 |
Will |
2 |
Mark |
1 |
结果显示算法识别了图中的三角形。这可以在示例图中进行验证。