2016-10-31 17 views
-2

データの説明: MyデータファイルExpData.txt、included hereには、複数のサブジェクトを含む実験結果が含まれています。Pythonを使用してデータを1行に整理するにはどうすればよいですか?

1)番目の列は、2列の応答時間に相当

2)4桁の被験者IDに対応しています。

0001 81 
    0001 112 
    0001 125 
    0001 99 
    0001 120 

目的:私は、このデータファイルを読み取り、データをフォーマットし直すことができるようにする必要 は、このようになります(各被験者のための試行の数は15から25の範囲です) 1行に1つの件名(統計的に分析しやすくするため)。つまり、各行はサブジェクトIDで始まり、そのサブジェクトの応答時間が続き、昇順にソートされ、スペースで区切られます。私はExpDataReformat.txtと呼ばれる別のデータファイルとして再フォーマットされたデータを保存する必要が

0001 80 81 . . . 120 125 
0003 77 78 . . . 109 110 112 117 120 123 
0005 78 78 . . . 120 120 
-. . . 

は次のようになります。

これを行う方法に関するアイデアはありますか?どこで始めるのか?

私はこのコードを編集しようとしましたが、他の人が州と首都を追加して並べ替えるポストで共有しました。言うまでもなく、私は構文エラーを受けていました。

infile = open('TestData/StateCapitalList.txt','r') 
stateData = infile.read() 
infile.close() 

dataLines = stateData.split('\n') 

state = [] 
capital = [] 

for line in dataLines: 

    if line: 
     iState, iCapital = line.split(',') 
     state.append(iState)  
     capital.append(iCapital) 

outfile = open('TestData/sCapitalList.txt','w') 

capital.sort() 

for iCap in capital: 

    outfile.write(iCap + '\n') 

outfile.close() 
+0

すでに何のコードを持っていますか? – blacksite

+0

データの開始点を確認するためにファイルをダウンロードする必要はありません。 –

+0

の行のどれも '-'で始まらない... –

答えて

0
from collections import defaultdict 

result = defaultdict(list) 

with open('ExpData.txt') as infile: 
    for line in infile: 
     key, value = line.split() 
     result[key].append(int(value)) 

with open('out.txt', 'w') as outfile: 
    for key, value_list in sorted(result.items()): 
     outfile.write(' '.join([key] + map(str, sorted(value_list))) 
         + '\n') 
+0

構文エラーが発生しました... 3.5.2を使用している可能性がありますか? – Belinda

+0

エラーは何を言いましたか?最後に): ファイル "C:\ Users \ jisse \ Desktop \ 5.2c.py"、12行目、 outfile.write( '' .join([key] + map(str、sorted(value_list))) + '\ n') TypeError:リストに連結できるのはリスト(マップではない)だけです –

+0

私は編集しようとしていたコードを追加しました – Belinda

1

質問にはコードは含まれていないため、この回答には何も含まれていません。

ファイルを開いて空の辞書を作成する必要があります。

ファイル内の各行について、subjectdataに分割します。サブジェクトが辞書にキーとして存在するかどうかをテストします。一致しない場合は、値が単一の要素dataを含むリストであるそのキーの辞書エントリを作成します。サブジェクトがすでに辞書に存在する場合は、dataを値に追加します。

ファイルが使い尽くされると、辞書内の各キー(ソートされた順)にキー値が出力され、すべてのデータ項目をそれらの間のスペースで結合した文字列が続きます。

0

あなたはgroupbyを使用することができます。

from itertools import groupby 

with open(path) as f: 
    it=(line.split() for line in f) 
    for k, g in groupby(it, key=lambda e: e[0]): 
     print(k, sorted(map(int, (t[1] for t in g)))) 

プリント:

0001 [80, 81, 81, 82, 89, 90, 97, 99, 101, 108, 112, 114, 118, 120, 120, 125] 
0003 [77, 78, 84, 86, 89, 92, 99, 101, 101, 101, 103, 106, 106, 108, 109, 110, 112, 117, 120, 123] 
0005 [78, 78, 83, 86, 87, 89, 95, 104, 109, 110, 113, 114, 115, 119, 120, 120] 
0012 [80, 83, 86, 87, 89, 91, 92, 99, 100, 101, 101, 101, 104, 108, 110, 113, 113, 113, 120, 122, 124] 
0015 [78, 78, 80, 80, 81, 81, 85, 86, 89, 91, 94, 100, 100, 102, 107, 109, 115, 116, 116, 121, 122, 123, 125, 125] 
0021 [78, 79, 80, 83, 87, 88, 90, 91, 91, 96, 96, 96, 100, 102, 108, 109, 118, 125] 
0024 [76, 78, 78, 83, 87, 88, 88, 89, 92, 96, 96, 103, 107, 108, 108, 108, 111, 112, 113, 119, 119, 120, 122, 123, 125] 
0027 [78, 81, 84, 85, 90, 92, 95, 95, 96, 98, 99, 105, 105, 106, 108, 111, 113, 115, 118, 118, 120, 121, 123, 124] 
0040 [76, 78, 79, 80, 81, 82, 82, 84, 90, 93, 93, 94, 99, 103, 104, 107, 107, 109, 114, 117, 120, 125] 
0041 [75, 80, 85, 86, 87, 89, 90, 94, 94, 98, 103, 105, 106, 116, 122] 
0043 [76, 83, 84, 85, 86, 86, 91, 94, 102, 105, 107, 108, 119, 123, 123, 124, 125] 
0044 [81, 81, 83, 85, 85, 86, 86, 92, 95, 98, 98, 98, 99, 101, 102, 103, 106, 112, 115, 117, 118, 122] 
0047 [84, 86, 90, 90, 92, 94, 94, 97, 98, 100, 101, 102, 105, 109, 111, 113, 115, 116, 118, 119, 120, 121] 
0052 [75, 84, 97, 101, 103, 104, 106, 106, 110, 111, 118, 122, 123, 123, 124] 
0054 [76, 78, 79, 80, 83, 85, 95, 101, 101, 104, 105, 107, 111, 113, 115, 117, 120, 120] 
0057 [75, 75, 75, 76, 79, 80, 82, 82, 83, 84, 86, 90, 93, 94, 95, 95, 96, 99, 100, 102, 102, 112, 116, 119, 120, 124] 
0072 [77, 78, 78, 79, 83, 88, 92, 97, 100, 101, 105, 106, 115, 115, 117] 
0077 [78, 85, 86, 88, 88, 90, 98, 98, 102, 104, 105, 106, 112, 116, 121, 124] 
0080 [76, 82, 84, 85, 90, 94, 100, 101, 107, 107, 109, 110, 112, 115, 115, 118, 118, 121, 122, 125] 
0082 [75, 77, 80, 81, 81, 82, 83, 86, 89, 90, 96, 98, 103, 106, 108, 109, 111, 112, 112, 112, 113, 115, 117, 118, 120, 124] 
+0

groupbyが物事だったのを知りませんでした!groupbyはpython 3.5.2ですか?昇順でソートするにはどうすればよいですか? – Belinda

+0

更新を参照してください。 ... – dawg

+0

返信ありがとうございます!私のファイルパスでコードをコピー/ペーストしましたが、 "SyntaxError :(ユニコードエラー)" unicodeescapeのコーデックで、2-3位のバイトをデコードできません:切り詰められた\ UXXXXXXXXエスケープ " – Belinda

関連する問題