从 csv 文件创建代理时使用 to-reports

2024-04-17

我的问题有点长。如果您能阅读全部内容,我真的很感激,并且我将非常感谢您的任何建议。

我有与 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 个消费者。完全取代了。

问题是我如何创建消费者一次,但可以多次访问数据集中的任何数据点?

多谢,


回应你的评论-明白了,我认为可能是这样。我将提出一种替代方法,可能适合也可能不适合您,但这可能是我解决这个问题的方法。主要区别在于,我将屏幕和电池额定值列表存储在海龟变量中,这样您就可以在事后轻松访问它们,而无需跟踪计数器。给定这些变量声明:

extensions [ csv ]

globals [ screen-headings battery-headings]

turtles-own [ 
  turtle-screen-list 
  turtle-battery-list
  turtle-screen-eval
  turtle-bat-eval
  turtle-sum-eval
  turtle-row-number
]

我会将 csv 文件的标题拆分为screen-headings and battery-headings全局变量。

然后,我将迭代 csv 的下一行,就像下面所做的那样,并以类似的方式将行拆分为turtles-own变量turtle-screen-list and turtle-battery-list。这样,每只乌龟都知道自己的每个屏幕和电池的额定值,因此您可以根据需要修改评估的屏幕或电池。

设置感兴趣的屏幕和电池screen-to-evaluate and battery-to-evaluate(或使用Chooser在界面上),然后使用报告器(类似于您设置的)来检查电池和感兴趣的屏幕的位置,以返回当前海龟的每个等级 - 这将设置turtle-screen-eval and turtle-bat-eval。最后,将最后两个值相加。

to setup
  ca
  reset-ticks
  file-close-all
  file-open "turtle_details.csv"
  let headings csv:from-row file-read-line
  set screen-headings sublist headings 0 4
  set battery-headings sublist headings 4 length headings

  let screen-to-evaluate 13.5
  let battery-to-evaluate 24

  while [ not file-at-end? ] [
    let data csv:from-row file-read-line
    create-turtles 1 [
      set turtle-screen-list sublist data 0 4
      set turtle-battery-list sublist data 4 length data
      set turtle-screen-eval turtle-screen-rating screen-to-evaluate
      set turtle-bat-eval turtle-battery-rating battery-to-evaluate
      set turtle-sum-eval turtle-screen-eval + turtle-bat-eval
    ]
  ]
  file-close-all

end

to-report turtle-screen-rating [sc]
  let pos position sc screen-headings
  let turt-screen-rate-value item pos turtle-screen-list
  report turt-screen-rate-value
end

to-report turtle-battery-rating [bc]
  let pos position bc battery-headings
  let turt-bat-rate-value item pos turtle-battery-list
  report turt-bat-rate-value
end

当然,您可以根据需要压缩其中的一些内容。我用 4 行测试了这个设置(根据您的示例数据进行图案化),它似乎工作正常。如果你有大量的行,它可能不会工作得那么好。

Edit:

如果你最终更换screen-to-evaluate and battery-to-evaluate使用界面选择器(我推荐 - 它允许您快速查看不同的值),您可以使用以下内容更新到新值:

to update-vals
  ask turtles [
    set turtle-screen-eval turtle-screen-rating scrn
    set turtle-bat-eval turtle-battery-rating batr
    set turtle-sum-eval turtle-screen-eval + turtle-bat-eval
  ]
end

where scrn and batr是选择者的名字。

或者,如果您希望它们动态更新,您可以制作一个报告以下记者的界面监视器:

to-report update
ask turtles [
    set turtle-screen-eval turtle-screen-rating scrn
    set turtle-bat-eval turtle-battery-rating batr
    set turtle-sum-eval turtle-screen-eval + turtle-bat-eval
  ]
  report "Dynamically updating."
end

有了这个,一旦你改变了Chooser值,海龟应该立即更新它们的值turtle-bat-eval, turtle-screen-eval, and turtle-sum-eval. Fun!

Edit 2

