У меня есть файл CSV с 4 миллионами ребер направленной сети, представляющих людей, общающихся друг с другом (например, Джон отправляет сообщение Мэри, Мэри отправляет сообщение Энн, Джон отправляет другое сообщение Мэри и т. Д.). Я хотел бы сделать две вещи:
Найти степень, между и (возможно) центральность собственных векторов для каждого человека.
Получите визуализацию сети.
Я хотел бы сделать это в командной строке на сервере Linux, так как мой ноутбук не обладает большой мощностью. На этом сервере установлен R и библиотека statnet. Я нашел этот пост 2009 года, когда кто-то более компетентный, чем я, пытался сделать то же самое и столкнулся с проблемами. Так что мне было интересно, есть ли у кого-нибудь еще советы о том, как это сделать, желательно, чтобы шаг за шагом, потому что я знаю только, как загрузить файл CSV и ничего больше.
Просто чтобы дать вам представление, вот как выглядит мой CSV-файл:
$ head comments.csv
"src","dest"
"6493","139"
"406705","369798"
$ wc -l comments.csv
4210369 comments.csv
Ответы:
У вас есть список границ, который можно преобразовать в сетевой объект с помощью сетевой библиотеки. Вот пример использования фиктивных данных.
Тем не менее, предупреждение в порядке: у вас очень большая сеть, и я не уверен, что сюжет будет настолько информативным. Это, вероятно, будет выглядеть как большой клубок пряжи. Я также не уверен, насколько хорошо эти библиотеки справляются с такими большими наборами данных. Я предлагаю вам взглянуть на документацию по сетевым, статнетным и эргм библиотекам. Журнал статистического программного обеспечения (V24 / 3) предлагает несколько статей , охватывающих эти библиотеки. Вопрос можно найти здесь:
http://www.jstatsoft.org/v24
источник
src
иdst
. Это то, что я обычно делаю, чтобы загрузить файл (теперь файл с разделителями табуляции):el <- read.csv("comment-net/comments-ouids.tsv",header=T,sep="\t")
statnet
семейство библиотек в ненаправленной сети из более чем 3500 узлов (~ 8 миллионов возможных ребер). Это было вполне выполнимо, особенно когда целью было просто рассчитать статистику сети. Я даже оценил ERGM в сетях такого размера. Но ваша точка зрения хорошо принята; Я сомневаюсь, что сети миллионов узлов могут быть легко проанализированы.Я не думаю, что R является первым выбором здесь (может быть, я ошибаюсь). Здесь вам понадобятся огромные массивы для индексации и подготовки файлов вашей сети в соответствующем формате данных. Прежде всего, я попытаюсь использовать библиотеку SNAP Юре (Роб упоминает его в посте выше) ; он написан на C ++ и очень хорошо работает в больших сетях.
источник
centrality.cpp
сTUNGraph
наTNEGraph
(см. Pastebin.com/GHUquJvT строка 24). Это больше не компилируется. Я подозреваю, что это требует другого типа узла? Я получаюcentrality.cpp:24: error: conversion from ‘TUNGraph::TNodeI’ to non-scalar type ‘TNEGraph::TNodeI’ requested
Gephi ( http://gephi.org/ ) может быть простым способом изучения данных. Вы почти наверняка можете визуализировать это и выполнить некоторые вычисления (хотя я не использовал это в течение некоторого времени, поэтому я не могу вспомнить все функции).
источник
Исходя из прошлого опыта работы с сетью из 7 миллионов узлов, я думаю, что визуализация всей вашей сети даст вам непонятный образ. Я мог бы предложить различные визуализации, используя подмножества ваших данных, например, просто используя 10 лучших узлов с наибольшим количеством входящих или исходящих ссылок. Второе предложение Селениуса об использовании гефи.
источник
Если вас интересует размер сети, вы можете попробовать
igraph
пакет в R. И если он плохо работает внутри R, он может работать лучше как модуль Python. Или дажеnetworkx
пакет для Pythonисточник
Вы подозреваете, что в сети имеется небольшое количество очень больших подключенных компонентов? Если нет, вы можете разложить его на отдельные компоненты, что значительно облегчит вычисление показателей центральности.
источник
Можно использовать несколько программных пакетов R, включая «sna» и «network». NetworkX - это то, на что я не обязательно буду полагаться, если у вас проблемы с производительностью в sna. Я до смерти люблю NetworkX и использую его для большей части моего анализа, но NetworkX довольно горд тем, что является в основном чисто Pythonic реализацией. Он не особенно хорошо использует быстрый предварительно скомпилированный код, и sna часто значительно опережает NetworkX.
источник