двудольная сеть. Сохраняющая степень рандомизация с ограничениями.
Я работаю над выборкой данных, содержащей несколько статей, темы, к которым они относятся, и годы публикации этих статей, это выглядит так:
Я пытаюсь перетасовать годы публикации этих статей (оставьте количество статей по каждой теме и публикуемых в каждом году постоянным) в качестве подготовки к нулевой модели. Если без ограничений, это можно сделать проще с помощью. Но я хочу убедиться, что перетасованные годы этих статей остались в пределах периода соответствующих тем. Например, есть статьи по теме 1, опубликованные в 1995, 1996 и 1997 годах, поэтому перетасованные годы всех статей по теме 1 остаются периодом с 1995 по 1997 год. Точно так же тема 0 в [1991,1998], тема 2 в [1995], темы 3 в [1991,1992] и темы 4 в [1993,1997].
Я просматривал веб-страницы и статьи об этом, я думаю, что этот вопрос можно смоделировать как двустороннюю сетевую рандомизацию с сохранением степени с ограничениями. В этой двусторонней сети используются два типа узлов: topic и pub_year, а пример сети представлен на следующем рисунке:
Чтобы перетасовать ссылки в этой двусторонней сети, я попробовал
Я хотел бы знать, иду ли я в правильном направлении, т.е. моделирую эту задачу как проблему двусторонней перестановки сети. Если да, то есть ли какой-нибудь инструмент, который я могу использовать для этой задачи?
1 ответ
Простой скрипт для перетасовки:
import random
# replace it with your data
papers = [
{"paper_id": 2031361154, "topic": 0, "year": 1998},
{"paper_id": 2088633475, "topic": 1, "year": 1995},
{"paper_id": 1987003396, "topic": 2, "year": 1995},
{"paper_id": 2246118404, "topic": 3, "year": 1992},
{"paper_id": 2017547909, "topic": 1, "year": 1996},
{"paper_id": 2032449907, "topic": 4, "year": 1993},
{"paper_id": 2053684599, "topic": 0, "year": 1991},
{"paper_id": 1968369145, "topic": 1, "year": 1997},
{"paper_id": 2160198778, "topic": 4, "year": 1997},
{"paper_id": 2026639487, "topic": 3, "year": 1991}
]
topicRanges = {}
for paper in papers:
topic = paper["topic"]
if topic in topicRanges:
topicRanges[topic] = {
"min": min(paper["year"], topicRanges[topic]["min"]),
"max": max(paper["year"], topicRanges[topic]["max"])
}
else:
topicRanges[topic] = {"min": paper["year"], "max": paper["year"]}
shuffled = []
for paper in papers:
topic = paper["topic"]
topicRange = topicRanges[topic]
year = random.randint(topicRange["min"], topicRange["max"])
shuffled.append(
{"paper_id": paper["paper_id"], "topic": topic, "year": year})
print(shuffled)