SlideShare a Scribd company logo
PsychoPyを使った 
初学者向けの心理実験環境の構築 
! 
小川洋和 
関西学院大学 文学部 総合心理科学科
今日の内容 
自己紹介 
PsychoPyとは? 
入門編:実験作成の基礎 
応用編:コードコンポーネントについて 
実験実習・卒論実験に導入する際のノウハウ
自己紹介
専門:実験心理学(視覚的注意・顔認知など) 
自身の実験プログラム環境は、MATLAB+PTBを使用。 
毎年16~12名程度の卒論生を指導。その全員に別々実験 
のプログラムが必要となる。 
➡ 学生自身が自力で学べる心理実験のためのプログラミン 
グ環境の必要性
PsychoPyとは?
PsychoPyの特徴 
心理実験用の刺激呈示・データ収集アプリケーション 
Python言語をベースとしている 
無料で利用できる(オープンソース) 
インストールが簡単 
プラットホームを問わない(Windows / Mac / Linux) 
GUI環境で実験を構築できる(もちろんコードを直接書くことも 
できる) 
パラレルポートなどを利用した外部トリガー出力も可能。
インストール 
PsychoPy Webpage(http://www.psychopy.org)からダウンロードページへ
Windows:「*-win32.exe」ファイルをダウンロード→ダブルクリック 
Mac:「*-OSX.dmg」ファイルをダウンロード 
   ディスクイメージ内のアイコンをアプリケーションフォルダにD&D
コーダ̶(Coder)機能 
Pythonのコードを直接記述するかたちでプログラミン 
グする機能 
ビルダー(builder)機能 
GUIベースで刺激や反応取得のルーチンを配置していく 
ことで実験を作成する機能
Coder View 
通常のエディター機能に加 
え、Outputを表示したりや 
Shellコマンドを実行する機 
能が実装されている。 
CoderとBuilderはメニュー 
から随時切り替え可能。
Builder View ルーチンペイン 
フローペイン
ルーチンペイン 
実験を構成するイベントの時間的な流れが示されている 
注視点・刺激のタイミング 
反応取得の期間など 
フローペイン 
実験内でのルーチンの実行順序を示す。教示や刺激、繰り返し(ルー 
プ)など
コンポーネント 
実験の中で呈示される様々な刺激や反 
応取得のイベント(部品) 
これらを並べることによって試行をデ 
ザインすることができる。
刺激呈示に関するコンポーネント 
Image:画像ファイルを表示 
Text:文字を表示 
Polygon:多角形を表示 
Grating:縞模様を表示 
Dot:一様に運動するドットを表示 
Sound:音声ファイルを呈示 
Movie:動画ファイルを再生
反応取得に関するコンポーネント 
Keyboard:キーボードの反応を取得 
Mouse:マウスカーソルの座標・ボタン状態を取得 
Rating Scale: 
レーティングスケールを表示して反応を取得 
Microphone:マイクから音声を録音 
Cedrus button box:Cedrus社製ボタンボックス 
の制御 
ioLabs button box:ioLabsのボタンボックス制御
その他のコンポーネント 
Code: 
Pythonのコードを入力する。任意のタイミングで 
実行することによって、動的な制御を実現できる。 
ISI: 
大きなサイズの画像を読み込むなど時間が掛かる処 
理を行うための期間を設定 
Parallel out: 
パラレルポートからの信号出力を制御
入門編:実験作成の基礎
実験課題 
二枚の画像の選好判断(2AFC) 
カーソルキーの左右で反応。反応キーと反応時間を記録。 
実験刺激 
10枚の顔画像(001.jpg~010.jpg) 
試行の流れ 
+ 
ブランク 
(500 ms) 
注視点 
(750 ms) 
刺激 
(反応まで)
ブランク
ブランク 
Durationなどを設定する 
この期間に呈示する画像ファ 
イルなどを先読みすることが 
可能(後述)
注視点 
Nameにコンポート名を設定 
(変数などと重複不可) 
呈示タイミング・じいじ時間 
などを設定 
文字の大きさをピクセル単位 
で設定(視覚・画面上での比 
率などでも設定可能) 
位置は画面中央が[0,0]
注視点 
Nameにコンポート名を設定 
(変数などと重複不可) 
呈示タイミング・じいじ時間 
などを設定 
文字の大きさをピクセル単位 
で設定(視覚・画面上での比 
率などでも設定可能) 
位置は画面中央が[0,0]
注視点
刺激画像 
image欄にファイル名を 
記入(プログラムと違う 
フォルダにある場合はパ 
ス名も) 
反応まで呈示し続ける場 
合にはStop欄を空白に 
位置、サイズなどを設定
刺激画像 
image欄にファイル名を 
記入(プログラムと違う 
フォルダにある場合はパ 
ス名も) 
反応まで呈示し続ける場 
合にはStop欄を空白に 
位置、サイズなどを設定
刺激画像
反応取得 
Start, Stopで反応を取得 
する期間を設定 
“Force end of Routine” 
にチェックを入れるとキー 
押しがあった時点でルー 
チンが終了する。 
“Allowed Keys”で受け付 
けるキー種類を設定
反応取得 
Start, Stopで反応を取得 
する期間を設定 
“Force end of Routine” 
にチェックを入れるとキー 
押しがあった時点でルー 
チンが終了する。 
“Allowed Keys”で受け付 
けるキー種類を設定
反応取得
繰り返しの処理(ループ) 
Flowペインから”Insert Loop”をクリック
繰り返しの処理(ループ) 
“LoopType”で繰り返しの 
種類(どのようにランダ 
マイズするか)を設定で 
きる 
“nReps”で繰り返し回数 
を設定 
“conditionsFile”で試行ご 
とのパラメタリストを読 
み込むことができる。
繰り返しの処理(ループ) 
一行目にPsychoPy内 
での変数名を記入 
二行目以降に変数に入 
る値を記入 
一行に記入する値が 
一試行の値となる。
繰り返しの処理(ループ) 
“conditionsFile”でExcel 
ファイルを指定すると、 
読み込まれて先ほど指定 
した変数名が認識されて 
いることがわかる。
繰り返しの処理(ループ)
刺激画像 
先ほど設定した画像のプ 
ロパティを再度開き、設 
定ファイルで指定した変 
数名($imageName1) 
を入力 
“set every repeat”に設 
定することを忘れずに!
完成!
結果の出力 
CSVファイルで各試行の刺激・反応が記録される 
日本語が含まれる場合、文字コードの関係で文字化けする。 
その場合はExcelファイルで出力するように設定を変更す 
ることで回避可能
結果の出力 
CSVファイルで各試行の刺激・反応が記録される 
日本語が含まれる場合、文字コードの関係で文字化けする。 
その場合はExcelファイルで出力するように設定を変更す 
ることで回避可能
Youtubeにストループ課題の作成チュートリアル動画が 
掲載されています。 
http://www.youtube.com/watch?v=VV6qhuQgsiI
応用編:コードコンポーネントについて
コードコンポーネント 
動的な刺激制御 
反応の結果に応じてフィードバックのメッセージを変 
えるなど、動的な刺激制御を行うためには、コードコ 
ンポーネントを利用する。 
Pythonのコードを直接記入することで、条件分岐など 
の複雑な処理を行うことが可能になる。
コード実行タイミング 
実験開始/終了時・ルーチン開始/終了時・各フレームの 
それぞれのタイミングで、スクリプトを実行することがで 
きる。
コードの記入例 
画像の呈示位置(左右)をランダマイズするには? 
先ほどの例では画像ペアの左右が固定なので、試行 
毎にランダムに左右位置を決定する 
反応に応じてフィードバックメッセージを呈示するに 
は? 
反応時間が3秒以上の場合に「Too late!」という 
メッセージを表示する。
乱数に応じてファイル名をスワップする 
Begin Routineに左の 
ようなコードを記入す 
る。 
Random()は0以上1未 
満の乱数を返す関数 
trials.addDataでここ 
で値を変更した変数を 
指定すると結果ファイ 
ルに書き出される。
乱数に応じてファイル名をスワップする 
Begin Routineに左の 
ようなコードを記入す 
る。 
Random()は0以上1未 
満の乱数を返す関数 
trials.addDataでここ 
で値を変更した変数を 
指定すると結果ファイ 
ルに書き出される。 
コードで指定した変数に変更
結果ファイルの確認 
trials.addDataで指定した変数が挿入されている。 
試行によって画像の呈示位置がスイッチされてることも確 
認できる。
コードの記入例 
画像の呈示位置(左右)をランダマイズするには? 
先ほどの例では画像ペアの左右が固定なので、試行 
毎にランダムに左右位置を決定する 
反応に応じてフィードバックメッセージを呈示するに 
は? 
反応時間が3秒以上の場合に「Too late!」という 
メッセージを表示する。
メッセージ用のルーチンを作成する 
“Insert routine”から新しくメッセージ呈示用のルーチン 
を作成し、テキストコンポーネントでメッセージを入力す 
る。
メッセージ用のルーチンを作成する 
“Insert routine”から新しくメッセージ呈示用のルーチン 
を作成し、テキストコンポーネントでメッセージを入力す 
る。
メッセージ用のルーチンを作成する 
“Insert routine”から新しくメッセージ呈示用のルーチン 
を作成し、テキストコンポーネントでメッセージを入力す 
る。
メッセージ用のルーチンを作成する 
“Insert routine”から新しくメッセージ呈示用のルーチン 
を作成し、テキストコンポーネントでメッセージを入力す 
る。
反応時間に応じてフラグを立てる 
Trialルーチンでコードを開 
き、”End Routine”のタブに 
左のようなコードを入力する 
各試行の反応時間は 
「response.rt」という変数 
に入っている(結果ファイル 
でも確認できる)。
ループ回数の設定で処理の分岐を行う 
メッセージのルーチンにループを設定し、繰り返し回数に 
先ほどのフラグ変数を指定する。 
➡ ループ回数が0の場合には処理をスキップすることを利 
用した処理分岐
完成!
実験実習・卒論実験などへの導入
関西学院大学文学部総合心理科学科での導入事例 
PsychoPyを学科保有のPC(60台前後)に加えて、全学 
のPC教室にインストール 
2014年度から3年生対象の実験実習科目の一環として 
PsychoPyを使った実験プログラム実習を実施
実際に導入してみた感想… 
UIが取っつきやすいこともあり、想定していたよりも学生 
の理解は早い。 
2週(各連続2コマ)で概容を説明し実験作成例を呈示 
することによって、基本的な実験作成が可能になる。 
もちろん細かい点については個別に説明・対応する必 
要あり 
エラーメッセージが非常にわかりにくいため、トラブルが 
あったときの対処に時間がかかる。
よくあるトラブル 
全般的にエラーメッセージとミスの内容が対応しておらず、 
プログラムの知識がないとデバグが困難である。 
プログラムのパス名(上位階層も含む)に2バイト文字が 
含まれているとプログラムを実行できない。しかも、その 
場合特にエラーメッセージが表示されない。 
コンポーネントで値を変数で指定する場合「Set every 
repeat」にセットする必要があるが、これを忘れることが 
多い。また、その場合に表示されるエラーメッセージから、 
このミスに気づくことが難しい。
PsychoPy導入のメリット・メリット 
学生自身が実験プログラムを手軽に作成できる 
実験に対する理解が深まりやすい 
作成済みのプログラムを渡されるよりも、自身の卒論 
研究に対してより動機づけが強まりやすい(?) 
厳密な時間制御が必要な実験(特に視聴覚刺激・動画)の 
精度には注意が必要。 
Coder機能を使ってコードを自分で書くか、他の実験 
環境の利用を検討した方がよい。
参考資料 
愛媛大学十河先生が非常に詳細(約400ページ!)かつわ 
かりやすいテキストをPDFで提供されているので是非ご覧 
ください。 
PsychoPy Builderで作る心理学実験 
http://www.s12600.net/psy/python/ppb/ 
私のサイトにも簡単な実験作成方法を紹介しています。 
PsychoPy講座 
http://ogwlab.org/?page_id=460

More Related Content

What's hot

Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Preferred Networks
 
Anaconda navigatorのアップデートが終わらないときの対処方法メモ
Anaconda navigatorのアップデートが終わらないときの対処方法メモAnaconda navigatorのアップデートが終わらないときの対処方法メモ
Anaconda navigatorのアップデートが終わらないときの対処方法メモ
ayohe
 

What's hot (20)

AlphaGoのしくみ
AlphaGoのしくみAlphaGoのしくみ
AlphaGoのしくみ
 
機械学習を使った時系列売上予測
機械学習を使った時系列売上予測機械学習を使った時系列売上予測
機械学習を使った時系列売上予測
 
最適輸送の解き方
最適輸送の解き方最適輸送の解き方
最適輸送の解き方
 
[DL輪読会] マルチエージェント強化学習と心の理論
[DL輪読会] マルチエージェント強化学習と心の理論[DL輪読会] マルチエージェント強化学習と心の理論
[DL輪読会] マルチエージェント強化学習と心の理論
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
 
全力解説!Transformer
全力解説!Transformer全力解説!Transformer
全力解説!Transformer
 
Transformerを多層にする際の勾配消失問題と解決法について
Transformerを多層にする際の勾配消失問題と解決法についてTransformerを多層にする際の勾配消失問題と解決法について
Transformerを多層にする際の勾配消失問題と解決法について
 
機械学習モデルの判断根拠の説明(Ver.2)
機械学習モデルの判断根拠の説明(Ver.2)機械学習モデルの判断根拠の説明(Ver.2)
機械学習モデルの判断根拠の説明(Ver.2)
 
【DL輪読会】"Secrets of RLHF in Large Language Models Part I: PPO"
【DL輪読会】"Secrets of RLHF in Large Language Models Part I: PPO"【DL輪読会】"Secrets of RLHF in Large Language Models Part I: PPO"
【DL輪読会】"Secrets of RLHF in Large Language Models Part I: PPO"
 
【メタサーベイ】数式ドリブン教師あり学習
【メタサーベイ】数式ドリブン教師あり学習【メタサーベイ】数式ドリブン教師あり学習
【メタサーベイ】数式ドリブン教師あり学習
 
【DL輪読会】Efficiently Modeling Long Sequences with Structured State Spaces
【DL輪読会】Efficiently Modeling Long Sequences with Structured State Spaces【DL輪読会】Efficiently Modeling Long Sequences with Structured State Spaces
【DL輪読会】Efficiently Modeling Long Sequences with Structured State Spaces
 
最近強化学習の良記事がたくさん出てきたので勉強しながらまとめた
最近強化学習の良記事がたくさん出てきたので勉強しながらまとめた最近強化学習の良記事がたくさん出てきたので勉強しながらまとめた
最近強化学習の良記事がたくさん出てきたので勉強しながらまとめた
 
方策勾配型強化学習の基礎と応用
方策勾配型強化学習の基礎と応用方策勾配型強化学習の基礎と応用
方策勾配型強化学習の基礎と応用
 
Anaconda navigatorのアップデートが終わらないときの対処方法メモ
Anaconda navigatorのアップデートが終わらないときの対処方法メモAnaconda navigatorのアップデートが終わらないときの対処方法メモ
Anaconda navigatorのアップデートが終わらないときの対処方法メモ
 
機械学習で泣かないためのコード設計
機械学習で泣かないためのコード設計機械学習で泣かないためのコード設計
機械学習で泣かないためのコード設計
 
深層生成モデルと世界モデル(2020/11/20版)
深層生成モデルと世界モデル(2020/11/20版)深層生成モデルと世界モデル(2020/11/20版)
深層生成モデルと世界モデル(2020/11/20版)
 
トピックモデルの評価指標 Perplexity とは何なのか?
トピックモデルの評価指標 Perplexity とは何なのか?トピックモデルの評価指標 Perplexity とは何なのか?
トピックモデルの評価指標 Perplexity とは何なのか?
 
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learningゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
 
深層強化学習と実装例
深層強化学習と実装例深層強化学習と実装例
深層強化学習と実装例
 
畳み込みニューラルネットワークの高精度化と高速化
畳み込みニューラルネットワークの高精度化と高速化畳み込みニューラルネットワークの高精度化と高速化
畳み込みニューラルネットワークの高精度化と高速化
 

Similar to PsychoPyを使った初学者向けの心理実験環境の構築

Similar to PsychoPyを使った初学者向けの心理実験環境の構築 (13)

20170131 python3 6 PEP526
20170131 python3 6 PEP526 20170131 python3 6 PEP526
20170131 python3 6 PEP526
 
MS COCO Dataset Introduction
MS COCO Dataset IntroductionMS COCO Dataset Introduction
MS COCO Dataset Introduction
 
Introduction of Python
Introduction of PythonIntroduction of Python
Introduction of Python
 
Python 機械学習プログラミング データ分析演習編
Python 機械学習プログラミング データ分析演習編Python 機械学習プログラミング データ分析演習編
Python 機械学習プログラミング データ分析演習編
 
Pythonによる機械学習入門 ~Deep Learningに挑戦~
Pythonによる機械学習入門 ~Deep Learningに挑戦~Pythonによる機械学習入門 ~Deep Learningに挑戦~
Pythonによる機械学習入門 ~Deep Learningに挑戦~
 
Pythonによる機械学習入門〜基礎からDeep Learningまで〜
Pythonによる機械学習入門〜基礎からDeep Learningまで〜Pythonによる機械学習入門〜基礎からDeep Learningまで〜
Pythonによる機械学習入門〜基礎からDeep Learningまで〜
 
2013.07.15 はじパタlt scikit-learnで始める機械学習
2013.07.15 はじパタlt scikit-learnで始める機械学習2013.07.15 はじパタlt scikit-learnで始める機械学習
2013.07.15 はじパタlt scikit-learnで始める機械学習
 
はじめての人のためのDeep Learning
はじめての人のためのDeep Learningはじめての人のためのDeep Learning
はじめての人のためのDeep Learning
 
#jjug_ccc #ccc_f1 広告システム刷新の舞台裏 - PHPからJavaに変えてみました
#jjug_ccc #ccc_f1 広告システム刷新の舞台裏 - PHPからJavaに変えてみました#jjug_ccc #ccc_f1 広告システム刷新の舞台裏 - PHPからJavaに変えてみました
#jjug_ccc #ccc_f1 広告システム刷新の舞台裏 - PHPからJavaに変えてみました
 
科学技術計算関連Pythonパッケージの概要
科学技術計算関連Pythonパッケージの概要科学技術計算関連Pythonパッケージの概要
科学技術計算関連Pythonパッケージの概要
 
Spock's world
Spock's worldSpock's world
Spock's world
 
R spec勉強会
R spec勉強会R spec勉強会
R spec勉強会
 
PHP基礎勉強会
PHP基礎勉強会PHP基礎勉強会
PHP基礎勉強会
 

PsychoPyを使った初学者向けの心理実験環境の構築