不靠谱PsychoPy入门教程目录:

之前一直在讲如何呈现刺激,接下来说说怎么来收集实验数据。辛辛苦苦的做实验,最终就是要那点儿数据呢嘛。

这部分主要介绍两个内容,一个是被试基本信息的录入,一个是实验数据,也就是被试反应的记录。

基本信息

在PsychoPy里有一个gui模块专门用来做被试基本信息的登记。gui也就是可视化的用户交互界面,它里面的gui.DlgFromDict()和gui.Dlg()函数可以产生一个对话框,用户填写的信息会保存在一个字典(dictionary)里。

下面我们来看一下怎么用gui.DlgFromDict()创建一个对话框。

首先建一个字典叫做info,里面放的是我们需要记录的被试信息。记着用到的模块要提前载入。

import gui

info = {'name':'', 'age':'', 'num':'2', 'task':['1','2','3','4']}

这里我们要记下他们的姓名、年龄、测试编号、任务类型。注意,名字要写成英文字母,直接写汉字的话会出错的。

字典里没有给value的话,就是一个空白框(冒号前面的'name'是key,冒号后面的是value)。可以设置默认值,比如'num':'2',这样输入框里就会出现2,而且是可以修改的。像'task'这样value是一个list的话,就变成下拉选项的形式了。

接下来要用gui.DlgFromDict()创建一个对话框,代码如下:

infoDlg = gui.DlgFromDict(dictionary = info,

title = u'基本信息',

order = ['name','age','num'])

dictionary用我们上面建的info,标题title叫基本信息,order用来确定它们的顺序。一般会按照创建的顺序呈现的,如果你想调整顺序的在order这里重新设置一下就行。

这样对话框就创建好了,运行一下的就会出现下面这样一个小对话框:

一般情况下我们会设置一个退出的选项,如果被试不打算接着做实验,他可以点cancel,这样程序退出,不再执行下面的代码。

if infoDlg.OK == False:

core.quit()

现在程序里没有别的东西的话看不出差别来。等一下把之前的内容放一点进来再看看哈。

你填完信息点击OK之后,所有的信息就放在info这个字典里了。打印一下看看:

print core,info

# output

{'age': u'22', 'num': u'2', 'name': u'cc', 'task': u'1'}

好嘞,基本上就是这样,gui还可以用来打开和保存本地文件,有需要请自行查阅官方API。被试信息登记部分的完整代码如下:

#!/usr/bin/env python2

# -*- coding: utf-8 -*-

#载入所需要的库

from psychopy import core, gui

#被试信息记录窗口

info = {'name':'', 'age':'', 'num':'2', 'task':['1','2','3','4']}

infoDlg = gui.DlgFromDict(dictionary = info, title = u'基本信息', order = ['name','age','num','task'])

if infoDlg.OK == False:

core.quit()

# print info

数据记录

PsychoPy里有专门保存和分析数据的模块psychopy.data,不过我呢只是做个行为实验,不需要搞那么复杂,所以也没去研究data的内容。下面呢简单说一下用open()函数创建文件保存数据的方法。老简单了。

首先建一个空白文档:

dataFile = open("%s.csv"%(info['num']+'_'+info['name']), 'a')

括号里东西挺长其实就两个参数,逗号前是文件名,我用测试编号和被试姓名来命名文件。这里建的是个逗号分隔符文件,csv。txt文本文件也行,excel就比较麻烦了。后边的参数'a'表示文件编辑模式,a是append的意思,在文件末尾添加内容。还可以是'w'(write),它是从文件开头写起,已经存在的内容会全部抹掉。

文件建好了,怎么往文件里写东西呢?这样:

dataFile.write(info['name']+','+info['age']+','+info['num']+'\n')

用.write()函数写入。括号里只能是一个字符串,所以如果有多个项目一起写进去的话用‘+’把它们粘结成一个字符串。如果是数值要转成字符型,用str()。

好的,我们现在可以运行一下。填上基本信息,点OK。之后打开你程序所在的位置就会看到一个新的csv文件,用excel打开,里面记录着你的姓名、年龄和编号3个数据。像这样:

记录数据的方法就是这样了。下面把上一篇中循环等级评定的代码赋值过来,循环次数设为了3次。注意载入模块的地方要修改一下,把需要的都加载进来。在每次评定完之后向dataFile里写入被试的选择结果。

# 放在呈现之前

dataFile.write('picName, feelRating, feelRT, likeRating, likeRT\n')

