Vue d’ensemble
L'algorithme de comptage des triangles identifie les triangles dans un graph, où un triangle représente un ensemble de trois nodes qui sont connectés les uns aux autres. Les triangles sont importants dans l'analyse des graphes car ils reflètent la présence de boucles ou de motifs de forte connectivité au sein du graph.
Les triangles dans les réseaux sociaux indiquent la présence de communautés cohésives. Identifier les triangles aide à comprendre le regroupement et l'interconnexion des individus ou des groupes au sein du réseau. Dans les réseaux financiers ou les réseaux de transaction, la présence de triangles peut être indicative d'activités suspectes ou frauduleuses. Le comptage des triangles peut aider à identifier des motifs de collusion ou des transactions interconnectées pouvant nécessiter une enquête plus approfondie.
Concepts
Triangle
Dans un graph complexe, il est possible que plusieurs edges existent entre deux nodes. Cela peut conduire à la formation de plus d'un triangle impliquant trois nodes. Prenons le graph ci-dessous comme exemple :
- En comptant les triangles assemblés par edges, il y a 4 triangles différents.
- En comptant les triangles assemblés par nodes, il y a 2 triangles différents.
Le nombre de triangles assemblés par edges a tendance à être supérieur à ceux assemblés par nodes dans les graphs complexes. Le choix du principe d'assemblage doit s'aligner avec les objectifs de l'analyse et les aperçus recherchés à partir des données du graph. Dans l'analyse des réseaux sociaux, où l'accent est souvent mis sur la compréhension des motifs de connectivité entre les individus, le principe d'assemblage par nodes est couramment adopté. Dans l'analyse des réseaux financiers ou d'autres domaines similaires, le principe d'assemblage par edges est souvent préféré. Ici, l'accent est mis sur les relations entre les nodes, comme les transactions financières ou les interactions. L'assemblage des triangles basé sur les edges permet d'examiner à quel point les nodes sont connectés et comment les fonds ou les informations circulent à travers le réseau.
Considérations
- L'algorithme de comptage des triangles ignore la direction des edges mais les calcule comme des edges non dirigés.
Syntaxe
- Commande:
algo(triangle_counting)
- Paramètres:
Nom |
Type |
Spéc |
Par Défaut |
Optionnel |
Description |
---|---|---|---|---|---|
type | int | 1 , 2 |
1 |
Oui | 1 pour assembler les triangles par edges, 2 pour assembler les triangles par nodes |
result_type | int | 1 , 2 |
1 |
Oui | 1 pour retourner le nombre de triangles, 2 pour retourner les triangles sous forme de nodes ou edges |
limit | int | ≥-1 | -1 |
Oui | Nombre de résultats à retourner, -1 pour retourner tous les résultats |
Exemples
Le graph d'exemple est le suivant :
File Writeback
Spéc |
Contenu |
---|---|
filename | edge1 ,edge2 ,edge3 ou node1 ,node2 ,node3 |
algo(triangle_counting).params({
type: 1,
result_type: 2
}).write({
file:{
filename: "te"
}})
Statistiques: triangle_count = 3
Résultats : Fichier te
103,104,101
103,104,102
105,104,106
algo(triangle_counting).params({
type: 2,
result_type: 2
}).write({
file:{
filename: "tn"
}})
Statistiques : triangle_count = 2
Résultats : Fichiers tn
C4,C2,C1
C3,C2,C1
Direct Return
Alias Ordinal |
Type |
Description | Colonnes |
---|---|---|---|
0 | KV ou []perTriangle | Nombre de triangles ou triangles | triangle_count ou edge1 , edge2 , edge3 ou node1 , node2 , node3 |
algo(triangle_counting).params({
result_type: 1
}) as count
return count
Résultats : count
triangle_count |
---|
3 |
algo(triangle_counting).params({
result_type: 2
}) as triangles
return triangles
Résultats : triangles
edge1 | edge2 | edge3 |
---|---|---|
103 | 104 | 101 |
103 | 104 | 102 |
105 | 104 | 106 |
Stream Return
Alias Ordinal |
Type |
Description | Colonnes |
---|---|---|---|
0 | KV ou []perTriangle | Nombre de triangles ou triangles | triangle_count ou edge1 , edge2 , edge3 ou node1 , node2 , node3 |
algo(triangle_counting).params({
type: 2,
result_type:2
}).stream() as t
call {
with t
find().nodes({_uuid in [t.node1, t.node2, t.node3]}) as nodes
return sum(nodes.amount) as sumAmount
}
return table(t.node1, t.node2, t.node3, sumAmount)
Résultats : table(t.node1, t.node2, t.node3, sumAmount)
t.node1 | t.node2 | t.node3 | sumAmount |
---|---|---|---|
4 | 2 | 1 | 12 |
3 | 2 | 1 | 9 |
algo(triangle_counting).params({
type: 2,
result_type:1
}).stream() as tNodes
algo(triangle_counting).params({
type: 1,
result_type:1
}).stream() as tEdges
return table(tNodes.triangle_count, tEdges.triangle_count)
Résultats : table(tNodes.triangle_count, tEdges.triangle_count)
tNodes.triangle_count | tEdges.triangle_count |
---|---|
2 | 3 |
Stats Return
Alias Ordinal | Type | Description |
Colonnes |
---|---|---|---|
0 | KV | Nombre de triangles | triangle_count |
algo(triangle_counting).params({
result_type: 1
}).stats() as sta
return sta
Résultats : sta
triangle_count |
---|
3 |