network

community

Description

L'action `community` de l'ensemble d'actions `network` est utilisée pour détecter des communautés dans un graphe. La détection de communautés, également connue sous le nom de partitionnement de graphe, est une technique fondamentale de l'analyse de réseaux pour identifier des groupes de nœuds (ou sommets) qui sont plus densément connectés entre eux qu'avec le reste du réseau. Ces groupes sont appelés 'communautés'. Cette action implémente deux algorithmes populaires : Louvain et la propagation d'étiquettes (Label Propagation), permettant une analyse flexible sur des graphes dirigés ou non dirigés.

network.community <result=results> <status=rc> / algorithm="LABELPROPAGATION" | "LOUVAIN", deterministic=TRUE | FALSE, direction="DIRECTED" | "UNDIRECTED", display={...}, distributed=TRUE | FALSE, fix="variable-name", graph=integer, indexOffset=integer, labelUpdateMode="ASYNCHRONOUS" | "SYNCHRONOUS", linkRemovalRatio=integer, links={...}, linksVar={...}, logFreqTime=integer, logLevel="AGGRESSIVE" | "BASIC" | "MODERATE" | "NONE", maxIters=integer, multiLinks=TRUE | FALSE, nodes={...}, nodesVar={...}, nThreads=integer, outCommLinks={...}, outCommunity={...}, outGraphList={...}, outLevel={...}, outLinks={...}, outNodes={...}, outOverlap={...}, outputTables={...}, recursive={...}, resolutionList={double-1 <, double-2, ...>}, selfLinks=TRUE | FALSE, standardizedLabels=TRUE | FALSE, standardizedLabelsOut=TRUE | FALSE, tolerance=double, warmStart="variable-name";
Paramètres
ParamètreDescription
algorithm Spécifie l'algorithme à utiliser pour la détection de communauté. 'LOUVAIN' (défaut) ou 'LABELPROPAGATION'.
deterministic Lorsqu'il est défini sur True, garantit que chaque exécution produit le même résultat final avec la même configuration.
direction Spécifie si le graphe d'entrée doit être considéré comme 'DIRECTED' (dirigé) ou 'UNDIRECTED' (non dirigé, par défaut).
display Spécifie une liste de tables de résultats à envoyer au client pour affichage.
distributed Lorsqu'il est défini sur True, utilise un graphe distribué.
fix Spécifie la variable qui définit les groupes de nœuds à fixer ensemble pour la détection de communauté.
graph Spécifie le graphe en mémoire à utiliser.
indexOffset Spécifie le décalage d'index pour les identifiants dans les journaux et les tables de résultats.
labelUpdateMode Spécifie si les nœuds mettent à jour leurs étiquettes de manière 'ASYNCHRONOUS' ou 'SYNCHRONOUS' (défaut).
linkRemovalRatio Spécifie le pourcentage de liens de faible poids à supprimer autour de chaque voisinage de nœud (défaut 10).
links Spécifie la table de données d'entrée qui contient les informations sur les liens du graphe.
linksVar Spécifie les noms des variables de données pour la table des liens.
logFreqTime Contrôle la fréquence (en secondes) d'affichage des journaux d'itération.
logLevel Contrôle la quantité d'informations affichées dans le journal SAS ('NONE', 'BASIC', 'MODERATE', 'AGGRESSIVE').
maxIters Spécifie le nombre maximum d'itérations que l'algorithme peut exécuter.
multiLinks Lorsqu'il est défini sur True, inclut les liens multiples lors de la lecture d'un graphe d'entrée.
nodes Spécifie la table de données d'entrée qui contient les informations sur les nœuds du graphe.
nodesVar Spécifie les noms des variables de données pour la table des nœuds.
nThreads Spécifie le nombre maximum de threads à utiliser pour le traitement multithread.
outCommLinks Spécifie la table de sortie pour décrire les liens entre chaque communauté.
outCommunity Spécifie la table de sortie pour contenir les propriétés de chaque communauté.
outGraphList Spécifie la table de sortie pour contenir des informations récapitulatives sur les graphes en mémoire.
outLevel Spécifie la table de sortie pour contenir les informations de communauté à différents niveaux de résolution.
outLinks Spécifie la table de sortie pour contenir les informations sur les liens du graphe avec les métriques calculées.
outNodes Spécifie la table de sortie pour contenir les informations sur les nœuds du graphe avec les métriques calculées.
outOverlap Spécifie la table de sortie pour décrire l'intensité de chaque nœud (sa connexion à plusieurs communautés).
outputTables Liste les noms des tables de résultats à sauvegarder en tant que tables CAS sur le serveur.
recursive Décompose les grandes communautés en plus petites jusqu'à ce que les conditions spécifiées (maxCommSize, maxDiameter) soient satisfaites.
resolutionList Spécifie une liste de valeurs de résolution (nombres non négatifs) pour ajuster la granularité des communautés.
selfLinks Lorsqu'il est défini sur True, inclut les auto-liens (boucles) lors de la lecture d'un graphe d'entrée.
standardizedLabels Lorsqu'il est défini sur True, spécifie que les données du graphe d'entrée sont dans un format standardisé.
standardizedLabelsOut Lorsqu'il est défini sur True, demande que les données du graphe de sortie incluent un format standardisé.
tolerance Spécifie la valeur de tolérance pour arrêter les itérations de l'algorithme.
warmStart Spécifie la variable qui définit les identifiants de communauté initiaux pour un démarrage à chaud de la détection.
Préparation des Données Voir la fiche de ce code dataprep
Création d'un Graphe de Collaborations