# scale1调用完之后

dataFile.write(pics[i]+', '+str(scale_1.getRating())+', '+str(scale_1.getRT())+', ')

# scale2调用完之后

dataFile.write(str(scale_2.getRating())+', '+str(scale_2.getRT())+'\n')

这里我要记录内容有五项:picName:图片名、feelRating:感受评定、feelRT:感受评定的反应时、 likeRating:喜欢程度的评定、 likeRT:喜欢程度评定的反应时。

好的,运行一下。打开scv文件:

解释一下,csv(Comma-Separated Values)就是用逗号来分割数据值的,我们在写入的时候用逗号进行分割,它就自动形成行列整齐的数据表了,直接拎出来做统计分析就可以了。记着用'\n'断行。

整体代码如下:

#!/usr/bin/env python2

# -*- coding: utf-8 -*-

#载入所需要的库

from psychopy import visual, core, event, gui

import random

#被试信息记录窗口

info = {'name':'', 'age':'', 'num':'2', 'task':['1','2','3','4']}

infoDlg = gui.DlgFromDict(dictionary = info, title = u'基本信息', order = ['name','age','num','task'])

if infoDlg.OK == False:

core.quit()

# print info

#创建空白文档

dataFile = open("%s.csv"%(info['num']+'_'+info['name']), 'a')

dataFile.write(info['name']+','+info['age']+','+info['num']+'\n')

#创建窗口

win = visual.Window(fullscr = False, size = (1000,600),

color = (-1.0,-1.0,-1.0), units = 'norm', monitor = 'testMonitor')

#文字

text_1 = visual.TextStim(win, text = u'示例6', height = 0.12, pos = (0.0,0.2), color = 'pink')

text_2 = visual.TextStim(win, text = u'', height = 0.1, pos = (0.0,-0.2), color = 'skyblue')

text_2.text= u'被试信息与实验数据的记录'

#呈现文字刺激

text_1.draw()

text_2.draw()

win.flip()

core.wait(2)

#评定内容

pic = visual.ImageStim(win, image = 'test_1.jpg', pos = (0.0,0.4))

item = visual.TextStim(win, text = u'', pos = (0.0,-0.1))

item.text = u'这张图给你的感受是?'

#量表

scale_1 = visual.RatingScale(win, choices = [u'ugly',u'WTH',u'nice'], pos = (0.0,-0.6))

scale_2 = visual.RatingScale(win, scale = u'1=非常不喜欢 . . . . . . . . . . . 7=非常喜欢',

low =1, high = 7, precision = 1, pos = (0.0,-0.6),

marker = 'circle', showValue = True,

acceptPreText = u'请在横线上点击')

pics = ['test_1.jpg','test_2.jpg','test_3.jpg','test_4.jpg','test_5.jpg','test_6.jpg','test_7.jpg','test_8.jpg','test_9.jpg','test_10.jpg']

random.shuffle(pics)

#---------new------------

dataFile.write('picName, feelRating, feelRT, likeRating, likeRT\n')

#呈现

for i in range(3):

pic.image = pics[i]

scale_1.reset()

scale_2.reset()

item.text = u'这张图给你的感受是?'

while scale_1.noResponse:

pic.draw()

item.draw()

scale_1.draw()

win.flip()

#---------new------------

dataFile.write(pics[i]+', '+str(scale_1.getRating())+', '+str(scale_1.getRT())+', ')

item.text = u'评定你对着张图片的喜爱程度。'

while scale_2.noResponse:

pic.draw()

item.draw()

scale_2.draw()

win.flip()

#---------new------------

dataFile.write(str(scale_2.getRating())+', '+str(scale_2.getRT())+'\n')

OK,数据记录的东西就这么多啦。有什么疑问或者建议,请在下方评论。

