心理学の実験では、ある画像を呈示してそれに対してキーボードやマウスで実験参加者に反応をさせるということをよくやります。このとき、呈示した画像は特定のカテゴリー(例えば、快・不快や、高魅力・低魅力など)に分けられることが多く、その情報をプログラム内で利用したいということがあります。そのため、ファイル名に画像のカテゴリー(実験条件)の情報を加えておくと便利です。
この例では、人物の画像を刺激として用いて、高魅力・中魅力・低魅力の3つに分けられるとします。さらに、メガネをかけている人物とかけていない人物がいて、メガネをかけている人物が呈示されたら左矢印キーを、メガネをかけていなかったら右矢印キーを押すという課題をすることにしましょう。
このとき、刺激で用いる人物の画像のファイル名を次の命名規則でつけておくと便利です。
魅力度-カテゴリー内の通し番号-メガネの有無
図で説明すると次のようになります。
数字の割り当ては次のようにしています。
実験条件 | 数字 |
---|---|
高魅力 | 1 |
中魅力 | 2 |
低魅力 | 3 |
メガネあり | 1 |
メガネなし | 0 |
実験条件の取得
では、実際にファイル名から実験条件を取得してみましょう。
Codeコンポーネントを配置して、Begin Experimentに以下のコードを書いてください。
import re
import os
full_fileName = '/Users/xxx/Documents/PsychoPy3/practice/images/3-2-0.jpg'
fileName = os.path.basename(full_fileName)
print(fileName)
conditions = re.findall(r'\d+', fileName)
print(conditions)
print(conditions[0]) # 魅力度
print(conditions[1]) # 通し番号
print(conditions[2]) # メガネの有無
full_fileName
にはパスの情報(パソコン内でファイルがどこに存在するかを示す情報)が含まれているので、fileName = os.path.basename(full_fileName)
としてファイル名のみを取得しています。
そして、ファイル名から数字だけを取得しているのが、conditions = re.findall(r'\d+', fileName)
です。findallについて、正確に理解しようとすると正規表現の知識が必要になります。興味のある人は、【Python入門】正規表現の使い方を初心者向けに解説をご覧ください。とりあえずここでは、上のようにすれば、ハイフンで区切られた数字(実験条件)の情報を取得できるのだという理解でも十分だと思います。
上のコードでは、呈示している画像は、3-2-0.jpgで、それは低魅力のメガネなしの画像ということになります。
メガネをかけている人物が呈示されたら左矢印キーを、メガネをかけていなかったら右矢印キーを押すという課題であれば、次のようにコードを書くことができます。
if pressedKey == 'left':
if conditions[2] == 0: # メガネなし
correct = 0 # 不正解
else: # メガネあり
correct = 1 # 正解
else: # The right key was pressed
if conditions[2] == 0: # メガネなし
correct = 1 # 正解
else: # メガネあり
correct = 0 # 不正解