跟着ChatGPT学PsychoPy编程3:将想要的数据写入数据文件/属性的用处

news/2024/11/15 3:55:08/

一:将想要的数据写入数据文件

问题描述:

通常使用组件直接设置的内容可能会被自动写入数据文件,比如键盘组件、图片组件等(具体来说,比如按键的反应时、正确的按键、在组件中添加的变量等)。

然而,程序运行过程中产生的中间数据,比如每张图片出现的位置,并没有被写入数据文件中——往往是用代码直接写的部分,这时需要再手动写代码来添加想要的数据到最后生成的数据文件。

实现这个只需要一句简单的代码:

trials.addData('image_1.position', image_1.pos)

image_1是我的图片组件名,image_1.position是我想在数据文件中查看的变量名称(也就是列名),image_1.pos是这个组件所表示的图片的位置。末尾.pos是一个属性,表示图片的位置。

再举一个例子:

thisExp.addData('num_presses',num_presses)

(ps. 我本以为这两句代码开头是一样的。直到打进去才发现有差别。笑哭emoji。)

所以我原本用第二句代码当第一句使也完全没有问题,前提是把它放在循环loop的里面。但实际上这串代码常放在loop之外。两句代码具体差别见下:

GPT:

-trials.addData() 主要用于在每个试次循环中添加特定于试次的数据,例如试次编号、条件名称、响应时间等。它将数据添加到与当前试次对应的数据文件的行中。

-thisExp.addData() 用于在全局范围内添加整个实验的共享数据,例如被试信息、实验参数、整个实验的平均结果等。它将数据添加到数据文件的一行中,该行通常位于数据文件的顶部,记录了与整个实验相关的信息。

-在某些情况下,您可以使用其中任意一种方法来添加数据。例如,如果要将特定于试次的数据添加到数据文件的一行中,您可以使用 trials.addData() 或 thisExp.addData() 来实现相同的效果。


除此之外,在程序的脚本中,我还发现了将block数据写入数据文件的代码:

blocks.addData('text_3.started', text_3.tStartRefresh)

blocks.addData('key_resp_2.keys', key_resp_2.keys)

回头看组件,发现这些信息确实只存在于每一次block开始时的指导语routine中。


二:属性的用处

主要说一下我如何借助属性来写条件语句,从而获得想要的赋值的。

问题描述

我的实验程序每个试次要呈现四张图片,每个象限各一张,左右两边各代表一个选项,每个选项中有两个属性,每个属性位于同一行。

f38011a516a145f2b7fc74730549069b.png

 (Glickman, 2019, PLOS computational biology)

将A图向右翻转90度就是我的展示方式。由于要做随机化处理,即两种属性(此属性非彼属性,这里指的是努力和奖赏两种属性。本文要介绍的是组件属性。)的上下位置随机,两个选项的左右位置随机,因此一共有四种组合方式。

这四种组合方式是随机呈现的,代码如下:

pos1 = 0

pos2 = 0

pos3 = 0

pos4 = 0

# 先定义变量

elif 0.25 <= random() < 0.5:

    pos1 = (0.3,0.3)

    pos2 = (0.3,-0.3)

    pos3 = (-0.3,0.3)

    pos4 = (-0.3,-0.3)

    correct = 'f'

# 选高努力选项的情况视为正确。我实验设置了高努力属性对应了pos3的位置,高奖赏属性对应了pos4的位置。由于f是左键,对应了这里的pos3和pos4,所以在这种试次下选f人为规定为正确。下方同理。

elif 0.5 <= random() < 0.75:

    pos1 = (-0.3,-0.3)

    pos2 = (-0.3,0.3)

    pos3 = (0.3,-0.3)

    pos4 = (0.3,0.3)

    correct = 'j'

else:

    pos1 = (0.3,-0.3)

    pos2 = (0.3,0.3)

    pos3 = (-0.3,-0.3)

    pos4 = (-0.3,0.3)

    correct = 'f'

# 再赋值

# ps. pos1和pos2总是在一边,pos3和pos4总是在一边。

每张图片对应于一个位置,比如image1_1组件设定了Image属性为$aa,Position[x,y]属性为$pos1;image2_2组件设定了Image属性为$bb,Position属性为$pos2;以此类推。

重点来了:我需要根据被试的决策来提供相应的任务及反馈,那么我就需要知道被试在当前试次的选择是什么,并为任务环节需要的变量来赋值。

赋值过程代码如下:

max_presses = 0

# 被试决策完要进行努力任务,那么在此之前需要获得被试选择的努力任务的水平。于是定义一个按键最大次数的变量。

if key_resp.corr == 0 and image1_1.image == 'eff_1.png':
    max_presses = 5
elif key_resp.corr == 0 and image1_1.image == 'eff_2.png':
    max_presses = 10
elif key_resp.corr == 0 and image1_1.image == 'eff_3.png':
    max_presses = 15
elif key_resp.corr == 0 and image1_1.image == 'eff_4.png':
    max_presses = 20
elif key_resp.corr == 0 and image1_1.image == 'eff_5.png':
    max_presses = 25
