我的问题有点长。如果您能阅读全部内容,我真的很感激,并且我将非常感谢您的任何建议。
我有与 2 位海龟消费者相关的数据,他们对笔记本电脑的功能进行了评级。笔记本电脑有两种特征:屏幕尺寸和电池寿命。每个都有一些级别。例如电池续航时间有5小时、12小时、24小时、30小时。数据存储在 csv 文件中。
12 13.5 14 15 5 12 24 30
1 1 2 1 3 2 2 4 5
2 4 3 1 2 1 1 2 3
我想对 2 个功能级别的比率进行求和。例如对于消费者 1 和 2,什么是:
屏幕尺寸总和率13.5 + 电池寿命率24
由于 13.5 和 24 稍后可能会发生变化,并且我想知道例如 14 尺寸和 5 电池寿命的速率之和,因此我使用 "to-reports" 定义了两个函数。另外,由于例如值“12”在标题行中出现两次,并且代表尺寸和电池寿命,因此我制作了 csv 文件的 2 个子集,一个用于屏幕尺寸,另一个用于电池。
12 13.5 14 15
1 1 2 1 3
2 4 3 1 2
5 12 24 30
1 2 2 4 5
2 1 1 2 3
首先在主程序中,读取 csv 文件,并将一只乌龟分配给每一行,预计有两个消费者。
to setup
ca
reset-ticks
file-close-all
file-open "turtle_details.csv"
let headerrow csv:from-row file-read-line
set Sc 13.5 ; at the beginning I want the rate of this screen size
set Bat 24
while [ not file-at-end? ] [
let data csv:from-row file-read-line
create-consumers 1 [
set shape "person"
set k k + 1
print obtain-Sc (Sc) + obtain-Bat (Bat)
]
]
file-close-all
end
我假设,首先读取第一行并生成一个消费者。现在它去到报告找到obtain-Screen(13.5),它是2,但我想下次调用obrain_Screen时,csv再次打开,光标仍然在开头,但我希望它读取第二排。为了扩展它,我可能需要它走得越来越远。为了解决这个问题,我定义了一个计数器 k,例如第一次检查此条件时: idx = 0
to-report obtain-Screen[Sc]
file-close-all ; close all open files
file-open "turtle_detailsSc.csv"
let headings csv:from-row file-read-line
ifelse is-number? position Sc headings
[
while [idx < k ]
[ set fdata csv:from-row file-read-line
set idx idx + 1
]
report item position Sc headings fdata
]
[report 0.000000009]
蝙蝠也有类似的情况。但它不起作用并且有错误。关于如何改进报告有什么想法吗?
谢谢
Edit
考虑到数据集是这样的:
size12 size13.5 size14 size15 Battery5 Battery12 Battery24 Battery30
1 1 *2* 1 3 2 2 *4* 5
2 4 3 3 2 1 1 2 3
我现在可以访问数据集,并为每个消费者找到他们对所购买笔记本电脑的评价。例如,消费者 1 拥有一台尺寸为 13.5、电池寿命为 24 的笔记本电脑。
Consumer 1 evaluation of size 13.5 = 2
Consumer 1 evaluation of battery 24 = 4
Overall evaluation of laptop = 2 + 4 = 6
我定义了一个过程“查找评估”,当我需要了解不同消费者的评估时,它使我能够访问数据集并查找值。
为了更多地解释表中的数据,消费者拥有一台笔记本电脑,因此可以对其进行很好的评估,但对于其他功能,例如他如何评估屏幕尺寸为 15 的笔记本电脑,他可能有一些接触,或者只是从其他人那里听到他的意见。已填表。
我想留住这两位消费者,并在 20 年内监测他们对笔记本电脑功能的态度。在第 2 年,消费者 1 可能更新了他的系统,所以现在他的电池寿命是 30。这次我需要做的是访问数据集并计算
Consumer 1 evaluation of size 13.5 = 2
plus
Consumer 1 evaluation of battery 30 = 5
Overall evaluation of laptop = 2 + 5 = 7
这次,我需要去查找电池 30 的值。
我认为当我重复我的代码 20 年时,每次我想要使用数据集时都会重复 create-consumer,因此每年都会创建一些新的消费者,而不是保留 2 个消费者。完全取代了。
问题是我如何创建消费者一次,但可以多次访问数据集中的任何数据点?
多谢,