EDA 5 - 시계열 분석

subinii·2024년 4월 16일

DS 25기

목록 보기
25/46

05. forecast(시계열 분석)

설치

from pandas_datareader import data
from prophet import Prophet

1. 함수를 사용해 그래프 그리기

def plotSinWave(amp, freq, endTime, sampleTime, startTime, bias):
    """
    plot sine wave
    y = asin(2 pi f t + t_0) + b
    """
    time = np.arange(startTime, endTime, sampleTime)
    result = amp * np.sin(2 * np.pi * freq * time + startTime) + bias

    plt.figure(figsize=(12,6))
    plt.plot(time, result)
    plt.grid(True)
    plt.xlabel("time")
    plt.ylabel("sin")
    plt.title(str(amp) + "*sin(2*pi)" + str(freq) + "*t+" + str(startTime) + ")+" + str(bias))
    plt.show()

def plotSinWave(** kwargs):
    """
    plot sine wave
    y = asin(2 pi f t + t_0) + b
    """
    endTime = kwargs.get("endTime", 1)
    sampleTime = kwargs.get("sampleTime", 0.01)
    amp = kwargs.get("amp", 1)
    freq = kwargs.get("freq", 1)
    startTime = kwargs.get("startTime", 0)
    bias = kwargs.get("bias", 0)
    figsize = kwargs.get("figsize", (12, 6))
    
    time = np.arange(startTime, endTime, sampleTime)
    result = amp * np.sin(2 * np.pi * freq * time + startTime) + bias

    plt.figure(figsize=(12,6))
    plt.plot(time, result)
    plt.grid(True)
    plt.xlabel("time")
    plt.ylabel("sin")
    plt.title(str(amp) + "*sin(2*pi)" + str(freq) + "*t+" + str(startTime) + ")+" + str(bias))
    plt.show()

내가 만든 함수 import 하기

%%writefile ./drawSinWave.py

import numpy as np
import matplotlib.pyplot as plt 

def plotSinWave(** kwargs):
    """
    plot sine wave
    y = asin(2 pi f t + t_0) + b
    """
    endTime = kwargs.get("endTime", 1)
    sampleTime = kwargs.get("sampleTime", 0.01)
    amp = kwargs.get("amp", 1)
    freq = kwargs.get("freq", 1)
    startTime = kwargs.get("startTime", 0)
    bias = kwargs.get("bias", 0)
    figsize = kwargs.get("figsize", (12, 6))
    
    time = np.arange(startTime, endTime, sampleTime)
    result = amp * np.sin(2 * np.pi * freq * time + startTime) + bias

    plt.figure(figsize=(12,6))
    plt.plot(time, result)
    plt.grid(True)
    plt.xlabel("time")
    plt.ylabel("sin")
    plt.title(str(amp) + "*sin(2*pi)" + str(freq) + "*t+" + str(startTime) + ")+" + str(bias))
    plt.show()

if __name__ == "__main__":
    print("hello world")
    print("this is test graph")
    plotSineWave(amp=1, emdTime=2)

2. prophet 기초

  1. date_range를 이용해 DataFrame 만들기

  2. 예측한 값 저장 후 시각화하기

3. 시계열 데이터 실전 이용해보기

  1. 웹 데이터 가져오기
  2. 전체 데이터 그리기
  3. 트렌드 분석을 시각화하기 위한 x축 만들기
time = np.arange(0, len(pinkwink_web))
traffic = pinkwink_web["hit"].values
fx = np.linspace(0, time[-1], 1000)
  1. 에러를 계산할 함수
def error(f ,x, y):
    return np.sqrt(np.mean((f(x) - y) **2))
fp1 = np.polyfit(time, traffic, 1)
f1 = np.poly1d(fp1)

f2p = np.polyfit(time, traffic, 2)
f2 = np.poly1d(f2p)

f3p = np.polyfit(time, traffic, 3)
f3 = np.poly1d(f3p)

f15p = np.polyfit(time, traffic, 15)
f15 = np.poly1d(f15p)
print(error(f1, time, traffic))
print(error(f2, time, traffic))
print(error(f3, time, traffic))
print(error(f15, time, traffic))

  1. 60일에 해당하는 데이터 에측
  1. 예측 결과는 상환/화한의 범위를 포함해서 얻어진다.
m.plot(forecast);

m.plot_components(forecast);

“이 글은 제로베이스 데이터 취업 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다.”

profile
데이터 공부 기록

0개의 댓글