问题描述
我以前从未使用过标签传播,也没有在 Python 中使用过,但现在我需要检查这是否适合我的问题。 我有一个如下所示的数据集
User Connection score
xxx.dean.martin vera.miles 10
xxx.dean.martin christopher.sole 5
xxx.dean.martin elis.con NaN
xxx.catherine.rice vera.miles NaN
xxx.vera.miles NaN 0
其中 score
仅取决于 User
,并且可以取值 0、5 或 10。
我想构建一个图表,其中 Users
是节点,Connection
是目标。这意味着,例如,xxx.dean.martin
链接到 vera.miles
。 score
应该是分配给节点的值(例如,xxx.dean.martin
)。
如示例所示,由于缺少某些值 (NaN),我想使用标签传播来分配 scores
缺失的位置。看最后一个例子,
`xxx.vera.miles NaN 0.0`
当我在网络中可视化时,我应该期待 vera.miles,dean.martin
和 catherine.rice
之间的链接。基于邻居,我想通过节点分配('transfer'/'propagate')得分值。
作为数据集的输出示例(应该来自图形可视化):
User Connection score
xxx.dean.martin vera.miles 10
xxx.dean.martin christopher.sole 5
xxx.dean.martin elis.con 5 # just the average of the nodes which User is linked with
xxx.catherine.rice vera.miles 0
xxx.vera.miles NaN 0
解决方法
根据您的设置,这不是标签传播的标准设置,因为节点和标签的含义以某种方式混合在一起。
要通过计算均值的 1 步传播获得预期输出,您只需执行以下操作:
df.fillna(df.groupby('User',as_index=False).mean()).fillna(0)
用均值填充 NaN
,用 NaN
填充剩余的 0
。