Javascript 如何将用户主题网络图折叠为用户用户图?

Javascript 如何将用户主题网络图折叠为用户用户图?,javascript,d3.js,graph-theory,force-layout,Javascript,D3.js,Graph Theory,Force Layout,我有一个d3力定向图,显示了用户-主题关系。我想把它折叠成一个用户图 我的节点数据如下所示: [{ "id": "USER", "type": "u", }, { "id": "USER", "type": "u", }, { "id": "USER", "type": "u", }, { "id": "TOPIC", "type": "t", }, { "id": "TOPIC", "type": "t", }]

我有一个d3力定向图,显示了用户-主题关系。我想把它折叠成一个用户图

我的节点数据如下所示:

[{
    "id": "USER",
    "type": "u",
}, {
    "id": "USER",
    "type": "u",
}, {
    "id": "USER",
    "type": "u",
}, {
    "id": "TOPIC",
    "type": "t",
}, {
    "id": "TOPIC",
    "type": "t",
}]
[{
    "source": "TOPIC",
    "target": "USER",
    "score": 5
}, {
    "source": "TOPIC",
    "target": "USER",
    "score": 48
}]
我的边数据如下所示:

[{
    "id": "USER",
    "type": "u",
}, {
    "id": "USER",
    "type": "u",
}, {
    "id": "USER",
    "type": "u",
}, {
    "id": "TOPIC",
    "type": "t",
}, {
    "id": "TOPIC",
    "type": "t",
}]
[{
    "source": "TOPIC",
    "target": "USER",
    "score": 5
}, {
    "source": "TOPIC",
    "target": "USER",
    "score": 48
}]

我该如何折叠图表呢?

我以前不得不做这项工作,因此这与其说是一个答案,不如说是一个潜在陷阱的警告,但它可能很有用,而且不适合在评论中使用

主要的一点是您需要构建一组新的边,但是需要做出一些非常重要的决策/假设

首先排序,然后按主题划分当前的边集。然后,每个主题边缘集中提到的用户集应该在用户-用户图中相互连接,因为它们共享一个主题。你现在的第一个问题是,你应该如何处理原始数据集中的分数,它们现在有什么意义吗?对于您上面提到的边缘数据,两个用户之间的链接强度是多少?48 + 5? (48 + 5) / 2? 不知道

一旦您对多个主题执行此操作,那么如果同一用户有多个共同主题,那么他们之间就会出现多个边缘。你在这里做什么?保留单独的边缘,这将需要一些方法来区分它们在数据集中(它们需要包含主题和用户ID的不同ID)和视觉上,就像默认布局一样,边缘将相互重叠。或者,您可以合并不同主题的用户之间的边,但同样,您如何计算您的分数?每个添加的链接简单+1?基于链接个人分数的一些公式

好消息是您不需要对节点集执行任何操作。用户已经存在,只需过滤掉主题即可