2017-06-15 205 views
1

我对Netlogo非常陌生,并且一直在使用它来进行基本的网络分析。我创建了由5种不同的乌龟品种组成的社交网络。为了在另一个程序中继续我的分析,我需要创建一个边缘列表(网络中所有连接节点的两列列表)。因此,第一列将具有品种和谁号码(例如演员1),并且第二列将列出演员1的联系人之一 (例如[Actor1,Actor2] [Actor1,Director5] [Actor1,Producer1] .. ........) 输出需要是txt或csv文件,以便我可以将其轻松导入到EXCEL中。从Netlogo社交网络创建边缘列表

我已经试过:

to make-edgelist 
    file-open "Test.txt" 
    ask links [file-show both-ends] 
     ask turtles[file-show who] 
    file-close 
end 

的问题是,“两末端”只报告了谁数量,而不是品种。我可以通过使用ask龟[file-show who]来获得这个品种,但是这会将识别附加到边缘列表的末尾,这意味着需要进行很多操作才能以正确的格式获取内容。有没有人有任何关于如何建立与品种+谁的数字边缘列表suggetsions?我觉得我可能错过了一些简单的东西,但我是Netlogo的新手。谢谢!

回答

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 
+0

哇,谢谢!这是我所需要的! – tardigrada

+0

没问题,很高兴它适合你! –

2

csv extension品牌这一个班轮假设你在你的代码的顶部有extensions [ csv ],你可以做:

01:

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是一个总是以随机顺序访问的代理集,所以在这种情况下,“源”和“目标”不是很有意义。

如果您向链路,如果方向是很重要的,你可以用这个稍微复杂一点的版本,它保存:

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

更清洁,谢谢你尼古拉斯。我将不得不为自己的工作进入'csv'扩展。 –