NetLogo:将 table 结果导出为 CSV
NetLogo: Exporting table results into CSV
这个模型的objective是为了探索北落基山脉灰狼的潜在散布模式。在模型中,灰狼被赋予了一个 ph-memory
属性,该属性对应于空间数据 table.
extensions [ gis table csv]
wolves-own [
...
ph-memory ;; wolves' patch-hunting memory, table includes the patch's hash-id (KEY) and pack-id (VALUE)
...
]
to initialize-wolf [ new-pack-id ]
...
set ph-memory table:make
...
end
to setup
clear-all
setup-gis
file-open (word "Ph-memory-for-run-" behaviorspace-run-number ".csv")
...
end
to go
if not any? wolves [stop]
ask wolves [
where-am-i
...
file-write (table:to-list ph-memory)
end
to where-am-i
let patch-hash-id ([hash-id] of patch-here) ;;Updates the hash-id of the patch the wolf is currently on
if not table:has-key? ph-memory patch-hash-id
[table:put ph-memory patch-hash-id pack-id]
end
当我打开 Excel 文件查看结果时,整个 table 被导出到一个单元格中。不幸的是,这使得数据分析变得毫无意义,因为我无法轻易地操作数据。
我的问题是:是否可以将数据 table 结果导出到 excel 并将数据分解为单个单元格/离散数据对(例如 [ patch-hash-id, pack -ID] )?我开始手动将数据重新格式化为列,但这非常繁琐!
有人建议我如何有效地导出数据吗?
如有任何帮助,我们将不胜感激!
这里有两个问题。 file-write
不会在其输出的末尾放置回车符 return,因此连续的 file-write
将所有内容串成一长行。此外,Excel 需要一个 CSV 文件,其中每行的值用逗号分隔,并且 table:to-list
生成 id/value 对列表的列表,但不分隔值逗号。 CSV 扩展用 csv:to-string
很好地做到了这一点,而 file-print
提供了回车 returns。下面的代码应该显示它们是如何组合在一起的。
extensions [table csv]
globals [ph-memory]
to setup
clear-all
set ph-memory table:from-list [[1 2] [3 4] [5 6]]
reset-ticks
end
to go
file-open "c:/users/cstaelin/desktop/testfile.csv"
file-print csv:to-string table:to-list ph-memory
file-close
end
4 个刻度后,csv 文件看起来像
1,2
3,4
5,6
1,2
3,4
5,6
1,2
3,4
5,6
1,2
3,4
5,6
和Excel正确打开它。
这个模型的objective是为了探索北落基山脉灰狼的潜在散布模式。在模型中,灰狼被赋予了一个 ph-memory
属性,该属性对应于空间数据 table.
extensions [ gis table csv]
wolves-own [
...
ph-memory ;; wolves' patch-hunting memory, table includes the patch's hash-id (KEY) and pack-id (VALUE)
...
]
to initialize-wolf [ new-pack-id ]
...
set ph-memory table:make
...
end
to setup
clear-all
setup-gis
file-open (word "Ph-memory-for-run-" behaviorspace-run-number ".csv")
...
end
to go
if not any? wolves [stop]
ask wolves [
where-am-i
...
file-write (table:to-list ph-memory)
end
to where-am-i
let patch-hash-id ([hash-id] of patch-here) ;;Updates the hash-id of the patch the wolf is currently on
if not table:has-key? ph-memory patch-hash-id
[table:put ph-memory patch-hash-id pack-id]
end
当我打开 Excel 文件查看结果时,整个 table 被导出到一个单元格中。不幸的是,这使得数据分析变得毫无意义,因为我无法轻易地操作数据。
我的问题是:是否可以将数据 table 结果导出到 excel 并将数据分解为单个单元格/离散数据对(例如 [ patch-hash-id, pack -ID] )?我开始手动将数据重新格式化为列,但这非常繁琐!
有人建议我如何有效地导出数据吗?
如有任何帮助,我们将不胜感激!
这里有两个问题。 file-write
不会在其输出的末尾放置回车符 return,因此连续的 file-write
将所有内容串成一长行。此外,Excel 需要一个 CSV 文件,其中每行的值用逗号分隔,并且 table:to-list
生成 id/value 对列表的列表,但不分隔值逗号。 CSV 扩展用 csv:to-string
很好地做到了这一点,而 file-print
提供了回车 returns。下面的代码应该显示它们是如何组合在一起的。
extensions [table csv]
globals [ph-memory]
to setup
clear-all
set ph-memory table:from-list [[1 2] [3 4] [5 6]]
reset-ticks
end
to go
file-open "c:/users/cstaelin/desktop/testfile.csv"
file-print csv:to-string table:to-list ph-memory
file-close
end
4 个刻度后,csv 文件看起来像
1,2
3,4
5,6
1,2
3,4
5,6
1,2
3,4
5,6
1,2
3,4
5,6
和Excel正确打开它。