流れ
1. PsychoPyの基礎
- Psychopyの概要と特徴の理解
- 3インターフェースの理解
- PsychoPy Builderの画面構成
2. 基本的な実験作成(Digit Span Test フィードバックなし)
- 実験概要の理解
- 具体的な実装手順
- データの収集と分析
3. 発展的な改修(Digit Span Test フィードバックあり)
- カスタムコンポーネント「Code」を使用したプログラミング
4. 実験導入のTips
- 導入方法
- (オンライン上での実施方法)
1. PsychoPyの基礎
PsychoPyの概要
Psychopyは心理学実験作成のためのPythonベースのオープンソースソフトウェア(無料)です。視覚刺激や聴覚刺激を提示し、被験者の反応を記録することができます。
主な特徴
- GUI(グラフィカルユーザーインターフェース)により直感的に実験を作成することが可能
- Pythonコードによる柔軟な実験プログラミング
Builderとコードを組み合わせることも、コードだけで作成することも可能
- 視覚・聴覚の刺激提示と反応記録が可能
- 公式のWebサービス(Pavlovia)によるオンライン実験への対応
Pavloviaサービスは有料だが、他のサービスを組み合わせることで無料でも対応可能(後述)
インターフェースの概要
PsychoPyには主に3つのインターフェースがあります。
Builder
グラフィカルに操作して実験を作成するためのインターフェースです。プログラミングの知識がなくても実験を作成できます。

Coder
Pythonコードを直接記述して実験をプログラミングするためのインターフェースです。より柔軟で複雑な実験設計が可能です。

Runner
作成した実験を実行するためのインターフェースです。実験中のログやエラーメッセージを確認することができます。

Builderの画面構成
Routines
実験内のイベント(刺激の提示、反応の収集など)を時系列で設定する場所です。

Flow
実験全体の流れを設定する画面です。Routinesの順序や、LoopによってRoutinesの繰り返しなどを設定できる場所です。

Components
Routines内で登録するさまざまな視覚・聴覚要素(テキスト、画像、音、キー入力など)を設定する場所です。

主なコンポーネントは以下の通りです:
- Stimli(刺激のコンポーネント)
- Polygon: 基本的な図形を表示できます。
- Movie: 動画ファイル(.mp4など)を再生できます。
- Image: 画像ファイル(.png, .jpg など)を表示できます。
- Text: 文字列を表示します。
- Sound: 音声ファイル(.wav, .mp3など)を再生できます。
- Responses(反応のコンポーネント)
- Joy Buttons: ゲームパッドのボタン反応を記録できます。
- Microphon: 被験者の音声入力を録音し、音声反応を収集できます。
- Slider: スライド可能なバーを使って、数値や評価を選択させることができます。
- Mouse: マウスのクリック反応を記録できます。
- Keyboard: キーボードの入力キーを記録できます。
- Textbox: 被験者がテキストを入力することで、自由回答を記録できます。
- Custom(カスタムコンポーネント)
- Code: カスタムPythonコードの実行
2. 基本的な実験作成(Digit Span Test フィードバックなし)
実験の概要
Digit Span Test(数字順番テスト)は、記憶力や注意力を測定するために広く使われる心理学的なテストです。このテストでは、被験者に複数の数字を提示し、その数字を順番通りに答えることを求めます。
実験作成イメージ
実装手順
- プロジェクトの保存
最初にプロジェクトを保存しておきます。
Builderの画面から「File」→「Save as」を選択します。

- 実験説明テキストの表示
Builderの画面に戻ります。
現在、Routineエリアには、FlowにおけるRoutine「trial」が表示されている状態です。
基本的にはFlowエリアにRoutineという実験イベントを追加し、Routineを繰り返したい場合にLoopを追加して実験を構成していきます。

- 実験の実行確認
作成した実験の実行確認を行います。
Builderまたはほかの画面で三角の実行ボタンをクリックしてください。

※Tips
実行前にPilotとRunを選択できるトグルボタンがあります。
Pilotモードではテスト実行を目的としており、全画面表示にはなりません。
Runオードでは本番実行を目的としており、全画面表示になります。
なおデータ記録はどちらでも行われます。


- データの確認
実験データは、実験プロジェクトファイルと同じ階層に自動作成される「data」フォルダに格納されています。
更新日時で降順にソートし、一番最新のExcelファイルを開きます。

