こんにちはSHINです。
今回はChatGPTにCSVファイルをグラフ化し、さらにデータが更新される度にリアルタイムに反映されるいわゆるリアルタイム監視が出来るかどうかを問うてみます。
やりたいこと
僕の質問がこちら↓↓
「あるフォルダに定期的にCSVファイルが保存されるとします。 このデータをPythonでグラフ化してリアルタイムで監視することは可能ですか?」
そしてChatGPTの回答がこちらです↓↓
試しにPythonのコードを書いてもらう
試しにコードを書いてもらう為のプロンプトがこちら↓↓
「試しに簡単なものをつくっていみたいと思います。デスクトップのフォルダにCSVファイルを保存しています。 このファイルをグラフ化してリアルタイム監視するためのPythonコードを書いてください。 そしてこのフォルダに別のCSVファイルが保存されたときにも随時更新できるようにしてください」
まずは必要なライブラリのインストールから
↓のコードを実行してwatchdogのライブラリをインストールします。
※pip install watchdog pandas matplotlib
実際のコード
※あくまで参考にしてください
import matplotlib.pyplot as plt
import matplotlib.font_manager as font_manager
import pandas as pd
import os
# 保存先のフォルダパスを設定
save_folder = 'path/to/save/folder'
# 日本語フォントの設定
font_path = 'C:\\Windows\\Fonts\\meiryo.ttc' # このパスはお使いの環境に合わせて調整してください
font_prop = font_manager.FontProperties(fname=font_path)
plt.rcParams['font.family'] = font_prop.get_name()
# CSVファイルがあるフォルダのパス
folder_path = 'your/folder/path'
# 各日付のデータを統合
all_data = pd.concat([pd.read_csv(os.path.join(folder_path, file)) for file in os.listdir(folder_path) if file.endswith('.csv')])
# 日付と時刻の列を datetime オブジェクトに変換
all_data['datetime'] = pd.to_datetime(all_data['datetime'])
# 'name' と 'datetime' でグループ化し、各グループの平均値を計算
grouped_data = all_data.groupby(['name', pd.Grouper(key='datetime', freq='D')]).mean(numeric_only=True).reset_index()
# 各'name'ごとに個別の折れ線グラフを描画し、ファイルに保存
unique_names = grouped_data['name'].unique()
for name in unique_names:
subset = grouped_data[grouped_data['name'] == name]
plt.figure(figsize=(10, 4))
plt.plot(subset['datetime'], subset['value'])
plt.title(name)
plt.xlabel('Datetime')
plt.ylabel('Value')
plt.xticks(rotation=45)
plt.tight_layout()
# 画像ファイルとして保存
plt.savefig(os.path.join(save_folder, f'{name}.png'))
plt.show()
以上こんな感じでPythonのコードをいとも簡単に書いてくれました。
果たしてこのコードが正しいものなのかはまだ確認できておりませんが、時間をみて確認していきたいと思います。
今回はあくまで備忘録的に書いた記事となりますのでご了承ください。
結果については後日追記しますね~
これは折れ線グラフになりますが、これだとデータが少ない場合にグラフになにも表示されないのでデータ数が少ない場合は散布図で表示する方がいいみたいです。
import matplotlib.pyplot as plt
import matplotlib.font_manager as font_manager
import pandas as pd
import os
# 保存先のフォルダパスを設定
save_folder = 'path/to/save/folder'
# 日本語フォントの設定
font_path = 'C:\\Windows\\Fonts\\meiryo.ttc' # このパスはお使いの環境に合わせて調整してください
font_prop = font_manager.FontProperties(fname=font_path)
plt.rcParams['font.family'] = font_prop.get_name()
# CSVファイルがあるフォルダのパス
folder_path = 'your/folder/path'
# 各日付のデータを統合
all_data = pd.concat([pd.read_csv(os.path.join(folder_path, file)) for file in os.listdir(folder_path) if file.endswith('.csv')])
# 日付と時刻の列を datetime オブジェクトに変換
all_data['datetime'] = pd.to_datetime(all_data['datetime'])
# 'name' と 'datetime' でグループ化し、各グループの平均値を計算
grouped_data = all_data.groupby(['name', pd.Grouper(key='datetime', freq='D')]).mean(numeric_only=True).reset_index()
# 各'name'ごとに個別の散布図を描画し、ファイルに保存
unique_names = grouped_data['name'].unique()
for name in unique_names:
subset = grouped_data[grouped_data['name'] == name]
plt.figure(figsize=(10, 4))
plt.scatter(subset['datetime'], subset['value'])
plt.title(name)
plt.xlabel('Datetime')
plt.ylabel('Value')
plt.xticks(rotation=45)
plt.tight_layout()
# 画像ファイルとして保存
plt.savefig(os.path.join(save_folder, f'{name}.png'))
plt.show()
ちなみにこの記事のアイキャッチ画像もこの流れでChatGPTに作ってもらいました。
やはり有能すぎる・・・