0
4

初心者がPythonで東京の降水量を予測してみました

Posted at

気象庁から気象データ(気温、降水量、湿度)をダウンロードして東京の降水量を予測してみました。

はじめに
現在、製造業に勤めており、昔から興味のあったプログラミングに挑戦する事を決意しました。
スクールを選ぶ中で、Pythonに強いAidemy Premiumを選ぶ事にしました。


実行環境

Python
Windows
Qiita
Google Colaboratory


目次
1. テーマを選んだ理由
2. 気象データの中身
3. データ前処理
4. モデルのトレーニング
5. モデルの評価とグラフの表示
6. まとめ


1. テーマを選んだ理由
趣味がキャンプとツーリングの為、降水量が気になる事から選ばせて貰いました。


2. 気象データの中身
期間 : 2022/6/01 ~ 2022/6/30
場所 : 東京

まずデータの準備をします。

import pandas as pd

data = {
    'Day': [
        '2022/6/1', '2022/6/2', '2022/6/3', '2022/6/4', '2022/6/5', '2022/6/6',
        '2022/6/7', '2022/6/8', '2022/6/9', '2022/6/10', '2022/6/11', '2022/6/12',
        '2022/6/13', '2022/6/14', '2022/6/15', '2022/6/16', '2022/6/17', '2022/6/18',
        '2022/6/19', '2022/6/20', '2022/6/21', '2022/6/22', '2022/6/23', '2022/6/24',
        '2022/6/25', '2022/6/26', '2022/6/27', '2022/6/28', '2022/6/29', '2022/6/30'
    ],
    'rainfall': [
        0, 0, 5, 0, 0, 43.5, 3.5, 0, 0, 0, 0.5, 0.5, 0, 0.5, 3, 0, 0, 2.5, 0, 0, 0.5,
        4.5, 0, 0, 0, 0, 0, 0, 0, 0
    ],
    'humidity': [
        60, 70, 83, 68, 76, 97, 90, 82, 83, 78, 80, 72, 53, 80, 95, 87, 83, 90, 83, 81,
        80, 87, 87, 75, 67, 61, 65, 71, 71, 66
    ],
    'temperature': [
        21.8, 22.5, 20.6, 20.3, 21.5, 16.6, 16.8, 17.2, 19.1, 21.2, 21.9, 21.4, 21.2,
        17.3, 16.9, 20.3, 22.8, 22.7, 24, 25.1, 25.2, 23.8, 23.5, 27.5, 30, 29.6, 29.5,
        29.2, 29.4, 30.8
    ]
}

df = pd.DataFrame(data)
df['Day'] = pd.to_datetime(df['Day'])

3. データの前処理
次に、データの前処理を行います。

from sklearn.model_selection import train_test_split

X = df[['humidity', 'temperature']]
y = df['rainfall']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

4. モデルのトレーニング
モデルのトレーニングを行います。

from sklearn.linear_model import LinearRegression

model = LinearRegression()

model.fit(X_train, y_train)

5. モデルの評価とグラフの表示
評価とグラフの表示を行い可視化しやすいようにします。

import matplotlib.pyplot as plt

y_pred = model.predict(X_test)


plt.figure(figsize=(10, 5))
plt.plot(df['Day'], df['rainfall'], label='Actual Rainfall')
plt.scatter(df.loc[X_test.index, 'Day'], y_pred, color='red', label='Predicted Rainfall')
plt.xlabel('Day')
plt.ylabel('Rainfall (mm)')
plt.title('Actual vs Predicted Rainfall')
plt.legend()
plt.grid(True)
plt.show()

image.png


6. まとめ
データ分析講座を受講してから初めて予測まで作ったのでとても勉強になりました。
わからない部分は、ネットで検索したり教材を見直したりで勉強しながらだったので一部、歪な部分があると思います。
又、このブログはAidemy Premiumのカリキュラムの一環で、受講修了条件を満たすために公開しています。

0
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
4