머신러닝

Facebook의 Prophet을 이용해 아보카도 가격 예측 plot,count plot차트 시각화 하기

HooSL 2022. 3. 29. 10:28

avocado.csv
1.88MB

  • 데이터는 미국의 아보카도 리테일 데이터 입니다. (2018년도 weekly 데이터)
  • 아보카도 거래량과 가격이 나와 있습니다.

 

컬럼 설명 :

  • Date - The date of the observation
  • AveragePrice - the average price of a single avocado
  • type - conventional or organic
  • year - the year
  • Region - the city or region of the observation
  • Total Volume - Total number of avocados sold
  • 4046 - Total number of avocados with PLU 4046 sold - PLU는 농산물 코드입니다
  • 4225 - Total number of avocados with PLU 4225 sold
  • 4770 - Total number of avocados with PLU 4770 sold

 

1. 데이터 준비

Prophet 라이브러리
install : pip install fbprophet

위 에러 발생시 : conda install -c conda-forge fbprophet

레퍼런스 : https://research.fb.com/prophet-forecasting-at-scale/ https://facebook.github.io/prophet/docs/quick_start.html#python-api

 

Quick Start

Prophet is a forecasting procedure implemented in R and Python. It is fast and provides completely automated forecasts that can be tuned by hand by data scientists and analysts.

facebook.github.io

 

필요한 라이브러이 import

import pandas as pd  
import numpy as np 
import matplotlib.pyplot as plt 
import random
import seaborn as sns
from fbprophet import Prophet

구글 드라이브 마운트

from google.colab import drive
drive.mount('/content/drive')

csv파일 읽기

import os
# Working Direcctory Setting 워킹 디렉토리 세팅
os.chdir('/content/drive/csv파일 있는 위치')

# avocado.csv 데이터 읽기 필요없는 맨 첫컬럼은 제거 합니다.
avocado_df = pd.read_csv('avocado.csv',index_col=0)

avocado_df

 

2. EDA(Exploratory Data Analysis) : 탐색적 데이터 분석

데이터의 날짜가 뒤죽박죽이기 때문에 날짜로 정렬합니다.

avocado_df.sort_values('Date',inplace=True)
avocado_df

 

날짜별로 가격이 어떻게 변하는지 plot로 간단하게 확인해보겠습니다.

df_date=avocado_df.groupby('Date')['AveragePrice'].mean()

plt.plot(df_date)
plt.show()

 

region 지역별로 데이터가 몇개인지 시각화

plt.figure(figsize=(6,10))
sns.countplot(data=avocado_df,y='region')
plt.show()

프로펫분석을 위해, 두개의 컬럼만 가져옵니다. ('Date', 'AveragePrice')

avocado_prophet_df = avocado_df[['Date', 'AveragePrice']]

avocado_prophet_df

 

3. Prophet 을 이용한 예측 수행

날짜 컬럼은 ds로 예측하고자하는 가격 컬럼은 y로 바꿔줍니다.

avocado_prophet_df = avocado_prophet_df.rename(columns={'Date':'ds','AveragePrice':'y'})

avocado_prophet_df.head()

 

프로펫으로 예측합니다.

#1. 변수로 만듭니다
prophet = Prophet()

#2. 기존의 날짜와 데이터로 학습시킵니다
prophet.fit(avocado_prophet_df)

#3. 예측하고자 하는 기간을 정해서, 기간만 나와있는 데이터프레임 만듭니다
future = prophet.make_future_dataframe(periods=365) # 365일치를 예측했을 때

#4. 프로펫의 predict 함수를 이용해서 실제로 예측합니다
forecast = prophet.predict(future)

forecast

 

Time Series 타임 시리즈 데이터라고 합니다.

plot로 차트 확인

prophet.plot(forecast)
plt.savefig('chart1.jpg') #버그 떄문에 두개가 나와서 드라이브에 저장하면 한개만 나옵니다.

값이 너무 많내요...

컬럼을 더 쪼개면 값이 보기 편하게 나올겁니다. (예 region이 west인 아보카도 가격 예측)

prophet.plot_components(forecast)
plt.savefig('chart2.jpg')
#위에는 앞으로 전망
#밑에는 연단위 주기성