みなさん、こんにちは。
今回はSklearnで線形回帰の2回目です。
東京の過去の気温データを使って、気温予想をしてみます。
プログラムの内容
東京の過去の7月の平均気温データから線形回帰して、2021年の7月の平均気温を予想してみます。2021年7月は過ぎているので、実際の気温と予想された気温が比較出来ます。
気温データは気象庁のデータからダウンロードしたものになります。1875年から2020年までの7月の気温データを用います。
LibreOffice Calc 表計算データの読み取り
過去のデータを、Libreofficeの表計算ソフト Calcのファイルに保存します。
PYTHONでLibreOffice Calcの表計算データを読み取るには、ライブラリ『odfpy』が必要になります。
インストールされていなければ、下記のコマンドを実行してインストールして下さい。
pip install odfpy
エクセルファイルに貼り付ける場合は、odfのライブラリは不要になります。
プログラムコード
import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
file = "C:/Labo/tokyo-temp.ods"
df = pd.read_excel(file, engine="odf", sheet_name='Sheet1', header=1)
np_year = df.iloc[:, [0]].values
np_temp = df.iloc[:, [1]].values
reg = LinearRegression().fit(np_year, np_temp)
print(reg.predict(np.array([[2021]])))
1~3行目 ライブラリをインポート
pandasはLibreCalcのデータを読み取る際に使用します。
numpyはSklearnのデータの受け渡しで使用します。
LinearRegressionは線形回帰の関数になります。
5行目 データファイルの定義
データファイルの保存場所を定義します。
7行目 データファイルの読み込み
df = pd.read_excel(file, engine="odf", sheet_name='Sheet1', header=1)
LibreOfficeの場合、 engine=”odf” というオプションが付き、エクセルファイルの場合は付きません。なので、LibreOfficeだからといって、これ以外の特別なことはありません。
sheet_name=’Sheet1′ はシート名が”Sheet1”のデータから読み取るということです。記述していなければ、最初のシートのデータ読み込まれます。
header=1 は1行目がヘッダー(タイトル)になっているということで、2行目からデータということになります。
これで、pandas形式のデータフレームにデータが格納されました。
10,11行目 Numpy形式の配列に変換
np_year = df.iloc[:, [0]].values
np_temp = df.iloc[:, [1]].values
前回もお伝えしましたが、Sklearnのデータの受け渡しはNumpy配列になります。
pandasのデータフレームからNumpy配列 np.arrayに変換します。
np_yearには年、np_tempには気温のデータが入ります。
13行目 線形回帰直線の計算
reg = LinearRegression().fit(np_year, np_temp)
線形回帰の計算をします。
15行目 2021年の気温予想
print(reg.predict(np.array([[2021]])))
>>[[26.27086207]]
2021年の気温を出力します。この場合もnp.arrayでデータを入力します。
予想結果は26.27となります。実際は25.9度なので、少し差がありますね。
2050年で計算すると、26.75度となり、年数が経つにつれて気温が高くなってくるというのは分かります。
まとめ
いかだったでしょうか。
今回はSklearnと東京の過去の気温データを使い、線形回帰での気温予想の方法を紹介しました。
データ量が多いと予想値に信頼性が出てきます。是非、その他いろいろなデータを使って予想して下さいね。
「役に立った!」と思れましたら、下のSNSボタンで記事のシェアをしていただけると嬉しいです!
コメント