以下是关于 PsychoPy 的详细使用方法指南,涵盖安装、实验设计、代码编写、数据记录及高级功能的完整流程:
一、PsychoPy 简介
PsychoPy 是一款开源的心理学实验设计工具,支持通过图形界面(Builder)或Python代码(Coder)创建实验,适用于行为实验、认知任务(如Stroop、Flanker)、眼动追踪等。其核心优势是跨平台兼容性和毫秒级时间精度。
二、安装与启动
-
下载安装
- 官网:https://www.psychopy.org/
- 支持Windows/macOS/Linux,推荐安装Standalone版本(内置Python环境)。
-
启动界面
- Builder:图形化拖拽设计(适合新手)。
- Coder:直接编写Python代码(适合高级用户)。
三、使用 Builder 设计实验(以Stroop任务为例)
1. 创建实验流程
- 新建实验:
- 打开Builder → 点击“New Experiment”。
- 添加Routine:
- 右键点击“Flow” → 添加“Routine”(如
trial
)。
- 右键点击“Flow” → 添加“Routine”(如
- 设计刺激组件:
- 在
trial
中添加组件:- Text:显示颜色词(如“红”显示为蓝色)。
- Keyboard:记录被试按键反应。
- Fixation Cross:注视点(500ms)。
- 在
- 设置循环(Loop):
- 右键点击
trial
→ 添加“Loop”,导入CSV文件定义实验条件(如词义、颜色、正确答案)。
- 右键点击
2. 关键参数配置
- Text组件:
Text
字段:$word
(从CSV文件中读取变量)。Color
字段:$color
(同上)。
- Keyboard组件:
Allowed Keys
:['left','right']
(对应答案选项)。Store Correct
:$corrAns
(根据CSV中的正确答案自动标记对错)。
3. 运行与调试
- 点击“Run” → 选择“Full Screen”或窗口模式运行。
- 调试技巧:
- 使用
print()
函数在控制台输出变量值。 - 启用“Logging”记录时间戳和事件。
- 使用
四、使用 Coder 编写实验(Python代码示例)
1. 基础代码框架
from psychopy import visual, core, event
# 创建窗口
win = visual.Window(size=(800, 600), units='pix')
# 定义刺激
text_stim = visual.TextStim(win, text='Hello PsychoPy!', color='white')
# 显示刺激并记录反应
text_stim.draw()
win.flip()
core.wait(2.0) # 显示2秒
# 关闭窗口
win.close()
2. Stroop任务代码示例
from psychopy import visual, core, event, data
import random
# 初始化窗口和参数
win = visual.Window()
conditions = [{'word': '红', 'color': 'blue', 'corrAns': 'right'},
{'word': '蓝', 'color': 'red', 'corrAns': 'left'}]
trials = data.TrialHandler(conditions, nReps=5)
# 实验循环
for trial in trials:
# 显示注视点
fixation = visual.TextStim(win, text='+', color='white')
fixation.draw()
win.flip()
core.wait(0.5)
# 显示刺激
text = visual.TextStim(win, text=trial['word'], color=trial['color'])
text.draw()
win.flip()
# 记录反应
keys = event.waitKeys(keyList=['left', 'right'], timeStamped=True)
trials.addData('RT', keys[0][1]) # 记录反应时
trials.addData('Accuracy', 1 if keys[0][0] == trial['corrAns'] else 0)
# 保存数据
trials.saveAsExcel('stroop_data.xlsx')
win.close()
五、数据记录与导出
- 自动记录:
- Builder模式下,数据默认保存为
.csv
或.xlsx
文件(含时间戳、反应时、正确率等)。
- Builder模式下,数据默认保存为
- 自定义字段:
- 在代码中使用
addData()
添加额外变量(如被试ID、实验版本)。
- 在代码中使用
- 数据清洗:
- 使用Pandas处理数据:
import pandas as pd df = pd.read_csv('stroop_data.csv') df = df[df['RT'] > 0.1] # 过滤过快反应
- 使用Pandas处理数据:
六、高级功能
1. 时间精度控制
- 刷新同步:
win = visual.Window(..., useFBO=True) # 启用帧缓冲
- 硬件同步:
- 使用
psychopy.parallel
模块连接触发器(如EEG/MRI设备)。
- 使用
2. 眼动追踪集成
- 支持设备:Tobii、EyeLink。
- 示例代码:
from psychopy.iohub import launchHubServer io = launchHubServer(eyetracker='Tobii')
3. 扩展插件
- Pavlovia:在线运行实验(需注册账号)。
- PyEPL:与Python生态库(如NumPy、SciPy)无缝集成。
七、调试与优化
1. 常见问题
- 刺激不同步:确保
win.flip()
在每次刷新前调用。 - 按键延迟:使用
event.clearEvents()
清空事件缓存。 - 跨平台差异:在目标系统上提前测试。
2. 性能优化
- 预加载刺激:
images = [visual.ImageStim(win, image='img1.png'), ...]
- 减少实时计算:避免在循环内创建对象。
八、学习资源
- 官方文档:PsychoPy Documentation
- 书籍推荐:
- 《Programming Visual Illusions for Everyone》(PsychoPy实战案例)
- 《Experimental Psychology with Python》(结合理论与代码)
- 社区支持:
- PsychoPy论坛
- GitHub仓库:PsychoPy示例
九、应用场景
- 认知心理学:注意力、记忆、决策实验。
- 神经科学:fMRI/EEG实验范式设计。
- 教育研究:学习行为分析。
- 人因工程:界面可用性测试。