不靠譜PsychoPy入門教程目錄:
這是第四篇了,說說等級評定的用法吧。
PsychoPy中有個RatingScale()的方法,可以用在多選、等級評分上。它是一個標(biāo)尺的樣子,讓被試在上面點選,可以記錄選擇的選項和反應(yīng)時。
用到模塊跟前面兩次一樣,還是這三個:
from psychopy import visual, core, event
等級評定分兩種,一種是分類的,稱名量表或名義量表,選項代表類別;一種是定量的,數(shù)值代表大小。下面每一種的我們都建一個:
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里放的是每個選項,它們會作為標(biāo)尺的標(biāo)簽。pos是位置,不多說。
scale_2的話就是個等距量表,這里就不再用choices了(choices的優(yōu)先級高,有它在其他跟它沖突的參數(shù)就失效了)。
- scale是對量表的解釋描述,放在標(biāo)尺上面,內(nèi)容是字符。low和high是最小值和最大值。
- precision精度的默認(rèn)值是1,這里最大7最小1,精度是1,那就只能選擇1到7這七個整數(shù),沒有別的值。
- marker是選擇的時候在標(biāo)尺上顯示的圖標(biāo),可以是‘triangle’、‘circle’、‘glow’、‘slider’(比如取值在0-100的話可以平滑的拖動)和‘hover’(用在choices上才行)。這里用個最普通的圓形。
- showValue的值可以使True和False,True的話被試選擇之后底下會出現(xiàn)所選的值,F(xiàn)alse就不會出現(xiàn)。- ------ acceptPreText是沒做選擇的時候,標(biāo)尺底下的確定按鈕上顯示的文字。
當(dāng)然還有很多其他的參數(shù),可以設(shè)置大小、顏色、字體等等。想鼓搗來玩兒的話,參考手冊: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))
接下來呈現(xiàn)我們要評定的圖片、文字說明以及上面建好的scale。也是用stim.draw()。需要用到while循環(huán),如果被試沒有做出選擇(scale.noResponse == True)就要一直呈現(xiàn),做出選擇之后跳出循環(huán)繼續(xù)執(zhí)行下面的代碼。這部分的代碼是這樣的:
# 第一個量表
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()
運(yùn)行一下,你會看到這樣的畫面:



【注意:】如果同一個scale要重復(fù)使用的話,需要在下次調(diào)用前重置(reset),不然它處于已經(jīng)選擇的狀態(tài),noResponse=False,while循環(huán)不會執(zhí)行。只需要填上這兩行就行:
scale_1.reset()
scale_2.reset()
這個應(yīng)該作為習(xí)慣填在while循環(huán)前,一般情況下我們會讓被試對多個對象進(jìn)行評定,重復(fù)使用是肯定的。
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循環(huán)下面。運(yùn)行之后,可以在output窗口看到你的選擇結(jié)果,類似這樣:

RatingScale()的用法基本上就是這些了。
整體代碼如下:
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
#示例4
'''
等級評定
'''
#載入所需要的庫
from psychopy import visual, core, event
#創(chuàng)建窗口
win = visual.Window(fullscr = False, size = (1000,600),
color = (-1.0,-1.0,-1.0), units = 'norm', monitor = 'testMonitor')
#評定內(nèi)容
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'請在橫線上點擊')
#呈現(xiàn)
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的參數(shù),minTime是必須等多少秒之后才能做選擇,maxTime是最長等待多少秒。比如你的實驗對反應(yīng)時有要求,必須在4秒之內(nèi)做出選擇才有效,就可以設(shè)置maxTime的值等于4,這樣四秒內(nèi)沒做選擇就自動跳過去了。
有什么疑問或者建議,請在下方評論。