数値データを集計して平均を取る(使い捨てスクリプト)

物理量の分布を与えるデータファイルが複数ある。フォーマットは全部のファイルで同じ。それらを読み込んで、平均の分布(つまりアンサンブル平均)を求める必要があった。Excelで処理するにはデータが多く、面倒くさそうだったのでPythonスクリプトを書く。
ファイルを開いて、データを読み取って、それらを繰り返して、平均をとって、結果をprintする、という単純なもの。

#!/bin/python
""" determining coordinates for data sampling 
                           2008/11/17                """
# ----------------------------------------------------------------
import math
pai = math.pi

rmax = 0.5
zmax = 6.0
rnmax = 50
znmax = 600
nmax = rnmax + znmax

for thta in range(0, 360, 10):
    filen = "point" + str(thta)
    output = open(filen, 'w')
    output.write('651\n')
    for i in xrange(rnmax+1):
        list = []
        rr = rmax/rnmax*i
        list.append(str(rr*math.cos(thta/180.0*pai))+', ')
        list.append(str(rr*math.sin(thta/180.0*pai))+', ')
        list.append(str(0.0))
        list.append('\n')
        output.writelines(list)

    for j in xrange(znmax):
        list = []
        zz = (-1)*float(zmax)/float(znmax)*(j+1)
        list.append(str(rr*math.cos(thta/180.0*pai))+', ')
        list.append(str(rr*math.sin(thta/180.0*pai))+', ')
        list.append(str(zz))
        list.append('\n')
        output.writelines(list)

    output.close()
#!/bin/python
""" determining coordinates for data sampling 
                                               2008/11/17     """
# ----------------------------------------------------------------
from math import *

listlist = []

for thta in range(0, 360, 10):
    num = 0
    list = []
    filen = "rslt_P" + str(thta)
    input = open(filen, 'r')
    alllist = input.readlines()
    for i in range(50):
        xx = float(alllist[i].split( )[0])
        yy = float(alllist[i].split( )[1])
        zz = float(alllist[i].split( )[2])
        ss = sqrt(xx**2 + yy**2)
        pp = float(alllist[i].split( )[6])
        num += 1
        list.append(ss)
        list.append(pp)

    for i in range(50, 650):
        xx = float(alllist[i].split( )[0])
        yy = float(alllist[i].split( )[1])
        zz = float(alllist[i].split( )[2]) - 0.5
        pp = float(alllist[i].split( )[6])
        num += 1
        list.append(-zz)
        list.append(pp)

    listlist.append(list)
#    print "data number =", num
#    print "len(listlist) =", len(listlist)
#    print "len(list) =", len(list)
    input.close()

for DN in range(0,1300,2):
    sums = 0.0
    sump = 0.0
    for N in range(36):   # file number
        sums += listlist[N][DN]
        sump += listlist[N][DN+1]
    print sums/36, sump/36

mathライブラリの中で、平均値を与えてくれる関数を探したがそれらしきものを見つけることができなかった。averageとかavrとか、ないんだな。

結果的に得られたグラフはこんな感じでした。