psychopy 音频时长代码_PsychoPy入门_06_数据记录相关推荐

  1. psychopy 音频时长代码_PsychoPy入门_03_视频和音频的呈现

    不靠谱PsychoPy入门教程目录: 诶,这次说一下视频和音频的呈现.(这部分可用性较差,随意参看一下吧.) 把上一篇中的代码拿过来,删去图片部分,把文字呈现时间改回两秒.我们的开始代码是这样的: # ...

  2. psychopy 音频时长代码_多媒体之音频输入1

    点击上方"Qt学视觉",选择"星标"公众号重磅干货,第一时间送达 共同学习共同进步 音频输入可以使用QAudioRecorder或QAudioInput两个类实 ...

  3. java在linux转化mp3,linux下微信/qq的aud、silk音频文件格式与mp3格式互转,获取音频时长的方法,附问题分析和java代码。...

    安装ffmpeg ffmpeg -codecs -可以看出ffmpeg默认的MP3格式无法编码为其它格式[D.A.L mp3]D=解码 E=编码 A=AudioCodec L=有损压缩 需要安装lam ...

  4. linux下微信/qq的aud、silk音频文件格式与mp3格式互转,获取音频时长的方法,附问题分析和java代码。

    安装ffmpeg ffmpeg -codecs -可以看出ffmpeg默认的MP3格式无法编码为其它格式[D.A.L mp3]D=解码 E=编码 A=AudioCodec L=有损压缩 需要安装lam ...

  5. html javascript 音频、视频、 mp3 、mp4 的播放、暂停、重新播放、获取音频时长、视频自动全屏播放

    html javascript 音频.视频. mp3 .mp4 的播放.暂停.重新播放.获取音频时长 视频 https://www.bilibili.com/video/BV1WE411o7Ft?fr ...

  6. 获取MP3音频时长 | Java工具类

    获取mp3格式音频时长. Maven依赖 <dependency><groupId>org</groupId><artifactId>jaudiotag ...

  7. 根据采样频率计算音频时长

    基础知识: 采样频率是指将模拟声音波形进行数字化时,每秒钟抽取声波幅度样本的次数. 正常人听觉的频率范围大约在20Hz~20kHz之间,根据奈奎斯特采样理论(只有采样频率高于声音信号最高频率的两倍时, ...

  8. 统计多个wav文件的总音频时长

    最近需要做一件事,统计一个文件夹下多个wav文件的总音频文件. 应该有多种途径,我这里就只说我的做法. 主要工作分成了两步:1.提取单个文件的音频时长信息   2.累加音频时长 1.提取单个文件的音频 ...

  9. Java使用FFmpeg(自定义cmd)系列之获取视频/音频时长(File文件方式)

    ffmpeg系列 Java使用FFmpeg(自定义cmd) Java使用FFmpeg(自定义cmd)系列之获取视频/音频时长 Java使用FFmpeg(自定义cmd)系列之官方API获取视频/音频信息 ...

最新文章

  1. linux+任务默认优先级,uclinux内核的任务优先级及其load_weight
  2. 快讯 | 清华数为物联网数据库IoTDB被评为“优秀大数据产品”
  3. 『奇葩问题集锦』Fedora ubuntu 下使用gulp 报错 Error: watch ENOSPC 解决方案
  4. 理解并实施:VRRP(200-120新增考点)
  5. 235. 二叉搜索树的最近公共祖先
  6. 不止代码:路径数量(ybtoj-最小生成树)
  7. ContextMenu长按事件
  8. 华为2288hv5服务器安装ESXI 6.7(三):安装ESXI(转)
  9. Android开发笔记(一百六十四)仿京东首页的下拉刷新
  10. C# 在线培训之零基础入门 01:开篇及C#程序、解决方案的结构
  11. Anaconda——conda换源可以直接通过conda命令来实现
  12. esp32实现万能红外遥控器 基于开源红外码库IREXT
  13. 用HTML和CSS制作一个带图片的旋转立方体
  14. 解读MT7620A上的DTS文件
  15. 离散数学学习笔记——命题逻辑
  16. 2020年Java面试题及答案_Java面试宝典_Java笔试题(持续更新中)
  17. 核心之争——GPU云服务器和CPU云服务器的对比
  18. SpringBoot:整合Redis(概述,数据类型,持久化,RedisTemplate)
  19. 使用Navicat新建PostgreSQL数据库报错ERROR: new collation (en_ US.utf8) is incompatible with the collation of t
  20. 换机心得,安卓旧手机数据转新手机的要点

热门文章

  1. 人身保险产品思维导图
  2. 古文观止卷七_諫太宗十思疏_魏徵
  3. 计蒜客题解——T1157:派
  4. 分享个轮播的3D饼图,分别用Echarts和HighCharts实现
  5. pid级联查询mysql_实现级联查询
  6. 双拼域名的投资前景怎么样?
  7. Java poi 生成word文档并下载
  8. Oracle 通过impdp导入报ORA-39002 ORA-39165错误
  9. Java8中的Stream流
  10. 应用在双屏中的初始打开位置