python - 如何从不同的文件中获取数据并在 python 中组合成一个数组?

标签 python export-to-csv analysis typing

我必须收集数据来证明我的假设,即用惯用手打字比用非惯用手打字更快。我写了下面的代码,给参与者一个随机词,然后他们必须复制它。该代码将计算键入每个单词所需的时间,然后将该数据保存到新文件中。将为每位接受测试的参与者创建一个新的 CSV 文件。

现在我需要编写另一个脚本来计算每个参与者每只手的平均值,然后创建一个包含平均值的数组,这样我就可以创建一个图表来证明我的假设是否正确。我将如何从不同的文件中获取数据并将其组合到一个数组中?

我的脚本:

import random
import time

name = raw_input('Enter name: ')  # get some name for the file
outfile = file(name + '.csv', 'w')  # create a file for this user's data

# load up a list of 1000 common words
words = file('1-1000.txt').read().split()

ntrials = 50

answers = []
print """Type With Dominant Hand"""
for i in range(ntrials):
    word = random.choice(words)
    tstart = time.time()
    ans = raw_input('Please type ' + word + ': ')
    tstop = time.time()
    answers.append((word, ans, tstop - tstart))
    print >>outfile, 'Dominant', word, ans, tstop - tstart  # write the data to the file
    if (i % 5 == 3):
        go = raw_input('take a break, type y to continue: ')

print """Type With Nondominant Hand"""      
for i in range(ntrials):
    word = random.choice(words)
    tstart = time.time()
    ans = raw_input('Please type ' + word + ': ')
    tstop = time.time()
    answers.append((word, ans, tstop - tstart))
    print >>outfile, 'Nondominant', word, ans, tstop - tstart  # write the data to the file
    if (i % 5 == 3):
        go = raw_input('take a break, type y to continue: ')

 outfile.close()  # close the file

上述脚本的示例结果:

Dominant sit sit 1.81511306763
Dominant again again 2.54711103439
Dominant from from 1.53057098389
Dominant general general 1.98939108849
Dominant horse horse 1.93938016891
Dominant of of 1.07597017288
Dominant clock clock 1.6587600708
Dominant save save 1.42030906677
Nondominant story story 3.92807888985
Nondominant of of 0.93910908699
Nondominant test test 1.69210004807
Nondominant low low 1.13296699524
Nondominant hit hit 1.15252614021
Nondominant you you 1.22019600868
Nondominant river river 1.42011594772
Nondominant middle middle 1.61595511436

最佳答案

如果您不熟悉 numpy,这可能看起来像是另一种语言,但这里有一个利用它的解决方案(注意没有循环!)

为了测试,我创建了第二个用户数据文件,每个条目递增 1 秒。

import glob
import numpy as np

usecols = [0, 3] # Columns to extract from data file
str2num = {'Dominant': 0, 'Nondominant': 1} # Conversion dictionary
converters = {0: (lambda s: str2num[s])} # Strings -> numbers

userfiles = glob.glob('*.csv')
userdat = np.array([np.loadtxt(f, usecols=usecols, converters=converters)
                    for f in userfiles])

# Create boolean arrays to filter desired results
dom    = userdat[..., 0] == 0 
nondom = userdat[..., 0] == 1 

# Filter and reshape to keep 'per-user' layout
usercnt, _, colcnt = userdat.shape
domdat    = userdat[dom   ].reshape(usercnt, -1, colcnt)
nondomdat = userdat[nondom].reshape(usercnt, -1, colcnt)

domavgs    = np.average(domdat,    axis=1)[:, 1]
nondomavgs = np.average(nondomdat, axis=1)[:, 1]

print 'Dominant averages by user:    ', domavgs
print 'Non-dominant averages by user:', nondomavgs

输出:

Dominant averages by user:     [ 1.74707571  2.74707571]
Non-dominant averages by user: [ 1.63763103  2.63763103]

如果您要进行大量分析,我强烈建议您使用 numpy。

关于python - 如何从不同的文件中获取数据并在 python 中组合成一个数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13635943/

相关文章:

php - 导出为 CSV 俄语字符时不会显示

php - 创建合并 2 行的 CSV 并将值设置为 codeigniter 中的标题

r - 如何替换列值以进行同类群组分析

python - 为什么cython不编译逻辑或者到 `||`表达式?

python - Pandas Dataframe 一次追加一行到 CSV

Python:在多列中查找字符串并将其返回到新列中

c++ FFT节拍检测库?

algorithm - 组合问题和数值问题有什么区别

python - Django:NoReverseMatch 不是有效函数

python - 如何使用pyinstaller将多个python文件编译成单个.exe文件