optNetwork

connectedComponents

##set_optnetwork

Description

L'action connectedComponents est le détective de votre réseau SAS Viya. Elle sert à identifier les sous-groupes de nœuds (les fameux 'composants') où chaque membre peut atteindre n'importe quel autre membre du même groupe en suivant les liens. Pour les graphes non orientés, c'est comme trouver des îlots isolés dans un archipel. Pour les graphes orientés, elle s'appuie sur l'algorithme DFS pour débusquer les composants fortement connectés. C'est l'outil parfait pour segmenter vos données ou nettoyer votre topologie avant de lancer des analyses plus lourdes.

Syntaxe Officielle
optNetwork.connectedComponents <result=results> <status=rc> /
algorithm="AFFOREST" | "AUTOMATIC" | "DFS" | "UNIONFIND",
deterministic=TRUE | FALSE,
direction="DIRECTED" | "UNDIRECTED",
display={displayTables},
distributed=TRUE | FALSE,
graph=integer,
indexOffset=integer,
links={castable},
linksVar={linksVar},
logFreqTime=integer,
logLevel="AGGRESSIVE" | "BASIC" | "MODERATE" | "NONE",
multiLinks=TRUE | FALSE,
nodes={castable},
nodesVar={nodesVar},
nThreads=integer,
out={casouttable},
outGraphList={casouttable},
outLinks={casouttable},
outNodes={casouttable},
outputTables={outputTables},
selfLinks=TRUE | FALSE,
standardizedLabels=TRUE | FALSE,
standardizedLabelsOut=TRUE | FALSE;

Paramètres Clés

Nom du paramètre Description
algorithm Définit la stratégie de recherche : 'AFFOREST' (très rapide pour les gros graphes non orientés), 'DFS' (recherche en profondeur, obligatoire pour l'orienté), ou 'UNIONFIND' (le classique robuste).
direction Indique si les flèches de vos liens ont un sens ('DIRECTED') ou si tout le monde peut circuler dans les deux sens ('UNDIRECTED').
links La table CAS contenant vos relations (from, to). C'est votre carnet d'adresses.
outNodes La table de sortie qui va 'étiqueter' chaque nœud avec l'ID du composant auquel il appartient. Indispensable pour voir qui appartient à quelle bande !
indexOffset Si vous voulez que vos IDs de composants commencent à 1 ou 100 plutôt qu'à 0, c'est ici que ça se passe.
outLinks Produit une table de sortie des liens, annotée avec les informations de connectivité.
out Table de résumé statistique sur les composants trouvés (taille, nombre, etc.).

Préparation des données

Création d'un réseau social d'amis et d'inconnus

On crée un petit graphe avec deux groupes distincts (A-B-C et D-E) pour tester la détection des composants.

1DATA casuser.liens_amicaux;
2 INPUT from $ to $;
3 DATALINES;
4 Anne Bob
5 Bob Cecile
6 Anne Cecile
7 David Eve
8 ;
9 RUN;

Exemples d'utilisation

Détection basique des composants

On demande à SAS de trouver qui est connecté à qui dans notre table de liens.

1PROC CAS;
2 optNetwork.connectedComponents /
3 links = {name = "liens_amicaux"}
4 outNodes = {name = "amis_groupes", replace = true};
5 RUN; QUIT;
Résultat Attendu :
Une table 'amis_groupes' avec une colonne 'concomp' indiquant 0 pour Anne, Bob, Cecile et 1 pour David et Eve.
Analyse avancée avec algorithme UNIONFIND et statistiques

Utilisation de l'algorithme Union-Find explicitement, avec génération de toutes les tables de sortie possibles pour une analyse exhaustive.

1PROC CAS;
2 optNetwork.connectedComponents /
3 links = {name = "liens_amicaux"}
4 algorithm = "UNIONFIND"
5 direction = "UNDIRECTED"
6 outNodes = {name = "noeuds_details", replace = true}
7 outLinks = {name = "liens_details", replace = true}
8 out = {name = "resume_composants", replace = true}
9 logLevel = "AGGRESSIVE";
10 RUN; QUIT;
Résultat Attendu :
Le journal affichera les détails du processus. Vous obtiendrez trois tables : une pour les nœuds (assignation au composant), une pour les liens, et un résumé global des composants détectés.