如果您的 csv 包含行号列,如下所示:

row 12 13.5 14 15  5 12 24 30
1   1  2.0  1  3  2  2  4  5
2   4  3.0  1  2  1  1  2  3

我建议创建一个海龟变量来存储使用的行号。我现在添加了一个名为turtle-row-number。然后,您只需包含一行即可从first列表中的项目,即行号,然后修改您的sublist值根据,例如:

to setup-row-nums
  ca
  reset-ticks
  file-close-all
  file-open "turtle_details_2.csv"
  let headings csv:from-row file-read-line
  set screen-headings sublist headings 1 5
  set battery-headings sublist headings 5 length headings

  while [ not file-at-end? ] [
    let data csv:from-row file-read-line
    create-turtles 1 [
      set turtle-row-number first data 
      set turtle-screen-list sublist data 1 5
      set turtle-battery-list sublist data 5 length data
    ]
  ]
  update-vals
  file-close-all

end

Where update-vals如上图所示。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 csv 文件创建代理时使用 to-reports 的相关文章

  • AttributeError:“Int64Index”对象没有属性“month”

    我有一些时间序列数据 包含三个独立的列 日期 时间 千瓦 如下所示 Date Time kW 3 1 2011 12 15 00 AM 171 36 3 1 2011 12 30 00 AM 181 44 3 1 2011 12 45 00
  • 如何以 DD/MM/YYYY 格式(而不是 DD/MM/YYYY HH:MM:SS)将日期输出到 CSV 文件中

    非开发人员在这里尝试清除日期格式 正在寻找对承包商创建的 C 代码的检查 这是新代码 用于将 JSON 对象转换为 CSV 格式 承包商使用了Newtonsoft和Newtonsoft Linq 还使用了CSVhelper功能 string
  • 有什么方法可以从 cli 中找到 python 中函数的所有可能的 kwargs 吗?

    有没有办法从命令行发现 python 中函数的潜在关键字参数 无需查看源代码或文档 有时源是 c lib 即使不可见 您可以使用inspect模块 在 3 3 中 这很容易使用inspect signature https docs pyt
  • 如何声明返回函数指针的函数指针

    如何声明一个函数指针 该指针指向具有相同参数的函数 并返回一个指向具有相同参数的函数的指针 i e funcPtr指着func1 int a int b and func1返回指向另一个函数的指针func2 int a int b func
  • 包含多个双引号的 CSV 拆分正则表达式

    我有一个包含文本的 CSV 列数据 每行用双引号分隔 一行中的示例文本类似于此 notice 新行和每行之前的空格是故意的 Lorem ipsum dolor sit amet consectetur adipisicing elit se
  • 什么是 PHP 中的呼叫转移和静态呼叫或后期静态绑定? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我从网站上获得了一个代码示例 但我很难理解输出 我正在分享代码 class A public static function foo
  • 从函数调用动态 SQL

    我正在编写一个返回表的函数 有两个参数传递给该函数 并构建并执行查询并将其插入到返回的表中 但是我收到这个错误 只能从函数内执行函数和一些扩展存储过程 我不想使用存储过程 因为这是一个简单的实用函数 有谁知道这是否可以做到 我的函数编码如下
  • 在 Pandas DataFrame 中拆分列表

    我有一个包含多列的 csv 文件 使用 pandas 我将此 csv 文件读入数据帧 并有一个日期时间索引和五六个其他列 其中一列是时间戳列表 下面带有索引的示例 CreateDate TimeStamps 4 1 11 Timestamp
  • R 中自定义函数的自动创建和使用

    我想在 for 循环中创建评估不同的索引 这些指数有不同的公式 并不总是需要评估 f i 我要评估的指数可能是 a 1 b 2 c 5 d 8 IDX1 function a b result a b IDX2 function c b r
  • 在合并的 csv 文件中添加附加列

    我的代码合并 csv 文件并使用 pandas 删除重复项 是否可以向单个合并文件添加带有值的附加标头 应该调用附加标头Host Alias并且应该对应于Host Name E g Host Name is dpc01n1以及相应的Host
  • 将 void* 作为函数调用而不声明函数指针

    我已经搜索过 但找不到任何结果 我的术语可能有问题 所以如果以前有人问过这个问题 请原谅我 我想知道是否有一种简单的方法可以调用void 作为 C 中的函数 无需首先声明函数指针 然后为函数指针分配地址 IE 假设要调用的函数是类型void
  • 如何在 CSV 文件中插入新行?

    我正在创建一个系统 其中涉及创建用于错误记录的 CSV 我当前的代码成功创建了一个具有唯一名称的新文件 然后将现有数据 来自数组 添加到 CSV 中 我遇到的问题是在文件中添加新行 这是维持正确结构所必需的 我现有的代码 current f
  • Javascript:stringify对象(包括类型函数的成员)

    我正在寻找一种解决方案来跨浏览器将 Javascript 对象序列化 和反序列化 为字符串 包括恰好是函数的对象成员 一个典型的对象看起来像这样 color red doSomething function arg alert Do som
  • 将数据发送到 parse.com 并更新 Angular $scope

    我正在将数据发送到 parse com 上的类 我想运行此函数并更新 scope无需重新加载视图 创建一个Programme运行下面的函数工作正常 但是有时在创建新程序后不会更新视图 并且需要刷新页面 当调用整个函数时 如底部所示 getP
  • 显示函数的完全限定名称

    include
  • pentaho 从不同的 csv 中相互划分 2 列

    在pentaho中 我有2个csv文件 我需要将列彼此分开并将结果写入新表中 1 csv No A B 1 10 14 2 8 20 2 csv No A B 1 2 7 2 4 10 输出应该是 输出 csv No A B 1 5 2 2
  • 在巨大的数据集上创建独特的节点和关系 NEO4J

    我的问题与这个非常相似 如何通过neo4j中导入的csv文件创建独特的节点和关系 https stackoverflow com questions 25090255 how to create unique nodes and relat
  • 将带有非字符串关键字的 dict 传递给 kwargs 中的函数

    我使用具有签名功能的库f args kwargs 我需要在 kwargs 参数中传递 python dict 但 dict 不包含关键字中的字符串 f 1 2 3 4 Traceback most recent call last File
  • 使用 boto3 将 csv 文件保存到 s3

    我正在尝试写入 CSV 文件并将其保存到 s3 中的特定文件夹 存在 这是我的代码 from io import BytesIO import pandas as pd import boto3 s3 boto3 resource s3 d
  • 如何将 typedef 结构传递给函数?

    此刻我正在努力 void avg everything 但这给了我错误 error subscripted value is neither array nor pointer 当我今天早些时候收到此错误时 这是 因为我没有正确地将 2D