各データ項目の説明は以下の通りです。
見出し項目 説明 sequence_1, sequence_2, sequence_3 実験用のExcelファイルに登録した「sequence_X」の番号 correct_answer 実験用のExcelファイルに登録した「correct_answer」の内容 thisN 実験の中での現在の試行番号 thisTrialN 試行のカウント番号 thisRepN 試行の繰り返し回数 textbox.text テキストボックスにユーザーが入力したテキスト button.numClicks ボタンがクリックされた回数 button.timesOn ボタンが押された時間 button.timesOff ボタンが離された時間 trials.thisRepN ループの中での現在の繰り返し回数 trials.thisTrialN ループ内での試行番号 trials.thisN 実験全体での現在の試行番号 trials.thisIndex 試行のインデックス番号 thisRow.t 該当行のデータが出力された瞬間の時間 notes 実験に関連するメモ welcome.started welcome画面が開始された時間 welcome_text.started welcome_textコンポーネントが開始された時間 welcome_key.started welcome_keyコンポーネントが開始された時間 welcome.stopped welcome画面が終了した時間 welcome_key.keys welcome画面で押されたキーの情報 welcome_key.rt welcome_keyコンポーネントの開始から、キー入力がされるまでの経過時間 welcome_key.duration welcome_keyのキー入力が押されていた時間 trial.started 試行が開始された時間 sequence_1_text.started シーケンス1のテキストが開始された時間 sequence_2_text.started シーケンス2のテキストが開始された時間 sequence_1_text.stopped シーケンス1のテキストが終了した時間 sequence_2_text.stopped シーケンス2のテキストが終了した時間 sequence_3_text.started シーケンス3のテキストが開始された時間 sequence_3_text.stopped シーケンス3のテキストが終了した時間 textbox.started テキストボックスコンポーネントが開始された時間 button.started ボタンコンポーネントが開始された時間 trial.stopped 試行が終了した時間 trials.textbox.text 各試行でのテキストボックスに表示された内容 trials.button.numClicks 各試行でのボタンのクリック回数 trials.button.timesOn ボタンが押された時間(反応時間) trials.button.timesOff ボタンが離された時間 participant 実験に参加した参加者の識別番号 session 実験セッションの識別番号 date 実験が実行された日時 expName 実験の名称 psychopyVersion 使用されたPsychoPyのバージョン frameRate 実験中の画面のフレームレート expStart 実験が開始された時刻
3. 発展的な改修(Digit Span Test フィードバックあり)
ここまでの実験内容では、入力内容の正解/不正解のフィードバックおよびデータ出力がありませんでした。
フィードバックとデータ出力を実装するためには、カスタムコンポーネントの「Code」を使用して、少しだけPythonコードを書くことで可能です。
改修後の実験イメージ
新規Routine「feedback」を作成し、「tiral」の後ろに挿入します。



Routineエリアでfeedbackが選択されていることを確認後、Componentエリアの「Custom」>「Code」を選択します。
Nameを「feedback_code」に変更し、「Begin Routine」タブを選択します。

左側のエリアに、以下のコードをコピー&ペーストします。
# 正解/不正解を示す文字列の変数
# "correct":正解
# "incorrect":不正解
answer_result = ""
# ユーザが入力したtextboxのtextから改行・TAB・スペースを削除した値と、
# 実験設定用Excel項目のcorrect_answerを文字列に変換した値を比較
# 値が一致する場合
if textbox.text.strip() == str(correct_answer):
# 正解/不正解を示す文字列に"correct"を代入
answer_result = "correct"
# 値が一致しない場合
else:
# 正解/不正解を示す文字列に"incorrect"を代入
answer_result = "incorrect"
# 正解/不正解を示す文字列の値を実験データ(CSV)に
# 'answer_result'項目として出力
trials.addData('answer_result', answer_result)
# answer_result の内容をログに出力
# コンソールに出力
print(f"Answer Result: {answer_result}")

次に、回答結果を画面上にテキストとして表示するため、Componentエリアから「Stimli」→「Text」をクリックします。
Basicプロパティの値を以下の通り設定しておきます。
| プロパティ | 値 |
| Name | feedback_text |
| Start | time 0.0 |
| Stop | duration 1.0 ※1秒間表示 |
| Text | $answer_result ※constant→set every repeatへの変更もお願いします。 |

データを確認し、answer_result項目が追加されていればOKです。

4. 実験導入のTips
被験者を募集して実際に実験を行う場合、主に2種類の方法があります。
- ローカル実行:PsychoPyを被験者の使用するPCにインストールして、配布した実験プロジェクトを実行してもらう
- Web実行:実験プロジェクトをWeb上に公開し、被験者にWeb上で実行してもらう
| 方法 | メリット | デメリット |
| 1. ローカル実行 | – ネット接続が不要で、実験の安定性が高い – Webサービスへの実験ファイルのアップロード作業が不要 | – 被験者にPsychoPyを実行してもらう必要があり、手間がかかる – インストール環境やOSに依存する可能性がある |
| 2. Web実行 | – psychopyのインストールが不要で、Webブラウザがあればどこからでも実施可能 – デバイス(Mac・Windows)ごとに実験手順を作らなくてよい | – ネットワークの遅延やブラウザの互換性問題が影響する可能性がある – 公式のWebサービスは有料である |
実験開催者がPC端末を用意できない場合は、Web実行を推奨します。
無料で実行できる方法は下記URL参照。
有料で実行する方法は下記URL参照。
