Pythonで空気線図上に測定データや気象データを可視化する方法
Pythonで空気線図上に測定データを可視化する汎用性のありそうなプログラムを作成したのでこちらで紹介したいと思います。
そもそも初期検討で気象条件の分析の場合は以前紹介したClimaplusのほうが圧倒的に早いし有意義(無料)だと思うのでこちらも参照してほしいです。
コチラで紹介するプログラムは気象データというよりかは実測データを配置するという動機のほうが強いです。
プログラムについて
大きな流れとしては空気線図のライブラリーを呼び出してそこにデータを入れるだけです。
稼働を確認した条件
- 温度[℃]・湿度[%]データ(CSVデータ)があること
- Python3(anacondaのjupyterで動作確認済)がインストールされている
- psychrochartがインストールされていること
psychrochartをインストールしていない人は以下のコマンドで入れてください。
1pip install psychrochart
こちらのライブラリーの解説はコチラのサイトで確認することができます。発行元のサイトで、最新のバージョンはpsychrochart 0.3.1(2023/02/05現在)です。なお作成されたのはMITのチームです。
このサイトでも紹介されておりますが、空気線図にも種類があります。個人的にはASHRAEの空気線図が一番読みやすいのでいつもこちらを使っています。
メインコードについて
発行元のサイトのサンプルコードは、なぜかエラーを頻発したので試行錯誤してこちらに落ち着きました。同じ思いをするかもしれないと思い、時間をロスするくらいなら動いているコードを共有するので、もし詳しい人がいたら改良して使っていただきたいです。
ちなみにこの温湿度は私の家の窓際です。
1import datetime
2import pandas as pd
3import matplotlib.pyplot as plt
4from psychrochart import PsychroChart, load_config
5
6#データのインポート、ファイル名・場所やencodingは適宜調整ください。
7df=pd.read_csv('xxx.csv',encoding="cp932")
8
9#計測日時などを英語に書き換え
10df=df.rename(columns={"計測日時":"time",'温度': 'temp',"湿度": "humi"})
11
12#データ形式をdatetimeで変換
13df["time"]=pd.to_datetime(df["time"])
14
15#datetimeへ変換されているかの確認
16print(df['time'].dtype)
このプログラムの後に”datetime64[ns] “という出力が出るのですが、何かと便利なのでデータ形式を変えています。
データ形式を確認したら出力に移ることができます。
1#空気線図をASHRAEの仕様に変換します。
2chart= PsychroChart('ashrae')
3
4# 下準備
5ax = chart.plot()
6points={}
7
8#配置したい点(points)のスタイルを指定します。
9#colorはRGBなので、1,0,0で赤、0,1,0で緑となります。最後の数字は不透明度です。
10#maekersizeはpointsの大きさです。
11for i in range(0,len(df)):
12 points[i] = {
13 'style': {'color': [0, 0, 0, 0.1], 'marker': 'o', 'markersize': 5},
14 'xy': (df.temp[i],df.humi[i])
15 }
16
17#空気線図への出力
18chart.plot_points_dbt_rh(points)
19ax.get_figure()
出力
この出力をすると以下のようになります。
味気ない。。。
なので、例えば少し工夫すると以下のようにもできます。勘のいいひとはお察しの通り、この青い部分がビル管法の温湿度です。まぁ窓際にいるわけないので快適な領域にはないですよね。
この時のコードは以下です。二番目に紹介しているコードをこれで上書きをすれば出力できると思います。
Zone(青い部分)は自分で任意のところを増やすこともできます。
1#空気線図をASHRAEの仕様に変換します。
2chart= PsychroChart('ashrae')
3
4#夏場の快適エリアなど特定のエリアにハッチをかけるなどする場合は以下のzones_confで定義します。
5#points_xは温度の範囲を指定します。以下の例だと17℃から28℃までを対象とします。
6#point_yは湿度の範囲を指定します。以下の例だと40%から70%までを対象とします。
7#Styleは外形線とハッチの色などを定義します。
8zones_conf = {
9 "zones":[
10 {
11 "zone_type": "dbt-rh",
12 "style": {"edgecolor": [0, 0.5, 0],
13 "facecolor": [0,,0,0.05]},
14 "points_x": [17, 28],
15 "points_y": [40,70 ],
16 }
17 ]}
18chart.append_zones(zones_conf)
19
20# 下準備
21ax = chart.plot()
22points={}
23
24#配置したい点(points)のスタイルを指定します。
25#colorはRGBなので、1,0,0で赤、0,1,0で緑となります。最後の数字は不透明度です。
26#maekersizeはpointsの大きさです。
27for i in range(0,len(df)):
28 points[i] = {
29 'style': {'color': [1, 0, 0, 0.005], 'marker': 'o', 'markersize': 20},
30 'xy': (df.temp[i],df.humi[i])
31 }
32
33#空気線図への出力
34chart.plot_points_dbt_rh(points)
35ax.get_figure()
上の27行目から31行目までを条件文を組み合わせて時間帯別にStyle(色)を変えるなどして可視化して利用しました。
あとがき
便利なのですが、建築系で説明しているサイトって少ないのですよね。ぜひ参考にして改良してみてください。
23’2/13画像が欠損していたので修正しました。
私についてはこちらか下にあります。