数値データを集計して平均を取る(使い捨てスクリプト)
物理量の分布を与えるデータファイルが複数ある。フォーマットは全部のファイルで同じ。それらを読み込んで、平均の分布(つまりアンサンブル平均)を求める必要があった。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とか、ないんだな。