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

自变量

图片: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

时间: 2024-10-09 03:15:01

psychopy编写心理试验程序 图片呈现和量表评分的相关文章

fusioncharts批量导出图片之后自动提交表单

最近一个项目  一个页面有多个fusioncharts,需要将他们一次性导出之后再利用图片做一下操作,制作一个可以客户下载的质检简报. 对客户效果来说,我只需要点击一个按钮就能生成简报并且下载,对开发人员来说就需要,先将图片导出(当然不能挨个导出,要同时执行导出,因为fusioncharts导出太慢了),要确认全部导出了才能提交表单,要不然提交表单之后,图片没有生成出来必然产生异常.下面我们来看一下实现 首先我给每一个fusionchartschart指定一个有规律的id,作用有两个: 一个是导

量表选择的经书?

背景:帕金森病(PD)的姿势,步态和平衡紊乱是常见的并且使人虚弱.这个由MDS委托的特别工作组评估了现有评估量表,问卷和定期测试的临床特性,评估PD中的这些特征. 方法:进行文献回顾.对系统识别的工具进行系统评估,并将其分类为"推荐","建议"或"列出".纳入评分量表仅限于临床研究和实践中易于使用的量表. 结果:一个评分量表被归类为"推荐"(UPDRS导出的姿势不稳定性和步态难度评分),2分为"建议"(Ti

mysql大数据量表索引与非索引对比

1:不要在大数据量表中轻易改名字(做任何操作都是非常花费时间) 2个多亿数据量的表 改名操作  执行时间花费8分多钟 (如果是加索引等其他操作 那时间花费不可预估) 2:给大数据量的mysql表 添加索引 所花费的时间 如下 在日后生产环境 如果需要给表添加索引等操作 心里要有预估时间的花费范围 3: explain 解释 语句 type:ALL 进行完整的表扫描 .row:213284372  mysql预估需要扫描213284372 条记录来完成这个查询.可想而知 表数据量越大全表扫描越慢.

怎么编写微博爬虫 图片爬虫

背景:实验室大数据分析需要得到社交网站的数据,首选当然是新浪.数据包括指定关键词.话题.位置的微博的内容.字段包括:图片.时间.用户.位置信息. 思路分析:要爬新浪的数据主要有2种方法: 1.微博开发者平台提供的微博API,资源包括微博内容.评论.用户.关系.话题等信息.同时,你也可以申请高级接口.商业接口获得更多权限,你要去注册申请成为开发者获得OAuth2授权以及这个使用参考,审核大约要1周.也可以直接使用别人分享的APPKEY. 优点是简单,有专门的问答社区,代码更新方便,可以获得real

GridView编写的一个图片浏览器

学完GridView,做了一个图片浏览的功能的小组件.什么是GridView呢? GridView(网格视图)是按照行列的方式来显示内容的,一般用于显示图片,图片等内容,比如实现九宫格图,用GridView是首选,也是最简单的. 分析步骤 1.准备好数据源 2.创建一个List集合,用于将图片ID转换为List集合 3.创建适配器 4.绑定GridView和Adapter之间的关联 5.注册事件监听 程序结果图: 代码下载地址:https://github.com/GXS1225/GridVie

编写代码实现图片懒加载

1.前端性能优化的重要方案,通过图片或者数据的延迟加载,我们可以加快页面渲染速度,让第一次打开页面速度加快,只有滑动到某个区域,才加载真实的图片,这样也可以节省加载的流量, 2.处理方案 把所有需要延迟加载的图爿用一个盒子包起来,设置宽高和默认占位图.开始让所有的IMg的src为空,把真实的地址放到IMG的自定义属性上,让IMG隐藏,等到所有其他资源都加载完后,我们再开始加载图爿,对于很多图爿,需要当页面滚动时候,当前图爿完全显示出来后仔加载真实图片 原文地址:https://blog.51ct

基于Http原理实现Android的图片上传和表单提交

版权声明:本文由张坤  原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/794875001483009140 来源:腾云阁 https://www.qcloud.com/community 现在服务器主要是Web居多,客户端一般通过http上传文件到web服务器,最开始的设想很简单,直接将图片转化为字节流,写入到http的outstream,随后发送出去即可. 但当这种方法出现问题,服务器根据文件名这个表单中的字段来判定

3月20号 图片热点 网页划分 表单

图片划分: 规划出图片上的一个区域,可以做出超链接,直接点击图片区域就可以完成跳转的效果. <img src="../我/m_14_634758583539062500_36767976.jpg" usemap="cat" name="猫" title="这是一只猫"/> <map name="cat"> <area shape="circle" coord

Bootstrap 表单和图片 (内联表单,表单合组,水平排列,复选框和单选框,下拉列表,校验状态,添加额外的图标,控制尺寸,图片)

一.表单 基本格式 注:只有正确设置了输入框的 type 类型,才能被赋予正确的样式. 支持的输入框控件 包括:text.password.datetime.datetime-local.date.month.time.week. number.email.url.search.tel 和 color. <form> <div class="form-group"> <label>电子邮件</label> <input type=&