NetLogo: экспорт результатов таблицы в CSV

#excel #datatable #export #netlogo #behaviorspace

#excel #datatable #экспорт #netlogo #пространство поведения

Вопрос:

Цель этой модели — изучить возможные схемы расселения серых волков в северных Скалистых горах. В модели серым волкам присвоен ph-memory атрибут, который соответствует таблице пространственных данных.

 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 для просмотра результатов, вся таблица экспортируется в ОДНУ ячейку. К сожалению, это делает анализ данных спорным, поскольку я не могу легко манипулировать данными.

вывод в Excel

Мой вопрос: возможно ли экспортировать результаты таблицы данных в Excel и разбить данные на отдельные ячейки / дискретные пары данных (например, [patch-hash-id, pack-id])? Я начал вручную переформатировать данные в столбцы, но это чрезвычайно утомительно!

идеальные результаты

Есть ли у кого-нибудь рекомендации о том, как я могу эффективно экспортировать данные?

Будем признательны за любую помощь!

Ответ №1:

Здесь две проблемы. file-write не помещает возврат каретки в конец своего вывода, поэтому последовательные file-write s помещают все в одну длинную строку. Кроме того, Excel ожидает файл CSV, в котором значения в каждой строке разделены запятыми, и table:to-list генерирует список списков пар идентификатор / значение, но не разделяет значения запятыми. Расширение CSV прекрасно справляется с csv:to-string и file-print обеспечивает возврат каретки. Следующий код должен показать, как все это сочетается.

 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 открывает его правильно.

Комментарии:

1. Спасибо @Charles! Я высоко ценю вашу помощь