elif key_resp.corr == 1 and image3_3.image == 'eff_1.png':
    max_presses = 5
elif key_resp.corr == 1 and image3_3.image == 'eff_2.png':
    max_presses = 10
elif key_resp.corr == 1 and image3_3.image == 'eff_3.png':
    max_presses = 15
elif key_resp.corr == 1 and image3_3.image == 'eff_4.png':
    max_presses = 20
elif key_resp.corr == 1 and image3_3.image == 'eff_5.png':
    max_presses = 25

# 这部分代码的意思是根据被试的选择,如果是“正确的”,即key_resp.corr ==1(注,key_resp是决策环节键盘组件名 .corr就是该组件的Correct answer属性。),以及如果当前试次图片组件(比如image1_1)提取的图片为某图片名(比如eff_1),那么将5赋值给max_presses。该过程正是通过组件的属性,即image属性来进行的。前文说过image属性里设置了$aa,$bb等,而aa,bb其实是存储着所有图片名的excel的一个变量名(列名)。ps. 这里aa其实是eff_low.

7edf4dbcdb8941c9b5000df4de3ab666.jpg

 (Figure. ps. 其中从第二行开始,每一行代表一个condition。每个试次正是从这些condition中随机抽取的。)

总结:对于奖赏反馈信息的呈现,也是采用同样的办法。重要的是善于利用组件中的属性。以及善于利用条件语句。


我的收获与感悟:程序从构思、到在与GPT攀谈的过程中不停摸索、再到一步一步逼近成果,花了5天左右的时间。这段时间还是很有成就感的,也很感叹困难一个个都在不懈努力或机缘巧合下被解决了。此外要感谢那些爱分享又热爱学习的热心网友们。接下来还有好多工作要做,要一鼓作气!

记于凌晨1.12。明天再写几篇稿子来复盘!(噢不,今天)

 


http://www.ppmy.cn/news/969942.html

相关文章

人工智能轨道交通行业周刊-第44期(2023.5.8-5.14)

本期关键词&#xff1a;智能列控、苏州城轨智慧大脑、智慧乘务系统、深铁智慧运维、铁路遥感、3D视觉 1 整理涉及公众号名单 1.1 行业类 RT轨道交通人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与城市轨道交通R…

总体设计(软件项目)

1.引言 1.1编写目的 由前面的需求分析&#xff0c;得出了系统的基本需求&#xff0c;要实现整个系统&#xff0c;需要对用户的需求进行设计&#xff0c;概要设计主要是利用比较抽象的语言对整个系统进行概括&#xff0c;确定对系统的物理配置&#xff0c;确定整个系统的处理流…

【GPT-4 ChatGPT】第 1 章 :GPT-4 和 ChatGPT 基础知识

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

全网最详细中英文ChatGPT-GPT-4示例文档-机场代码智能提取从0到1快速入门——官网推荐的48种最佳应用场景(附python/node.js/curl命令源代码,小白也能学)

从0到1快速入门机场代码智能提取应用场景 Introduce 简介setting 设置Prompt 提示Sample response 回复样本API request 接口请求python接口请求示例node.js接口请求示例curl命令示例json格式示例 其它资料下载 ChatGPT是目前最先进的AI聊天机器人&#xff0c;它能够理解图片和…

国产 ChatGPT 赛道又添一员:「天工」大模型发布,我们准备了 20 问火速实测!...

整理 | 郑丽媛 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 一个月前&#xff0c;百度「文心一言」的发布可谓赚足了眼球&#xff0c;国产 ChatGPT 之战也由此正式拉开序幕&#xff1a;阿里版类 ChatGPT「通义千问」突然官宣&#xff0c;商汤也发布了「商量」语…

GPT-4震撼来袭,ChatGPT已成过去?

背景 ChatGPT 点燃了科技行业的明灯&#xff0c;从他发布那天起&#xff0c; AI 下一步的发展已经成为最热门的话题之一&#xff0c;ChatGPT 是否已经是 AI 的一个突破&#xff1f;下一个大突破是否再等十年&#xff1f; 就在 2023年3月15日 凌晨&#xff0c;OpenAI 发布了多模…

GPT-4发布:多模态大模型,AI能力再度进化,可识别图像内容

能终结chatGPT的人只有openAI自己。 ——阿卡夫斯基-作者本人 ::: 今日凌晨&#xff0c;OpenAI发布了GPT的最新一代版本ChatGPT-4&#xff0c;相比3.5&#xff0c;其AI能力再度进化&#xff0c;同时支持输入的内容不再仅限于文字&#xff0c;而且支持图像内容的输入&#xff0c…

GPT-4正式发布!如何访问 怎么免费使用GPT-4?

美国人工智能研究实验室OpenAI&#xff0c;周二为其爆红聊天机器人ChatGPT发布了最新GPT-4语言模型&#xff0c;这距离ChatGPT的上线仅仅过去了4个月时间。 和ChatGPT最初使用的GPT-3.5模型相比&#xff0c;GPT-4实现了几个方面的飞跃式提升&#xff1a;强大的识图能力&#x…