Pythonで心理実験

はじめに

さまざまなOSでフリーで利用できるpythonを使った心理実験プログラム入門?です。 今まで何度かきちんとしたものを作ろうとして挫折しているので、挫折しないように深く考えずテキトーに書き散らかしています。 解説中では一応pythonの文法について簡単な説明がありますが、かなりいい加減な記述もありますので、まっとうなpythonの入門書も参考にしながら読んでください。

注釈

追記 (2019年6月)

「例題1」を書いてから約10年の月日が流れ、Pythonでの心理実験作成を取り巻く状況も大きく変化しました。例題17まではVisionEggを使うことを前提として書いていたのですが、現在のPC環境でVisionEggを使用することが困難になってきたため、それらの記述は今から学ぶ人にとってほとんど役に立たないものとなってしまいました。最近は内容を更新するための時間をほとんど確保できないので削除することも考えましたが、ctypes関連など今でも利用できる情報が残っていますのでひとまず残しておくことにしました。

これから学ぶ人はPsychoPyを利用することをお勧めします。

準備編:PythonとVisionEggのインストール

Windows XP/Vistaを例として、pythonで心理実験プログラムを書くための準備を説明しています。 Unix系OSを使う人はここに書いてあることくらい知っているだろう…という偏見に基づいてUnix系OSの説明はバッサリ省いています。 あ、そういえばMacOSもXからUnix系OSになりましたね。MacOS Xのpythonってどうなんだろう?

例題1:いきなりリーディングスパンテストを作ってみる

無謀にもpythonの基本的な文法の解説すら無いままいきなりリーディングスパンテストのプログラムを作ってみます。 最低限の用語は ごくいい加減に 解説していますが、きちんとしたpythonの教科書や pythonドキュメントの日本語訳 などで確認していただいた方がよいと思います。 いずれはきちんとした説明を…書けたらいいなあ。

例題2:この音とあの音を足すとどんな音?

先にきちんと説明しとくべきことがもっとあるだろ というツッコミもあるかと思いますが、唐突にpythonでwavファイルを作ったり鳴らしたりしてみます。 計画性のかけらもないのがばればれです。

例題3:変数3分間クッキング

ようやくと言うか何と言うか、さすがに文法の話も少しはしておかないと例題を作るのも大変なので、演算子の解説です。 全てのデータ型や演算子を網羅するよりも、 独断と偏見に基づいて 私自身が実験プログラムの作成に使うものを中心に解説しています。

例題4:データを保存してあれこれ

データをテキスト形式で出力、分析する方法について解説する予定です(作成中)。 ファイルをまとめて処理する方法などは心理実験に限らずさまざまな場面で使えると思います。 本当は正規表現なんかも解説したいんですが、果たしていつになることやら。

例題5:徹底的に使いまわす

ここでの目標は関数の作り方とクラスの継承の方法を習得する事です。どちらも初めてプログラムを学ぶ人には少し難しいと思いますが、 ステップアップのためには絶対に身につけなければならない技術です。 すでにpython以外の言語で関数をマスターしている人には大した事のない内容かもしれませんが、pythonの変数スコープや関数引数は独特な面がありますので、さらっと読んでおかれるとつまらない事で躓かずに済むかも知れません。 ちなみに私はC++からpythonに移ってすぐの頃にしっかり躓きました。

例題6:複雑な刺激はテクスチャにお任せ

Motion Induced Blindnessのデモを題材に、画像ファイルの表示とアニメーション速度の調節を解説します。 というと大げさですが、速度の調節なんかは他の言語で実験プログラムを書いたことがある人にとっては目新しいことはなにもないはず。 さらっと済ませる予定。

例題7:VisionEggのサンプルを読む

例題7にもなっていまさらですが、VisionEggはサンプルプログラムも配布されています。 これらのサンプルプログラムで頻繁に利用されているVisionEgg.FlowControl.Presentationについてごく簡単に解説します。

例題8:テクスチャ自由自在

本来なら例題6-2の続きとすべき内容ですが、気まぐれで例題7を入れてしまったので例題8として仕切り直しです。行き当たりばったり感満載です。 まあ図らずも例題7で解説した知識が必要なサンプルプログラムが出てくるので勘弁してください。

例題9: [上級] C言語用ライブラリでもpythonで

C言語用ライブラリをpythonから呼び出すという極悪…じゃない、頼もしいパッケージctypesを使ってみます。 この例題程度の用途ならCで書いた方が早いかもしれませんが、最近は何をするにしてもほとんどpythonとmatlabなので、pythonで書けるというのはやはりありがたい。

例題10: インタラクティブに使う

