【科学技術計算講座1-7】Pythonでデータをファイルに出力する

前回はPythonで計算結果をグラフに表示してみました。

Pythonでグラフを表示します。matplotlibを使ってPythonでどのようにグラフを表示するか学びます。一分子反応の計算結果をグラフにしてみます。科学技術計算講座1「一分子反応をオイラー法でシミュレーション」の第6回目です。

今回は、計算した数値データをファイルに出力してみましょう。

データをファイルに出力する

実際の仕事の現場では、レポートや報告書をまとめたり、Excelなどのツールにデータを取り込んで分析したりしています。今作っているプログラムも、画面に数値データが出力されているのでそれをコピペしてもよいのですが、せっかく計算したものなのでファイルに出力して保存しておけば、その後の取り回しがよさそうです。ここでは、よく使われるCSV形式でデータをファイルに出力してみましょう。

CSV形式とはご存知のとおり、データをカンマ区切りでテキストファイルに保存したものです。

では、CSVファイルに出力する簡単なプログラムを書いてみましょう。

import csv

outfile = open('output.csv','w', newline='')
writer = csv.writer(outfile)
writer.writerow(['i', '2*i'])

for i in range(100):
    writer.writerow([i, 2 * i])

outfile.close()

最初の import csv は、このプログラムでCSVファイルを扱うという宣言です。

次の outfile = open() のところは、ファイル名を指定してファイルを開く命令です。ここでは、output.csv というファイル名を指定しています。ファイル名は変更していただいて構いません。この開いたファイルに、outfile という変数名をつけています。

次の writer = csv.writer() は、先程開いたファイル outfile にCSV形式で書き込むという処理をするオブジェクトを作っています。オブジェクトというのは、ちょっとイメージしにくいですが、何かの処理をする物とか実体とか、まあロボットみたいなイメージです。ここでは、CSVファイルに書き出す作業をするロボットを writer と名付けたと思ってください。

続いて writer.writerow(['i', '2*i'])writerow は、実際にCSVファイルに出力させる命令です。先程の writerオブジェクトにこの処理をさせています。ここでは、' ' で囲んでいるので、i という文字と 2*i という文字を出力しています。writerow では、[ ] の配列の形で指定してやります。

次はおなじみ forループです。forループは、100回 writer.writerow([i, 2 * i]) を繰り返しています。この writerow([i, 2 * i]) では、i を ' ' で囲んでいませんので、i の変数の値をそのままCSVファイルに出力しています。i は0から99まで1ずつ増えていきます。もう一つ、2 * i は 2×i の計算です。つまり、ここでは、i とそれに2を掛けた値をファイル出力しています。

最後の outfile.close() は、ファイルを閉じるという命令です。出力の処理が終わったらこれでファイルを閉じます。

さて、これをPythonで実行してみてください(注)。output.csv というファイルが作られました。その中身は、

i,2*i
0,0
1,2
2,4
3,6
...
97,194
98,196
99,198

のようになっています。1行目に i と 2*i の文字が、次の行から i と 2×i の数値が出力されています。CSV形式なので、カンマ区切りになっていますね。

注)プログラムのファイル名を csv.py にはしないでください。プログラムの最初で、csv をインポートしているので、エラーが出てうまく動作しません。

一分子反応プログラムにCSVファイル出力を追加

では、前回作った一分子反応のプログラムにCSVファイル出力の機能を追加しましょう。まず最初に、

import csv

を追加します。import matplotlib.pyplot as plt の下に追加します。

次にファイル名指定の部分をfor文の前に追加します。

outfile = open('output.csv','w', newline='')
writer = csv.writer(outfile)
writer.writerow(['i', 't', 'A', 'B'])

ここでは、ステップ番号、時間、A、B濃度を出力したいと思います。CSVファイルの先頭行に文字 i、t、A、B を出力します。

次にforループの一番下に、それぞれの変数を出力する命令を追加してください。字下げを合わせるのを忘れないようにしてください。

    writer.writerow([i, t, a, b])

最後に forループの次に、ファイルを閉じる命令を加えます。字下げは元に戻しておいてください。

outfile.close()

さてこれでプログラムを保存して、実行してみてください。

→プログラムはこちら(GitHub)

output.csv というファイルに、CSV形式でそれぞれのデータが出力されているはずです。CSVファイルはExcelではそのまま開くことができるので、データ処理などすることができます。

まとめ

ここまでで、Pythonでオイラー法をプログラミングし、グラフやファイルへの出力など一通りを学びました。ここまでできれば、けっこう応用が効くと思います。同じ方程式を使った他の物理現象への応用例は今後お話していきます。その前に次回は、計算精度について少しふれておきたいと思います。


←前回 Pythonでグラフを表示する

→次回 計算結果の精度

全体の目次

スポンサーリンク
科学技術計算のご相談は「キャットテックラボ」へ

科学技術計算やCAEに関するご相談、計算用プログラムの開発などお困りのことは「株式会社キャットテックラボ」へお問い合わせください。

お問い合わせはこちら

フォローする