2017-06-15 201 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'擴展。 –