PsychoPy + Jupyter Notebookで快適な心理学実験・分析環境を構築する

## まえがき

* CoderばっかでBuilderをあまり使わない人向け。
* あるいは、コードで実験組んでみたいけど開発環境揃えるのが面倒な人向け。
* インストール手順はMac準拠ですがWindowsも似たようなもんです。

ライブラリとしてのPsychoPyは非常に完成度が高く、PygletやPygameやKivyより数段使いやすいですが、一方、IDEとしてのPsychoPyは、補完もデバッグも弱くて微妙です。

昔はVimでスクリプトを編集していたのですが、ここ最近PsychoPyはJupyterと非常に相性が良いことに気づきました。

ので、今回はJupyterでPsychoPyが使えるようになるまでを説明します。

...の前に、まずは実際どのくらい便利なのか紹介します。

## ギャラリー

もちろん起動可能。

<img width="1300" alt="20170213_1.png" src="https://qiita-image-store.s3.amazonaws.com/0/174322/7ae3d2af-7f50-f285-0c9e-e0089651c50f.png">

Hello Worldしたい？...なら後から書き加えれば良いじゃない。

<img width="1300" alt="20170213_2.png" src="https://qiita-image-store.s3.amazonaws.com/0/174322/f1015c24-b16f-557b-46bb-3ecf1ab9a70e.png">

おっと白地に黒文字にしたいんだった。win.close()でページを閉じて…あれ、visual.Windowの色設定って何だったっけ。

<img width="1300" alt="20170213_3.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/174322/82d831b0-36e2-96ea-48a6-40c5b0a5ccea.jpeg">

作り直して、再呈示。

<img width="1300" alt="20170213_4.png" src="https://qiita-image-store.s3.amazonaws.com/0/174322/c1e8daf3-574e-89be-cef5-8084c643d6c6.png">

...こんな感じで、対話的に実験を作成することができます。

## 環境作成

### Anacondaのインストール

後々分析することも考えて**[Anaconda](https://www.continuum.io/)**を使いましょう。インストールはこちらから。

* [Anaconda for Windows](https://www.anaconda.com/download/#windows)
* [Anaconda for Mac](https://www.anaconda.com/download/#macos)

2系と3系がありますが、ここでは3系を入れることにします[^1]。理由は以下の通りです。

* 3系を入れても後述する設定で問題なく2系Python環境を使うことができる
* PsychoPy以外で3系に対応していないライブラリはもはやほとんど存在しない
    * そのPsychoPyも[3系に移行しようとしている](https://github.com/psychopy/psychopy/issues/1061)
* 2系のサポートは[2020年に打ち切られる](https://pythonclock.org/)

またAnacondaではなく[Miniconda](https://conda.io/miniconda.html)をインストールするのも良いかと思います。理由は以下の通りです。

* Anacondaは容量を食う (平気で2桁GBとか使う)
* Anacondaの導入は、curlのパスが隠されてしまうなどの地味に辛い副作用を伴う

ただしMinicondaを使う場合、ライブラリ (numpyやpandas等) を自力で入れる必要があることに注意してください。

### Jupyter Notebookの動作確認

Anacondaのインストールが完了したら、まずは、Jupyter Notebookが起動することを確認しましょう。ターミナル (Winの場合はAnaconda Prompt) を開いて以下を実行します。

```bash
jupyter notebook
```

ブラウザが立ち上がり `localhost:8888` が自動で表示されれば成功です。

なお、Jupyter Notebookを使っている間は、ここで開いたターミナルやAnaconda Promptを消さないでください。消すとサーバーが止まってしまいます。逆にもう使わない場合は閉じて構いません。

### PsychoPyのインストール

Anaconda Promptを開き (Windowsユーザーは管理者として実行してください)、以下を実行します。

```bash
pip install psychopy
```

インストールが終わったら、ノートブックから以下を実行してみてください。

```python
from psychopy import visual

win = visual.Window()
```

ウィンドウが起動するはずです。

なお、Windowsの場合は `NotImplementedError` が出る可能性があります。その場合もう一度管理者権限でAnaconda Promptを開き、

```bash
pip install pyglet==1.2
```

を実行してみてください (デフォルトで入るバージョン1.3ではうまくいかないのでバージョンを下げています)。

## 補足

### visual.Windowの挙動

fullscr=Falseで作成したスクリーンをドラッグドロップしようとすると応答なしになる場合があります。特に問題があるわけではなく、刺激もちゃんと呈示されるので、そのまま実験作成を進めて大丈夫です。

### 実行速度計測

%timeや%timeitで。<br>
刺激呈示が遅いな―ってときにどうぞ。<br>
%2コにするとそのブロック全体の実行時間を計測します。

<img width="717" alt="20170213_5.png" src="https://qiita-image-store.s3.amazonaws.com/0/174322/ef7f4b3a-5f17-aa2a-729f-5f452a81a7fa.png">

### Rとの連携

もし、Jupyter NotebookでRを使いたいのであれば、

[https://irkernel.github.io/installation/](https://irkernel.github.io/installation/)

を参考にRを入れましょう。Rを開いて

```R
install.packages(c('repr', 'IRdisplay', 'evaluate', 'crayon', 'pbdZMQ', 'devtools', 'uuid', 'digest'))
devtools::install_github('IRkernel/IRkernel')
IRkernel::installspec()
```

を**以下に注意して実行すれば**、自動的にJupyter Notebookと連携されます。

[注意点 (Win)]

* Rは**管理者権限で**起動すること
* https://cran.ism.ac.jp/ からRtoolsを予めインストールしておくこと<br>
(windowsでは、devtoolsをinstall.packageで入れられないはずなので)

もし`IRKernel::installspec()`でコケる場合、以下の対策が有効かもしれません。

* `IRKernel::installspec()`だけはAnaconda Promptから起動したRで実行する
* Anaconda PromptからRを起動できない場合は、[環境変数「Path」にRへのパスを通す](http://proengineer.internous.co.jp/content/columnfeature/5205)
    * デフォルトだとRへのパスは`C:\Program Files\R\R-X.X.X\bin\R.exe`など

[注意点 (Mac)]

* Rは**ターミナルから**起動すること

[^1]: この記事も2018年1月までは2系3系両対応にしていました。今は2系を入れるメリットがほぼ無いため、3系の導入方法のみ紹介するよう修正しました。