这是第四篇了,说说等级评定的用法吧。
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的优先级高,有它在其他跟它冲突的参数就失效了)。
scale是对量表的解释描述,放在标尺上面,内容是字符。low和high是最小值和最大值。
precision精度的默认值是1,这里最大7最小1,精度是1,那就只能选择1到7这七个整数,没有别的值。
marker是选择的时候在标尺上显示的图标,可以是‘triangle’、‘circle’、‘glow’、‘slider’(比如取值在0-100的话可以平滑的拖动)和‘hover’(用在choices上才行)。这里用个最普通的圆形。
showValue的值可以使True和False,True的话被试选择之后底下会出现所选的值,False就不会出现。acceptPreText是没做选择的时候,标尺底下的确定按钮上显示的文字。
当然还有很多其他的参数,可以设置大小、颜色、字体等等。想鼓捣来玩儿的话,参考手册: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。也是要用到while循环。代码是这样的:
# 第一个量表
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循环下面。
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()
有什么疑问或者建议,请在下方评论。