ChatGPT enables easy weather data analysis and blog automation, with future AI developments enhancing data processing and content generation.
相模原市で IoT 設計を受託しているファームロジックスです。
最近、ChatGPT を提供している OpenAI 社がリリース予定と噂されている次期 AI モデル「Strawberry」や「Orion」が話題となっています。現在の GPT-4o も十分に強力ですが、これからの AI の進化にますます期待が高まります。
ChatGPT で数値データ分析をしてみよう
さて、今日の話題は数値データ分析です。数値データの分析、例えば異常値検出といった分野では、ランダムフォレストやオートエンコーダなどの深層学習の技術が利用されることが増えているかと思います。最近はプログラミングなしに、分類(classification)、回帰(regression)といった問題を深層学習で処理するツールが登場しているようですが、まだまだハードルが高いのではないかと思います。
そこで今回は、ChatGPT を利用している人であれば、すぐに試してみることができる手法を御紹介しましょう。題材としては、私が普段から収集しているリアルタイム気象データを使いたいと思います。例えば、先週と今週の気温・露点(湿度)データを用いて、天気の傾向を分析することはできるでしょうか。
データを用意する
私は気温や湿度のデータを Elasticsearch というデータベースに保管し、Grafana で閲覧できるようにしています。これを利用して、過去の気温と露点のデータを CSV でダウンロードしてみました。
- 過去 1週間のデータ temp_dewpoint_thisweek.csv
(一部、センサあるいはマイコンの問題で欠損値があります。御了承ください。)
これを ChatGPT にアップロードしてみましょう。
それでは、次のような指示をしてみましょう。
私: 過去 1週間の天気の傾向を評価してください。
-
- 露点からは相対湿度(RH%)を導出してください。
- 気温や湿度から、日中や朝晩の過ごしやすさを検討してください。
- 週の前半から後半までの変化を分析してください。
以下が結果です。
なかなか面白いですね。回帰分析のような厳密な数値解析には及ばないかも知れませんが、参考にはなると思います。
ちなみに、ChatGPT は背後で何をしているのでしょうか? 回答末尾のリンクをクリックすると、以下のような Python プログラムのコードが示されました。
import numpy as np # Calculate relative humidity (RH%) using the temperature and dew point # Formula: RH = 100 * (EXP((17.625 * dewpoint) / (243.04 + dewpoint)) / EXP((17.625 * temp) / (243.04 + temp))) def calculate_relative_humidity(temp, dewpoint): return 100 * (np.exp((17.625 * dewpoint) / (243.04 + dewpoint)) / np.exp((17.625 * temp) / (243.04 + temp))) # Add a new column for Relative Humidity data['RH%'] = calculate_relative_humidity(data['temp'], data['dewpoint']) # Convert Time column to datetime for better handling data['Time'] = pd.to_datetime(data['Time']) # Splitting the data for week into day and night for analysis data['Hour'] = data['Time'].dt.hour daytime = data[(data['Hour'] >= 6) & (data['Hour'] < 18)] nighttime = data[(data['Hour'] < 6) | (data['Hour'] >= 18)] # Split the data into first half and second half of the week mid_point = data['Time'].min() + (data['Time'].max() - data['Time'].min()) / 2 first_half = data[data['Time'] <= mid_point] second_half = data[data['Time'] > mid_point] # Calculate means for day and night, first half and second half summary = { 'Daytime': { 'Temp (mean)': daytime['temp'].mean(), 'RH% (mean)': daytime['RH%'].mean() }, 'Nighttime': { 'Temp (mean)': nighttime['temp'].mean(), 'RH% (mean)': nighttime['RH%'].mean() }, 'First Half of the Week': { 'Temp (mean)': first_half['temp'].mean(), 'RH% (mean)': first_half['RH%'].mean() }, 'Second Half of the Week': { 'Temp (mean)': second_half['temp'].mean(), 'RH% (mean)': second_half['RH%'].mean() } } import ace_tools as tools; tools.display_dataframe_to_user(name="Weather Data with RH%", dataframe=data) summary
Python を御存知の方であれば、「ふむふむ、NumPy を使ってデータ分析してくれている訳ね」とお気づきになるでしょう。(ここにはありませんが、ChatGPT のセッションの最初のほうで、pandas も import しています。)
このようなコードを手で書くのは結構大変なので、仮に雛形としてだけ使うとしても、コードの書き出しを作成してくれるのは非常に助かります。
なお、次のような評価は NumPy だけでは困難であり、LLM(大規模言語モデル)としての GPT の強みを感じるところではないかと思います。
日中は気温が高く、湿度もそこそこ高いため、蒸し暑い可能性があります。一方、夜間は若干涼しくなるものの、湿度がさらに高くなるため、湿気を感じやすい状況です。
週の前半に比べ、後半では気温がやや上昇し、湿度も増加しているため、後半のほうが少し蒸し暑いと感じる可能性が高いです。
全体的に、日中は過ごしやすさがやや厳しく、夜間は気温が下がるものの、湿度が高いため快適さには欠けるかもしれません。週後半にかけて、さらに蒸し暑さが増していることがわかります。
1週間前のデータと比較させよう
さらに、一週間前のデータも用意してみました。
- その 1週間前のデータ temp_dewpoint_lastweek.csv
まず最初に、(ChatGPT には見せませんが)われわれの目的のために、過去 2週間分のデータをプロットしておきます。(グラフをマウスで拡大表示したりなど、自由に閲覧したい場合はこちらからどうぞ。)
それでは、ChatGPT に指示しましょう。
私: 次に、さらに 1週間前のデータをアップロードします。この週と、先ほどアップロードしたデータの週を比較分析し、ここ 1週間の間で、天気の傾向にどのような変化があったか考察してください。
-
- 湿度から推定して、晴れの日、雨の日の傾向の変化を捉える
- 温度と湿度から考えて、朝晩に過ごしやすくなったのか、あるいは過ごしにくくなったのか
なかなかうまく分析できているのではないかと思います。実際、1週間前は台風 10号の影響で雨がちの天気であり、湿度の高い日が多かったのです。ただし、「夜間の過ごしやすさが改善」したかどうかは、人それぞれの感覚もあるでしょうが、私個人的には、夜間の気温が高くなったことで、あまり過ごしやすくなったとは感じていません。
雨が降っていた日は?
私の家の百葉箱(気象計)には降雨センサーがないので、上記のデータそのものでは降雨の状況は分かりません。しかし、湿度が非常に高いときには雨が降っていたと考えることができると思います。以下のように指示してみましょう。
私: ところで、相対湿度が 95%以上のときに雨が降っていたと仮定しましょう。過去 2週間で雨が降っていた日を推定し、降雨量の推測として(大雨の可能性、ある程度の雨の可能性、おそらく雨は降っていない)という形で分類してください。
以下が結果です。
「湿度 95% 以上」という指定がやや恣意的な感じもしますが、なかなかの分析だと思います。気象庁の以下のデータを見るように、8月30日は台風に影響もあり大雨でした。
最後にブログ記事を書いて貰おう
ついでと言ってはなんですが、折角 LLM に気象データの分析をして貰ったので、お得意の文章作成をしてもらいましょう。
私: 最後に、私のブログの記事冒頭として、過去2週間の天気の概況を 200字程度でまとめたいです。季節感、朝晩の過ごしやすさ、降雨の可能性に論点を置いてお願いします。
ChatGPT: 過去2週間の天気は、徐々に秋の気配が感じられる変化が見られました。1週目(8月28日〜9月4日)は湿度が高く、特に大雨の可能性がある日も多かったため、蒸し暑い日が続きました。しかし、2週目(9月4日〜9月11日)は気温はやや上昇したものの、湿度が低下し、降雨の可能性も少なくなったため、日中は比較的過ごしやすい天気でした。特に朝晩は気温が下がり、秋らしい涼しさを感じられる日も増えました。
いかがでしたでしょうか。ちょっとそのままでは原稿にはならないかも知れませんが、日本気象協会の天気概況のような記事が、AI にも書けそうな感じがしてきますね。
今日はここまでとしましょう。