Ce code crée un jeu de données `mycas.Links` qui représente un graphe de collaborations entre auteurs. La variable `weight` indique la force de la collaboration. Ce graphe contient plusieurs groupes de collaborateurs distincts, ce qui est idéal pour la détection de communautés.

Copié !
1DATA mycas.Links;
2 INFILE DATALINES delimiter=',';
3 INPUT from $ to $ weight;
4 DATALINES;
5A,B,5
6A,C,4
7A,D,3
8B,C,5
9B,D,1
10C,D,5
11E,F,5
12E,G,4
13F,G,5
14H,I,5
15H,J,5
16I,J,5
17C,E,1
18D,H,1
19;
20RUN;

Exemples

Cet exemple exécute la détection de communautés sur le graphe `mycas.Links`. L'algorithme Louvain est utilisé par défaut. Les résultats, qui associent chaque nœud à un identifiant de communauté, sont stockés dans la table `mycas.OutNodes`.

Code SAS® / CAS Code en attente de validation par la communauté
Copié !
1PROC CAS;
2 network.community /
3 links={name='Links'}
4 outNodes={name='OutNodes', replace=true};
5RUN;
6QUIT;
Résultat :
La table `mycas.OutNodes` est créée. Elle contient les colonnes `node` et `community`, montrant l'appartenance de chaque nœud à une communauté. On s'attend à voir trois communautés principales : {A, B, C, D}, {E, F, G}, et {H, I, J}.

Cet exemple utilise l'algorithme de propagation d'étiquettes (`LABELPROPAGATION`) sur un graphe dirigé. Il explore plusieurs niveaux de granularité pour les communautés en utilisant `resolutionList`. Les tables `outLevel` et `outCommLinks` sont générées pour analyser les communautés à chaque niveau de résolution et les liens entre elles.

Code SAS® / CAS Code en attente de validation par la communauté
Copié !
1PROC CAS;
2 network.community /
3 links={name='Links'}
4 direction='DIRECTED'
5 algorithm='LABELPROPAGATION'
6 resolutionList={1.0, 0.5}
7 outLevel={name='OutLevel', replace=true}
8 outCommLinks={name='OutCommLinks', replace=true}
9 outNodes={name='OutNodesLP', replace=true};
10RUN;
11QUIT;
Résultat :
Trois tables de sortie sont créées : `OutNodesLP` avec les affectations de communauté pour chaque nœud, `OutLevel` qui détaille les communautés à chaque niveau de résolution (1.0 et 0.5), et `OutCommLinks` qui décrit les liens agrégés entre les communautés détectées.

Cet exemple utilise l'algorithme Louvain et applique une division récursive des communautés. Une communauté sera subdivisée si elle contient plus de 3 nœuds (`maxCommSize=3`). Cela permet d'obtenir des communautés plus petites et plus granulaires.

Code SAS® / CAS Code en attente de validation par la communauté
Copié !
1PROC CAS;
2 network.community /
3 links={name='Links'}
4 recursive={maxCommSize=3}
5 outNodes={name='OutNodesRecursive', replace=true}
6 outLevel={name='OutLevelRecursive', replace=true};
7RUN;
8QUIT;
Résultat :
Les tables `OutNodesRecursive` et `OutLevelRecursive` sont créées. La communauté initialement identifiée comme {A, B, C, D} sera probablement scindée en sous-communautés plus petites car sa taille (4) dépasse le seuil `maxCommSize` de 3.

FAQ

Quel est l'objectif de l'action `community` dans SAS Viya ?
Quels sont les algorithmes de détection de communautés disponibles ?
Comment le paramètre `resolutionList` influence-t-il l'algorithme de Louvain ?
Quelle est la différence entre un graphe `DIRECTED` et `UNDIRECTED` dans cette action ?
Comment puis-je obtenir une table de sortie qui décrit les liens entre les communautés détectées ?

Scénarios associés

Cas d'usage
Segmentation Client par Affinité (Standard)

Une enseigne de grande distribution souhaite segmenter sa base client non pas sur des critères démographiques, mais sur des habitudes d'achat croisées. L'objectif est d'identifi...

Cas d'usage
Analyse de Flux Dirigés avec Granularité Variable (Performance/Complexité)

Un opérateur télécom analyse les flux d'appels entre antennes relais pour optimiser le routage. Les appels ont une direction (A appelle B). L'opérateur veut tester différentes é...

Cas d'usage
Détection de Blanchiment avec Liens Inter-Communautés (Cas Limite)

Une banque lutte contre le blanchiment d'argent. Elle a identifié des réseaux suspects (communautés). Le besoin critique est de comprendre comment l'argent transite ENTRE ces ré...