AI데이터 엔지니어, 새싹
77th_12_22(Fri)_Streamlit 활용
Leetora
2024. 1. 8. 17:07
77일차 학습 내용
- Streamlit
▶ UI
- Side bar 활용하기
import streamlit as st
st.title('사이드바 활용하기')
page = st.sidebar.selectbox('페이지 선택',
['Home', '데이터분석','시각화'])
if page == 'Home':
st.title('여기는 Home 입니다.')
elif page == '데이터분석':
st.title('여기는 데이터분석 페이지 입니다.')
elif page == '시각화':
st.title('여기는 시각화 페이지 입니다.')
▶ 차트 그리기
import streamlit as st
import pandas as pd
import matplotlib.pyplot as plt
import plotly.express as px
# 한글 폰트 설정
# plt.rcParams['font.family'] = "AppleGothic"
# Windows, 리눅스 사용자
plt.rcParams['font.family'] = "Malgun Gothic"
plt.rcParams['axes.unicode_minus'] = False
# 예시 데이터 생성
data = {
"회사명": ["삼성전자", "현대자동차", "SK하이닉스", "NAVER", "LG화학"],
"주식 코드": ["005930", "005380", "000660", "035420", "051910"],
"현재 가격": [56000, 180000, 85000, 350000, 680000],
"전일 대비": [-500, 2000, -1500, 5000, 8000],
"시가": [56500, 178000, 86500, 345000, 672000],
"고가": [57000, 182000, 87000, 352000, 690000],
"저가": [55000, 176000, 84000, 340000, 670000],
"거래량": [10500000, 1400000, 750000, 500000, 800000]
}
df = pd.DataFrame(data)
# matplotlib
fig, ax = plt.subplots()
ax.bar(df['회사명'], df['거래량'])
st.pyplot(fig)
# plotly
fig = px.bar(df, x='회사명', y='거래량')
st.plotly_chart(fig)
▶ 종목 차트 가져오기
# !pip install -U finance-datareader
import streamlit as st
import datetime
import FinanceDataReader as fdr
import plotly.express as px
date = st.date_input(
'조회를 시작할 날짜를 선택하세요.',
datetime.datetime(2023, 1, 1)
)
code = st.text_input(
'종목코드',
value = '', # 삼성전자
placeholder= '종목코드를 입력해주세요.'
)
if code and date:
df = fdr.DataReader(code, date)
fig = px.line(df, x = df.index, y = 'Close')
st.plotly_chart(fig)
▶ 모델 예측
# model.ipynb
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
import joblib
iris = load_iris()
X,y= iris.data, iris.target
# EDA
X_train, X_test, y_train, y_test = train_test_split(X,y, test_size = 0.2)
model = LogisticRegression()
model.fit(X_train, y_train)
joblib.dump(model, 'iris_model.pkl')
joblib.dump(iris.target_names, 'target_names.pkl')
# run.py
import streamlit as st
import joblib
import numpy as np
# 모델 불러오기
model = joblib.load('iris_model.pkl')
target_names = joblib.load('target_names.pkl')
# 웹 앱 페이지
st.title('Iris 예측을 위한 웹앱입니다.')
sepal_length = st.number_input('Sepal Length', min_value=0, max_value=10)
sepal_width = st.number_input('Sepal Width', min_value=0, max_value=10)
petal_length = st.number_input('Petal Length', min_value=0, max_value=10)
petal_width = st.number_input('Petal Width', min_value=0, max_value=10)
predict_button = st.button('예측하기')
if predict_button:
data = np.array([sepal_length, sepal_width, petal_length, petal_width]).reshape(1,-1)
prediction = model.predict(data)
st.write(f'결과는 {target_names[prediction][0]}입니다.')

▶ 이미지, 오디오, 비디오 다루기
import streamlit as st
from PIL import Image
st.title('이미지, 오디오, 비디오 다루기')
st.subheader('이미지 다루기')
image_local = Image.open('images.png')
st.image(image_local, width = 400,caption='공룡 이미지')
st.subheader('오디오 다루기')
audio_local = open('output.mp3', 'rb').read()
st.audio(audio_local, format = 'audio/mp3')
video_local = open('bison.mp4', 'rb').read()
st.subheader('비디오 다루기')
video_local = open('bison.mp4', 'rb').read()
st.video(video_local, format = 'video/mp4')