提问者:小点点

用numpy getfromtxt从循环中的多个文件导入数据


我有几个文件命名多年,像'mcps2007.csv'。 我需要对所有的数据集进行一年一年的分析,并存储新的数据图。 有一个聪明的方法从文件导入和导出到新文件只改变代码中的年份?

每个变量都存储在一个文件中,就像所有感兴趣的量和图一样。

np.savetxt("p2008.csv", p, delimiter=",")

在第一个时刻,我每年都在运行分析,改变所有文件的输入和输出年份(大约15个文件),并且每次都在新的数据集上重新运行程序(程序需要一个小时进行分析),但是这很长很枯燥,我需要每时每刻都靠近pc来重新运行程序。

在第二个瞬间,我复制了代码(就像我在下面的示例中所做的那样),并且手动更改每个变量和每个文件,我现在可以一次运行程序,但是代码是一团糟,复制和更改的过程是漫长的,枯燥的,并且充满了调试问题。

代码示例:

import numpy as np
from numpy import genfromtxt
import statsmodels.stats.multitest as multi


p07 = genfromtxt('p2007.csv', delimiter=',')
p08 = genfromtxt('p2008.csv', delimiter=',')
p09 = genfromtxt('p2009.csv', delimiter=',')
p10 = genfromtxt('p2010.csv', delimiter=',')
p11 = genfromtxt('p2011.csv', delimiter=',')
p12 = genfromtxt('p2012.csv', delimiter=',')
p13 = genfromtxt('p2013.csv', delimiter=',')
p14 = genfromtxt('p2014.csv', delimiter=',')
p15 = genfromtxt('p2015.csv', delimiter=',')
p16 = genfromtxt('p2016.csv', delimiter=',')

p07 = p07.flatten()
p08 = p08.flatten()
p09 = p09.flatten()
p10 = p10.flatten()
p11 = p11.flatten()
p12 = p12.flatten()
p13 = p13.flatten()
p14 = p14.flatten()
p15 = p15.flatten()
p16 = p16.flatten()

q07 = multi.multipletests (p07, 1e-5, method='bonferroni')
q08 = multi.multipletests (p08, 1e-5, method='bonferroni')
q09 = multi.multipletests (p09, 1e-5, method='bonferroni')
q10 = multi.multipletests (p10, 1e-5, method='bonferroni')
q11 = multi.multipletests (p11, 1e-5, method='bonferroni')
q12 = multi.multipletests (p12, 1e-5, method='bonferroni')
q13 = multi.multipletests (p13, 1e-5, method='bonferroni')
q14 = multi.multipletests (p14, 1e-5, method='bonferroni')
q15 = multi.multipletests (p15, 1e-5, method='bonferroni')
q16 = multi.multipletests (p16, 1e-5, method='bonferroni')

有没有一种聪明的方法可以在一年中只更改一次代码,这样输入和输出文件的名称就会相应地更改,而且有一种方法可以在我需要分析的10年中循环该程序,而不必每次都重新运行该程序?


共2个答案

匿名用户

data = [] # to store your p07..p16
res = [] # to store your q07..q16

for d in range(07,16+1):
    p = genfromtxt('p20' + str(d) + '.csv', delimiter=',')
    p.flatten()
    q = multi.multipletests (p, 1e-5, method='bonferroni')
    # save objects
    data.append(p)
    res.append(q)

匿名用户

一种方法是制作一个函数,然后在循环中运行它,直到你拥有的年数。 如下所示:

def your_function(file_name):
    data = genfromtxt(file_name, delimiter=',')
    data = data.flatten()
    dt = multi.multipletests(data, 1e-5, method='bonferroni')
    return dt

data = []
for file in files: # You need to define files first
    data.append(your_function(file))