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
algorithmSpécifie l'algorithme à utiliser pour la détection de communauté. 'LOUVAIN' (défaut) ou 'LABELPROPAGATION'.
deterministicLorsqu'il est défini sur True, garantit que chaque exécution produit le même résultat final avec la même configuration.
directionSpécifie si le graphe d'entrée doit être considéré comme 'DIRECTED' (dirigé) ou 'UNDIRECTED' (non dirigé, par défaut).
displaySpécifie une liste de tables de résultats à envoyer au client pour affichage.
distributedLorsqu'il est défini sur True, utilise un graphe distribué.
fixSpécifie la variable qui définit les groupes de nœuds à fixer ensemble pour la détection de communauté.
graphSpécifie le graphe en mémoire à utiliser.
indexOffsetSpécifie le décalage d'index pour les identifiants dans les journaux et les tables de résultats.
labelUpdateModeSpécifie si les nœuds mettent à jour leurs étiquettes de manière 'ASYNCHRONOUS' ou 'SYNCHRONOUS' (défaut).
linkRemovalRatioSpécifie le pourcentage de liens de faible poids à supprimer autour de chaque voisinage de nœud (défaut 10).
linksSpécifie la table de données d'entrée qui contient les informations sur les liens du graphe.
linksVarSpécifie les noms des variables de données pour la table des liens.
logFreqTimeContrôle la fréquence (en secondes) d'affichage des journaux d'itération.
logLevelContrôle la quantité d'informations affichées dans le journal SAS ('NONE', 'BASIC', 'MODERATE', 'AGGRESSIVE').
maxItersSpécifie le nombre maximum d'itérations que l'algorithme peut exécuter.
multiLinksLorsqu'il est défini sur True, inclut les liens multiples lors de la lecture d'un graphe d'entrée.
nodesSpécifie la table de données d'entrée qui contient les informations sur les nœuds du graphe.
nodesVarSpécifie les noms des variables de données pour la table des nœuds.
nThreadsSpécifie le nombre maximum de threads à utiliser pour le traitement multithread.
outCommLinksSpécifie la table de sortie pour décrire les liens entre chaque communauté.
outCommunitySpécifie la table de sortie pour contenir les propriétés de chaque communauté.
outGraphListSpécifie la table de sortie pour contenir des informations récapitulatives sur les graphes en mémoire.
outLevelSpécifie la table de sortie pour contenir les informations de communauté à différents niveaux de résolution.
outLinksSpécifie la table de sortie pour contenir les informations sur les liens du graphe avec les métriques calculées.
outNodesSpécifie la table de sortie pour contenir les informations sur les nœuds du graphe avec les métriques calculées.
outOverlapSpécifie la table de sortie pour décrire l'intensité de chaque nœud (sa connexion à plusieurs communautés).
outputTablesListe les noms des tables de résultats à sauvegarder en tant que tables CAS sur le serveur.
recursiveDécompose les grandes communautés en plus petites jusqu'à ce que les conditions spécifiées (maxCommSize, maxDiameter) soient satisfaites.
resolutionListSpécifie une liste de valeurs de résolution (nombres non négatifs) pour ajuster la granularité des communautés.
selfLinksLorsqu'il est défini sur True, inclut les auto-liens (boucles) lors de la lecture d'un graphe d'entrée.
standardizedLabelsLorsqu'il est défini sur True, spécifie que les données du graphe d'entrée sont dans un format standardisé.
standardizedLabelsOutLorsqu'il est défini sur True, demande que les données du graphe de sortie incluent un format standardisé.
toleranceSpécifie la valeur de tolérance pour arrêter les itérations de l'algorithme.
warmStartSpé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 ?