[ZeroBase]テーブル列データ(Time Series Data)
27339 ワード
テーブル列データとは?
クロック列データ分析の目的:
時計列の持つ規則性を発見し、それをモデル化し、推定したモデルを通じて未来の値を予測する!
表列データの例:
表列データ型(4種類):
変動要因は一般に4種類と仮定し,変動要因を把握できる.
トレンド変動
季節変動
じゅんかんへんどう
ランダム変動
クロック列データ解析(feat.fbprofetを使用)
1. 📋Fbprobet練習!
データを作成したらfbe預言者を使ってみます# conda 가상환경에 datareader설치
conda install pandas -datareader
# terminal 혹은 conda환경에서 fbprophet 설치
pip install fbprophet
import fbprophet import Prophet
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
#시작 위치 및 간격 설졍
time = np.linspace(0, 1, 365 *2)
result = np.sin(2*np.pi * 12 * time)
# 날짜 데이터 생성
ds = pd.date_range("2018-01-01", periods=365*2, freq="D")
df = pd.DataFrame({"ds" : ds, "y": result})
# 년 단위로 학습, 하루 단위로 학습
m = Prophet(yearly_seasonality=True, daily_seasonality=True)
# 예측된 모델에 위에서 생성한 df 적용
m.fit(df)
# 앞으로의 30일 데이터 변동사항 예측
future=m.make_future_dataframe(periods=30)
forecast = m.predict(future)
# 결과 확인
m.plot(forecast)
点と線で描かれたグラフは学習用のデータを表し、線で描かれたグラフは今後30日間を予測します.
学習の結果から,従来の図案に類似した図案の図形が描かれていることが分かる.
2. 📺クロック列データのリアルタイム使用
(1). Web Traffice予測
# conda 가상환경에 datareader설치
conda install pandas -datareader
# terminal 혹은 conda환경에서 fbprophet 설치
pip install fbprophet
import fbprophet import Prophet
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
#시작 위치 및 간격 설졍
time = np.linspace(0, 1, 365 *2)
result = np.sin(2*np.pi * 12 * time)
# 날짜 데이터 생성
ds = pd.date_range("2018-01-01", periods=365*2, freq="D")
df = pd.DataFrame({"ds" : ds, "y": result})
# 년 단위로 학습, 하루 단위로 학습
m = Prophet(yearly_seasonality=True, daily_seasonality=True)
# 예측된 모델에 위에서 생성한 df 적용
m.fit(df)
# 앞으로의 30일 데이터 변동사항 예측
future=m.make_future_dataframe(periods=30)
forecast = m.predict(future)
# 결과 확인
m.plot(forecast)
準備:
import pandas as pd
import pandas_datareader as web
import numpy as np
import matplotlib.pyplot as plt
from fbprophet import Prophet
from datetime import datetime
%matplotlib inline
pinkwink_web = pd.read_csv(
"..웹 트래픽 정보가 있는 csv 파일", encoding="utf-8", thousands=",", names=["date", "hit"], index_col = 0
)
データ情報の検証
pinkwin_web.info()
Null値の処理
pinkwink_web = pinkwink_web[pinkwink_web["hit"].notnull()]
データの描画
pinkwink_web["hit"].plot(figsize=(12, 4), grid=True)
トレンド分析を可視化するためのx軸値の作成
time = np.arange(0, len(pinkwink_web))
traffic = pinkwin_web["hit"].values
fx = np.linspace(0, time[-1], 1000)
# 몇차원 그래프에서 가장 예측을 잘 하는지 1차, 2차, 3차, 15차, 20차원 그래프로 테스트
fp1 = np.polyfit(time, traffic, 1)
f1 = np.poly1d(fp1)
fp2 = np.polyfit(time, traffic, 2)
f2 = np.poly1d(fp2)
fp3 = np.polyfit(time, traffic, 3)
f3 = np.poly1d(fp3)
fp15 = np.polyfit(time, traffic, 15)
f15 = np.poly1d(fp15)
fp20 = np.polyfit(time, traffic, 20)
f20 = np.poly1d(fp20)
グラフィックの表示
plt.figure(figsize=(12, 4))
plt.scatter(time, traffic, s=10)
plt.plot(fx, f1(fx), lw=4, label='f1')
plt.plot(fx, f2(fx), lw=4, label='f2')
plt.plot(fx, f3(fx), lw=4, label='f3')
plt.plot(fx, f15(fx), lw=4, label='f15')
plt.plot(fx, f20(fx), lw=4, label='f20')
plt.grid(True, linestyle="-", color="0.75")
plt.legend(loc=2)
plt.show()
20次元関数紫色の予測効果が最も良好であることが確認できた.
fbemoreを使用して将来を予測する
m = Prophet(yearly_seasonality=True, daily_seasonality=True)
# 새로운 DataFrame 생성
df = pd.DataFrame({"ds":pinkwink_web.index, "y": pinkwink_web["hit"]})
# 인덱스값 새로 설정한 후 저장
df.reset_index(inplace=True)
df["ds"] = pd.to_datetime(df["ds"], format="%y. %m. %d.")
# 미래 예측 (60일)
future = m.make_future_dataframe(periods=60)
# 예측 결과는 상한/하한의 범위를 포함해서 얻어진다.
forecast = m.predict(future)
forecast[["ds", "yhat", "yhat_lower", "yhat_upper"]].tail()
m.plot(forecast)
(2). 株式データ予測
データソース:yahoo finance
目的:株式データを使用して、プロジェクトの将来の価格を予測します.
データの読み込み
# yahoo finance 설치
!pip install finance
# 기아 자동차의 종목코드를 가지고 기간을 입력한다.
import yfinance as yf
from pandas_datareader import data
yf.pdr_override()
start_date = "2010-03-01"
end_date = "2018-02-28"
KIA = data.get_data_yahoo("000270.KS", start_date, end_date)
KIA.head()
データ検証
KIA["Close"].plot(figsize=(12,10), grid=True)
精度の確認
インポートされたデータのほんの一部のみを使用して、最近のデータのトレンドを表示します.
# ~ 2017-11-30일까지의 데이터만 불러오기
KIA_trunc = KIA[:"2017-11-30"]
KIA_trunc.tail()
未来を予測する
# forecast를 위한 준비
df = pd.DataFrame({"ds": KIA_trunc.index, "y":KIA_trunc["Close"]})
df.reset_index(inplace=True)
# 필요없는 column 삭제 특성상 필요없기에 사
del df["Date"]
#
m = Prophet(yearly_seasonality=True, daily_seasonality=True)
# 향후 90일간의 데이터 예측
future = m.make_future_dataframe(periods=90)
forecast = m.predict(future)
m.plot(forecast)
予測結果の検証:
검은 점들을 기본으로 하여 향후 90일을 예측한 결과이다. 실제 데이터인 파란색 선이 오차범위내에 포함되어 있는 것으로 보아 예측을 잘 한 것 같다.
KIA는 화요일과 수요일에 가장 높게 종목이 오르며, 여름 오기전인 월달에 가장 주가가 높다는 것을 알 수 있다. 시간 단위로 KIA 종목을 확인한다면, 오전 9시부터 장 마감 시간인 오후 3시 30분까지 일정한 패턴으로 요동치는 것을 확인할 수 있다.
(3). 特殊な形式のテーブル列データ予測
データインポートとデータ検証
df = pd.read_csv(".......", index_col = 0)
df
データをグラフィックス化すると、ログ関数の性質がわかります.
予測
m = Prophet(growth="logistic", daily_seasonality=True)
予測結果の決定
future = m.make_future_dataframe(periods=1826)
future["cap"] = 8.5
forecast = m.predict(future)
m.plot(forecast)
Reference
この問題について([ZeroBase]テーブル列データ(Time Series Data)), 我々は、より多くの情報をここで見つけました https://velog.io/@sdubee10/ZeroBase-시계열데이터-Time-Series-Dataテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol