2016-05-10 6 views
2

Pythonに関しては非常に初心です。私はプログラミングのほとんどをC++で行ってきました。データセットの高速フーリエ変換を生成し、matplotlibを使用して2つのウィンドウにデータとFFTの両方をプロットするプログラムがあります。プロットするのではなく、データをファイルに出力したい。これはC++の私にとっては簡単な作業ですが、私はこれをPythonで理解することはできません。 ?Python - 2つのデータセット(リスト?)を2つの列としてデータファイルに出力する

import matplotlib.pyplot as plt 

from fft import fft 
from fft import fft_power 
from numpy import array 
import math 
import time 


# data downloaded from ftp://ftp.cmdl.noaa.gov/ccg/co2/trends/co2_mm_mlo.txt 
print ' C02 Data from Mauna Loa' 
data_file_name = 'co2_mm_mlo.txt' 
file = open(data_file_name, 'r') 
lines = file.readlines() 
file.close() 
print ' read', len(lines), 'lines from', data_file_name 

window = False 

yinput = [] 
xinput = [] 

for line in lines : 
    if line[0] != '#' : 
     try: 
      words = line.split() 
      xval = float(words[2]) 
      yval = float(words[4]) 
      yinput.append(yval) 
      xinput.append(xval) 
     except ValueError : 
      print 'bad data:',line 


N = len(yinput) 
log2N = math.log(N, 2) 
if log2N - int(log2N) > 0.0 : 
    print 'Padding with zeros!' 
    pads = [300.0] * (pow(2, int(log2N)+1) - N) 
    yinput = yinput + pads 
    N = len(yinput) 
    print 'Padded : ' 
    print len(yinput) 
    # Apply a window to reduce ringing from the 2^n cutoff 
    if window : 
     for iy in xrange(len(yinput)) : 
      yinput[iy] = yinput[iy] * (0.5 - 0.5 * math.cos(2*math.pi*iy/float(N-1))) 

y = array(yinput) 
x = array([ float(i) for i in xrange(len(y)) ]) 
Y = fft(y) 

powery = fft_power(Y) 
powerx = array([ float(i) for i in xrange(len(powery)) ]) 

Yre = [math.sqrt(Y[i].real**2+Y[i].imag**2) for i in xrange(len(Y))] 


plt.subplot(2, 1, 1) 
plt.plot(x, y) 

ax = plt.subplot(2, 1, 2) 
p1, = plt.plot(powerx, powery) 
p2, = plt.plot(x, Yre) 
ax.legend([p1, p2], ["Power", "Magnitude"]) 
plt.yscale('log') 


plt.show() 
+0

かなりの配列/リストオブジェクトがここにあります。あなたはファイルに書きたいものはどれですか? yinput? xinput? y?バツ?パワー? powerx? – Parfait

+0

私がファイルに書きたい4つのものは、プロットされている4つのものです:powerx、powery、x、Yre –

答えて

0

あなたが達成するためにcsv.writer()を使用することができます。そこで質問は、両方のデータセットは、以下に別々の列にされたデータファイルにすることができます私は出力powerxとpoweryは、プログラムがどのように」、ですこのタスクは、ここに参照です:https://docs.python.org/2.6/library/csv.html

基本的な使用法:

行にあなたのリストのZIPファイルを作成します。

rows=zip(powery,powerx) 

は、CSVファイルにデータを書き込むために、CSVライターを使用してください:

with open('test.csv', 'wb') as f: 
    writer = csv.writer(f) 
    for row in rows: 
     writer.writerow(row) 
+0

これはうまくいきました。とても有難い! –

+0

投票して回答にしてください。将来の訪問者はこれを知ることができます。 – PseudoAj

0

これは、2つの異なるリストから2つの列のテキストファイルにデータを書き込む方法です。

# Two random lists 
index = [1, 2, 3, 4, 5] 
value = [4.5, 5, 7.0, 11, 15.7] 

# Opening file for output 
file_name = "output.txt" 
fwm = open(file_name, 'w') 

# Writing data in file 
for i in range(len(index)): 
    fwm.write(str(index[i])+"\t") 
    fwm.write(str(value[i])+"\n") 

# Closing file after writing 
fwm.close() 

リストに文字列形式のデータが含まれている場合は、ファイルにデータを書き込むときに 'str'を削除してください。

あなたは(fwm.write

(STR(インデックス[I])+ "\ tの")

fwm.write WITH csvファイルの変更中のデータを保存する場合STR(インデックス[I])+ "")

0

あなたがのためにファイルを使用したい内容に応じて、私はcsvモジュールまたはjsonモジュールのいずれかをお勧めしたいです。あなたのスプレッドシートでそれを開くための能力を与えるCSVデータとしてファイルを書き込む

は、JSONデータはあなたにすぐにそれをインポートする機能を与えるとして、ファイルの書き込みなど

、それは、それを編集グラフ他のプログラミング言語を使用したり、それを検査したりすることができます(一般的に読み取り専用です - 深刻な編集をしたい場合はCSVを参照してください)。

関連する問題