La acción `community` del conjunto de acciones `network` se utiliza para detectar comunidades en un grafo. La detección de comunidades es una técnica fundamental en el análisis de redes para identificar grupos de nodos que están densamente conectados internamente y escasamente conectados con otros grupos. Esta acción implementa dos algoritmos principales: Louvain y Propagación de Etiquetas (Label Propagation), permitiendo a los analistas descubrir la estructura modular de redes complejas.
| Parámetro | Descripción |
|---|---|
| algorithm | Especifica el algoritmo a utilizar para la detección de comunidades. 'LOUVAIN' es un método popular basado en la optimización de la modularidad. 'LABELPROPAGATION' es un algoritmo rápido que propaga etiquetas a través de la red. |
| deterministic | Cuando se establece en True, asegura que cada ejecución (con la misma configuración de máquina y parámetros) produzca el mismo resultado final, garantizando la reproducibilidad. |
| direction | Especifica si se debe considerar el grafo de entrada como dirigido ('DIRECTED') o no dirigido ('UNDIRECTED'). |
| display | Especifica una lista de tablas de resultados para enviar al cliente para su visualización. |
| distributed | Cuando se establece en True, utiliza un grafo distribuido, lo que permite el procesamiento en paralelo en múltiples nodos para grafos muy grandes. |
| fix | Especifica la variable que define grupos de nodos que deben permanecer juntos en la misma comunidad durante la detección. |
| graph | Especifica el grafo en memoria a utilizar. Este es un identificador numérico para un grafo previamente cargado. |
| indexOffset | Especifica el desplazamiento del índice para los identificadores en el log y las tablas de resultados. Por defecto es 0. |
| labelUpdateMode | Especifica si los nodos actualizan sus etiquetas según las etiquetas de sus vecinos en la iteración actual ('ASYNCHRONOUS') o en la iteración anterior ('SYNCHRONOUS'). |
| linkRemovalRatio | Especifica el porcentaje de enlaces de bajo peso que se eliminarán alrededor de la vecindad de cada nodo para acelerar el cálculo. |
| links | Especifica la tabla de datos de entrada que contiene la información de los enlaces del grafo. |
| linksVar | Especifica los nombres de las variables de datos para la tabla de enlaces. |
| logFreqTime | Controla la frecuencia (en segundos) para mostrar los logs de iteración para algoritmos computacionalmente intensivos. |
| logLevel | Controla la cantidad de información que se muestra en el log de SAS (NONE, BASIC, MODERATE, AGGRESSIVE). |
| maxIters | Especifica el número máximo de iteraciones que el algoritmo puede ejecutar. |
| multiLinks | Cuando se establece en True, incluye múltiples enlaces entre los mismos dos nodos si existen en el grafo de entrada. |
| nodes | Especifica la tabla de datos de entrada que contiene la información de los nodos del grafo. |
| nodesVar | Especifica los nombres de las variables de datos para la tabla de nodos. |
| nThreads | Especifica el número máximo de hilos a utilizar para el procesamiento multihilo. |
| outCommLinks | Especifica la tabla de datos de salida para describir los enlaces entre cada comunidad. |
| outCommunity | Especifica la tabla de datos de salida que contendrá las propiedades de cada comunidad (por ejemplo, número de nodos, densidad). |
| outGraphList | Especifica la tabla de datos de salida que contendrá información de resumen sobre los grafos en memoria. |
| outLevel | Especifica la tabla de datos de salida que contendrá la información de la comunidad en diferentes niveles de resolución. |
| outLinks | Especifica la tabla de datos de salida que contendrá la información de los enlaces del grafo junto con los resultados de los algoritmos. |
| outNodes | Especifica la tabla de datos de salida que contendrá la información de los nodos del grafo junto con los resultados de los algoritmos. |
| outOverlap | Especifica la tabla de datos de salida para describir la intensidad de la pertenencia de cada nodo a múltiples comunidades. |
| outputTables | Lista los nombres de las tablas de resultados para guardar como tablas CAS en el servidor. |
| recursive | Descompone las comunidades grandes en otras más pequeñas hasta que se cumplan las condiciones especificadas (maxCommSize, maxDiameter). |
| resolutionList | Especifica una lista de valores de resolución para el algoritmo de Louvain, lo que permite la detección de comunidades a diferentes escalas. |
| selfLinks | Cuando se establece en True, incluye los auto-enlaces (un enlace de un nodo a sí mismo) al leer un grafo de entrada. |
| standardizedLabels | Cuando se establece en True, especifica que los datos del grafo de entrada están en un formato estandarizado. |
| standardizedLabelsOut | Cuando se establece en True, solicita que los datos del grafo de salida incluyan un formato estandarizado. |
| tolerance | Especifica el valor de tolerancia para detener las iteraciones. El algoritmo se detiene cuando la mejora de la modularidad o el cambio de etiquetas es menor que este valor. |
| warmStart | Especifica la variable que define los identificadores de comunidad iniciales para iniciar la detección de comunidades desde un estado predefinido. |
Este código crea una tabla de enlaces ('myLinks') que representa un grafo simple. Los nodos están etiquetados de 'A' a 'L', y los pesos de los enlaces indican la fuerza de la conexión entre ellos.
| 1 | DATA mycas.myLinks; |
| 2 | INFILE DATALINES delimiter=','; |
| 3 | INPUT from $ to $ weight; |
| 4 | DATALINES; |
| 5 | A,B,1 |
| 6 | A,C,1 |
| 7 | A,D,1 |
| 8 | B,C,1 |
| 9 | B,D,1 |
| 10 | C,D,1 |
| 11 | E,F,1 |
| 12 | E,G,1 |
| 13 | F,G,1 |
| 14 | H,I,1 |
| 15 | H,J,1 |
| 16 | H,K,1 |
| 17 | H,L,1 |
| 18 | I,J,1 |
| 19 | I,K,1 |
| 20 | I,L,1 |
| 21 | J,K,1 |
| 22 | J,L,1 |
| 23 | K,L,1 |
| 24 | A,H,0.1 |
| 25 | ; |
| 26 | RUN; |
Este ejemplo ejecuta la detección de comunidades en el grafo definido en 'mycas.myLinks' utilizando el algoritmo de Louvain. Los resultados, que asignan cada nodo a una comunidad, se guardan en la tabla 'mycas.myNodesOut'.
| 1 | PROC CAS; |
| 2 | LOADACTIONSET 'network'; |
| 3 | ACTION network.community / |
| 4 | links={name='myLinks'} |
| 5 | outNodes={name='myNodesOut', replace=true}; |
| 6 | RUN; |
| 7 | QUIT; |
Este ejemplo utiliza el algoritmo de propagación de etiquetas ('LABELPROPAGATION') y explora diferentes granularidades de comunidad especificando una lista de resoluciones. Las tablas de salida 'mycas.myCommLinks' y 'mycas.myComm' describen los enlaces entre comunidades y las propiedades de cada comunidad, respectivamente.
| 1 | PROC CAS; |
| 2 | LOADACTIONSET 'network'; |
| 3 | ACTION network.community / |
| 4 | links={name='myLinks'} |
| 5 | algorithm='LABELPROPAGATION' |
| 6 | resolutionList={0.5, 1.0, 1.5} |
| 7 | outNodes={name='myNodesOut_lp', replace=true} |
| 8 | outCommLinks={name='myCommLinks', replace=true} |
| 9 | outCommunity={name='myComm', replace=true} |
| 10 | outLevel={name='myLevel', replace=true}; |
| 11 | RUN; |
| 12 | QUIT; |
Una institución financiera necesita identificar grupos de cuentas sospechosas que realizan transferencias cíclicas entre sí para ocultar el origen de los fondos. El objetivo es ...
Un equipo de marketing digital desea segmentar millones de usuarios de una red social basándose en sus interacciones para campañas dirigidas. Se requiere probar la capacidad de ...
Una empresa de telecomunicaciones analiza la topología de su red de fibra óptica. Necesitan identificar clústeres locales (barrios) y regionales (ciudades) simultáneamente para ...