我尝试使用Python来帮助我整理数据。具体来说,我试图找出如何调整开始时间,并使用Python分离正确和错误的响应。
例如,我对每个主题的实验结果都存储在一个文本文件(sub001.txt)中。here is one subject file。
第1列对应于开始时间(以秒为单位)
第二列对应于响应时间(in
MS)。
第3列对应于响应是否
正确(0:不正确,1:正确)。
我正在尝试编写一个程序来读取此文件,然后执行以下操作:
a。从所有起效时间减去10秒 b。分隔与正确和错误响应相关联的文件,以便我可以单独运行这些文件的统计信息。
所以我将为一个主题提供2个文件(sub001_correct.txt和sub001_incorrect.txt)。每个文件应包含两列。第一列应包含更正的起始值 时间(来自上面)。第二列应包含 响应时间。
我试着查看其他问题和答案但是没有多少运气。
答案 0 :(得分:1)
Jissel,
我更喜欢使用名为pandas
的库来执行此类操作。这是一个可以用你想做的事情的脚本。
import pandas as pd
import os
def parse_file(filepath):
org_df = pd.read_csv(filepath, delim_whitespace=True, names=['startTime', 'responseTime', 'correct'])
org_df['startTime'] = org_df['startTime'].subtract(10)
groups = org_df.group_by('correct')
for g in groups:
id = g[0]
df = g[1]
if id == 0:
type = 'incorrect'
else:
type = 'correct'
df[['startTime', 'responseTime']].to_csv(
os.path.splitext(filepath)[0] + '_' + type + os.path.splitext(filepath)[1], index=False)
if __name__ == '__main__':
parse_file('F:/sub001.txt')
分为三部分:
读入文件:
org_df = pd.read_csv(filepath, delim_whitespace=True, names=['startTime', 'responseTime', 'correct'])
我们告诉pandas文件的位置,我们要根据空格分隔列,并且我们要将列命名为startTime, responseTime
和correct
将整数减去startTime
列:
'org_df ['startTime'] = org_df ['startTime']。add(subtract)'
我们告诉大熊猫我们希望我们的新startTime
列等于旧列减去10
分开答案是否正确:
groups = org_df.group_by('correct')
for g in groups:
id = g[0]
df = g[1]
if id == 0:
type = 'incorrect'
else:
type = 'correct'
df[['startTime', 'responseTime']].to_csv(
os.path.splitext(filepath)[0] + '_' + type + os.path.splitext(filepath)[1], index=False)
在这里,我们告诉pandas根据“正确”列中的值将数据分成组。然后我们检查每个组,确定它是“正确”还是“不正确”组。然后将结果输出为CSV。
答案 1 :(得分:0)
以下代码可以满足您的需求:
f = open('sub001.txt', 'r')
f_correct = open('correct001.txt', 'w')
f_incorrect = open('incorrect001.txt', 'w')
for line in f:
parts = line.strip().split(' ')
onset = int(parts[0])
response = parts[2]
correctness = parts[4]
corrected_onset = onset - 10
if correctness == '1':
new_entry = str(corrected_onset) + ' ' + response + '\n'
f_correct.write(new_entry)
else:
new_entry = str(corrected_onset) + ' ' + response + '\n'
f_incorrect.write(new_entry)
f.close()
f_correct.close()
f_incorrect.close()