【发布时间】:2021-04-04 12:45:56
【问题描述】:
我正在处理一个样本数据,其中包含几篇论文、它们所属的主题以及这些论文的发表年份,它看起来像这样:
| paper_id | topic | 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 | topic | 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,下图给出了一个示例网络:
为了重新调整这个二分网络中的链接,我使用 python 在networkx 中尝试了configuration_model。所以我可以保证主题和年份的程度(但这与np.random.permutation没有区别?)。但据我所知,configuration_model 不接受任何约束。在此示例中,tp1 具有到 y1 和 y2 的链接。因此,在所需的重新洗牌网络中,tp1 不能有到 y3 和 y4 的链接。同样,(tp2,y4), (tp3,y1/y3), (tp4,y1/y2) 之间没有链接。
我想知道我是否朝着正确的方向前进,即将这个任务建模为一个二分网络重组问题。如果是这样,我可以使用任何工具来完成这项任务吗?
【问题讨论】:
-
目前还不清楚您要做什么。能否提供一个简单的随机化前后数据示例?
-
@MichaelRovinsky 谢谢你的提问。我已经编辑了这个问题。在第一个表中,您可以看到原始数据的示例。在第二个表中,它是随机化后的数据。前两列保持不变,只有第三列(pub_year)被重新洗牌。
标签: python networkx bipartite randomized-algorithm