сетевой анализ: создание файлов узлов и ребер из csv

У меня есть двухрежимная сеть (grant X person) в формате csv. Я хотел бы создать personXperson проекцию этой сети и вычислить некоторые сетевые меры (включая центральные меры близости и между ними и т. д.).).

Каким будет мой первый шаг? Я предполагаю создание 2 отдельных файлов для узлов и ребер и запуск анализа в R с помощью пакета igraph?!

Вот супер упрощенная версия моих данных (my_data.csv).

  • Грант, Персона
  • A, 1
  • A, 2
  • B, 2
  • B, 3

2 ответа

  1. Решите, как график должен представлять данные. Из того, что вы описали, один подход будет состоять в том, чтобы узлы в графе представляли людей, а ребра-гранты. В этом случае создайте попарно lis людей, которые находятся на том же Гранте. Ребра по умолчанию двунаправленные в iGraph, поэтому вам просто нужна каждая пара один раз.

  2. (1) Создайте граф с помощью igraph; (2) объявите его двудольным; и (3) проецируйте его как граф с одним режимом.

    el <- read.table(text = "Grant,Person
                             A,1
                             A,2
                             B,2
                             B,3", 
                      sep = ",", header = T, stringsAsFactors=F)
    #1
    net <- graph.edgelist(as.matrix(el))
    #2
    V(net)$type <- bipartite.mapping(net)$type
    

    Вы можете проверить, что граф двудольный, изучив его:

    > net
    IGRAPH DN-B 5 4 -- 
    + attr: name (v/c), type (v/l)
    + edges (vertex names):
    [1] A->1 A->2 B->2 B->3
    

    «B» во второй строке указывает, что это двудольный граф.

    #3
    net1mode <- bipartite.projection(net)$proj2
    

    bipartite.projectionФункция создает два проекта, по одному для каждого режима. Узлы являются второй проекцией, поскольку они находятся во втором столбце исходного списка ребер.

    par(mfrow=c(1,2))
    plot(net,edge.arrow.size=0.5,main="Two mode")
    plot(net1mode,edge.arrow.size=0.5, main="One mode projection")
    

    Введите описание изображения здесь