从Netlogo社交网络创建边缘列表

时间:2017-06-15 00:35:20

标签: networking netlogo social-networking

我是Netlogo的新手,并一直用它来进行基本的网络分析。我创建了一个由5种不同的海龟品种组成的社交网络。为了在另一个程序中继续我的分析,我需要创建一个边缘列表(网络中所有连接节点的两列列表)。因此,第一列将具有品种和编号(例如演员1),第二列将列出演员1的一个联系人 (前[演员1,演员2] [演员1,导演5] [演员1,制片人1] ..........) 输出需要是txt或csv文件,以便我可以轻松地将其导入EXCEL。

我试过了:

index_right

问题是'两端'只报告谁的号码,而不是品种。我可以通过使用ask turtles [file-show who]获得该品种,但是这会将标识附加到edgelist的末尾,这意味着要以正确的格式进行操作。有没有人有关于如何用品种+谁编号建立边缘列表的任何建议?我觉得我可能错过了一些简单的东西,但我是Netlogo的新手。谢谢!

2 个答案:

答案 0 :(得分:2)

csv extension使这成为一个单行。假设您的代码顶部有extensions [ csv ],您可以这样做:

csv:to-file "test.csv" [ [ (word breed " " who) ] of both-ends ] of links

如果您需要列标题,可以使用fput添加它们,例如:

csv:to-file "test.csv"
  fput ["source" "target"]
  [ [ (word breed " " who) ] of both-ends ] of links

但请注意,both-ends是一个始终以随机顺序访问的代理集,因此" source"和"目标"在这种情况下不是很有意义。

如果您有定向链接,并且方向很重要,您可以使用这个稍微复杂的版本保留它:

csv:to-file "test.csv"
  fput ["source" "target"]
  [ map [ t -> [ (word breed " " who) ] of t ] (list end1 end2) ] of links

答案 1 :(得分:1)

我假设您用于分析的任何程序都可以根据需要组织和重新排列您的对,因此只要记录了所有对,您的网络就可以构建得很好,无论顺序如何。使用ask-linksboth-ends的方法是一个很好的方法,并且需要进行一些调整(主要是使用breed原语让乌龟在输出中包含它们的品种。这是一个例如:

to pairs-out

  file-open "test.csv"
  file-type (word "End_1, " "End_2,\n" )
  ask links [
    ask both-ends [
      file-type (word breed " " who ",")
    ]
    file-type "\n"
  ]
  file-close

end