print(“\n” + “=”*70 + “\n SECCIÓN 6 — Análisis de NetworkX\n” + “=”*70) def kg_to_networkx(graph): G = nx.MultiDiGraph() para e en Graph.entities: G.add_node(e) para s, p, o en Graph.relations: G.add_edge(s, o, label=p) return G G = kg_to_networkx(g_big) print(f”Nodos: {G.number_of_nodes()} Bordes: {G.number_of_edges()}”) H = nx.Graph(G) deg_cent = nx. Degree_centrality(H) btw_cent = nx.betweenness_centrality(H) pr_cent = nx.pagerank(nx.DiGraph(G)) if G.number_of_edges() else {} def top(d, k=8): retorno ordenado(d.items(), key=lambda x: -x[1])[:k]
print(“\nEntidades principales por grado de centralidad:”) para n, v en top(deg_cent): print(f” {n:35s} {v:.3f}”) print(“\nEntidades principales por intermediación:”) para n, v en top(btw_cent): print(f” {n:35s} {v:.3f}”) print(“\nEntidades principales por PageRank:”) para n, v en top(pr_cent): print(f” {n:35s} {v:.3f}”) prueba: desde networkx.algorithms.community import louvain_communities community = louvain_communities(H, seed=42) excepto Excepción: importar comunidad como community_louvain parts = community_louvain.best_partition(H, random_state=42) bins = {} para n, c en parts.items(): bins.setdefault(c, set()).add(n) comunidades = list(bins.values()) print(f”\nComunidades {len(communities)} detectadas:”) para i, c en enumerate(communities): print(f” Comunidad {i}: {sorted(c)}”) pred_counts = Counter(p para _, _, p en g_big.relations) print(“\nPredicados más comunes:”) para p, n en pred_counts.most_common(10): print(f” {n:3d} {p}”) print(“\n” + “=”*70 + “\n SECCIÓN 7 — Visualización pyvis personalizada\n” + “=”*70) paleta = [“#e6194B”,”#3cb44b”,”#ffe119″,”#4363d8″,”#f58231″,
“#911eb4″,”#42d4f4″,”#f032e6″,”#bfef45″,”#fabed4″]
node_color = {} para i, c en enumerar (comunidades): para n en c: node_color[n] = paleta[i % len(palette)]
net = Network(height=”600px”, width=”100%”, dirigido=True, bgcolor=”#ffffff”, font_color=”#222222″, notebook=True, cdn_resources=”in_line”) net.barnes_hut(gravity=-12000, spring_length=180) para n en G.nodes: tamaño = 12 + 80 * pr_cent.get(n, 0.01) net.add_node(n, label=n, color=node_color.get(n, “#888888″), size=size, title=f”PageRank: {pr_cent.get(n,0):.3f}”) para s, o, datos en G.edges(data=True): net.add_edge(s, o, label=data.get(“label”, “”), flechas=”to”) pyvis_path = “kg_pyvis.html” net.write_html(pyvis_path, notebook=False, open_browser=False) print(f”Escribió {pyvis_path}”) display(IFrame(pyvis_path, width=”100%”, height=620))
print(“\nEntidades principales por grado de centralidad:”) para n, v en top(deg_cent): print(f” {n:35s} {v:.3f}”) print(“\nEntidades principales por intermediación:”) para n, v en top(btw_cent): print(f” {n:35s} {v:.3f}”) print(“\nEntidades principales por PageRank:”) para n, v en top(pr_cent): print(f” {n:35s} {v:.3f}”) prueba: desde networkx.algorithms.community import louvain_communities community = louvain_communities(H, seed=42) excepto Excepción: importar comunidad como community_louvain parts = community_louvain.best_partition(H, random_state=42) bins = {} para n, c en parts.items(): bins.setdefault(c, set()).add(n) comunidades = list(bins.values()) print(f”\nComunidades {len(communities)} detectadas:”) para i, c en enumerate(communities): print(f” Comunidad {i}: {sorted(c)}”) pred_counts = Counter(p para _, _, p en g_big.relations) print(“\nPredicados más comunes:”) para p, n en pred_counts.most_common(10): print(f” {n:3d} {p}”) print(“\n” + “=”*70 + “\n SECCIÓN 7 — Visualización pyvis personalizada\n” + “=”*70) paleta = [“#e6194B”,”#3cb44b”,”#ffe119″,”#4363d8″,”#f58231″,
“#911eb4″,”#42d4f4″,”#f032e6″,”#bfef45″,”#fabed4″]
node_color = {} para i, c en enumerar (comunidades): para n en c: node_color[n] = paleta[i % len(palette)]
net = Network(height=”600px”, width=”100%”, dirigido=True, bgcolor=”#ffffff”, font_color=”#222222″, notebook=True, cdn_resources=”in_line”) net.barnes_hut(gravity=-12000, spring_length=180) para n en G.nodes: tamaño = 12 + 80 * pr_cent.get(n, 0.01) net.add_node(n, label=n, color=node_color.get(n, “#888888″), size=size, title=f”PageRank: {pr_cent.get(n,0):.3f}”) para s, o, datos en G.edges(data=True): net.add_edge(s, o, label=data.get(“label”, “”), flechas=”to”) pyvis_path = “kg_pyvis.html” net.write_html(pyvis_path, notebook=False, open_browser=False) print(f”Escribió {pyvis_path}”) display(IFrame(pyvis_path, width=”100%”, height=620))