es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cree un gráfico bipartito en networkx.

Quiero hacer un grafo bipartito usando networkx. Estoy siguiendo la documentación y esta respuesta previa.

df = pd.DataFrame({'Nombre': ['John','John&##39;,'Aron',&##39;Aron','Jeny','Jeny&##39;],
                  'Película':['A','B','C','A','Y','Z']})

G = nx.Graph()
G.add_nodes_from(df.Nombre, bipartite=0)
G.add_nodes_from(df.Película, bipartite=1)
G.add_edges_from(df.values)

Porque mi grafo está desconectado, es decir:

nx.is_connected(G)
>False
top = nx.bipartite.sets(G)[0]
>AmbiguousSolution    

Sigo la documentación como:

top_nodes = {n for n, d in G.nodes(data=True) if d["bipartite"] == 0}
Z = nx.bipartite.projected_graph(G, top_nodes)
nx.draw(Z)

Obtengo:

enter image description here

Yo esperaba:

enter image description here

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para crear un grafo bipartido utilizando NetworkX, debes seguir el enfoque documentado en su documentación oficial. Aquí están los pasos para crear un grafo bipartido utilizando NetworkX:

    1. Crea un objeto Graph utilizando nx.Graph().
    2. Agrega nodos del primer conjunto bipartito al grafo utilizando G.add_nodes_from(nodes, bipartite=0), donde nodes es una lista de nodos.
    3. Agrega nodos del segundo conjunto bipartito al grafo utilizando G.add_nodes_from(nodes, bipartite=1).
    4. Agrega aristas entre los dos conjuntos bipartitos utilizando G.add_edges_from(edges).

    Aquí está el ejemplo de código:

    import networkx as nx
    import matplotlib.pyplot as plt
    
    # Crear un grafo bipartido vacío
    G = nx.Graph()
    
    # Agregar nodos al grafo
    nombres = ['John', 'Aron', 'Jeny']
    películas = ['A', 'B', 'C', 'Y', 'Z']
    G.add_nodes_from(nombres, bipartite=0)
    G.add_nodes_from(películas, bipartite=1)
    
    # Agregar aristas al grafo bipartido
    edges = [('John', 'A'), ('John', 'B'), ('Aron', 'C'), ('Aron', 'A'), ('Jeny', 'Y'), ('Jeny', 'Z')]
    G.add_edges_from(edges)
    
    # Proyectar el grafo al primer conjunto bipartito y dibujarlo
    nodos_superiores = {n for n, d in G.nodes(data=True) if d["bipartite"] == 0}
    grafo_proyectado = nx.bipartite.projected_graph(G, nodos_superiores)
    nx.draw(grafo_proyectado, with_labels=True)
    plt.show()
    

    En el código anterior, creamos un grafo bipartido vacío y agregamos nodos y aristas a él. Luego proyectamos el grafo al primer conjunto bipartito y lo dibujamos utilizando nx.draw(). La salida debería ser similar a lo que esperabas.

Comments are closed.