์ํฌํธํ๊ธฐ
import FinanceDataReader as fdr
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from prophet import Prophet
import streamlit as st
1. FinanceDataReader๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ค์๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ต๋๋ค
def run_predict() :
col1, col2, col3 = st.columns([1, 2.5, 1]) # ํ๋ฉด์ ๊ฐ์ด๋ฐ ์ ๋ ฌํ๊ธฐ ์ํจ์ด๋ค.
with col2 :
df = fdr.StockListing("KRX")
df.reset_index(inplace=True, drop=True)
2. ํ๋ฉด์ ํ์ํ ์ค๋ช
์ ์
๋ ฅํฉ๋๋ค
st.title('โ
ก. ์ฃผ์๊ฐ์น ์์ธก')
st.subheader(' : Predicting stock value')
st.text('๊ธฐ์
์ฝ๋๋ฅผ ์
๋ ฅํ์ฌ ํ ๊ธฐ์
์ ๊ณผ๊ฑฐ ์ฃผ์๋ฐ์ดํฐ๋ฅผ prophet์ ์ฌ์ฉํ์ฌ ๋ฏธ๋ 1๋
์น')
st.text('์ฃผ์๊ฐ์น๋ฅผ ์์ธกํฉ๋๋ค. Code๋ฅผ ๋ชจ๋ฅธ๋ค๋ฉด Viewing stock information๋ฅผ ์ฐธ์กฐํ์ธ์')
st.header('')
st.subheader('์์ธกํ๊ณ ์ ํ๋ ๊ธฐ์
์ Code์
๋ ฅํ๊ธฐ')
code = st.text_input('๊ธฐ์
Code๋ฅผ ์
๋ ฅํ์ธ์')
3. ์ฝ๋(code) ๋๋ ISU_CD๋ฅผ ์
๋ ฅ๋ฐ์ ์ถ๋ ฅํ๋ค
if len(code) !=0 :
if len(code) > 6 : # ISU_CD๋ก ์
๋ ฅ๋ฐ์์ ๋
code = code[-9:-4+1]
else :
code = code
st.text('๊ฒ์ํ ๊ธฐ์
์ ์ฃผ์ ์ ๋ณด๋ฅผ ๋ถ๋ฌ์ต๋๋ค')
st.dataframe(df.loc[code == df['Code']])
3-(1) ~ 3-(7) Propet์ ์ ๋ ฅํ ๋ฐ์ดํฐ๋ก ๊ฐ๊ณต์ํค๊ณ , Prophet๋ชจ๋ธ์ ๋ง๋ค์ด fitํฉ๋๋ค
# 3-(1) ์
๋ ฅํ ์ฝ๋๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ symbol์ด๋ผ๋ ์ปฌ๋ผ๊ณผ ์ผ์นํ๋ ํ์ ๊ฐ์ ธ์จ๋ค
df2 = fdr.DataReader(symbol=code)
df2.reset_index(inplace=True)
# 3-(2) prophet์ ์ ์ฉํ ์ด๋ง ๊ฐ์ ธ์จ๋ค
df2 = df2.iloc[ : , [0, 3+1]]
# 3-(3) ์ปฌ๋ผ๋ช
์ ds์ y๋ก ๋ฐ๊พผ๋ค
df2.rename(columns={'Date': 'ds', 'Close': 'y'}, inplace=True)
st.text('Prophet์ ์ ์ฉํ๊ธฐ ์ํด ์ปฌ๋ผ๋ช
์ ds์ y๋ก ๋ณ๊ฒฝํ์์ต๋๋ค.')
st.dataframe(df2)
# 3-(4) ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ณ์๋ก ๋ง๋ค๊ณ
prophet = Prophet()
# 3-(5) ๋ฐ์ดํฐ๋ก ํ์ต์ํจ๋ค
prophet.fit(df2)
# 3-(6) ์์ธกํ๊ณ ์ ํ๋ ๊ธฐ๊ฐ์ ์ ํด์, ๋น์ด์๋ ๋ฐ์ดํฐํ๋ ์์ ๋ง๋ ๋ค
future = prophet.make_future_dataframe(periods=365, freq='D') #365์ผ
# 3-(7) ์์ธก์ ํ๋ค
forecast = prophet.predict(future)
4. ๋ฐ์ดํฐํ๋ ์, ๊ทธ๋ํ๋ฅผ ํ๋ฉด์ ํ์ํฉ๋๋ค
st.text('ํ์ฌ์๊ฐ ๊ธฐ์ค์ผ๋ก 1๋
์น ๋ฐ์ดํฐ๋ฅผ ์์ธกํฉ๋๋ค.')
st.dataframe(forecast)
st.subheader('ํ์ฌ ์๊ฐ ๊ธฐ์ค ๋ฐ์ดํฐ์ 1๋
์น ์์ ์ฃผ๊ฐ์ ๋ํ ๊ทธ๋ํ์
๋๋ค')
fig1 = prophet.plot(forecast)
st.pyplot(fig1)
st.subheader('')
st.subheader('๊ธฐ์
์ ์ฐ,์,์ฃผ๊ฐ ์ฃผ๊ฐ์ ๋ํ ์์ธก์น ๊ทธ๋ํ์
๋๋ค')
fig2 = prophet.plot_components(forecast)
st.pyplot(fig2)