Проблемы с памятью при крупномасштабной визуализации в социальных сетях с использованием R и Cytoscape
Я относительно новичок в R и пытаюсь решить следующую проблему:
Я работаю на платформе Windows 7 Enterprise с 32-битной версией R и на моей машине около 3 ГБ ОЗУ. У меня есть крупномасштабные данные социальной сети (около 7000 вершин и около 30 000 ребер), которые в настоящее время хранятся в моей базе данных SQL. Мне удалось вытащить эти данные (за исключением атрибутов вершин и ребер) в R-фрейм данных, а затем в объект igraph. Для дальнейшего анализа и визуализации я бы хотел перенести этот igraph в Cytoscape с помощью RCytoscape. В настоящее время мой подход заключается в преобразовании объекта igraph в объект graphNEL, поскольку RCytoscape, похоже, хорошо работает с этим типом объекта. (Функции построения графиков слишком медленные и лишены возможности дальнейшего анализа.)
К сожалению, я всегда сталкиваюсь с проблемами памяти при запуске этого скрипта. Ранее он работал с небольшими сетями, хотя.
У кого-нибудь есть идеи как решить эту проблему? Или вы можете порекомендовать какие-либо другие инструменты визуализации и анализа, которые хорошо работают с R и могут обрабатывать такие масштабные данные?
Любая помощь приветствуется. Большое спасибо заранее!
Бест, Игнасио
2 ответа
Извините, что потратил несколько дней, чтобы вернуться к вам.
Я только что провел несколько тестов, в которых
1) матрица смежности создается в R 2) затем R graphNEL создается из матрицы 3) (необязательно) добавляются атрибуты узла и ребра 4) создается, отображается и раскладывается окно CytoscapeWindow и перерисовывается
(all times are in seconds)
nodes edges attributes? matrix graph cw display layout redraw total
70 35 no 0.001 0.001 0.5 5.7 2.5 0.016 9.4
70 0 no 0.033 0.001 0.2 4.2 0.5 0.49 5.6
700 350 no 0.198 0.036 6.0 8.3 1.6 0.037 16.7
1000 500 no 0.64 0.07 12.0 9.8 1.8 0.09 24.9
1000 500 yes 0.42 30.99 15.7 29.9 1.7 0.08 79.4
2000 1000 no 3.5 0.30 73.5 14.9 4.8 0.08 96.6
2500 1250 no 2.7 0.45 127.1 18.3 11.5 0.09 160.7
3000 1500 no 4.2 0.46 236.8 19.6 10.7 0.10 272.8
4000 2000 no 8.4 0.98 502.2 27.9 21.4 0.14 561.8
К моему полному удивлению и огорчению, в 'cw' (метод new.CytoscapeWindow) наблюдается экспоненциальное замедление - что вообще не имеет смысла. Может случиться так, что истощение вашей памяти связано с этим и вполне исправимо.
Я буду исследовать это, и, возможно, исправлюсь на следующей неделе.
Кстати, знаете ли вы, что вы можете создать graphNEL непосредственно из матрицы смежности?
g = new ("graphAM", adjMat = matrix, edgemode="directed")
Спасибо, Игнасио, за ваш самый полезный доклад. Я должен был сделать эти тесты времени давно!
- Павел
Прошло много времени с тех пор, как я использовал Cytoscape, поэтому я не совсем уверен, как это сделать, но в руководстве говорится, что вы можете использовать текстовые файлы в качестве входных данных с помощью функции "Импорт таблицы".
В igraph
Вы можете использовать write.graph()
функция экспорта графа несколькими способами. Таким образом, вы можете обойтись без преобразования graphNEL
объект, который может быть достаточно, чтобы не исчерпать память.