PsychoPy Coderによる心理学実験作成チュートリアルまとめ

# はじめに

本シリーズは，サイモン課題の作成を通して，PsychoPy Coderで心理学実験を行うために最低限必要なスキルを身につけることを目標としています。

具体的には，以下の5つです。

1. 参加者情報の入力（[第6回](https://qiita.com/snishym/items/5e01641150581c632bea)）
2. 課題の教示（[第7回](https://qiita.com/snishym/items/3c4b801c25bb98dd0d4e)）
3. 刺激のランダム提示（[第1回](https://qiita.com/snishym/items/5c33710aca0fea3d41ec)，[第2回](https://qiita.com/snishym/items/31c980f08e62190469f9)，[第3回](https://qiita.com/snishym/items/1bdf90cf51ba28cc4ef3)，[第4回](https://qiita.com/snishym/items/0b10e714363656094181)）
4. キー反応の取得（[第4回](https://qiita.com/snishym/items/0b10e714363656094181)，[第4回補足](https://qiita.com/snishym/items/f343f24ca8c77ba1fb4a)）
5. データの保存（[第5回](https://qiita.com/snishym/items/f80607cbe462f8a4e1d4)）

番外編として，[【第8回】実験データの集約](https://qiita.com/snishym/items/b4cf8b8a4ac2b8b69bc5)があります。

想定しているターゲットは，どの言語のプログラミング経験もない人です。Pythonの基本を知っている必要はありません。シリーズでは，PsychoPyで心理学実験を作成するのに必要なテクニックをPythonの構文も織り交ぜながら順番に説明していきます。もちろん，Pythonの基本は押さえたがPsychoPyはこれからという人にも有用な資料になっているはずです。

### 確認済み動作環境

- Windows 10 Pro 64bit
- PsychoPy 3.1.5 (Python 3.6.6)

バージョンが多少違っても動作すると思います。また，Macでも同じように動作するはずですが，日本語テキストの提示に関しては注意が必要です（[第1回](https://qiita.com/snishym/items/5c33710aca0fea3d41ec)中段付近）。

**(2019/09/04追記)**
PsychoPy3.1.3 + windows10 + デュアルディスプレイだとうまく動かない事があるようです。https://discourse.psychopy.org/t/psychopy-cant-work-in-windows10-version1903/8336

# PsychoPyとは

PsychoPyはPythonというプログラミング言語で利用できる心理学実験用パッケージおよびそれらを基本に作成されたアプリケーションです。PsychoPyは，流行りのPythonを使って**無料で**実験を実施できるということで，かなり広く使われているのではないのかと思います[^1]。最近ではウェブ実験にも対応しました。Builderというモードが非常に強力で，プログラミング未経験でもぽちぽち実験を作成できます。広く普及した一番の理由かもしれません。

[^1]: [PsychoPyを使ったら必ず論文では引用しましょう](https://www.psychopy.org/about/index.html#citingpsychopy)。

それでも，このチュートリアルではBuilder機能を使わず，自分でコードを書いて実験を作成する方法を紹介します。

# 本シリーズ作成の理由

### PsychoPy Coderの日本語解説資料は少ない

PsychoPy Builderに関する資料は充実しています。例えば，[愛媛大学の十河先生による解説](http://www.s12600.net/psy/python/ppb/)や[関西学院大学の小川先生による解説](http://ogwlab.org/?page_id=460)，[大正大学の井関先生による解説](http://riseki.php.xdomain.jp/index.php?PsychoPyの実験プログラムのサンプル)があります。

一方で，Coderの解説はそれほど多くないです。[同じく十河先生が執筆された書籍](http://www.asakura.co.jp/books/isbn/978-4-254-12891-8/)や[専修大学の国里先生による課題集](https://kunisatolab.github.io/main/how-to-psychopy.html)があります。しかし，大きな問題点として，情報が2019年のPsychoPyのメジャーアップデート以前のままです[^2]。 また，どちらの資料もプログラミング初心者向きではないと個人的には感じています。十河先生の書籍は非常に充実しているのですが，それゆえ初心者には難易度が高いです（このことは「はじめに」で言及なさっています）。国里先生のページは課題集のため，解説が不足している感があります。

[^2]: このメジャーアップデートによって，ベースのPythonのバージョンがPython3になりました（以前はPython2）。Python2と3では基本の関数の使い方が異なるため，解説のコードをそのまま書くとエラーになります。

### なぜCoderか

そもそもBuilderの圧倒的資料数を鑑みると，Coderの需要はあまりないのかもしれません。私も初めはBuilderで実験をしていました。しかし，以下の理由で，私はBuilderではなくCoderを使用してPsychoPyベースの心理実験を作成するようになりました[^3]。

[^3]: 実際のところ，私は本記事で紹介しているPsychoPy StandaloneのCoderは使用していません。実験のスクリプトをVisual Studio Code上で作成し，コンソール上からそのプログラムを実行しています。このシリーズでは実験作成環境の導入・実行の簡便さからPsychoPy Standalone Coderを使った方法を紹介しています。

- ルーティンが多かったのでポチポチ作成するのがかなり面倒だった
    - 私の実験では複数の課題を行わせるため，教示も含めてルーティン・コンポーネントがかなり多くなり，作成・管理が大変でした。提示時間の変更とかしたあとはどこかでし忘れがないかかなり不安でした。
- 吐き出されるデータが汚い（ルーティンの多さもその一因）
- 刺激の提示順序について，条件付きのランダマイズをしたかった
    - Builderで標準装備されているランダマイズでは不十分だっため，当初は，わざわざエクセルかんすうを駆使して条件付きのランダマイズされた刺激ファイルを作成し，Builderに読み込ませていました。
- 結局，Builderのコードコンポーネントを使った微調整のためにPythonの基本を押さえる必要があった
    - んですが，押さえたところで初心者向けの本の内容とBuilderで求められていることに断絶があるように感じました。もちろん一般的な初心者本にBuilderの解説が載ってるわけがないですから[^4]。

[^4]: この辺は[十河先生の解説](http://www.s12600.net/psy/python/ppb/)で解決されているのかもしれません。

これらは私が数年前にBuilderを使ったときの感想ですので，それから随分経ってPsychoPy3になった今では変わっているのかもしれません。しかし，これを読んでくださっている方で，もしBuilderを扱っているときに同様のことを感じたことがあるのなら，それはCoderに移行する十分な動機だと私は思います。

Builderで感じる不便さを解消できることに加えて，かなり自由に実験を作成できるようになります。条件付きランダマイズはもちろんですし，ディスプレイ上で質問紙尺度を質問紙っぽく表示したり[^5]，同時に行った2つの計算結果をキー回答させたりできます。このあたりの内容は本シリーズの焦点から逸れるため紹介しませんが，気が向いたら個別の記事にして紹介します。

[^5]: PsychoPy 3.1.0から対応したみたいです。ぱっと見た限りまだリファレンスは整備されていないので，使い勝手はわかりません。

### Coding経験は心理実験以外に活きる

Pythonは汎用なプログラミング言語です。心理実験のデータ処理・統計解析にも利用できます。Builderを利用するためだけにとどめておくにはもったいないです。もちろん，このシリーズはPsychoPyによる心理実験作成を中心とした解説ですが，このシリーズをきっかけにコードを書くことに慣れれば，他の用途でもPythonを使おうと思ったときの垣根を低くしてくれるはずです。

# おわりに

本記事は，本シリーズのまとめページとして概要を説明しました。正直に言うと，[Builderを使えば非常に簡単にサイモン課題を作成することができます](http://www.s12600.net/psy/python/ppb/html/chapter03.html)。「なぜCoderか」の内容を裏返せば，Builderでの実験作成が十分可能かつ容易なのであれば，無理にCoderで実験を作成する必要はないということです。

それでも，本シリーズが，なにかのきっかけにCoderで書きたい・書かないといけないという方のお役に立てれば大変幸いです。

本シリーズの資料は，ここ2年，所属の学部・研究科の後輩を対象に，PsychoPy Coderについて解説した際に使用した記事をもとにして作成しました。当時は皆さんありがとうございました。