从长格式数据帧构建节点和边

Posted

技术标签:

【中文标题】从长格式数据帧构建节点和边【英文标题】:Build nodes and edges from long-format data frame 【发布时间】:2019-12-05 19:42:29 【问题描述】:

我有一个看起来像这样的数据框

ID Order
1  Shirt1
1  Shirt2
2  Shirt3
2  Shirt4
3  Shirt1
3  Shirt1
3  Shirt5
3  Shirt6
4  Shirt1
4  Shirt2

从这里开始,我如何生成节点和边以便以后构建加权图?

我想我的数据应该是这样的,节点是第 1 列和第 2 列,权重第 3 列。但不确定这是否是构建网络的最佳方式

Item1  Item2   Weight
shirt1 Shirt     2
shirt3 Shirt4    1
shirt1 Shirt1    1
shirt1 Shirt5    1
shirt5 Shirt6    1

【问题讨论】:

【参考方案1】:

IIUC 我们需要使用combn 创建所有可能的组合,然后只需group_by 再次找到每对唯一的ID

library(dplyr)

s = df %>% group_by(ID) %>% do(data.frame(t(combn(.$Order, 2))))

s = s %>% group_by(X1,X2) %>% summarise(Weight = length(unique(ID)))
s
# A tibble: 6 x 3
# Groups:   X1 [?]
      X1     X2 Weight
   <chr>  <chr>  <int>
1 Shirt1 Shirt1      1
2 Shirt1 Shirt2      2
3 Shirt1 Shirt5      1
4 Shirt1 Shirt6      1
5 Shirt3 Shirt4      1
6 Shirt5 Shirt6      1

【讨论】:

以上是关于从长格式数据帧构建节点和边的主要内容,如果未能解决你的问题,请参考以下文章

从长数据帧到宽数组的快速转换

使用熊猫将数据帧从长到宽转换-单行输出

将数据帧从长转换为宽,同时保留值的顺序(dtype datetime)

跨节点分发 RDD 或数据帧的副本

Networkx:如何在图形中显示节点和边属性

python networkx 在某些条件下删除节点和边