Translate

2017/03/29

Pythonでグラフを描く

TRNSYS18のリリースに備えてPythonを勉強しています。以前に一度やりかけたことがあるのですが、だいぶ忘れているのでおさらいです。

TRNSYSの計算結果をサクッとグラフ化する

やり方としてはTRNSYSの計算結果(ファイル)を読み込んで、グラフを描くモジュールを使ってグラフ化します。

計算結果はExamlesのBegin.tpfの出力ファイル("C:\Trnsys17\Examples\Begin\Begin.out")をそのまま使用します。

ちなみに中身はこんな感じのテキストファイルになっています。TIME,QColl(集熱パネルの集熱量)、QAux(補助ヒーターの負荷)の3カラムの構成です。

image

ライブラリの準備

はじめに処理に使用するライブラリ(パッケージ)をインポートしておきます。詳細は省略しますが、それぞれファイルを読んでグラフ化するのに使用します。
なお、以下のPythonのコーディングはPython3.6/Jupyter Notebookを使って検証しています。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

ファイルを読み込む

そしてファイルを読み込む処理は、たったの一行。

df= pd.read_csv('C:\Trnsys17\Examples\Begin\Begin.out')

これで、ファイルの読み込んでDataframeという形式に展開してくれます。表示してみましょう。

df.head() で最初の数行分を表示してくれます。

image

読み込まれたデータが表形式で表示されています。

でもこの状態だと実は、まだだめなんですね。元データは3カラムで構成されていましたが、区切りがうまく認識されれず一行まとめて一つの値になっています。(値というか、単なるテキスト)

ここで表をよく見ると、タブ区切り(\t)記号が含まれています。(赤枠の部分)

image

そこでファイルの読み込みの箇所で、タブ区切り記号を指定して処理を行います。

df= pd.read_csv('C:\Trnsys17\Examples\Begin\Begin.out',delimiter='\t')

こんどは無事にカラムごとに分けて読み込まれました。最後にUnnamedなんとかという名前のカラムがありますが、これは空のデータが入っているためなので、あまり気にしなくてOKです。

image

グラフを描く

そしてQColl,QAuxをグラフにプロットするのは、ほんの2行ほど。カラム名を指定して次のようにします。

df.loc[:,['Qcoll','Qaux']].plot()
plt.show()

と、ここで大量のエラーメッセージが。。。

image

いろいろごちゃごちゃ書いてありますが、重要な点は最後の1行に書いてあります。

KeyError: "None of [['Qcoll', 'Qaux']] are in the [columns]"
(指定された'Qcoll', 'Qaux'はカラムに存在しません)

これちょっと分かり難いのですが、TRNSYSから書き出されたファイルではカラム名に空白が含まれています。Pythonで読み込む際に、空白も含めてカラム名として認識されてしまうため、’Qcoll’で指定しても、実際にはないのでエラーとして処理されてしまっています。正確に’Qcoll             ’のように空白を含めてカラムを指定する必要があります。でも、これ少々面倒なので、逆にカラム名を再設定する方が簡単です。これも一行で済みます。

df.columns=['TIME','Qcoll','Qaux','UNNAMED']

この行を追加したら、再度グラフを描いてみます。

下図のような画面が表示されたら成功です。

image

しかし、Begin.tpfの出力は積算値なので、右肩上がりのグラフになってしまっていまいちですね。。。(なにか比較対象がないとというか、面白い表示じゃないすよね?)

ちょっと工夫すると描く範囲を指定したり、複数のデータをまとめてグラフ化することもできます。一度Pythonのスクリプトを書いてしまえば、再利用もできます。なんども繰り返し計算を行うようなケースでは気軽にグラフ表示できる方法です。

以下、実際に動かしたスクリプトです。実質3,4行でグラフが描けるので非常に楽です。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

df= pd.read_csv('C:\Trnsys17\Examples\Begin\Begin.out',delimiter='\t')
df.columns=['TIME','Qcoll','Qaux','UNNAMED']
df.loc[:,['Qcoll','Qaux']].plot()
plt.show()

2017/03/27

TRNSYS18の情報が徐々に公開されています

TRANSSOLAR社サイトで公開されているTRNSYS18の情報が徐々に増えています。

一見、以前と変わらないように見えるのですが、Daylight,Complex fenestration systems.Extended comfort calculations,TRNLizardの各項目(緑色のテキストの部分)にリンクが追加されています。

Extended Comfort Calculationsの例では、シンガポールの事例が紹介されています。Type56に新しく追加されたSET(Standard effective temperature)の機能を使った評価例のようです。

他の項目は、新機能の概要説明のようです。(ドイツ語でよく分からない)

いよいよリリースが近づいてきました。image

2017/03/04

TMY,TMY2とTMY3

この3種類は単に年代の違い(拡張アメダスに1995年版と2000年版があるような違い)だと思ってたら、それ以外も違うんですね。NRELのマニュアルの序文にしっかり書いてある。

Users Manual for TMY3 Data Sets

ポイントだけ抜粋すると。。。


These data sets provide greater  geographical coverage than previous TMY sets with 1020 locations in the United States and its  territories. 

これらのデータセットは、米国およびその地域における1020のロケーションを有する以前のTMYセットよりも広い地理的範囲を提供する。

To distinguish between the old and new data sets, the new TMY data sets are referred to as  TMY3. The TMY, TMY2, and TMY3 data sets cannot be used interchangeably because of  differences in time (solar versus local), formats, elements, and units.

古いデータセットと新しいデータセットとを区別するために、新しいTMYデータセットをTMY3と呼ぶ。 TMY、TMY2、およびTMY3データ・セットは、時間の違い(太陽対ローカル)、形式、要素、および単位のために互換的に使用することはできません。

TMY3以前の気象データに比べてロケーション(地点)が多くなっている。ただし、データ形式は異なっており、互換性はない。

なるどほど、名前が似てるからと言ってもTMY3とTMY2は注意が要りますね。

ちなみに、以下のURLからTMY3から2への変換プログラムが入手できる。

National Solar Radiation Data Base - 1991- 2005 Update: Typical Meteorological Year 3

メモ:TMYの元データの年代

いちおう無印のTMYから2,3へと新しくなっている。

TMY  1952 - 1975
TMY2 1961 - 1990
TMY3 1991 – 2005

2017/3/9 追記
ファイル形式の違い
TMY,TMY2 固定長のテキスト形式(つまりCSVではない)
TMY3 CSV形式