Um Tutorial de Codificação NetworKit 11.2.1 em Estilo de Produção para Análise de Grafos em Larga E…

Neste tutorial, implementamos um pipeline de análise de grafos em larga escala e de nível de produção no NetworKit, focando em velocidade, eficiência de memória e APIs seguras para versão no NetworKit 11.2.1. Geramos uma rede livre em larga escala, extraímos o maior componente conectado e então calculamos sinais de espinha dorsal estrutural via decomposição k-core e classificação de centralidade. Também detectamos comunidades com PLM e quantificamos a qualidade usando modularidade; estimamos a estrutura de distância usando diâmetros efetivos e estimados; e, finalmente, esparsificamos o grafo para reduzir custos enquanto preservamos as propriedades principais. Exportamos o grafo esparsificado como uma edgelist para que possamos reutilizá-lo em fluxos de trabalho downstream, benchmarking ou pré-processamento de ML de grafos. Copiar Código Copiado Use um navegador diferente!pip -q install networkit pandas numpy psutil import gc, time, os import numpy as np import pandas as pd import psutil import networkit as nk print("NetworKit:", nk.__version__) nk.setNumberOfThreads(min(2, nk.getMaxNumberOfThreads())) nk.setSeed(7, False) def ram_gb(): p = psutil.Process(os.getpid()) return p.memory_info().rss / (1024**3) def tic(): return time.perf_counter() def toc(t0, msg): print(f"{msg}: {time.perf_counter()-t0:.3f}s | RAM~{ram_gb():.2f} GB") def report(G, name): print(f"

[{name}] nodes={G.numberOfNodes():,} edges={G.numberOfEdges():,} directed={G.isDirected()} weighted={G.isWeighted()}") def force_cleanup(): gc.collect() PRESET = "LARGE" if PRESET == "LARGE": N = 120_000 M_ATTACH = 6 AB_EPS = 0.12 ED_RATIO = 0.9 elif PRESET == "XL": N = 250_000 M_ATTACH = 6 AB_EPS = 0.15 ED_RATIO = 0.9 else: N = 80_000 M_ATTACH = 6 AB_EPS = 0.10 ED_RATIO = 0.9 print(f"

Preset={PRESET} | N={N:,} | m={M_ATTACH} | approx-betweenness epsilon={AB_EPS}") Configuramos o ambiente Colab com NetworKit e utilitários de monitoramento, e fixamos uma semente aleatória estável. Configuramos o uso de threads para corresponder ao tempo de execução e definimos auxiliares de tempo e rastreamento de RAM para cada estágio principal. Escolhemos uma predefinição de escala que controla o tamanho do grafo e os controles de aproximação para que o pipeline permaneça grande, mas gerenciável. Copiar Código Copiado Use um navegador diferente t0 = tic() G = nk.generators.BarabasiAlbertGenerator(M_ATTACH, N).generate() toc(t0, "Grafo BA Gerado") report(G, "G") t0 = tic() cc = nk.components.ConnectedComponents(G) cc.run() toc(t0, "Componentes Conectados") print("componentes:", cc.numberOfComponents()) if cc.numberOfComponents() > 1: t0 = tic() G = nk.graphtools.extractLargestConnectedComponent(G, compactGraph

Fonte: MarkTechPost

Publicado em 2026-03-06

Notícias relacionadas

Continue explorando