查看: 8019|回复: 55

[Python] Python心理学实验编程入门【视频课程】   [复制链接]

Rank: 2

水晶
258
心级
68
精华
1
主题
1
帖子
14
发表于 2016-8-2 17:53:53 |显示全部楼层
本帖最后由 mianwangming 于 2016-11-17 19:54 编辑

Python是一门易学、易用的高级语言,在心理学实验研究中的应用日渐广泛。使用Python,我们可以实现E-Prime等商业软件所无法实现的复杂实验功能。自2014年起,我们一直在杭州师范大学开设免费的暑期课程。今年,我们把相关课程的主要内容录制视频,并上传至Youku和百度云。所有课件、视频、代码都是免费开源的,欢迎感兴趣的同学下载、学习和散播。


目前视频涵盖的内容主要有:

1. 使用Pygame和Psychopy生成和控制视、听觉刺激。

2. 收集被试的反应和记录实验数据。

3. 使用Python完成眼动实验(Eyelink,以及部分与ASL相关的内容)。

4. 与脑电(EEG)和核磁共振(MRI)设备的整合(串口、并口通讯)。


目前的视频课程主要介绍一些入门的技术,内容仍在不断扩充之中。欢迎大家就自己感兴趣的实验技术发邮件请求,我们会录制相关视频并上传示例代码。


Youku播单地址:http://list.youku.com/albumlist/ ... &ascending=1&page=1

视频的云盘下载地址:https://pan.baidu.com/s/1pKQdZzP

课件、代码下载地址:http://pan.baidu.com/s/1slQWihJ

QQ群:370824713(示例代码更新及时)


更新:
2016.08.04:如果软件安装方面出现问题,请参考第24段视频“PsyPy_24: 安装psychopy”,有演示和解答。

2016.08.09:眼动仪厂商ASL于近期破产,碰巧Macquarie有一台Eye-Trac 6。已经在QQ群上传代码来实现Python与ASL的交互。这些代码主要涉及:a)从串口读取ASL传出来的眼动数据(ASL_routine.py);b) 从ASL主机通过串口通讯控制被试机呈现calibration targets(calibration_trigger_demo.py);c)通过并口通讯从被试机控制ASL打开/关闭数据文件、开始/停止记录数据(trial segmentation),以及发送event marker(ASL_XDAT_demo.py);d) 通过串口传送head-tracker(Optrotrak或其他motion-tracking设备)的位置信息,以实现不受头动限制的眼动追踪(write_transformations_2ASL.py)。

2016.08.12:Pygame的Mac安装问题“ImportError: dlopen(pygame/base.so, 2)。该问题是因为Mac操作系统引入了“System Integrity Protection”,需要禁用。具体见:http://stackoverflow.com/questions/33196196/pygame-broke-down

2016.10.10:使用Psychopy时Eyelink的校准(calibration)是个难题。使用Pygame时,可以使用pylink自带的EyelinkCoreGraphicsPygame。根据这个库文件,使用Psychopy编写的校准routine,已经上传到QQ群共享。欢迎大家试用。

2016.11.17:EPD在Enthought的官网已经无法下载。有同学询问在Windows环境下,如何使用Canopy + IDLE来写代码。具体的解决方案已经上传到QQ群共享(文件名:psychopy_installation.txt)。

王治国

杭州师范大学认知与脑疾病研究中心研究员

Email: z.wang@hznu.edu.cn

RG Profile: https://www.researchgate.net/profile/Zhiguo_Wang6














附件: 你需要登录才可以下载或查看附件。没有帐号?注册

点评

hcp4715  经常更新,太赞了!  发表于 2016-8-15 05:45:51
已有 8 人评分心级 水晶 收起 理由
吱嗯_吱咀哟 + 1 刚好需要 赞!
alma2004 + 1 很给力!
Tony-Ray + 2 很给力!
jiandan105 + 5 很给力!
huzhishan + 5 棒棒棒棒!
hcp4715 + 30 太棒啦~
tangnuo + 5 谢谢分享
admin + 5 + 100 很给力!

总评分: 心级 + 5  水晶 + 149   查看全部评分

Rank: 3Rank: 3

水晶
2280
心级
432
精华
0
主题
75
帖子
356
发表于 2016-8-2 20:34:47 |显示全部楼层
点个赞
不以物喜,不以己悲。

使用道具 举报

Rank: 5Rank: 5

水晶
3824
心级
1625
精华
2
主题
28
帖子
1346
发表于 2016-8-3 05:29:54 |显示全部楼层
支持,顺便提一下我原来写的一个示例程序,请各位滴油不吝批评指正用PsychoPy编写实验程序的示例(爱荷华赌博任务)
空里流霜不觉飞,汀上白沙看不见。

使用道具 举报

Rank: 2

水晶
258
心级
68
精华
1
主题
1
帖子
14
发表于 2016-8-3 06:58:34 |显示全部楼层
空里流霜 发表于 2016-8-3 05:29
支持,顺便提一下我原来写的一个示例程序,请各位滴油不吝批评指正用PsychoPy编写实验程序的示例(爱荷华赌 ...

代码写得不错,这个任务很复杂,代码已经比较精简了。几点建议,1) 可以创建一个draw card的函数,这样代码可以更精简一点;2) trial control建议先定义一个trial list,像E-prime那样,这样随机起来非常方便。我在这里贴一段简要的示例代码,主要演示一下整个实验的structure,希望能有所启示。

