在复杂网络建模中,使用真实的网络数据集是理解和分析现实世界网络结构的关键。接下来将介绍如何使用 Python 中的工具库(如 NetworkX、Pandas 和 Matplotlib)来读取、操作和分析真实的网络数据集。我们将以一个具体的例子来展示整个过程,包括数据集的获取、加载、可视化和基本分析。
提示:此数据集网站数据集是.zip格式,解压后的数据是.mtx格式
链接: https://networkrepository.com/index.php
import zipfile
f = zipfile.ZipFile("./data/inf-USAir97",'r') # 压缩文件位置
for file in f.namelist():
f.extract(file,"./data") # 解压位置
f.close()
# 读取 .mtx 文件
matrix = mmread('./data/inf-USAir97.mtx')
# 转换为 NetworkX 图对象
G = nx.Graph(matrix)
# 输出节点数量和边数量
num_nodes = G.number_of_nodes()
num_edges = G.number_of_edges()
print(f"Number of nodes: {num_nodes}")
print(f"Number of edges: {num_edges}")
#Number of nodes: 332
#Number of edges: 2126
提示:此数据集网站数据集是.txt.gz格式
链接: https://snap.stanford.edu/data/
facebook = pd.read_csv(
"./data/facebook_combined.txt.gz",
compression="gzip",
sep=" ",
names=["source", "target"],
)
# 输出网络信息
G = nx.from_pandas_edgelist(facebook, "source", "target")
print(nx.number_of_nodes(G), nx.number_of_edges(G))
# 绘制网络图
pos = nx.kamada_kawai_layout(G)
nx.draw(G, pos, node_color='red', edge_color='blue', with_labels=True)
提示:此数据集网站数据集为.tar.bz2格式
链接: http://konect.cc/networks/
# 解压.bz2文件
import tarfile
f = tarfile.open('./data/download.tsv.ucidata-zachary.tar.bz2','r:bz2')
for file in f:
f.extract(file, r'./data') # d:mydirectory is where I want to uncompress the files.
f.close()
G = nx.read_edgelist("./data/ucidata-zachary/out.ucidata-zachary", comments='%')
print(nx.number_of_nodes(G), nx.number_of_edges(G))
# 绘制网络图
pos = nx.kamada_kawai_layout(G)
nx.draw(G, pos, node_color='red', edge_color='blue', with_labels=True)
提示:此数据集网站数据集为.zip格式
链接: https://networks.skewed.de/
import zipfile
with zipfile.ZipFile("./data/network.csv.zip") as z:
with z.open("edges.csv") as f:
df = pd.read_csv(f)
print(df)
G = nx.from_pandas_edgelist(df, "# source", " target")
print(nx.number_of_nodes(G), nx.number_of_edges(G))
# 原始数据包含133280个节点,在直接读取连边数据时忽略了度为零的节点
G = nx.from_pandas_edgelist(df, "# source", " target", create_using = nx.MultiGraph())
print(nx.number_of_nodes(G), nx.number_of_edges(G))
# 读取 .mtx 文件
matrix = mmread('./data/inf-USAir97.mtx')
# 转换为 NetworkX 图对象
G = nx.Graph(matrix)
# 计算度中心性
degree_centrality = nx.degree_centrality(G)
# 输出度中心性最高的节点
max_degree_node = max(degree_centrality, key=degree_centrality.get)
max_degree = degree_centrality[max_degree_node]
print(f"Node with highest degree centrality: {max_degree_node}, Degree centrality: {max_degree}")
# Node with highest degree centrality: 117, Degree centrality: 0.4199395770392749
import networkx as nx
import matplotlib.pyplot as plt
import random
import numpy as np
# 定义一个函数来生成爱心形
def heart_layout(n):
t = np.linspace(0, 2*np.pi, n)
x = 16 * np.sin(t)**3
y = 13 * np.cos(t) - 5 * np.cos(2*t) - 2 * np.cos(3*t) - np.cos(4*t)
return np.column_stack([x, y])
# 创建一个包含200个节点的随机图
G = nx.gnp_random_graph(200, 0.05)
# 随机分配节点和边的颜色
node_colors = [random.choice(['red', 'blue', 'green', 'yellow', 'purple', 'orange']) for _ in range(len(G.nodes))]
edge_colors = [random.choice(['red', 'blue', 'green', 'yellow', 'purple', 'orange']) for _ in range(len(G.edges))]
# 绘制网络图
plt.figure(figsize=(12, 10))
# 使用自定义的爱心布局
pos = heart_layout(len(G.nodes))
# 绘制节点
nx.draw_networkx_nodes(G, pos, node_size=100, node_color=node_colors, alpha=0.8)
# 绘制边,增加边的宽度
nx.draw_networkx_edges(G, pos, width=2.0, alpha=0.6, edge_color=edge_colors)
# 显示图的中文标题
plt.title("YunRong_Love_Network", fontsize=16)
# 隐藏坐标轴
plt.axis('off')
# 显示图形
plt.show()
本文展示了如何使用 Python 中的 Pandas、NetworkX 和 Matplotlib 库来读取、处理和分析真实的网络数据集。通过这些工具,我们可以轻松地导入数据、构建图结构、进行可视化和进行基本的网络分析。这些技术不仅适用于社交网络数据,还可以应用于其他领域的复杂网络建模和分析中。