![](/img/trans.png)
[英]Is there a way to group nodes in a Networkx graph together based on how connected they are?
[英]How to group nodes in a networkx python graph based on note attributes?
我試圖以圖表的形式可視化我的 Linkedin 網絡,其中節點是我所連接的人,這些節點將聚集到他們工作的公司中。 我將我的 Linkedin 網絡下載為 csv 文件,並設法將圖形可視化,但它看起來像一個巨大的地球。 如果我可以按公司對姓名進行分組,當我單擊節點時,可以獲取該人的聯系方式,那將是一個驚人的視覺效果。 我正在使用 pyvis 和 networkx。
這是我的代碼:
from pyvis.network import Network
import networkx as nx
df = pd.read_csv("Connections.csv")
# The dataframe consists of columns First Name, Last Name, #Company, Position and Connected On.
# I added a column called Name which is concat of first and #last names
G_weighted = nx.Graph()
G_weighted.add_edges_from(zip(df["My Network"], df["Name"]))
nx.set_node_attributes(G_weighted, df["Company"], 'Company')
g = Network(height=1080,width=1080, notebook=True)
g.toggle_hide_edges_on_drag(True)
g.barnes_hut()
g.from_nx(G_weighted)
g.show_buttons()
g.show('graph.html')
有沒有辦法根據公司將名稱分組? 如果是這樣,我該怎么做?
由於交互選項,我非常喜歡將 pyvis 與 networkx 一起使用。
我知道這有點晚了,但這里是你可以實現它的方法。
請注意,pyvis 可以從節點 dataframe 獲取group
屬性,並為每個組指定不同的顏色以及title
屬性,以便當您在節點上進行 hover 時,您可以查看詳細信息。
import networkx as nx
import pandas as pd
from pyvis.network import Network
# creating test data
node_data = {
"id": [1, 2, 3, 4],
"Name": ["Me", "Batman", "Superman", "IronMan"],
"Company": ["Marvel", "DC", "DC", "Marvel"],
}
edge_data = {"source": [1, 1, 2], "target": [4, 2, 3]}
nodes = pd.DataFrame(node_data)
edges = pd.DataFrame(edge_data)
# getting a group id for each company
groups = nodes.groupby("Company")["id"].apply(list).reset_index()
groups["group"] = groups.index
# finding group id for each node from groups dataframe
nodes = nodes.merge(groups, how="inner", on=["Company"])
nodes["title"] = nodes[["Name", "Company"]].apply(lambda x: f"Name:{x[0]} , Company:{x[1]}", axis=1)
nodes = nodes.drop("id_y", axis=1).set_index("id_x")
# collecting node attributes for network x
node_attrs = nodes.to_dict("index")
# creating a network x graph from dataframes
graph = nx.from_pandas_edgelist(edge_data)
nx.set_node_attributes(graph, node_attrs)
pyvis_nt = Network("1000px", "1000px", heading="Graph")
pyvis_nt.from_nx(graph)
pyvis_nt.show('test_graph.html')
output:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.