R: Gephi: управление кадром данных для использования с write.gexf

Я пытаюсь манипулировать кадром данных. В качестве примера: скажем, у меня есть кадр данных, содержащий клиентов и магазины, которые они посещают:

df = data.frame(customers = c("a", "b", "b", "c", "c"),
                shop_visited = c("X", "X", "Y", "X", "Z"))
customers shop_visited
        a            X
        b            X
        b            Y
        c            X
        c            Z

Подводя итог этому кадру данных:

  • один покупатель (b) делает покупки в X, а также в Y;
  • один покупатель (b) делает покупки в Y, а также в X;
  • один покупатель (c) делает покупки в X, а также в Z;
  • один покупатель (c) делает покупки в Z, а также в X

Или, более кратко:

relations = data.frame(source = c("X","Y", "X", "Z"), 
                       target = c("Y","X","Z","X"))
 source target
      X      Y
      Y      X
      X      Z
      Z      X

Я ищу метод, который сможет сделать преобразование df -> relations. Мотивация этого заключается в том, что я могу использовать relations в качестве аргумента edges в write.gexf. Спасибо за любую помощь.


person user32259    schedule 23.04.2013    source источник
comment
Это то, что вам нужно? library(igraph); g <- graph.data.frame(relations); write.graph(g, file="g.graphml", format="graphml") вы получите файл graphml, который можно открыть в Gephi. Или вам действительно нужен файл gexf?   -  person Ben    schedule 23.04.2013
comment
Попытка получить его в виде файла gexf больше свидетельствует о моей наивности в отношении альтернатив, чем что-либо еще. Сейчас я проверю пакет igraph. Ваше здоровье   -  person user32259    schedule 23.04.2013
comment
Руководство по пакету igraph кажется весомым, поэтому, если это возможное решение, мне потребуется некоторое время, чтобы его переварить; igraph - это пакет, который вы рекомендуете изучить? Кроме того, я могу ошибаться, но в приведенном выше коде не похоже, что вы когда-либо получали relations из df?!   -  person user32259    schedule 23.04.2013
comment
Честно говоря, я мало им пользуюсь (в этом нет особой необходимости), а также нахожу документацию довольно непостижимой. Но, как и в большинстве вещей R, у него есть большая группа опытных пользователей, некоторые из них активны здесь, поэтому получить помощь легко, поэтому я придерживаюсь этого. Я думаю, что пакет sna может иметь некоторое совпадение.   -  person Ben    schedule 29.04.2013


Ответы (2)


Обратите внимание на функцию edge.list из rgexf(http://www.inside-r.org/packages/cran/rgexf/docs/edge.list). Используя ваш пример, это будет что-то вроде этого

библиотека (rgexf)

# Your data
df = data.frame(customers = c("a", "b", "b", "c", "c"),
                shop_visited = c("X", "X", "Y", "X", "Z"))

# Getting nodes and edges
df2 <- edge.list(df)

Выглядит так

> df2
$nodes
  id label
1  1     1
2  2     2
3  3     3

$edges
     [,1] [,2]
[1,]    1    1
[2,]    2    1
[3,]    2    2
[4,]    3    1
[5,]    3    3

Наконец, вы можете использовать это, чтобы написать график GEXF.

# Building the graph
write.gexf(nodes=df2$nodes, edges=df2$edges)

<?xml version="1.0" encoding="UTF-8"?>
<gexf xmlns="http://www.gexf.net/1.2draft" xmlns:viz="http://www.gexf.net/1.1draft/viz" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.gexf.net/1.2draft http://www.gexf.net/1.2draft/gexf.xsd" version="1.2">
  <meta lastmodifieddate="2013-08-06">
    <creator>NodosChile</creator>
    <description>A graph file writing in R using "rgexf"</description>
    <keywords>gexf graph, NodosChile, R, rgexf</keywords>
  </meta>
  <graph mode="static">
    <nodes>
      <node id="1" label="1"/>
      <node id="2" label="2"/>
      <node id="3" label="3"/>
    </nodes>
    <edges>
      <edge id="0" source="1" target="1" weight="1.0"/>
      <edge id="1" source="2" target="1" weight="1.0"/>
      <edge id="2" source="2" target="2" weight="1.0"/>
      <edge id="3" source="3" target="1" weight="1.0"/>
      <edge id="4" source="3" target="3" weight="1.0"/>
    </edges>
  </graph>
</gexf>

Пожалуйста, дайте мне знать, если у вас есть какие-либо сомнения. Джордж Дот Вега на nodoschile.org

Лучший!

Джордж (создатель rgexf)

person gvegayon    schedule 06.08.2013

person    schedule
comment
Спасибо. Это интересно. Если кто-то еще читает это сообщение, ему может быть полезен следующий веб-сайт: toreopsahl.com - person user32259; 24.04.2013
comment
Быстрый вопрос относительно вашего ответа: cbind(df[,2],df[,1]) преобразует столбцы в целочисленные значения (если они factors изначально). Why is this? Also, can I check that having integer values is necessary for the projecting_tm работают? - person user32259; 24.04.2013