[강의 요약]
[Part 04. EDA/웹 크롤링/파이썬 프로그래밍_ Ch 06. 시계열 분석] 강의 수강
클립 01~10까지 강의 수강하였음
10_실습 - 웹 유입량 데이터 분석까지
🐢 100일 챌린지 🔥 : [▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰░ ] 63/100일 (63%)
[클립 01~10까지 정리]
▶ 1. 함수 정의와 호출 (기본)
def test_def(a, b):
return a + b
- def : 함수 정의 키워드
- test_def() 함수는 파라미터 a, b를 받아 합을 반환
- return을 통해 값을 함수 외부로 전달하는 구조
c = test_def(2, 3)
print(c) # 결과: 5
▶ 2. 전역 변수와 지역 변수 실험
전역변수를 함수에서 수정
a = 1
def edit_a(i):
global a
a = i
여기서 global a를 선언하지 않으면 함수 내부의 a는 새로운 지역 변수가 된다.
global을 지정하면 함수 안에서도 외부 a를 직접 수정할 수 있다.
edit_a(2)
print(a) # 결과: 2
반대로 global을 쓰지 않으면 아래처럼 전역 변수에 영향을 주지 않는다.
def edit_a(i):
a = i # 지역변수로 작동
edit_a(5)
print(a) # 결과는 여전히 2
▶ 3. 시각화 라이브러리 불러오기
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
- matplotlib.pyplot : 파이썬에서 가장 많이 쓰이는 2D 시각화 도구
- numpy : 수학적 계산을 위한 배열 라이브러리
- %matplotlib inline : 주피터 노트북 안에서 그림을 출력하도록 설정
기본적인 내용이지만 실습 코드에 있으니 일단...
▶ 4. 사인파 그리기 함수 (파라미터 기반)
def plotSinWave(amp, freq, endTime, sampleTime, startTime, bias):
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()
이 함수는 6개의 인자를 받아 사인파 그래프를 출력한다.
파라미터 설명은 다음과 같다.
- amp : 진폭 (Amplitude)
- freq : 주파수 (Frequency)
- endTime : 종료 시간
- sampleTime : 시간 간격 (샘플링 주기)
- startTime : 위상 지연 (Phase Shift)
- bias : 수직 이동
▶ 5. kwargs 방식 함수
실무에서는 인자 수가 많아질수록 kwargs 패턴이 유용하다.
def plotSinWave(**kwargs):
amp = kwargs['amp']
freq = kwargs['freq']
endTime = kwargs['endTime']
sampleTime = kwargs['sampleTime']
startTime = kwargs['startTime']
bias = kwargs['bias']
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()
- 키워드 인자 방식이므로 순서를 몰라도 이름만 정확하면 상관없다.
plotSinWave(amp=1, freq=2, endTime=8, sampleTime=0.01, startTime=0, bias=0)
이렇게 사용하면 된다.
▶ 6. 중복 실험, 변수 수정 테스트, 시각화 반복
모든 코드를 글에서 담기는 어렵다.
다양한 조합의 인자 값으로 여러 개의 사인파를 출력하는 코드가 이어지는데, 목적은 다음과 같다.
- 특정 인자만 바꿔 그래프가 어떻게 바뀌는지 실험
- plotSinWave()를 다양한 조건에서 호출해 동작 확인
이러한 반복 실험을 통해서 무엇을 알 수 있을까?
- 진폭이 클수록 파형이 더 커진다
- 주파수가 클수록 더 촘촘해진다
- 시작 시간은 위상 이동을 의미한다
- bias는 수직 이동을 나타낸다
위와 같은 개념을 직접 눈으로 확인할 수 있다.
▶ 7. Prophet을 이용한 시계열 예측
fbprophet은 Facebook에서 만든 시계열 데이터 예측 라이브러리다.
날짜 기반의 시계열 데이터(ex: 주가, 기온, 방문자 수 등)를 기반으로 미래 값을 예측하는 데
매우 간단하고 직관적인 API를 제공한다.
1) Prophet 모델 생성 및 학습
from fbprophet import Prophet
m = Prophet(yearly_seasonality=True, daily_seasonality=True)
m.fit(df)
- yearly_seasonality=True : 연간 반복 패턴을 모델링
- daily_seasonality=True : 일일 주기성도 함께 고려
- m.fit(df) : Prophet 모델 학습
df는 반드시 아래와 같은 구조를 가져야 한다.
ds (datetime) | y (target value) |
2024-01-01 | 150 |
2024-01-02 | 160 |
... | ... |
2) 미래 날짜 생성 및 예측 수행
future = m.make_future_dataframe(periods=30)
forecast = m.predict(future)
- make_future_dataframe(periods=30)은 기존 데이터 이후 30일을 자동으로 생성한다.
- m.predict(future)를 호출하면 기존과 미래 데이터에 대한 예측 결과가 담긴 forecast 데이터프레임이 반환된다.
3) 예측 결과 시각화
m.plot(forecast);
이 함수 하나만으로 전체 예측 시계열 그래프가 출력된다.
- 파란색 선 : 모델의 예측값 (yhat)
- 파란색 음영 : 95% 신뢰구간
- 검은색 점 : 실제 관측값
4) 컴포넌트 확인 (트렌드/주기)
m.plot_components(forecast);
이 그래프는 Prophet이 학습한 내부 구성요소를 시각적으로 보여준다.
- 트렌드 (전반적인 상승/하락 패턴)
- 주기성 (연간/주간/일간 등)
- 휴일 효과 (설정한 경우)
[나의 생각 정리]
예전에 연구실에서 실험할 때 아날로그 신호를 입력값을 변경하면서 관측했는데 그때 생각이 나는 실습이였다.
Prophet으로 시계열 예측을 쉽게 적용하는 방법을 배웠다.
[적용점]
데이터 분석에서 사용
“이 글은 제로베이스 데이터 스쿨 주 3일반 강의 자료 일부를 발췌하여 작성되었습니다.”
'제로베이스 데이터 취업 파트타임 > 100일 챌린지_일일 학습 일지' 카테고리의 다른 글
제로베이스 데이터 파트타임 스쿨 학습 일지 [25.05.20] (1) | 2025.05.20 |
---|---|
제로베이스 데이터 파트타임 스쿨 학습 일지 [25.05.19] (0) | 2025.05.19 |
제로베이스 데이터 파트타임 스쿨 학습 일지 [25.05.17] (0) | 2025.05.17 |
제로베이스 데이터 파트타임 스쿨 학습 일지 [25.05.16] (3) | 2025.05.16 |
제로베이스 데이터 파트타임 스쿨 학습 일지 [25.05.15] (1) | 2025.05.15 |