MAT281 - Laboratorio N°07: Visualizacion y Analisis de Grafos con NetworkX¶
Objetivos del laboratorio¶
- Construir grafos a partir de listas de aristas y matrices de adyacencia.
- Visualizar grafos usando distintos layouts.
- Calcular metricas de centralidad e interpretar su significado.
- Detectar comunidades y analizar caminos mas cortos.
- Diferenciar grafos dirigidos, no dirigidos y bipartitos.
Instrucciones¶
Lea con atencion cada problema antes de resolverlo. Reemplace cada celda que contiene # FIXME con su propia solucion y, cuando se solicite, responda las preguntas en celdas de texto.
Nota: Puede apoyarse en asistentes virtuales (ChatGPT, Gemini, Claude) o en el autocompletado de Colab, pero asegurese de entender cada linea de codigo que entregue.
Requisito:
# !pip install networkx python-louvain
In [ ]:
Copied!
import networkx as nx
import pandas as pd
import matplotlib.pyplot as plt
import networkx as nx
import pandas as pd
import matplotlib.pyplot as plt
Dataset: red de colaboracion¶
Trabajaremos con una pequeña red de colaboracion donde cada arista indica que dos personas trabajaron juntas (con un peso = numero de proyectos compartidos).
In [ ]:
Copied!
edges = pd.DataFrame({
'source': ['Ana','Ana','Beto','Beto','Caro','Caro','Dani','Eva','Eva','Fito'],
'target': ['Beto','Caro','Caro','Dani','Dani','Eva','Eva','Fito','Gabi','Gabi'],
'weight': [3, 1, 2, 1, 4, 1, 2, 3, 1, 2],
})
edges
edges = pd.DataFrame({
'source': ['Ana','Ana','Beto','Beto','Caro','Caro','Dani','Eva','Eva','Fito'],
'target': ['Beto','Caro','Caro','Dani','Dani','Eva','Eva','Fito','Gabi','Gabi'],
'weight': [3, 1, 2, 1, 4, 1, 2, 3, 1, 2],
})
edges
Problema 01 — Construir el grafo¶
Tu tarea:
- Construye un grafo no dirigido
Gdesde el DataFrameedgesconnx.from_pandas_edgelist(incluye el atributoweight). - Reporta el numero de nodos y aristas.
- Dibuja el grafo con
nx.drawusando unspring_layout.
In [ ]:
Copied!
# FIXME
# FIXME
Problema 02 — Layouts y pesos¶
Tu tarea:
- Dibuja el mismo grafo con al menos dos layouts distintos
(
spring_layout,circular_layout,kamada_kawai_layout). - Haz que el grosor de cada arista sea proporcional a su
weight.
In [ ]:
Copied!
# FIXME
# FIXME
Problema 03 — Metricas de centralidad¶
La centralidad mide la importancia de un nodo en la red.
Tu tarea:
- Calcula la centralidad de grado (
degree_centrality) y de intermediacion (betweenness_centrality). - ¿Quien es la persona mas "central" segun cada metrica?
- Dibuja el grafo haciendo que el tamaño de cada nodo sea proporcional a su centralidad de grado.
In [ ]:
Copied!
# FIXME
# FIXME
Problema 04 — Comunidades y caminos¶
Tu tarea:
- Detecta comunidades con el algoritmo de Louvain
(
nx.community.louvain_communities) y colorea los nodos segun su comunidad. - Calcula el camino mas corto entre
'Ana'y'Gabi'(nx.shortest_path) y resaltalo en el grafo.
In [ ]:
Copied!
# FIXME
# FIXME
Problema 05 — Grafo dirigido¶
Tu tarea:
- Construye un grafo dirigido (
nx.DiGraph) con las mismas aristas interpretadas como "A recomienda a B". - Calcula el grado de entrada (
in_degree) y salida (out_degree) de cada nodo. - Pregunta: ¿que representa un nodo con alto grado de entrada en esta red?
In [ ]:
Copied!
# FIXME
# FIXME
Respuesta: (escribe aqui)