如何用igraph读取斯坦福SNAP的soc-sign-bitcoinotc数据集?
正确用igraph读取Bitcoin OTC边列表数据集的方法
我来帮你搞定这个问题!你之前尝试用graph.adjacency的思路走偏啦——这个函数是用来处理邻接矩阵格式数据的,但你的Bitcoin OTC数据集是标准的边列表格式(每行代表一条有向边,还附带评分和时间属性),所以得换个正确的姿势来读取。
下面是一步步的操作指南:
1. 读取CSV数据并指定列名
首先读取文件时,给列指定清晰的名称,方便后续操作:
# 读取数据,指定列名对应SOURCE, TARGET, RATING, TIME dat <- read.csv('soc-sign-bitcoinotc.csv', header = FALSE, col.names = c("SOURCE", "TARGET", "RATING", "TIME"))
2. 用graph_from_data_frame创建有向图
igraph里的graph_from_data_frame函数专门用来处理边列表,它会自动把前两列作为边的起点和终点,剩下的列直接作为边的属性:
library(igraph) # 创建有向图,directed=TRUE对应数据里的有向评分关系 g <- graph_from_data_frame(d = dat, directed = TRUE)
3. 验证图的正确性
你可以用以下代码确认图是否正确创建,以及边属性是否被正确加载:
# 查看图的基本信息(节点数、边数、类型) print(g) # 查看前3条边的详情 E(g)[1:3] # 查看前3条边的评分属性 E(g)$RATING[1:3] # 查看前3条边的时间戳属性 E(g)$TIME[1:3]
为什么之前的方法不对?
graph.adjacency需要输入一个n×n的邻接矩阵(n是节点总数),矩阵里的元素代表节点间的连接关系。但你的数据集是每行一条边的“长格式”,直接转成矩阵喂给这个函数会完全不符合它的输入要求,自然得不到正确的图结构。
内容的提问来源于stack exchange,提问作者Liondancer
相关产品推荐
相关产品推荐

