0

私はpythonで書かれたpsychopyと呼ばれるプログラムを使用しています。ほとんどの場合、十分なGUIを備えていますが、独自のコードセクションを入力できます。基本的に私が抱えている問題は、Pythonにインポートするcsvファイルがあることです。csvファイルには6つの列があり、少しのコードでpythonを取得して各列の順序をランダム化できます。

import random 
import csv 

stimulilist=list(csv.reader(open('original_file.csv',"rU")))

stimuliones=[]
locationones=[]
locationtwos=[]
stimulitwos=[]
locationthrees[]
locationfours[]

for i in range(len(stimulilist)):
    stimuliones.append(stimulilist[i][0])
    locationones.append(stimulilist[i][1])
    locationtwos.append(stimulilist[i][2])
    stimulitwos.append(stimulilist[i][3])
    locationthrees.append(stimulilist[i][4])
    locationfours.append(stimulilist[i][5])

Stim1=stimuliones[1:]
location1=locationones[1:]
location2=locationtwos[1:]
Stim2=stimuliones[1:]
location3=locationthrees[1:]
location4=positionfours[1:]

次に、それらをランダム化します。これにより、試行の最初のブロック用に 2 つのランダム化された単語リストが作成されます。

Stimuli1Random=random.sample(Stim1,len(Stim1)) 
Location1Random=random.sample(location1,len(location1))
Location2Random=random.sample(location2,len(location2))
Stimuli2Random=random.sample(Stim2,len(Stim2))
Location3random=random.sample(location3,len(location3))
Location4random=random.sample(location4,len(location4))

ただし、刺激 1、場所 1、および場所 2 を一緒にランダム化し、刺激 2、場所 3、および場所 4 を一緒にランダム化する必要があります。たとえば、次のようになります。

CSV ファイルでの表示方法:

(row)    Stim1 Location1 Location2         (row)     Stim2 Location3 Location4
1        P1    Left      Left               1        c1    Left      Left
2        p2    Middle    Middle             2        c2    Middle    Middle
3        p3    Right     Right              3        c3    Right     Right
4        p4    Left      Left               4        c4    Left      Left
5        p5    Middle    Middle             5        c5    Middle    Middle
6        p6    Right     Right              6        c6    Right     Right

上記のコードでは、各列が個別にランダム化されます。例:

(row)    Stim1 Location1 Location2         (row)   Stim2  Location3 Location4
1        P6    Left      Middle             1      c5     Right     Left
2        p1    Right     Middle             2      c3     Middle    Middle
3        p5    Middle    Right              3      c1     Left      Middle
4        p4    Left      Left               4      c2     Right     Left
5        p3    Middle    Left               5      c4     Middle    Right
6        p2    Right     Right              6      c6     Left      Right

しかし、次のように行をランダム化する必要があります。

(row)    Stim1 Location1 Location2       (row)  Stim2  Location3 Location4
1        p2    Middle    Middle           1     c3      Right   Right
2        p6    Right     Right            2     c5      Middle  Middle
3        p3    Right     Right            3     c4      Left    Left
4        p4    Left      Left             4     c1      Left    Left
5        p5    Middle    Middle           5     c2      Middle  Middle
6        P1    Left      Left             6     c6      Right   Right

したがって、基本的に、Stim1、Location 1、および Location 2 の行は同じままで、同じ列であるかのようにランダム化されますが、それらを 1 つの列にマージしたくありません。個々の列のままであることが重要です。stim2 の場所 3 と場所 4 にもこれが必要です。

さらに、csv ファイルから別の列をインポートしたいが、それをランダム化したくない場合、どのようにコードに入れますか?

4

1 に答える 1

0

これらのデータ部分を一緒にランダム化したい場合は、それらを一緒に保存するのが最も簡単です。このために csv ファイルの構造を変更する必要さえありません。単一のパーツをリストにまとめて保存する場合 (すべての列を個別に保存するのではなく)、このリストをランダム化すると、関連するパーツがまとめられます。

stimulilist=list(csv.reader(open('original_file.csv',"rU")))

stim_1_data = []
stim_2_data = []

for i in range(len(stimulilist)):
    stim_1_data.append(stimulilist[i][0:3])
    stim_2_data.append(stimulilist[i][3:6])

random.shuffle(stim_1_data)
random.shuffle(stim_2_data)

stim1 と stim2 のデータを取得したい場合は、各リストから 1 つの要素を取得し、必要に応じてパーツを分離できます。

stim1, locaion1, location2 = stim_1_data.pop()
stim2, locaion3, location4 = stim_1_data.pop()

csv ファイルから別の列が必要な場合は、ランダム化しない別のリストを追加するだけです。

stimulilist=list(csv.reader(open('original_file.csv',"rU")))

stim_1_data = []
stim_2_data = []
non_random_data = []

for i in range(len(stimulilist)):
    stim_1_data.append(stimulilist[i][0:3])
    stim_2_data.append(stimulilist[i][3:6])
    non_random_data.append(stimulilist[i][6])

random.shuffle(stim_1_data)
random.shuffle(stim_2_data)

その後、元の方法で各値を個別にリストが必要な場合は、それらを再度抽出することができます。

Stim1, location1,location2 = zip(*stim_1_data)
Stim2, location3,location4 = zip(*stim_2_data)
于 2012-08-09T13:30:53.700 に答える