2016-12-08 7 views
0

Iデータの.txtファイル与えられています:与えられた入力ファイルからの列統計?

1,2,3,0,0 
1,0,4,5,0 
1,1,1,1,1 
3,4,5,6,0 
1,0,1,0,3 
3,3,4,0,0 

を私の目的は、列与えられたデータのの最小、最大、平均、範囲、中央値を計算して出力にそれを記述することです.TXTファイル。

ステップ1は次のようにこの質問に近づいての私のロジックがある)

infile = open("Data.txt", "r") 
tempLine = infile.readline() 
while tempLine: 
    print(tempLine.split(',')) 
    tempLine = infile.readline() 

明らかにそれは完璧ではないですが、アイデアは、データがこれで読み取ることができるということです...

データを読みます

手順2)データを対応するリスト変数に格納しますか? ROW1、ROW2、... row6

ステップ3)このような最終的なリストを与え、すべての一つにリストの上にコンバイン...

flist =[[1,2,3,0,0],[1,0,4,5,0],[1,1,1,1,1],[3,4,5,6,0],[1,0,1,0,3],[3,3,4,0,0]] 

ステップ4)個別に、forループネストされたアクセス・エレメントを使用し、

col1, col2, col3, ... , col5

リスト変数にそれらを保存するステップ5)私の質問は、ウィスコンシンMIN、MAXなどを計算し、出力ファイルに

を書きます私の初心者のコンピュータサイエンスとPythonに関する知識は、この論理は非効率的であり、この問題を解決するためのより簡単でより良い論理が存在する可能性はありますか?

私の主な問題は、おそらく2から5までの手順です。残りの部分は、どうやって解決するかを知っています。

アドバイスは役に立ちます!

+0

列の数がすべての行で同じ場合、一度に1行ずつファイルを読み取ることで、問題のないすべてのメトリックを段階的に計算できます。各行のデータから個々の変数( 'row1'、' row2'、... 'row5')を作成せずにこれを行うのが最善です。これを行うにはパンダは必要ありません(あるいはPython 3.4で導入された 'statistic'モジュール)。あるいは、ファイルが大きすぎない場合は、そのファイルをすべてメモリに読み込むことができます。これにより、物事を徐々に処理する必要がなくなり、簡単に処理できるようになります。軸ごとに – martineau

答えて

1

numpyのを試してみてくださいを。 Numpyライブラリは、リスト内のネストされたリスト、または単純に行列を扱う際の高速オプションを提供します。

numpyを使用するには、コードの先頭にimport numpyが必要です。

numpy.matrix(1,2,3,0,0;1,0,4,5,0;....;3,3,4,0,0) 

はストレートバットあなた flist =[[1,2,3,0,0],[1,0,4,5,0],[1,1,1,1,1],[3,4,5,6,0],[1,0,1,0,3],[3,3,4,0,0]]を与えるだろう。 、してください

また、あなたは(この場合、行)軸に目を通すことと意味取得するには、最小、最大を簡単に詳しくので、これは、https://docs.scipy.org/doc/numpy/reference/generated/numpy.matrix.htmlからnumpyの文書である

max([axis, out]) Return the maximum value along an axis. 
mean([axis, dtype, out]) Returns the average of the matrix elements along the given axis. 
min([axis, out]) Return the minimum value along an axis. 

を使用してnumpyの文書を読んでください。

+0

を使用している場合、私は列にアクセスできますか? – Panthy

+0

'flist.max(0)'は列による検索を行い、すべての列の最大値を1行に与えます:上の例では '[3,4,5,6,3]'です。 '[3]、[5]、[1]、[6]、[3]の形式で、あなたは列ごとにすべての行の最大値を与える行を使った検索を行います:flist.max(1) 、[4]。 – Jin

+0

data.txtを直接読んで数の少ない行列を作成する方法はありますか? たとえばnumpy.matrix(readline ... etc) – Panthy

1

私はこのようなものになり、データを取得するには、次の

from statistics import median 
infile = open("Data.txt", "r") 
rows = [line.split(',') for line in infile.readlines()] 
for row in rows: 
    minRow = min(row) 
    maxRow = max(row) 
    avgRow = sum(row)/len(row) 
    rangeRow = maxRow - minRow 
    medianRow = median(row) 
    #then write the data to the output file 
0

あなたはこのためにパンダのライブラリを使用することができます(http://pandas.pydata.org/

以下のコードは、私の仕事:

import pandas as pd 
df = pd.read_csv('data.txt',header=None) 
somestats = df.describe() 
somestats.to_csv('dataOut.txt') 
0

をこれは誰でも好奇心

import numpy 

infile = open("Data1.txt", "r") 
outfile = open("ColStats.txt", "w") 

oMat = numpy.loadtxt(infile) 
tMat = numpy.transpose(oMat) #Create new matrix where Columns of oMat becomes rows and rows become columns 

#print(tMat) 

for x in range (5): 
    tempM = tMat[x] 

    mn = min(tempM) 
    mx = max(tempM) 
    avg = sum(tempM)/6.0 
    rng = mx - mn 
    median = numpy.median(tempM) 

    out = ("[{} {} {} {} {}]".format(mn, mx, avg, rng, median)) 
    outfile.write(out + '\n') 

infile.close() 
outfile.close() 

#print(tMat) 
であれば、私はそれをやってしまった方法です
関連する問題