개발/대시보드
웹 대시보드 - 웹 대시보드 개발 순서, Jupyter to Streamlit
웅'jk
2022. 12. 13. 18:02
웹 대시보드 개발 방법
1. 분석할 데이터를 준비한다.
df = pd.read_csv('data/Car_Purchasing_Data.csv',encoding='ISO-8859-1')
2. 주피터 노트북으로 데이터를 분석한다.
df.head()
df.describe()
df.columns[4:]
df[df['Annual Salary']==df['Annual Salary'].min() ]
df[df['Annual Salary']==df['Annual Salary'].max() ]
# 등등 데이터들을 확인한다.
3. 필요에 의해서 머신러닝을 수행할 수도 있다.
# 자동차 구매 금액을 예측하는 인공지능을 만들어보고 싶다.
df.isna().sum()
y = df['Car Purchase Amount']
X = df.loc[:,'Gender':'Net Worth']
X = X.values
# training , test
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2 , random_state = 50 )
# 트레이닝
from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit( X_train , y_train )
y_pred = regressor.predict(X_test)
# mse 값
error = y_test - y_pred
(error **2).mean()
# 파일로 저장
import joblib
joblib.dump(regressor,'regressor.pkl')
4.분석이 완료되면, 웹 대시보드로 개발한다.
5.웹 대시보드는 비주얼 스튜디오 코드로 개발한다.
6.주피터 노트북에서 분석한 코드를, 비주얼 스튜디오로 옮긴다.
7.인터랙티브한 대시보드를 위해서, 유저에게 데이터를 입력받도록 개발한다.
app.py
import streamlit as st
from app_home import run_home_app
from app_eda import run_eda_app
from app_ml import run_ml_app
def main() :
st.title('자동차 가격 예측 앱')
menu = ['Home','EDA','ML']
choice = st.sidebar.selectbox('메뉴',menu)
if choice == 'Home' :
run_home_app()
elif choice =='EDA' :
run_eda_app()
elif choice == 'ML' :
run_ml_app()
if __name__ =='__main__' :
main()
app_home
import streamlit as st
def run_home_app() :
st.text('이 앱은 고객 데이터와 자동차 구매 데이터에 대한 내용입니다.\n 데이터분석 및 고객정보를 넣으면, 얼마정도의 차를 구매할지를 예측해줍니다.')
st.image('https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQoFNZk2WAuKp7W56OmJBbNrc8RzPa3ubcrQbaYXGWr2kbPpBbWiGk7YVm5gBcnKyU9ARg&usqp=CAU')
app_eda
import streamlit as st
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sb
def run_eda_app() :
df = pd.read_csv('data/Car_Purchasing_Data.csv',encoding='ISO-8859-1')
st.subheader('데이터 프레임 확인')
st.dataframe(df.head(3))
st.subheader('기본 통계 데이터')
st.dataframe(df.describe())
# 컬럼을 선택할 수 있게 한다.
st.subheader('최대 / 최소 데이터 확인하기')
column_list = df.columns[4:]
selected_column=st.selectbox('컬럼을 선택하세요',column_list)
min = df[df[selected_column]==df[selected_column].min() ]
max = df[df[selected_column]==df[selected_column].max() ]
st.text('최소 데이터')
st.dataframe(min)
st.text('최대 데이터')
st.dataframe(max)
st.subheader('컬럼 별 히스토그램')
histogram_column = st.selectbox('히스토그램 확인할 컬럼을 선택하세요',column_list)
my_bins = st.number_input('빈의 갯수를 입력하세요.',10,value = 10,step=1)
fig1 = plt.figure()
plt.hist(data = df, x= histogram_column , bins = my_bins , rwidth = 0.8)
plt.title(histogram_column+ ' Histogram')
plt.xlabel(histogram_column)
plt.ylabel('Count')
st.pyplot(fig1)
st.subheader('상관 관계 분석')
selected_list = st.multiselect('상관분석을 하고 싶은 컬럼을 선택하세요',column_list)
if len(selected_list) >= 2 :
fig2=plt.figure()
sb.heatmap(data = df[selected_list].corr(), annot = True, fmt = '.2f',cmap = 'coolwarm',
vmin = -1, vmax = 1, linewidths=0.5)
st.pyplot(fig2)
app_ml
import streamlit as st
import numpy as np
import joblib
def run_ml_app() :
st.subheader('자동차 금액 예측')
regressor = joblib.load('regressor.pkl')
#성별은 여자이고,나이는 50이며, 연봉은 40000 카드빚 50000, 자산 200000
# 성별 , 나이 , 연봉, 카드빚 , 자산을 유저한테 모두 입력받아서
# 자동차 구매 금액을 예측하세요.
gender = st.radio('성별을 선택해주세요. ',['여자','남자'])
if gender == '남자' :
gender = 1
else :
gender = 0
age = st.number_input('나이를 입력해주세요.',min_value=1,max_value=120)
annual = st.number_input('연봉을 입력해주세요 (단위 $)',min_value=0.0)
card_debt = st.number_input('카드빚을 입력해주세요. (단위 $)',min_value=0.0)
net_worth = st.number_input('자산을 입력해주세요. (단위 $)',min_value=0.0)
user_list = [gender,age,annual,card_debt,net_worth]
new_data = np.array(user_list).reshape(1,5)
y_pred = regressor.predict(new_data)
if y_pred > 0 :
st.info('예측한 자동차 금액은 {} 달러 입니다.'.format(y_pred))
else :
st.info('예측이 어렵습니다.')