CSVデータからグラフを描く

10分ごとに計測している、気温、湿度、気圧、二酸化炭素濃度のデータを記録しているCSVファイルからデータを読み出し、グラフ化してみました。pandasとmatplotlibを使用しています。とりあえず、ターミナルで以下のコマンドを実行します。

$ sudo apt-get update
$ sudo apt-get install python3-pip
$ sudo apt-get install python3-pandas
$ sudo apt-get install python3-matplotlib

時刻、温度、湿度、気圧、二酸化炭素濃度が保存されたcsvファイルの中身は以下のようになっています。

2021/09/10 00:00:02,27.04688360267901,54.77714997562036,1003.2419347349937,442
2021/09/10 00:10:02,27.0008524954319,54.74077742629164,1003.2204064423108,442
2021/09/10 00:20:02,26.88833211029414,54.87153361583788,1003.144273195621,436
2021/09/10 00:30:02,26.816728302184494,54.91018195987762,1003.1870707203142,440
2021/09/10 00:40:01,26.7348954484798,55.00679193864796,1003.2661316644903,436
2021/09/10 00:50:02,26.673520857095717,55.138957184084624,1003.272573226132,447
2021/09/10 01:00:02,26.653062669280917,55.20242730385607,1003.318734161733,458
2021/09/10 01:10:02,26.54054271953646,55.47274136986343,1003.4008974946622,441
2021/09/10 01:20:02,26.49451187160448,55.40138363376406,1003.3792779160628,447
2021/09/10 01:30:02,26.40245024646283,55.433420608494735,1003.4680227705393,443
2021/09/10 01:40:02,26.284816084895283,55.668395982776055,1003.4097606823948,437
2021/09/10 01:50:02,26.192754674539902,55.9331640162646,1003.419217193011,433
2021/09/10 02:00:02,26.126265936816345,56.02408509409851,1003.4436158547053,436
2021/09/10 02:10:02,26.075120787421476,56.10384911287156,1003.4928143333177,437
2021/09/10 02:20:02,26.075120787421476,56.42384198420905,1003.4664276125951,450
2021/09/10 02:30:01,25.99328860892565,56.357072582163745,1003.4395762657244,430
2021/09/10 02:40:02,25.94214353520074,56.39023474865098,1003.4359741605601,432

このcsvをpythonで読み込んでグラフ化します。pythonでcsvを読み込むにためにpandasを使います。グラフ化するのは、matplotlibというライブラリを使います。

# -*- coding: utf-8 -*-
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import datetime

#今日の日付のファイルからデータをpandasで読み込む
dir_path = '/home/pi/bme280-data/'
today=datetime.datetime.now()
filename = today.strftime('%Y%m%d') + 'New'
data = pd.read_csv(dir_path + filename + '.csv',
                   names=('Time','Temperature', 'Humidity', 'Pressure', 'CO2'),
                   index_col='Time',
                   parse_dates=True)

#気温、湿度、気圧、二酸化炭素濃度のデータを分ける
df_tmp = data.iloc[:, [0]]
df_humid = data.iloc[:, [1]]
df_press = data.iloc[:, [2]]
df_co2 = data.iloc[:, [3]]

# Figureの初期化
fig = plt.figure(figsize=(12, 18))

# Figure内にAxesを4つ追加
ax1 = fig.add_subplot(411) #気温用
ax1.plot(df_tmp,color = "r")#"b"(青), "g"(緑), "r"(赤), "c"(シアン), "m"(マゼンダ), "y"(イエロー), "k"(黒), "w"(白)で指定する
ax1.set_xlabel('Time') #横軸のラベル
ax1.set_ylabel('Temperature') #縦軸のラベル
ax1.legend(['Temperature degree Celsius'])#凡例
#ax1.set_xticks([]) #目盛りを表示しない
ax1.xaxis.set_major_locator(mdates.HourLocator(byhour=range(0, 24, 2)))#2時間ごとに目盛りを表示
ax1.xaxis.set_major_formatter(mdates.DateFormatter("%H:%M"))#横軸の目盛りのフォーマット
#ax1.set_title('気温の変化')  # グラフタイトル

ax2 = fig.add_subplot(412) 
ax2.plot(df_humid,color = "b",)
ax2.set_xlabel('Time')  # x軸ラベル
ax2.set_ylabel('Humidity')  # y軸ラベル
ax2.legend(['Humidity %'])  # 凡例を表示
#ax2.set_xticks([])
ax2.xaxis.set_major_locator(mdates.HourLocator(byhour=range(0, 24, 2)))
ax2.xaxis.set_major_formatter(mdates.DateFormatter("%H:%M"))

ax3 = fig.add_subplot(413) 
ax3.plot(df_press,color = "g")
ax3.set_xlabel('Time')  # x軸ラベル
ax3.set_ylabel('Pressure')  # y軸ラベル
ax3.legend(['Pressure hPa'])  # 凡例を表示
#ax3.set_xticks([])
ax3.xaxis.set_major_locator(mdates.HourLocator(byhour=range(0, 24, 2)))
ax3.xaxis.set_major_formatter(mdates.DateFormatter("%H:%M"))

ax4 = fig.add_subplot(414) 
ax4.plot(df_co2,color = "y")
ax4.set_xlabel('Time')  # x軸ラベル
ax4.set_ylabel('CO2')  # y軸ラベル
ax4.legend(['CO2 ppm'])  # 凡例を表示
#ax4.set_xticks([])
ax4.xaxis.set_major_locator(mdates.HourLocator(byhour=range(0, 24, 2)))
ax4.xaxis.set_major_formatter(mdates.DateFormatter("%H:%M"))

plt.savefig("/home/pi/bme280-data/graph.png")
plt.show()

表示されたグラフは、以下の通りです。

 

  • X