# Simon effect
# import libraries
import sys, random, os, time
from psychopy import visual, core, event
from sys import maxint

##from ctypes import windll
### routine to send event triggers to EEG
##p = windll.inpout32
##def send_code(code):
##    p.Out32(0x378, code)
##    time.sleep(0.006)
##    p.Out32(0x378, 0)
##    time.sleep(0.01)
def send_code(code): pass

# get subject info
def get_subj_info():
    subj_id = raw_input('Subject ID: ')
    subj_name = raw_input('Subject Name: ')
    subj_gender = raw_input('Subject Gender (m/f): ')
    subj_age = raw_input('Subject Age: ')
    return [subj_id, subj_name, subj_gender, subj_age]
subj = get_subj_info()

# create a window
win = visual.Window((1024, 768), units='pix', fullscr=False)

# some constants
left = (-200, 0)
right = (200, 0)
red = (1.0, -1.0, -1.0)
blue = (-1.0, -1.0, 1.0)
black = (-1.0,-1.0,-1.0)
white = (1.0,1.0,1.0)

random.seed = 1000

# trial list
trials = [['L', 'R', 'z', 1],
          ['L', 'B', '/', 2],
          ['R', 'R', 'z', 3],
          ['R', 'B', '/', 4]]

text_msg = visual.TextStim(win, text='message')
tar_stim = visual.GratingStim(win, tex='None', mask='circle', size=60.0)

# run a single trial
def run_trial(pars, data_file, subj_info):
    """ pars should be list that specifies the
    location and color of the stimulus, as well as
    the correct key response, such as ['R', 'B', '/']"""
    l, c, cor_resp, trig = pars
    if l == 'R': loc = right
    if l == 'L': loc = left
    if c == 'R': col = red
    if c == 'B': col = blue

    # present the fixation
    text_msg.setText('+')
    text_msg.draw()
    win.flip()
    core.wait(0.750)

    # present the target
    tar_stim.setColor(col)
    tar_stim.setPos(loc)
    tar_stim.draw()
    win.flip()
    send_code(trig)
    tar_resp = event.waitKeys(1500, ['z', 'slash'],timeStamped=True)
    print tar_resp

    # write data to file
    trial_data = subj_info + pars + list(tar_resp[0])
    trial_data = map(str, trial_data)
    trial_data = ','.join(trial_data) + '\n'
    data_file.write(trial_data)
   
    win.setColor(black)
    win.flip()
    core.wait(0.500)

#### real experiment starts here
# open a data file
if not os.path.exists('data_file'): os.mkdir('data_file')
d_file = open('data_file/' + '_'.join(subj[:2]) +'.csv', 'w')

# show the instructions
text_msg.setText('Press Z to RED, press / to BLUE. Press <SPACE> to start')
text_msg.draw()
win.flip()
event.waitKeys(maxint, keyList=['space'])

test_trials = trials[:]*2
random.shuffle(test_trials)

for t in test_trials:
    run_trial(t, d_file, subj)

# close data file
d_file.close()

# exit
sys.exit()
已有 2 人评分水晶 收起 理由
lxr0624 + 1 很给力!
admin + 40 谢谢分享

总评分: 水晶 + 41   查看全部评分

使用道具 举报

Rank: 5Rank: 5

水晶
3824
心级
1625
精华
2
主题
28
帖子
1346
发表于 2016-8-3 07:02:43 |显示全部楼层
mianwangming 发表于 2016-8-2 17:58
代码写得不错,这个任务很复杂,代码已经比较精简了。几点建议,1) 可以创建一个draw card的函数,这样代 ...

多谢老师指点!O(∩_∩)O
空里流霜不觉飞,汀上白沙看不见。

使用道具 举报

Rank: 3Rank: 3

水晶
2578
心级
238
精华
0
主题
5
帖子
185
发表于 2016-8-3 08:36:02 |显示全部楼层
王老师大赞!
已有之事,后必再有!

使用道具 举报

新滴友

weird

Rank: 2

水晶
1000
心级
78
精华
0
主题
0
帖子
43
发表于 2016-8-3 09:14:45 |显示全部楼层
好棒!学起~
努力成为科学家~

使用道具 举报

Rank: 3Rank: 3

水晶
2630
心级
289
精华
0
主题
12
帖子
155
发表于 2016-8-3 09:29:20 |显示全部楼层
赞一个先。

使用道具 举报

Rank: 3Rank: 3

水晶
321
心级
80
精华
0
主题
1
帖子
75
发表于 2016-8-3 09:30:00 |显示全部楼层
必须赞赞赞赞~~~~~~~~~~~~~~~~~~

使用道具 举报

Rank: 3Rank: 3

水晶
831
心级
298
精华
0
主题
15
帖子
222
发表于 2016-8-3 20:31:52 |显示全部楼层
谢谢老师的教程,先收藏了,回学校就好好研究下
try my best

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

京ICP备11024562-1号|京公网安备11010802009033|联系我们|手机版|Archiver|我爱脑科学/心心水滴论坛

GMT+8, 2017-1-22 05:45

Powered by Discuz! X2

© 2001-2011 Template By Yeei. Comsenz Inc.

回顶部