如何使用csv输入创建不同座席的总体大小?

mv1qrgav  于 2023-06-03  发布在  其他
关注(0)|答案(1)|浏览(149)

我有一个包含7列的csv,其中包含代表模型中不同代理的人口大小的数据。模型中的每一行都代表不同的一天,但现在这并不重要。

ones twos threes fours fives sixes sevens
1 1 1 1 1 1 1 1
0 0 1 0 1 1 1 2
2 4 5 6 1 1 1 1
4 5 6 7 1 1 2 3

我不知道如何将值分配给代理以创建人口。如果你看第一行,我应该有每个海龟品种的1。

extensions [csv]
    globals [ data ]
    
    breed[ones one]
    breed[twos two]
    breed[threes three]
    breed[fours four]
    breed[fives five]
    breed[sixes six]
    breed[sevens seven]
    
    to setup
      ca
      set data csv:from-file "data.csv"
      print data
      reset-ticks

      ; this is where I imagine I should assign the population sizes by the csv info. 
      create-ones ???
      create-twos
      create-threes
      create-fours
      create-fives
      create-sixes
      create-sevens

    end
sqyvllje

sqyvllje1#

读取带有csv:from-file原语的csv文件后,将得到一个标准的NetLogo列表,该列表本身包含每行的子列表。因此,您需要使用标准的NetLogo列表原语(如itemforeach循环)来解析数据并创建turtle。
你的csv文件有太多的列,所以我将提供一个较小的数据集的例子。假设我们有一个名为data.csv的文件,它看起来像这样:

ones,twos,threes
1,2,3
1,4,9

首先,让我们尝试打印csv:from-file的输出,以了解NetLogo如何表示您的数据:

observer > show csv:from-file "data.csv"
observer : [["ones" "twos" "threes"] [1 2 3] [1 4 9]]

这表明csv文件中的行和列表示为一个包含三个项的列表,每个项本身都是一个包含三个项的列表。因此,您所需要做的就是将数据视为标准的嵌套NetLogo列表,并使用与列表相关的原语来操作数据并检索必要的信息。
下面是我将如何编写您打算编写的代码:

extensions[csv]

globals [ data ]

breed [ones one]
breed [twos two]
breed [threes three]

to setup
  clear-all
  
  set data but-first csv:from-file "data.csv"
 
  let first-row item 0 data
  
  let num-ones item 0 first-row
  let num-twos item 1 first-row
  let num-threes item 2 first-row
  
  create-ones num-ones [ set shape "triangle" fd 10 ]
  create-twos num-twos [ set shape "square"  fd 10 ]
  create-threes num-threes [ set shape "circle" fd 10 ]
  
  reset-ticks
end
  • 请注意,我使用but-first原语删除了数据集中包含列标题的第一项,因为我们知道数据集中变量的顺序,所以不需要第一行。
  • 如果您有一个大型数据集,您还可以使用foreach原语来迭代行和列,而不是为每个单元格定义单独的变量。
  • 注意:您可以参考NetLogo字典,了解有关所有列表相关原语的更多信息:https://ccl.northwestern.edu/netlogo/docs/dictionary.html#listsgroup*

相关问题