Streamlit

[Streamlit] 로컬에서 만든 앱을 AWS로 배포, 가상환경 구성: joblib

eyoo 2022. 5. 20. 14:23

로컬에서 만든 앱을 AWS로 배포하는 순서:

  1. 공공데이터나 캐글에서 데이터를 가져와서 코랩을 이용해서 분석한다. (EDA + ML)  [이것을 파일로 저장한다.]
  2. 로컬에서 스트림릿을 이용해서 웹 대시보드를 만든다.
  3. AWS를 이용해서 배포한다.

 

사용할 데이터:

https://startcod.tistory.com/40

 

[머신러닝] Scaler의 inverse_transform, RandomForest

자동차 소비자들의 데이터를 토대로 자동차 구매 가격을 예측하는 인공지능을 만들어보자 df= # 이 중에서 성별부터 자본까지만 데이터로 활용하자. 전처리과정: df.isna().sum() # NaN없음 X = df.iloc[:,

startcod.tistory.com

 

 

joblib.dump로 인공지능에 쓰인 파일들을 저장한다. (코랩을 사용함)

 

import joblib
joblib.dump(regressor,'regressor.pkl')
joblib.dump(scaler_X ,'scaler_X.pkl')
joblib.dump(scaler_y ,'scaler_y.pkl')
 
# 원핫인코딩을 사용하였다면 CT도 파일로 저장해야 한다.
 
 
앞서 저장한 파일들을 비주얼 스튜디오 코드에 저장한 후 작업한다.
 
먼저 파일을 분리하여 웹 대시보드 작업을 하기 위한 기초 코드를 작성한다.
 
import streamlit as st
from app_home import run_home
from app_eda import run_eda
from app_ml import run_ml

def main():
    st.title('자동차 가격 예측 App')

    menu = ['Home','EDA','ML']
    choice = st.sidebar.selectbox('메뉴선택',menu)
    if choice == menu[0]:
        run_home()
    elif choice == menu[1]:
        run_eda()
    elif choice == menu[2]:
        run_ml()

if __name__ == '__main__':
    main()
 
 
 

비주얼 스튜디오코드에서 머신러닝 작업을 위한 파일을 따로 만들어 작업한다.

 

먼저 저장한 joblib으로 저장한 파일들을 joblib.load로 불러와 변수로 저장한다.

 

import streamlit as st
import joblib

def run_ml():
    st.subheader('자동차 구매 가능 가격 예측')

    regressor = joblib.load('data/regressor.pkl')
    scaler_X = joblib.load('data/scaler_X.pkl')
    scaler_y = joblib.load('data/scaler_y.pkl')
# joblib.load로 저장했던 것을 불러온다.

# 예측하기위해서 필요한 인공지능파일과 스케일러 파일들을 불러와야 한다.

 

 

예측할 데이터를 받을 사용자용 입력도구를 만들자.

 

먼저 사용자가 데이터를 입력할수 있도록 input함수를 이용해야 한다.
사용자로부터 건네받은 정보를 사용하여 얼마정도의 차를 구매할수 있는지 인공지능을 이용해서 예측해보자

필요한 정보들은 성별, 나이 , 연봉, 카드빛, 자산 총 5개다.

    gender = st.radio('성별을 고르세요', ['남자','여자'])
    if gender == '여자':
        gender = 0
    else:
        gender = 1
    age = st.number_input('나이를 입력하세요',0,120)
    salary = st.number_input('연봉을 입력하세요',0)
    debt = st.number_input('카드 빛을 입력하세요',0)
    asset = st.number_input('자산을 입력하세요',0)
 
버튼을 누르면 예측하여 나타낼수있도록 하자.
 
    if st.button('자동차 구매 금액 예측'):


        # 1. 신규고객의 정보를 넘파이 어레이로 만들어준다.
        new_data = np.array([gender, age, salary, debt, asset])

        # 2. 학습할때 사용한 X의 피텨스케일링을 이용해서 피처스케일링 한다.
        # 먼저 데이터를 2차원으로 만든다.
        new_data = new_data.reshape(1,5)
        new_data = scaler_X.transform(new_data)

        # 3. 인공지능에게 예측해달라고 한다.
        y_pred = regressor.predict(new_data)

        # 4. 예측한값을 원상복구한다.
        y_pred = scaler_y.inverse_transform(y_pred)

       
       st.write('이 사람의 구매 가능 금액은 '+ str(round(y_pred[0,0])) +'달러 입니다.')
 

결과:

 

 

실행을 했지만 버전이 달라 충돌나는 경우가 있다.

 

 

코랩에서 파이썬의 버전을 확인해보자

 

in:

import sys
sys.version

out:

'3.7.13 (default, Apr 24 2022, 01:04:09) \n[GCC 7.5.0]'

 

 

그후, 비주얼 스튜디오 코드 cmd에서 파이썬 코드를 확인한다.

 

# 코랩과 코드의 파이썬 버전이 서로 다른것을 확인할수 있다.

 

 

sklearn의 버전도 이와 같은 방법으로 확인해야 한다.

 

import sklearn
sklearn.__version__
 
 
파이썬 버전을 동일하게 만들기 위해 가상환경 구성해야 한다. 
 

비주얼 스튜디오 코드의 프롬프트에 conda create -n streamlit3.7(가상환경 이름) python=3.7(파이썬 버전)  입력

 

 

가상환경 활성화: conda activate streamlit3.7       
가상환경 비활성화: conda deactivate

 

 

가상환경을 활성화한 상태에서 터미널에 conda install joblib으로 joblib을 설치하자.

 

설치를 다 했으면 pip install streamlit으로 가상환경에 스트림릿을 설치한다.

 

이제 EC2 서버를 만들어 배포에 필요한것들을 설정해준다.

 

※ 참고:

https://startcod.tistory.com/68

 

[Linux] EC2를 활용한 AWS 배포, 리눅스에 파이썬 다운로드

AWS에 Streamlit을 배포하려면: 소스코드를 깃허브에 올린다. 깃허브에서 AWS에 클론해서 가져온다. 비어있는 리눅스 서버를 만들어서 필요한 프로그램들을 설치한다. 먼저 AWS에서 EC2를 free tier로 만

startcod.tistory.com

 

 

base 를 눌러 streamlit3.7로 설정한다.

 

 

이제 가상환경 streamlit3.7에서 streamlit이 잘 실행되는지 확인한다.

# 만약 라이브러리가 없으면 설치코드 (보통은 conda install (라이브러리명))을 입력하여 설치한다.