随机推荐

  • 在没有 Rails 的情况下调用 ERB:未定义的方法“raw”

    我正在使用ERB引擎 http www ruby doc org stdlib 1 9 2 libdoc erb rdoc ERB html生成我的 Rails 网站页面的离线 HTML 版本 当 Rails 显示时 该页面显示得很好 但我
  • 将 Rails 与 Paperclip 和 SWFUpload 结合使用

    我对用户模型进行了基本的 Rails 应用程序测试 该模型具有用回形针处理的照片字段 我创建了能够创建 编辑用户的视图 并且照片上传运行良好 h1 Editing user h1 p br p p br p
  • if..else 或 Select..case 哪个更快?

    我有三个条件可以比较 以下两者哪一个更快 请指出我 谢谢大家 If var 1 then Command for updating database ElseIf var 2 then Command for updating databa
  • 如何查找列表中句子列表中每个单词的引理和频率计数?

    我想使用 WordNet Lemmatizer 找出引理 并且还需要计算每个词频 我收到以下错误 轨迹如下 类型错误 不可散列的类型 列表 注 语料 库可在nltk包装本身 到目前为止我已经尝试过如下 import nltk re impo
  • 如何在 Komodo IDE 中设置断点?

    我已经安装了科莫多集成开发环境 https www activestate com products komodo ide 我想知道在哪里 如何设置断点 以便顶行的第 9 个符号 gt 明白了吗 EDIT 单击代码左侧装订线中的行号
  • Scala 中的函数式反应式编程 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话
  • Ant:将compilerarg传递给javac

    我有可以编译的 ant 脚本
  • 如何让 gdb 保存命令历史记录?

    我该如何设置gdb这样它就可以保存命令历史记录 当开始新的gdb会话 我想使用向上箭头键来访问之前会话的命令 简短回答 mkdir p config gdb echo set history save on gt gt config gdb
  • 如何使用 UIPath 中的“关闭选项卡”活动关闭子选项卡

    UiPath 是closing the 主窗口而不是子窗口 我在中定义了一个浏览器变量attach browser活动并将该浏览器变量传递给Close tab活动 Chrome 主窗口仍处于关闭状态 另附上项目 xaml 文件https d
  • iOS11 AppIcon无法更改

    Xcode 9 测试版 6 iOS 11 测试版 10 我想要使 用自定义应用程序图标打包应用程序 因此我尝试替换 DerivedData Users XXX Library Developer Xcode DerivedData proj
  • Pyparsing 分隔列表仅返回第一个元素

    这是我的代码 l 1 3E 2 2 5E 1 parser Word alphanums grammar delimitedList parser delim t print grammar parseString l 它返回 1 3E 2
  • iOS:从 url 加载图像

    我需要从 url 加载图像并将其设置在 UIImageView 中 问题是我不知道图像的确切大小 那么如何才能正确显示图像呢 只需使用 UIImage 的 size 属性即可 例如 NSURL url NSURL URLWithString
  • 将带有ajax请求的数组发送到php

    我像这样创建了数组 9 ques 5 19 ques 4 现在我想将它从 JS 发送到 PHP 但我没有得到正确的结果 我的JS代码是 button click function e e preventDefault ajax type p
  • nameof 和 typeof 的区别

    如果我错了请纠正我 但是做类似的事情 var typeOfName typeof Foo Name and var nameOfName nameof Foo 应该给你完全相同的输出 根据该消息来源 可以理解的原因之一是 https msd
  • 使用 RPATH 但不使用 RUNPATH?

    这一页 https web archive org web 20120418232524 http labs qt nokia com 2011 10 28 rpath and runpath 说关于图书馆检索的顺序ld so Unless
  • 覆盖特定模型的 Django 管理 URL?

    首先是一些背景 我有一个Event模型具有各种event types 我想将这些事件类型之一 电影 分解到它自己的管理中 我已经具备了基本功能 继承自的代理模型Event named Film 该代理模型的自定义管理器 仅将其过滤为 电影
  • 从 GoDaddy 托管的 ASP.NET MVC 应用程序发送邮件消息时出现问题

    我在 GoDaddy 托管的 MVC Web 应用程序上有一个表单 用户可以填写该表单并发送给我们的办公室 我目前正在使用 Gmail 帐户和 GoDaddy 电子邮件帐户 链接到我的托管空间 对其进行测试 使用 Gmail 代码后 电子邮
  • 如何使用自动生成的列隐藏 ASP.NET GridView 中的列?

    即使 SqlDataSource1 DataBind GridView1 Columns Count 也始终为零 但网格没问题 I can do for int i 0 i lt GridView1 HeaderRow Cells Coun
  • Android CursorLoader 带有选择和selectionArgs[]

    我在用Loader for RecyclerView Adapter列出项目 我想列出数据库表中的特定项目 所以我做了 public Loader
  • 从 csv 文件创建代理时使用 to-reports

    我的问题有点长 如果您能阅读全部内容 我真的很感激 并且我将非常感谢您的任何建议 我有与 2 位海龟消费者相关的数据 他们对笔记本电脑的功能进行了评级 笔记本电脑有两种特征 屏幕尺寸和电池寿命 每个都有一些级别 例如电池续航时间有5小时 1