プログラミング不要。ChatGPT にリアル気象データを分析して貰おう

(更新

ChatGPT enables easy weather data analysis and blog automation, with future AI developments enhancing data processing and content generation.

A scene depicting a retro 1980s robot writing a weather report. The robot, designed with blocky shapes and minimal features, sits at a desk in a simple room. The weather outside is stormy, with a typhoon raging—strong winds and rain are visible through a large window. In the distance, a small weather station (Stevenson screen) can be seen in the backyard. The color palette is soft and muted, with the stormy atmosphere outside contrasting with the calm interior. The style is flat and minimalist, using a retro-futuristic aesthetic and simple lines.

相模原市で IoT 設計を受託しているファームロジックスです。

最近、ChatGPT を提供している OpenAI 社がリリース予定と噂されている次期 AI モデル「Strawberry」や「Orion」が話題となっています。現在の GPT-4o も十分に強力ですが、これからの AI の進化にますます期待が高まります。

ChatGPT で数値データ分析をしてみよう

さて、今日の話題は数値データ分析です。数値データの分析、例えば異常値検出といった分野では、ランダムフォレストやオートエンコーダなどの深層学習の技術が利用されることが増えているかと思います。最近はプログラミングなしに、分類(classification)、回帰(regression)といった問題を深層学習で処理するツールが登場しているようですが、まだまだハードルが高いのではないかと思います。

そこで今回は、ChatGPT を利用している人であれば、すぐに試してみることができる手法を御紹介しましょう。題材としては、私が普段から収集しているリアルタイム気象データを使いたいと思います。例えば、先週と今週の気温・露点(湿度)データを用いて、天気の傾向を分析することはできるでしょうか。

データを用意する

私は気温や湿度のデータを Elasticsearch というデータベースに保管し、Grafana で閲覧できるようにしています。これを利用して、過去の気温と露点のデータを CSV でダウンロードしてみました。

  • 過去 1週間のデータ temp_dewpoint_thisweek.csv
    (一部、センサあるいはマイコンの問題で欠損値があります。御了承ください。)

これを ChatGPT にアップロードしてみましょう。

Temp Dewpoint Thisweek 自宅の気象計で取得した、過去 1週間の気温と露点のデータがあります。それをアップロードします。 ChatGPT said: ChatGPT アップロードされたデータには、「Time(時刻)」「temp(気温)」「dewpoint(露点)」の3つの列があります。データは2024年9月4日からの気温と露点が10分間隔で記録されているようです。 このデータをどのように処理したいか、ご希望を教えていただけますか? 例えば、グラフを作成する、特定の解析を行う、などが可能です。 ​

それでは、次のような指示をしてみましょう。

: 過去 1週間の天気の傾向を評価してください。

    • 露点からは相対湿度(RH%)を導出してください。
    • 気温や湿度から、日中や朝晩の過ごしやすさを検討してください。
    • 週の前半から後半までの変化を分析してください。

以下が結果です。

過去1週間の気象データを評価した結果は以下の通りです。 日中と夜間の気候評価 日中 平均気温:29.68°C 平均湿度:73.58% 夜間 平均気温:27.59°C 平均湿度:82.81%

日中は気温が高く、湿度もそこそこ高いため、蒸し暑い可能性があります。一方、夜間は若干涼しくなるものの、湿度がさらに高くなるため、湿気を感じやすい状況です。 週の前半と後半の変化 週の前半 平均気温:28.23°C 平均湿度:76.30% 週の後半 平均気温:29.04°C 平均湿度:80.10% 週の前半に比べ、後半では気温がやや上昇し、湿度も増加しているため、後半のほうが少し蒸し暑いと感じる可能性が高いです。 全体的に、日中は過ごしやすさがやや厳しく、夜間は気温が下がるものの、湿度が高いため快適さには欠けるかもしれません。週後半にかけて、さらに蒸し暑さが増していることがわかります。 ​

なかなか面白いですね。回帰分析のような厳密な数値解析には及ばないかも知れませんが、参考にはなると思います。

ちなみに、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週間前のデータと比較させよう

さらに、一週間前のデータも用意してみました。

まず最初に、(ChatGPT には見せませんが)われわれの目的のために、過去 2週間分のデータをプロットしておきます。(グラフをマウスで拡大表示したりなど、自由に閲覧したい場合はこちらからどうぞ。)

それでは、ChatGPT に指示しましょう。

: 次に、さらに 1週間前のデータをアップロードします。この週と、先ほどアップロードしたデータの週を比較分析し、ここ 1週間の間で、天気の傾向にどのような変化があったか考察してください。

    • 湿度から推定して、晴れの日、雨の日の傾向の変化を捉える
    • 温度と湿度から考えて、朝晩に過ごしやすくなったのか、あるいは過ごしにくくなったのか

次に、さらに 1週間前のデータをアップロードします。この週と、先ほどアップロードしたデータの週を比較分析し、ここ 1週間の間で、天気の傾向にどのような変化があったか考察してください。 - 湿度から推定して、晴れの日、雨の日の傾向の変化を捉える - 温度と湿度から考えて、朝晩に過ごしやすくなったのか、あるいは過ごしにくくなったのか ChatGPT said: ChatGPT Previous Week Weather Data With RH% 過去1週間とそのさらに前の1週間の気象データを比較すると、以下のような傾向が見られました。

日中の変化 気温の差: 今週の気温は、前の週に比べて約2.18°C上昇しています。 湿度の差: 今週の湿度は前週に比べて約13.36%低下しています。 日中の気温は上昇しましたが、湿度が大きく下がったため、比較的乾燥した状況になり、蒸し暑さが軽減された可能性があります。湿度が低下していることから、今週は前の週よりも晴れの日が多かったことが推測されます。 夜間の変化 気温の差: 今週の夜間の気温は、前の週に比べて約1.22°C上昇しています。 湿度の差: 今週の湿度は前週に比べて約8.02%低下しています。 夜間も気温が上昇し、湿度は低下しました。夜間の湿度が少し下がったことで、前週よりも夜間の過ごしやすさが若干改善した可能性があります。 考察 全体的に、今週は前の週に比べて気温が上昇しつつも、湿度が下がっているため、特に日中は過ごしやすくなっていると考えられます。また、湿度が低下していることから、晴れの日が増加し、雨の日が減少した可能性があります。 ​

なかなかうまく分析できているのではないかと思います。実際、1週間前は台風 10号の影響で雨がちの天気であり、湿度の高い日が多かったのです。ただし、「夜間の過ごしやすさが改善」したかどうかは、人それぞれの感覚もあるでしょうが、私個人的には、夜間の気温が高くなったことで、あまり過ごしやすくなったとは感じていません。

雨が降っていた日は?

私の家の百葉箱(気象計)には降雨センサーがないので、上記のデータそのものでは降雨の状況は分かりません。しかし、湿度が非常に高いときには雨が降っていたと考えることができると思います。以下のように指示してみましょう。

: ところで、相対湿度が 95%以上のときに雨が降っていたと仮定しましょう。過去 2週間で雨が降っていた日を推定し、降雨量の推測として(大雨の可能性、ある程度の雨の可能性、おそらく雨は降っていない)という形で分類してください。

以下が結果です。

ところで、相対湿度が 95%以上のときに雨が降っていたと仮定しましょう。過去 2週間で雨が降っていた日を推定し、降雨量の推測として(大雨の可能性、ある程度の雨の可能性、おそらく雨は降っていない)という形で分類してください。 ChatGPT said: ChatGPT Current Week Rain Classification Previous Week Rain Classification 過去2週間の相対湿度データに基づいて雨の日を推定し、以下のような傾向が見られました。

直近1週間の雨の傾向(2024年9月4日〜9月11日) 大雨の可能性: 記録には見られませんでした。 ある程度の雨の可能性: 毎日少しずつ「ある程度の雨の可能性」がありましたが、大雨の兆候は見られません。特に9月9日と10日は「ある程度の雨の可能性」が最も多く示されています。 さらに1週間前の雨の傾向(2024年8月28日〜9月4日) 大雨の可能性: 8月29日、8月30日、8月31日、9月1日、9月2日には大雨の可能性がある日が複数回記録されています。特に8月30日は大雨の可能性が非常に高かったです。 ある程度の雨の可能性: ほぼ毎日「ある程度の雨の可能性」があり、特に8月29日と9月3日に多くの雨が降っていた可能性があります。 考察 過去2週間で見ると、前の週(8月28日〜9月4日)のほうが、湿度が高く、大雨の可能性が高い日が多くありました。一方、今週(9月4日〜9月11日)は「ある程度の雨の可能性」はあるものの、大雨はほぼなかったと推測されます。気温が上昇して湿度が下がっているため、今週は前の週に比べて雨が少なく、過ごしやすい日が多かったようです。 ​​

「湿度 95% 以上」という指定がやや恣意的な感じもしますが、なかなかの分析だと思います。気象庁の以下のデータを見るように、8月30日は台風に影響もあり大雨でした。

横浜(神奈川県) 2024年8月(日ごとの値) 主な要素

最後にブログ記事を書いて貰おう

ついでと言ってはなんですが、折角 LLM に気象データの分析をして貰ったので、お得意の文章作成をしてもらいましょう。

: 最後に、私のブログの記事冒頭として、過去2週間の天気の概況を 200字程度でまとめたいです。季節感、朝晩の過ごしやすさ、降雨の可能性に論点を置いてお願いします。

最後に、私のブログの記事冒頭として、過去2週間の天気の概況を 200字程度でまとめたいです。季節感、朝晩の過ごしやすさ、降雨の可能性に論点を置いてお願いします。 ChatGPT said: ChatGPT 過去2週間の天気は、徐々に秋の気配が感じられる変化が見られました。1週目(8月28日〜9月4日)は湿度が高く、特に大雨の可能性がある日も多かったため、蒸し暑い日が続きました。しかし、2週目(9月4日〜9月11日)は気温はやや上昇したものの、湿度が低下し、降雨の可能性も少なくなったため、日中は比較的過ごしやすい天気でした。特に朝晩は気温が下がり、秋らしい涼しさを感じられる日も増えました。

ChatGPT: 過去2週間の天気は、徐々に秋の気配が感じられる変化が見られました。1週目(8月28日〜9月4日)は湿度が高く、特に大雨の可能性がある日も多かったため、蒸し暑い日が続きました。しかし、2週目(9月4日〜9月11日)は気温はやや上昇したものの、湿度が低下し、降雨の可能性も少なくなったため、日中は比較的過ごしやすい天気でした。特に朝晩は気温が下がり、秋らしい涼しさを感じられる日も増えました。

いかがでしたでしょうか。ちょっとそのままでは原稿にはならないかも知れませんが、日本気象協会の天気概況のような記事が、AI にも書けそうな感じがしてきますね。

今日はここまでとしましょう。

お問い合わせはお気軽に!

お問い合わせを頂いた後、継続して営業活動をしたり、ニュースレター等をお送りしたりすることはございません。
御返答は 24時間以内(営業時間中)とさせて頂いております。必ず返信致しますが、時々アドレス誤りと思われる返信エラーがございます。返答が届かない場合、大変お手数ではございますが別のメールアドレスで督促頂けますと幸いです。

コメントを残す