✏️데이터 취업 스쿨 스터디 노트(forcast)

Cheon Bumin·2023년 12월 28일

Study Note✏️

목록 보기
17/17

12/29 Data Study to do

  • 시계열 분석 (Ch6. 시계열 분석, 1-10강)

오늘 공부 요약짤...🥲


📌공부 내용

✅ 함수(def) 기초

  • 함수(def) 선언 : def def_name(입력, 인자):
  • 함수 선언 이후 코드는 들여쓰기 필수
  • 변수의 종류 : 전역변수(global)과 지역변수(local)
  • 함수 내에서 전역변수를 쓰고 싶다면 'global' 호출 필수 (ex. global a)

✅ 함수(def) 모듈화

  • 만들어진 파일 내용을 수정하고 싶다면 코드가 작성된 셀에서 수정 후 재실행
  • matplotlib 한글 허용 함수 작성
    → 모듈 파일 내 호출 함수가 있어도 실행 파일에서 한번 더 호출 필요

✅ prophet 기초

  • Prophet 함수를 통해 미래 데이터 예측 및 데이터 생성 가능
  • Prophet 프로세스
    1. 시계열 데이터 준비
    2. 사용할 모델 객체 생성
      • (Prophet(yearly_seasonality=True, daily_seasonality=True))
    3. 시계열 데이터를 모델 객체에 학습 (model_name.fit(data))
    4. 예측할 기간 설정 및 데이터 프레임에 기간 추가
      • (model_name.make_future_dataframe(periods=day))
    5. 예측한 미래 데이터 생성 (model_name.predict(▲ code_name))
    6. 그래프 생성 (model_name.plot(▲ code_nam))
  • Prophet에 들어가는 주기성 옵션은 명시적으로 추가 필요
  • 시계열 데이터 : 시간의 흐름, 계절성, 시간에 따른 변동성, 이벤트 영향 등 시간 간격으로 기록된 데이터

✅ 블로그 트래픽 예측

  • 데이터 프레임을 불러올 때 컬럼명을 내가 만들 수 있음
    (names= ['생각한', '컬럼명'])
  • 시계열 데이터를 확인하는 순서
    1. df.info() : 요약 정보 확인
    2. plot() : 그래프로 시각화
  • trend 분석
    1. 시각화를 위한 x축 값 만들기
    2. 에러 확인용 함수 만들기
    3. 다양한 차원에서 데이터 확인
    4. 3번에서 작성한 차원 코드 그래프화
    5. 데이터 분석에 적합한 차원 선택
    6. 데이터 프레임 정리 (인덱스, 컬럼명 등)
    7. Prophet에 데이터 프레임 학습, 예측 데이터 생성 및 그래프화
    8. 다양한 구성 요소 시각화(plot_components)

📑코드 살펴보기

주피터에서 py 함수 파일 만들기

%%writefile ./drawSinWave.py

import matplotlib.pyplot as plt
import numpy as np

def plotSineWave(**kwargs):
    '''
    plot sine wave
    y = a sin(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))
    
    '''
    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(2pi' + str(freq) + '*t+' + str(startTime) + ')+' + str(bias))
    plt.show()

if __name__ == '__main__':
    print('Hello World~!!')
    print('This is test grph!')
    plotSineWave(amp=1, endTime=2)
  • 함수 하단 작은 따옴표 3개 뒤에 작성한 글은 함수의 독스트링으로 활용
  • 입력 인자 자리에 '**kwargs(이름은 정하면 됨)'을 쓰면 사용자의 입력 인자가 없을 경우 기본 값을 설정할 수 있음
    → 코드 작성 : kwargs.get('example', 기본값)
    → 사용 시 : def_name(exapmle=5) : example 값을 5로 선언

matplotlib 한글 설정 모듈

%%writefile ./set_matplotlib_hangul.py

import platform
import matplotlib.pyplot as plt
from matplotlib import font_manager, rc

path = 'c:/Windows/Fonts/malgun.ttf'

if platform.system() == 'Darwin':
    print('Hangul OK in your MAC. :)')
elif platform.system() == 'Windows':
    font_name = font_manager.FontProperties(fname=path).get_name()
    print('Hangul OK in your Windows. :)')
    rc('font', family=font_name)
else:
    print('Unknown system. :(')

plt.rcParams['axes.unicode_minus'] = False
  • 주피터 또는 vs code에서 파일 생성하는 방법
    • %%writefile ./file_name.py (← 경로, 파일 이름, 파일 형식)

시계열 데이터 생성

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})
df.head()
  • linspace(a, b, c) : a부터 b까지 c간격으로 1차원 배열
  • pd.date_range('2018-01-01', periods=365*2, freq='D')
    - 데이를 기준으로 2018-01-01부터 730일 까지의 날짜 데이터 생성

Prophet

m = Prophet(yearly_seasonality=True, daily_seasonality=True)
m.fit(df)

future = m.make_future_dataframe(periods=30)
forecast = m.predict(future)

m.plot(forecast);
  • Prophet 함수에 데이터 프레임 학습
  • 30일 간의 미래 데이터 생성
  • 그래프 생성

오차 계산 함수

def error(f, x, y):
    return np.sqrt(np.mean((f(x) - y) ** 2))
  • f(x): 함수 f에 입력 데이터 x를 전달하여 예측값 획득
  • (f(x) - y) 2**: 예측값과 실제값의 차이를 제곱
  • np.mean((f(x) - y) 2)**: 모든 예측값과 실제값의 제곱 오차의 평균 계산
  • np.sqrt(np.mean((f(x) - y) 2))**: 평균 제곱근 오차(RMSE)를 계산합니다. 이는 예측값과 실제값 간의 평균적인 차이를 나타내는 지표
  • 값이 작을수록 예측이 더 정확

하루 공부를 마치며🔥

  • 오늘 학습 시간 : 4시간 4분
  • 내일은 팀스터디와 Naver 범위를 할 예정이다
profile
포기만 하지 말자

0개의 댓글