心理学研究方法

PsychoPy入门_04_等级评定

2016-10-14  本文已影响846人  ChZ_CC

不靠谱PsychoPy入门教程目录:

  1. PsychoPy入门00安装

  2. PsychoPy入门01文字和图片的呈现

  3. PsychoPy入门02按键等待&反应时

  4. PsychoPy入门03视频和音频的呈现

  5. PsychoPy入门04等级评定

  6. PsychoPy入门05循环和随机

  7. PsychoPy入门06数据记录

  8. PsychoPy入门07鼠标的使用

  9. 用PsychoPy做视觉搜索任务实验


这是第四篇了,说说等级评定的用法吧。

PsychoPy中有个RatingScale()的方法,可以用在多选、等级评分上。它是一个标尺的样子,让被试在上面点选,可以记录选择的选项和反应时。

用到模块跟前面两次一样,还是这三个:

from psychopy import visual, core, event

等级评定分两种,一种是分类的,称名量表或名义量表,选项代表类别;一种是定量的,数值代表大小。下面每一种的我们都建一个:

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'请在横线上点击')

解释一下,scale_1是分类的量表,choices里放的是每个选项,它们会作为标尺的标签。pos是位置,不多说。

scale_2的话就是个等距量表,这里就不再用choices了(choices的优先级高,有它在其他跟它冲突的参数就失效了)。

当然还有很多其他的参数,可以设置大小、颜色、字体等等。想鼓捣来玩儿的话,参考手册:RatingScale

具体要对什么东西做评定呢,随便来张图片吧,顺道配个文字说明。

pic = visual.ImageStim(win, image = 'test_1.jpg', pos = (0.0,0.4))
item = visual.TextStim(win, text = u'', pos = (0.0,-0.1))

接下来呈现我们要评定的图片、文字说明以及上面建好的scale。也是用stim.draw()。需要用到while循环,如果被试没有做出选择(scale.noResponse == True)就要一直呈现,做出选择之后跳出循环继续执行下面的代码。这部分的代码是这样的:

# 第一个量表
item.text = u'这张图给你的感受是?'
while scale_1.noResponse:
    pic.draw()
    item.draw()
    scale_1.draw()
    win.flip()

# 第二个量表
item.text = u'评定你对着张图片的喜爱程度。'
while scale_2.noResponse:
    pic.draw()
    item.draw()
    scale_2.draw()
    win.flip()

运行一下,你会看到这样的画面:




【注意:】如果同一个scale要重复使用的话,需要在下次调用前重置(reset),不然它处于已经选择的状态,noResponse=False,while循环不会执行。只需要填上这两行就行:

scale_1.reset()
scale_2.reset()

这个应该作为习惯填在while循环前,一般情况下我们会让被试对多个对象进行评定,重复使用是肯定的。

RatingScale会记录你所做的选择和所用的时间,用scale.getRating(), scal.getRT()获取。可以用print打印出来看看:

print 'scale 1:', scale_1.getRating(), scale_1.getRT()
print 'scale 2:', scale_2.getRating(), scale_2.getRT()

这两行分别放在两个scale的while循环下面。运行之后,可以在output窗口看到你的选择结果,类似这样:

RatingScale()的用法基本上就是这些了。


整体代码如下:

#!/usr/bin/env python2
# -*- coding: utf-8 -*-

#示例4
'''
    等级评定
'''
#载入所需要的库
from psychopy import visual, core, event

#创建窗口
win = visual.Window(fullscr = False, size = (1000,600),
                    color = (-1.0,-1.0,-1.0), units = 'norm', monitor = 'testMonitor')

#评定内容
pic = visual.ImageStim(win, image = 'test_1.jpg', pos = (0.0,0.4))
item = visual.TextStim(win, text = u'', pos = (0.0,-0.1))

#量表
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'请在横线上点击')
#呈现
item.text = u'这张图给你的感受是?'
scale_1.reset()
while scale_1.noResponse:
    pic.draw()
    item.draw()
    scale_1.draw()
    win.flip()
print 'scale 1:', scale_1.getRating(), scale_1.getRT()

item.text = u'评定你对着张图片的喜爱程度。'
scale_2.reset()
while scale_2.noResponse:
    pic.draw()
    item.draw()
    scale_2.draw()
    win.flip()
print 'scale 2:', scale_2.getRating(), scale_2.getRT()

win.close()
core.quit()

P.S. RatingScale有个maxTime和minTime的参数,minTime是必须等多少秒之后才能做选择,maxTime是最长等待多少秒。比如你的实验对反应时有要求,必须在4秒之内做出选择才有效,就可以设置maxTime的值等于4,这样四秒内没做选择就自动跳过去了。

有什么疑问或者建议,请在下方评论。

上一篇下一篇

猜你喜欢

热点阅读