반응형
UI Functions
streamlit의 다양한 UI Function을 알아보자
일단 기본적인 작업 셋팅 구성은 아래와 같다.
import streamlit as st
def main() :
pass
if __name__ == '__main__' :
main()

이 안에 여러 코드를 적어 streamlit 작업을 실행하면 된다.
streamlit에 활용할 다양한 코드는 아래와 같다.
import streamlit as st
def main() :
st.title('웹 대시보드')
st.text('웹 대시보드 개발하기')
name = '홍길동'
# 제 이름은 홍길동 입니다.
print('제 이름은 {} 입니다.'.format(name))
st.text('제 이름은 {} 입니다.'.format(name))
st.header('이 영역은 헤더 영역')
st.subheader('이 영역은 subheader영역')
st.success('작업이 성공했을때 사용하자')
st.warning('경고 문구를 보여주고 싶을때 사용하자.')
st.info('정보를 보여주고 싶을때')
st.error('문제가 발생했을때 사용')
# 파이썬의 함수 사용법을 보여주고 싶을때
st.help(sum)
st.help(len)
if __name__ == '__main__' :
main()
import streamlit as st
import pandas as pd
def main() :
df = pd.read_csv('data2/iris.csv')
st.dataframe(df)
species = df['species'].unique()
st.text('아이리스 꽃은' + species + '으로 되어있다.')
st.dataframe(df.head())
st.write(df.head())
if __name__ == '__main__' :
main()
import streamlit as st
import pandas as pd
from tables import Col
def main() :
df = pd.read_csv('data2/iris.csv')
# 버튼 만들기
# if st.button('데이터 보기') :
# st.dataframe(df)
# 대문자 버튼을 만들고,
# 버튼을 누르면, species 컬럼의 값들을 대문자로 변경한
# 데이터 프레임을 보여주세요.
if st.button('대문자') :
df['species'] = df['species'].str.upper()
st.dataframe(df)
# 라디오 버튼 : 여러개중에 한개 선택할때
my_order = ['오름차순 정렬', '내림차순 정렬']
status = st.radio('정렬 방법 선택', my_order)
if status == my_order[0] :
# petal_lenth 컬럼을 오름차순으로 정렬해서 화면에 보여준다.
# df.sort_values('petal_length')
st.dataframe(df.sort_values('petal_length'))
elif status == my_order[1] :
# df.sort_values('petal_length', ascending = False)
st.dataframe(df.sort_values('petal_length', ascending = False))
status = st.radio('정렬 방법 선택2', my_order)
if status == my_order[0] :
# petal_lenth 컬럼을 오름차순으로 정렬해서 화면에 보여준다.
df = df.sort_values('petal_length')
st.dataframe(df)
elif status == my_order[1] :
df = df.sort_values('petal_length', ascending = False)
st.dataframe(df)
# 체크박스 : 체크 해제 / 체크
if st.checkbox('헤드 5개 보기') :
st.dataframe(df.head())
else :
st.text('헤드 숨겼습니다.')
# select 박스 : 여러개에서 한개만 고르는 UI
language = ['Python', 'C', 'Java', 'Go', 'PHP']
my_choice = st.selectbox('좋아하는 언어 선택', language)
if my_choice == language[0] :
st.write('파이썬을 선택했습니다.')
elif my_choice == language[1] :
st.write('C언어가 좋아요')
elif my_choice == language[2] :
st.write('자바 선택')
# 멀티 셀렉트 : 여러개 중에서 여러개 선택하는 UI
st.multiselect('여러개 선택 가능', language)
# 멀티 셀렉트를 이용해서, 특정 컬럼들만 가져오기.
# 유저에게 iris df의 컬럼들을 다 보여주고,
# 유저가 선택한 컬럼들만, 데이터프레임을 화면에 보여줄 것.
column_list = df.columns
choice_list = st.multiselect('컬럼을 선택하세요', column_list)
st.dataframe(df[choice_list])
# 슬라이더 : 숫자를 조정하는데 주로 사용
age = st.slider('나이', 1, 120, 30)
# st.slider('나이', 1.0, 120.0, 30.0, 0.1)
st.text('제가선택한 나이는 {}입니다.'.format(age))
# 익스펜더
with st.expander('Hello') :
st.text('안녕하세요')
st.dataframe(df)
if __name__ == '__main__' :
main()
import streamlit as st
import pandas as pd
# 이미지 처리를 위한 라이브러리
from PIL import Image
def main() :
# 1. 저장되어있는, 이미지 파일을 화면에 표시하기
img = Image.open('data2/image_03.jpg')
st.image(img)
st.image(img, use_column_width=True)
# 2. 인터넷상에 있는 이미지를 화면에 표시하기
# url이 있는 이미지를 말한다.
url = 'https://www.spcmagazine.com/wp-content/uploads/2019/07/%EC%9D%B4%EB%AF%B8%EC%A7%80-%EB%B0%B0%EC%8A%A4%ED%82%A8%EB%9D%BC%EB%B9%88%EC%8A%A4_-%EC%9D%B8%EA%B8%B0-%ED%94%8C%EB%A0%88%EC%9D%B4%EB%B2%84-2%EC%A2%85-%EC%9E%AC%EC%B6%9C%EC%8B%9C.jpg'
st.image(url)
# 3. video파일을 화면에 표시하기
video_file = open('data2/secret_of_success.mp4', 'rb')
st.video(video_file)
audio_file = open('data2/song.mp3', 'rb')
st.audio(audio_file.read(), format='audio/mp3' )
if __name__ == '__main__' :
main()
import streamlit as st
def main() :
# 유저한테 입력을 받는 방법
#. 1. 이름 입력 받기
name = st.text_input('이름을 입력하세요')
if name != '' :
st.subheader(name + '님 안녕하세요')
# 2. 입력글자 갯수 제한
address = st.text_input('주소를 입력하세요', max_chars=10)
st.subheader(address)
# 3. 여러 행을 입력 가능하도록
message = st.text_area('메세지를 입력하세요', height = 3)
st.subheader(message)
# 4. 숫자 입력, 정수
st.number_input('숫자 입력', 1, 100)
# 5. 숫자 입력, 실수
st.number_input('숫자 입력', 1.0, 100.0)
# 6. 날짜 입력
my_date = st.date_input('약속 날짜')
st.write(my_date)
# 요일 찍기
st.write( my_date.weekday())
st.write(my_date.strftime('%A'))
# 7. 시간 입력
my_time = st.time_input('시간선택')
st.write(my_time)
# 8. 색깔 입력
color = st.color_picker('색을 선택하세요')
st.write(color)
# 9. 비밀번호 입력
password = st.text_input('비밀번호 입력', type='password')
st.write(password)
if __name__ == '__main__' :
print(__name__)
main()
##### 파일을 업로드 하는 방법 #####
##### 이미지 파일, csv파일 업로드 #####
import streamlit as st
from PIL import Image
import pandas as pd
import os
from datetime import datetime
def save_uploaded_file(directory, file) :
# 1.디렉토리가 있는지 확인하여, 없으면 디렉토리부터만든다.
if not os.path.exists(directory) :
os.makedirs(directory)
# 2. 디렉토리가 있으니, 파일을 저장.
with open(os.path.join(directory, file.name), 'wb') as f :
f.write(file.getbuffer())
return st.success("Saved file : {} in {}".format(file.name, directory))
def main() :
# 사이드바 만들기
st.title('파일 업로드 프로젝트')
menu = ['Image', 'CSV', 'About']
choice = st.sidebar.selectbox('메뉴', menu)
if choice == menu[0] :
st.subheader('이미지 파일 업로드')
upload_file = st.file_uploader('이미지 파일 선택', type=['jpg','png','jpeg'])
if upload_file is not None :
print(upload_file.name)
print(upload_file.size)
print(upload_file.type)
# 파일명을 유니크하게 만들어서 저장
# 현재시간을 활용해서, 파일명을 만든다.
current_time = datetime.now()
print(current_time.isoformat().replace(':','_'))
new_filename = current_time.isoformat().replace(':','_') + '.jpg'
upload_file.name = new_filename
save_uploaded_file('temp',upload_file)
elif choice == menu[1] :
st.subheader('CSV 파일 업로드')
upload_file = st.file_uploader('CSV 파일 선택', type=['csv'])
if upload_file is not None :
current_time = datetime.now()
print(current_time.isoformat().replace(':','_'))
new_filename = current_time.isoformat().replace(':','_') + '.csv'
upload_file.name = new_filename
save_uploaded_file('temp',upload_file)
else :
st.subheader('파일 업로드 프로젝트 입니다.')
if __name__ == '__main__' :
main()
### 파일 여러개를 한꺼번에 올리는 앱 ###
from typing import ClassVar
import streamlit as st
import pandas as pd
from PIL import Image
import os
from datetime import datetime
## 파일 업로드 함수 ##
def save_uploaded_file(directory, file) :
# 1.디렉토리가 있는지 확인하여, 없으면 디렉토리부터만든다.
if not os.path.exists(directory) :
os.makedirs(directory)
# 2. 디렉토리가 있으니, 파일을 저장.
with open(os.path.join(directory, file.name), 'wb') as f :
f.write(file.getbuffer())
return st.success("Saved file : {} in {}".format(file.name, directory))
def main() :
st.title('여러 파일 한번에 업로드하는 앱')
# 사이드바 메뉴
menu = ['Image', 'CSV', 'About']
choice = st.sidebar.selectbox( 'menu', menu )
# accept_multiple_files=True을 셋팅하면 여러 파일들을 한꺼번에 받을 수 있다.
if choice == menu[0]:
upload_files = st.file_uploader('이미지 파일을 선택', type=['jpg', 'png', 'jpeg','csv'], accept_multiple_files=True)
# upload_files는 여러파일들을 저장하고 있는 리스트
# 업로드한 파일이 있는 경우에만, 아래 코드를 실행해야 한다.
if upload_files is not None :
# 업로드한 파일이 리스트이니깐, 하나씩 가져와서
# temp 폴더에 저장할 것이다.
for file in upload_files :
# 파일명을 유니크하게 만들어서 저장
# 현재시간을 활용해서, 파일명을 만든다.
current_time = datetime.now()
new_filename = current_time.isoformat().replace(':','_') + '.png'
file.name = new_filename
save_uploaded_file('temp',file)
# 저장이 다 끝나면, 웹 브라우저에 이미지 표시
for file in upload_files :
img = Image.open(file)
st. image(img)
## CSV 파일을 여러개 올리면, 이 파일들을 temp에 저장하고
## 데이터프레임으로 읽어서 화면에 표시
elif choice == menu[1] :
st.subheader('CSV 파일 업로드')
upload_files = st.file_uploader('CSV 파일 선택', type=['csv'],accept_multiple_files=True)
if upload_files is not None :
# 업로드한 파일이 리스트이니깐, 하나씩 가져와서
# temp 폴더에 저장할 것이다.
for file in upload_files :
current_time = datetime.now()
new_filename = current_time.isoformat().replace(':','_') + '.csv'
file_name = new_filename
save_uploaded_file('temp',file)
# 저장이 다 끝나면, 웹 브라우저에 이미지 표시
for file in upload_files :
df = pd.read_csv(file)
st. dataframe(df)
if __name__ == '__main__' :
main()
반응형
'Library > Streamlit' 카테고리의 다른 글
| Streamlit - Chart (0) | 2022.05.19 |
|---|---|
| Streamlit - Python 개발시 파일을 분리하여 개발하는 방법 (0) | 2022.05.19 |
| Streamlit - sidebar를 만들고 file_uploader() 함수 이용하기 (0) | 2022.05.19 |
| Streamlit - Visual Studio Code에서 Streamlit 실행 방법 (0) | 2022.05.19 |
| Streamlit -Streamlit 설치방법 (0) | 2022.05.19 |