사내 연구회 기계 학습 입문(8.기온 예측해 보자)
소재
지난 10년간 기상 데이터를 사용하여 어느 날의 기온을 예측하고 싶습니다.
기상 데이터는 기상청 사이트에 공개되어 있으므로 이 데이터(csv 파일)를 다운로드하여 사용합시다.
기상청 사이트
↑를 클릭해, 우선은, 「거점을 선택한다」에서 [사이타마]→[고시야]를 선택해 주세요.
계속해서 「항목을 선택한다」로 데이터의 종류:일별치, 항목으로서 일평균 기온을 선택해 주세요.
계속해서 「기간을 선택한다」로 2009년 1월 1일~2018년 12월 31일을 지정해 주십시오.
지정한 내용이 올바른지 확인한 후 [CSV 파일 다운로드] 버튼을 누르십시오.
파일 이름은 "data.csv"로 C:\ml-intro 바로 아래에 저장하십시오.
데이터를 보자.
「data.csv」를 텍스트 에디터로 열면 ↓와 같이 되어 있네요.
방해하는 헤더행도 있거나 하고, 이대로는 사용할 수 있을 것 같지 않으므로, 가공해 사용합시다.
「data.csv」를 학습에 사용할 수 있는 데이터에 가공해, 「koshigaya_kion.csv」라고 하는 다른 파일명으로 보존한다.
#
# ダウンロードした「data.csv」を学習に使えるデータへ加工し、「koshigaya_kion.csv」という別のファイル名で保存
#
in_file = "data.csv"
out_file = "koshigaya_kion.csv"
# CSVファイルを読み込む
with open(in_file, "rt", encoding="Shift_JIS") as fr:
lines = fr.readlines()
# 先頭から5レコード分を削除し、新たな行ヘッダをつける
lines = ["年,月,日,気温,品質,均質\n"] + lines[5:]
# / を , に置換している(年、月、日をカンマで分離するため)
lines = map(lambda v: v.replace('/', ','), lines)
# joinで改行付きの全レコードを結合したあと、stripメソッドで最終レコードの改行だけを取り除く
result = "".join(lines).strip()
# 加工された結果を out_file で指定したファイル名で出力する
with open(out_file, "wt", encoding="utf-8") as fw:
fw.write(result)
print("saved.")
가공 후의 파일(파일명:koshigaya_kion.csv)
목표까지의 단계
「data.csv」를 텍스트 에디터로 열면 ↓와 같이 되어 있네요.
방해하는 헤더행도 있거나 하고, 이대로는 사용할 수 있을 것 같지 않으므로, 가공해 사용합시다.
「data.csv」를 학습에 사용할 수 있는 데이터에 가공해, 「koshigaya_kion.csv」라고 하는 다른 파일명으로 보존한다.
#
# ダウンロードした「data.csv」を学習に使えるデータへ加工し、「koshigaya_kion.csv」という別のファイル名で保存
#
in_file = "data.csv"
out_file = "koshigaya_kion.csv"
# CSVファイルを読み込む
with open(in_file, "rt", encoding="Shift_JIS") as fr:
lines = fr.readlines()
# 先頭から5レコード分を削除し、新たな行ヘッダをつける
lines = ["年,月,日,気温,品質,均質\n"] + lines[5:]
# / を , に置換している(年、月、日をカンマで分離するため)
lines = map(lambda v: v.replace('/', ','), lines)
# joinで改行付きの全レコードを結合したあと、stripメソッドで最終レコードの改行だけを取り除く
result = "".join(lines).strip()
# 加工された結果を out_file で指定したファイル名で出力する
with open(out_file, "wt", encoding="utf-8") as fw:
fw.write(result)
print("saved.")
가공 후의 파일(파일명:koshigaya_kion.csv)
목표까지의 단계
학습에 사용하는 알고리즘은 선형 회귀를 사용합니다.
[참고 정보] htps : // Enginee rs.ぇぢぢgぱrk. 이. jp/? p=872
여기에서가 본제! 기계 학습 프로그램을 작성해 봅시다.
## 필요한 라이브러리 가져오기
from sklearn.linear_model import LinearRegression
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
## 1. 'koshigaya_kion.csv'를 로드합니다.
# 平均気温データ(越谷市 2009年1月~2018年12月までの10年分)の読み込み
temper_data = pd.read_csv('koshigaya_kion.csv', encoding="utf-8")
## 2. 훈련용 데이터(2009~2017년)와 테스트용 데이터(2018년)를 작성한다.
# 元データを訓練用(9年)とテスト用(1年)に一旦分離
train_year = (temper_data["年"] <= 2017) # 2017年までを訓練用
test_year = (temper_data["年"] >= 2018) # 2018年以降をテスト用
interval = 6
# 過去6日分(説明変数) と その翌日(目的変数) をセットとした訓練用データを9年分作る
def make_data(data):
x = [] # 説明変数
y = [] # 目的変数
temps = list(data["気温"])
for i in range(len(temps)):
if i < interval: continue
y.append(temps[i])
xa = []
for p in range(interval):
d = i + p - interval
xa.append(temps[d])
x.append(xa)
return (x, y)
train_x, train_y = make_data(temper_data[train_year]) # 訓練用データ
test_x, test_y = make_data(temper_data[test_year]) # テスト用データ
## 3. 훈련 데이터를 사용하여 학습.
lr = LinearRegression(normalize=True)
lr.fit(train_x, train_y)
## 4. 테스트용 데이터를 주어 2018년(1년분)의 기온을 예측한다.
pre_y = lr.predict(test_x)
## 5. 「예측한 결과(파란색)」와 「2018년의 정답(빨간색)」을 그래프에 플롯하여 결과의 정밀도를 살펴본다.
plt.figure(figsize=(10, 6), dpi=100)
plt.plot(test_y, c='r')
plt.plot(pre_y, c='b')
plt.savefig('tenki-kion-lr.png')
plt.show()
파랑과 빨강의 라인이 그렇게 크게는 떨어져 있지 않네요!
요약
이번에는 실제 기상 데이터를 바탕으로 '회귀 분석'에 의한 미래의 기온 예측을 해 보았습니다.
다음 번은, 좀 더 업무의 데이터를 취급해 보고 싶다,,, 검토중!
Reference
이 문제에 관하여(사내 연구회 기계 학습 입문(8.기온 예측해 보자)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/masami310/items/76e1670e72cb94876da1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
from sklearn.linear_model import LinearRegression
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 平均気温データ(越谷市 2009年1月~2018年12月までの10年分)の読み込み
temper_data = pd.read_csv('koshigaya_kion.csv', encoding="utf-8")
# 元データを訓練用(9年)とテスト用(1年)に一旦分離
train_year = (temper_data["年"] <= 2017) # 2017年までを訓練用
test_year = (temper_data["年"] >= 2018) # 2018年以降をテスト用
interval = 6
# 過去6日分(説明変数) と その翌日(目的変数) をセットとした訓練用データを9年分作る
def make_data(data):
x = [] # 説明変数
y = [] # 目的変数
temps = list(data["気温"])
for i in range(len(temps)):
if i < interval: continue
y.append(temps[i])
xa = []
for p in range(interval):
d = i + p - interval
xa.append(temps[d])
x.append(xa)
return (x, y)
train_x, train_y = make_data(temper_data[train_year]) # 訓練用データ
test_x, test_y = make_data(temper_data[test_year]) # テスト用データ
lr = LinearRegression(normalize=True)
lr.fit(train_x, train_y)
pre_y = lr.predict(test_x)
plt.figure(figsize=(10, 6), dpi=100)
plt.plot(test_y, c='r')
plt.plot(pre_y, c='b')
plt.savefig('tenki-kion-lr.png')
plt.show()
이번에는 실제 기상 데이터를 바탕으로 '회귀 분석'에 의한 미래의 기온 예측을 해 보았습니다.
다음 번은, 좀 더 업무의 데이터를 취급해 보고 싶다,,, 검토중!
Reference
이 문제에 관하여(사내 연구회 기계 학습 입문(8.기온 예측해 보자)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/masami310/items/76e1670e72cb94876da1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)