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.
| Paramètre | Description |
|---|---|
| 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. |
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.
| 1 | DATA mycas.Links; |
| 2 | INFILE DATALINES delimiter=','; |
| 3 | INPUT from $ to $ weight; |
| 4 | DATALINES; |
| 5 | A,B,5 |
| 6 | A,C,4 |
| 7 | A,D,3 |
| 8 | B,C,5 |
| 9 | B,D,1 |
| 10 | C,D,5 |
| 11 | E,F,5 |
| 12 | E,G,4 |
| 13 | F,G,5 |
| 14 | H,I,5 |
| 15 | H,J,5 |
| 16 | I,J,5 |
| 17 | C,E,1 |
| 18 | D,H,1 |
| 19 | ; |
| 20 | RUN; |
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`.
| 1 | PROC CAS; |
| 2 | network.community / |
| 3 | links={name='Links'} |
| 4 | outNodes={name='OutNodes', replace=true}; |
| 5 | RUN; |
| 6 | QUIT; |
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.
| 1 | PROC 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}; |
| 10 | RUN; |
| 11 | QUIT; |
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.
| 1 | PROC CAS; |
| 2 | network.community / |
| 3 | links={name='Links'} |
| 4 | recursive={maxCommSize=3} |
| 5 | outNodes={name='OutNodesRecursive', replace=true} |
| 6 | outLevel={name='OutLevelRecursive', replace=true}; |
| 7 | RUN; |
| 8 | QUIT; |