心理実験に利用できる有名な開発環境のひとつとしてMatlabが挙げられます。 個人的には言語としてのMatlabはあまり好きじゃないんですがその開発環境のインタラクティブ性は非常に魅力的だと思います。 例題10ではpythonをMatlabみたいにインタラクティブに使用することができるipythonとspyderを紹介します。

それにしてもいくら行き当たりばったりとはいえhelp()はもっと早い段階で紹介しとくべきだったな…

例題11: 細かく言いだすと大変な反応時間の測定

予定を変更してずっと先延ばしにしていた反応時間の問題を取り上げます。なんかストレスがたまっていて一気に吐き出すように書いたので全然推敲してません。他の例題は推敲してんのかといわれるとご想像通りしていなかったりするわけですが。 PCでの反応時間測定はおおらかな心でいれば簡単ですが、細かいことを言い出すと本当に厄介です。

例題12:小ネタ一掃作戦

今まで堆積していた小ネタを放出します。 行き当たりばったりで全然「次回予告」通りにできないので、次回予告するのはやめます…。

例題13: [上級] 反応時間再び

例題11の完結編です。手を付け始めるともっと高速、高精度を求めたくなる性分なのですが、本業の研究がおろそかになりっぱなしなのでこのくらいで自重します…

例題14: 実践!データ処理

例題12-5で紹介した実験プログラムを使って取ったデータを処理してみます。適当に済ませるつもりだったんですが、いざ書きだすと「あれも、これも」という感じで盛りだくさんの内容になってしまいました。 Matlabと似て非なる点がたくさん出てくるので、Matlabからの引っ越しを検討されている方には参考になるかもしれません。 なお、この例題ではpylabをimportして作業しているのでnumpyのクラスや関数がpylab.ほげほげ という名前で出てきますのでご注意ください(e.g. numpy.array → pylab.array)。

例題15:続・準備編

WindowsでUSBメモリにPythonをインストールして持ち運べる「Portable Python」でVisionEggを動かそうという話です。大学の授業でPythonを使用する場合にとても便利だと思ったので、急遽例題15として取り上げることにしました。ついで?と言っては何ですがUbuntuにVisionEggをセットアップする例も書いておきます。

例題16:刺激のカタログ

VisionEggに準備されている視覚刺激のうち、まだ解説していないものをとりとめもなく紹介します。

例題17:Webカメラで記録をとろう

唐突ですがWebカメラをPythonから利用します。ディスプレイのリフレッシュレートの約数のfpsで安定して撮れるモデルであれば刺激と映像の同期を(おおざっぱですが)取れるのでそこそこ便利なのではないでしょうか。

例題18:ついPsychoPyに手を出してしまったりなんかして

満を持して(?)PsychoPyの登場です。VisionEggと同じように心理学実験の作成、実施をサポートするpythonパッケージですが、VisionEggとはかなり考え方が異なります。

例題19:PsychoPyで遊ぶ

別にPsychoPyに乗り換えたわけでもなんでもないんですが、もうすこしPsychoPyを扱います。

例題20:チュートリアルワークショップ@JPA77ご報告

例題20は記念ということで何を取り上げようかなあと思っていたのですが、去る2013年9月19日に行った日本心理学会第77回大会チュートリアルワークショップ「心理学研究のための Python 活用法」のご報告をさせていただくことにしました。今後ともよろしくお願い申し上げます。

例題21:つながる、つながる

チュートリアルワークショップでも質問があった外部機器との接続を取り上げます。

例題22:Pythonでのデータ解析をもっと便利に

えーと、没原稿の供養です。エサを与えないでください、じゃなくて尋ねないでください。

例題23:チュートリアルワークショップ@JPA78ご報告

2014年9月11日に行った日本心理学会第78回大会チュートリアルワークショップ「PsychoPy Builderにおける 実験の動的な制御の方法」のご報告です。それにしてもこの1年で例題21、22しか書いていないのかと思うとがっくり。

例題24:「PsychoPy Builderで作る心理学実験」イントロダクション

この「Pythonで心理実験」にはPsychoPyをこれから始めようという人向けのコンテンツがない!ということで作成したPDF文書「PsychoPy Builderで作る心理学実験」のイントロダクションです。 どんなことが書いてあるのか気になるけどページ数が多くて目を通すのが大変、という方はまずはご覧ください。

例題25:パッケージの管理

PsychoPy 1.82.02のリリースに向けて急を要すると思って書いたのですが…。結果的に急ぐ必要がなくなってしまいました。うぅ。

例題26:やれやれ、また反応時間だよ

ものすごく久しぶりの更新です。PsychoPy 3.1で導入されたPsychToolbox由来のキーボードモジュールを試します。

例題27:JavaScriptで心理実験?

PsychoPy Builderのオンライン実験作成機能で出力されたJavaScriptのコードを読みます。これって「Pythonで心理実験」に含めちゃっていいのかな…