我正在处理一个样本数据,其中包含几篇论文、它们所属的主题以及这些论文的发表年份,它看起来像这样:
paper_id | 话题 | pub_year |
---|---|---|
2031361154 | 0 | 1998 |
2088633475 | 1 | 1995 |
1987003396 | 2 | 1995 |
2246118404 | 3 | 1992 |
2017547909 | 1 | 1996 |
2032449907 | 4 | 1993 |
2053684599 | 0 | 1991 |
1968369145 | 1 | 1997 |
2160198778 | 4 | 1997 |
2026639487 | 3 | 1991 |
我正在尝试重新调整这些论文的发表年份(保持每个主题的论文数量和每年发表的论文数量不变),为空模型做准备。如果没有约束,这可以通过简单地完成np.random.permutation
。改组出版年份后的示例表如下:
paper_id | 话题 | reshuffled_pub_year |
---|---|---|
2031361154 | 0 | 1998 |
2088633475 | 1 | 1997 |
1987003396 | 2 | 1995 |
2246118404 | 3 | 1992 |
2017547909 | 1 | 1996 |
2032449907 | 4 | 1993 |
2053684599 | 0 | 1991 |
1968369145 | 1 | 1997 |
2160198778 | 4 | 1995 |
2026639487 | 3 | 1991 |
但我想确保这些论文的改组年份保持在相应主题的期限内。例如,在第一个表中,关于主题 1 的论文仅在 1995 年、1996 年和 1997 年发表,因此所有关于主题 1 的论文的重新洗牌年份都停留在 1995 年至 1997 年期间。同理,[1991 年的主题 0, 1998],[1995] 中的主题 2,[1991,1992] 中的主题 3 和 [1993,1997] 中的主题 4。但是在第二个表中,2246118404 号论文的改版发表年份是 1998 年,因为这篇论文是关于主题 3,所以年份只能是 1991 年或 1992 年。所以我需要在改版期间指定约束条件。
我已经搜索过有关此问题的网页和论文,我认为这个问题可以建模为具有约束的双向网络保度随机化。该二分网络中的两种节点类型是 topic 和 pub_year,下图给出了一个示例网络:
为了重新调整这个二分网络中的链接,我尝试configuration_model
使用networkx
python。所以我可以保证题目的度数和年数(不过这和没区别np.random.permutation
?)。但据我所知,configuration_model
不接受任何约束。在此示例中,tp1 具有指向 y1 和 y2 的链接。因此,在所需的重新洗牌网络中,tp1 不能有到 y3 和 y4 的链接。同样,(tp2,y4)、(tp3,y1/y3)、(tp4,y1/y2) 之间没有链接。
我想知道我是否朝着正确的方向前进,即将这个任务建模为双向网络重组问题。如果是这样,我可以使用任何工具来完成这项任务吗?