码迷,mamicode.com
首页 > 其他好文 > 详细

psychopy编写心理试验程序 图片呈现和量表评分

时间:2015-04-22 02:16:00      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:

自变量

图片:16张

呈现时间:2种,2秒和0.2秒

处理类型:2种,处理前和处理后

因变量

8个量表项目的评分(1~7)

实验设计

图片和量表项目为完全被试内设计。由于每张图片不可以被被试看两次,因此,呈现时间和处理类型为不完全被试内设计

下面表格展示了被试可能碰到的4种情况的图片序列。

图片编号 1~4 5~8 9~12 13~16
S1 处理过,0.2s 未处理,2s 处理过,2s 未处理,0.2s
S2 未处理,2s 处理过,2s 未处理,0.2s 处理过,0.2s
S3 处理过,2s 未处理,0.2s 处理过,0.2s 未处理,2s
S4 未处理,0.2s 处理过,0.2s 未处理,2s 处理过,2s

需要记录的结果

被试ID、参加实验组别(1~4)、实验序号、呈现图片、是否处理、呈现时间、项目评分

程序思路

根据实验选取的组别,把图片与呈现时间、是否处理进行绑定,生成Stim实例,然后打乱示例顺序,分别呈现,最后储存数据。

# -*- coding: utf-8 -*-
"""
Created on Sun Apr 19 16:50:21 2015

@author: zbg
"""

from psychopy.visual import Window, ImageStim, TextStim
from psychopy import core, event, gui
import random

#================在这里设置各种基本参数==================
picNames=[‘1.png‘, ‘2.png‘, ‘3.png‘, ‘4.png‘, ‘5.png‘, ‘6.png‘, ‘7.png‘, 
      ‘8.png‘, ‘9.png‘, ‘10.png‘, ‘11.png‘, ‘12.png‘, ‘13.png‘, ‘14.png‘, 
      ‘15.png‘, ‘16.png‘]
processTypes = [‘initial\\‘, ‘processed\\‘]
times = [0.2, 2]

scales = [
         (‘Meaningful1‘, u"我能理解这幅画的意义"),
         (‘Meaningful2‘, u"我能理解这幅画的主题"),
         (‘Unity‘,       u"这幅画的构图是和谐统一的"),
         (‘Complexity‘,  u"这幅画的构图是复杂的"),
         (‘Variety‘,     u"这幅画构图是多样的"),
         (‘Liking‘,      u"我喜欢这幅画"),
         (‘Pleasing‘,    u"这幅画使我感到愉悦"),
         (‘Interesting‘, u"这幅画能引起我的兴趣。"),
        ]
timeCursor = 0.25
#====================其他生成变量
stims = []
results = []
‘‘‘
results = [(stim, result), ...]
result = {label: 2; ...}
‘‘‘
trailOrder = range(16)
random.shuffle(trailOrder)

#================绑定相关
if len(picNames) != 16:
    raise ‘error‘
    
bindTypes = []
for i in range(4):
    bindTypes.append([processTypes[i%2], times[i/2]])
    
class Stim:
    def __init__(self, name, bindType):
        global bindTypes
        self.process = bindTypes[bindType][0]
        self.time = bindTypes[bindType][1]
        self.name = name
        
    def __repr__(self):
        return self.process + ‘\t‘ + self.name + ‘\t‘ + str(self.time) + ‘\n‘


#=================程序使用的各种函数===================
def GetSubject():
    myDlg = gui.Dlg(title="Subject Information")
    myDlg.addText("-------------Subject-----------")
    myDlg.addField(‘ID:‘)
    myDlg.addField(‘Type:‘, choices=[1, 2, 3, 4])

    myDlg.show()

    if myDlg.OK:
        thisInfo = myDlg.data
     
    else:
        exit(0)
        
    subject={}
    subject[‘ID‘]=thisInfo[0]
    subject[‘Type‘]=thisInfo[1]
    return subject
    
def PicBind(t):
    global stims, picNames
    for i in range(4):
        for j in range(4):
            index = i * 4 + j
            stim = Stim(picNames[index], (t + i - 1) % 4)
            stims.append(stim)

def ShowIntro(win):
    introduce =u"""
    啦啦啦啦啦啦啦啦啦啦
    啦啦啦啦啦啦啦
    按[空格键]继续
    """
    t =TextStim(win, introduce ,pos=(0,-0.0))
    t.draw()
    win.flip()
    keys=[]
    while ‘space‘ not in keys:
        keys=event.getKeys()

def ShowStim(win, stim):
    global timeCursor
    t =TextStim(win, ‘+‘ ,pos=(0,-0.0))
    t.draw()
    win.flip()
    core.wait(timeCursor)
    
    image = ImageStim(win, stim.process + stim.name)
    image.draw()
    win.flip()
    core.wait(stim.time)

def ShowScale(text):
    def GetMyKey():
        keys=[]
        while True:
            while len(keys) == 0:
                core.wait(0.1)
                keys=event.getKeys()
            
            if keys[0] in [‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘, ‘6‘, ‘7‘]:
                return keys[0]
            
            if ‘m‘ in keys:
                exit(0)
            keys = []
    
    t =TextStim(win, text ,pos=(0,-0.0))
    t.draw()
    t =TextStim(win, u‘1不同意------------------------------7非常同意‘,pos=(0,-0.2))
    t.draw()
    win.flip()
            
    key = GetMyKey()
    
    t =TextStim(win, u‘你按下了‘ + key,pos=(0,-0.2),color = (0 ,1.,0))
    t.draw()
    win.flip()
    core.wait(0.1)
    
    return key
    
#=================程序开始的地方========================

sub = GetSubject()
PicBind(int(sub[‘Type‘]))

win = Window()
ShowIntro(win)


for trail in trailOrder:
    #呈现图画
    stim = stims[trail]
    ShowStim(win, stim)
    #收集量表数据
    event.getKeys() #清空键盘缓存3
    result = {}
    for label, text in scales:
        key = ShowScale(text)
        result[label] = key
    #把图画属性和量表数据存起来
    results.append((stim, result))

win.close()

#把数据保存进文件里
fp = open(sub[‘ID‘] + ‘.txt‘,‘w‘)

fp.write("ID\tType\tnum\tpic\tprocess\ttime")
for label, text in scales:
    fp.write("\t" + label)

fp.write(‘\n‘)

i = 1
for stim, result in results:
    fp.write(sub[‘ID‘] + ‘\t‘ + sub[‘Type‘] + ‘\t‘ + str(i))
    i = i + 1
    
    fp.write(‘\t‘ + stim.name)
    fp.write(‘\t‘ + stim.process)
    fp.write(‘\t‘ + str(stim.time))
    
    for label, text in scales:
        fp.write(‘\t‘ + result[label])
    
    fp.write(‘\n‘)

fp.close()

完整程序下载(包括图片等文件):http://download.csdn.net/detail/zhanghao9547/8618453 


psychopy编写心理试验程序 图片呈现和量表评分

标签:

原文地址:http://my.oschina.net/u/1387924/blog/404787

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!