728x90
이번에 프로젝트를 하면서, 결과를 Streamlit을 통해 웹사이트 형태로 제공을 하게 되었다.
그래서 Steamlit에 대한 기본 내용과, 사용해 본 소감등을 정리해보려고 한다.
이런 분들께 도움이 될 것 같아요.
- 웹으로 서비스를 제공해야 하는데 인력 부족으로 어떻게 해야 할 지 고민이신 분
- Streamlit을 통한 서비스를 고민하고 계신 분
Streamlit이란?
- Python 기반의 오픈 소스 라이브러리
- Python 스크립트를 통해 데이터 시각화, 대화형 웹 애플리케이션, 대시보드 등을 손쉽게 만들 수 있음
- 공식 사이트에서는 "A faster way to build and share data apps"라고 말하며, 데이터 애플리케이션을 구축하고 공유하는 가장 빠른 방법을 제공한다고 함
- 웹사이트 구축에 프론트엔드적 경험이 불필요함
Streamlit의 장점
- 간편한 사용법
- 빠른 개발 속도
- 반응형 인터페이스 구축 가능
- 다양한 데이터 시각화 기능
- 로컬, 클라우드 플랫폼에 배포하여 공유 가능
Streamlit의 단점
- 제한된 웹 개발 기능
- 보안 기능 미제공
Streamlit을 선택한 이유
- Flask, django, dash등 다른 웹프레임 워크들이 존재
종류 | 장점 | 단점 |
Streamlit | 간편한 사용법 실시간 업데이트 대화형 위젯 및 시각화 통합 데이터 과학과 통합 |
고급기능 부족 UI 컨트롤 부족 |
Flask | 유연성 커뮤니티와 확장성 |
초기 설정 시 직접 설정해야 하는 부분이 많음 |
Django | 커뮤니티가 큼 기본적으로 필요한 기능들이 포함되어 있음 |
복잡한 구조로, 단순한 웹 애플리케이션에서는 불필요할 수 있음 |
Dash | Plotly와 통합되어 있음 React를 통한 고급 사용자 정의 가능 |
React를 위한 학습이 필요 비교적 커뮤니티 크기가 작음 |
- 하지만 현재 회사의 규모 상 웹사이트 구현을 전담해 줄 인력이 따로 없고
과제 기간 내 모두 구현이 필요한 상황이라 학습에 소요할 시간이 많지 않았음 - Streamlit에서는 ploty를 포함한 다양한 시각화가 가능했고,
Python 기반이기에 개발한 모델을 바로 적용할 수 있어서 더 효과적이라고 판단해서 선택함
Streamlit의 기능들
다양한 데이터 입력 가능
1. 텍스트 입력
st.text_input(
label='▶️ fstring을 이용해서 입력값을 출력할수도 있습니다.',
key='text_input'
)
- text_input을 이용해서 사용자가 텍스트를 입력할 수 있음
st.text_input(
label='▶️ 비밀번호를 입력해주세요.',
max_chars=16,
type='password',
key='pw_input')
- text_input 중 type을 "password"로 설정하면, 비밀번호를 입력하는 것처럼 입력 값이 보이지 않게도 가능
2.숫자 입력
st.number_input(
label='▶️ 숫자를 입력해주세요.',
min_value=0, max_value=100, value=50, step=10,
key='num_input')
- 숫자를 입력받을 수 있고
- min / max / step 설정이 가능해서 유효성 검사도 바로 가능
3.날짜 입력
st.date_input(
label='▶️ 날짜를 입력해주세요.',
value = date.today(),
key='date_input')
- 날짜 입력의 경우에도, 텍스트로 날짜를 입력할 수도 있고
- 캘린더에서 클릭으로 입력이 가능
- 시작기간 / 종료 기간 설정도 가능함
4. 파일 업로드
st.file_uploader(
label='▶️ 사진 업로드를 해주세요.',
type=['jpg', 'png'],
key='image_input')
- type을 jpg, png로 설정 시
개당 최대 200mb까지 jpg, jpeg,png파일의 업로드가 가능 - 다중 업로드도 가능함
st.file_uploader(
label='▶️ csv 파일 업로드를 해주세요.',
type=['csv'],
key='csv_input')
- type을 csv로 지정 시 csv파일을 업로드 가능
위젯 사용
1.버튼
st.button('버튼기능',key='버튼')
- 버튼의 안에 원하는 문구를 넣을 수 있고
- 해당 버튼이 활성화 될 때 이후 동작을 설정 가능
2. 슬라이드
st.slider(
label='▶️ 범위를 조절해주세요.',
min_value=0.0, max_value=100.0,
value=(25.0, 75.0), step=0.5,
key='slider_value')
- 범위에 대한 설정을 할 때 필요한 슬라이드 기능
- step에 대한 설정이 가능해 각 칸의 간격을 조절 가능
3.라디오박스
st.radio(label='▶️ 라디오박스 선택(수평).',
options=['1','2','3'], key='radiobox',horizontal=True)
- 라디오박스의 경우 horizontal옵션을 사용하여 수직/수평 방향으로 설정할 수 있음
동적시각화
1. 색상 입력
st.color_picker('▶️ 색상을 선택해주세요.', '#FFFFFF')
- 컬러피커를 사용해서 원하는 색상의 선택가능
- 컬러코드는 HEX, RGB, HSV 세 종류가 지원되며, 해당 코드 입력으로도 색상 입력 가능
2. 데이터 수정
st.data_editor(csv_input,num_rows='dynamic',key='data_editor')
- csv등으로 업로드한 파일을 data_editor로 화면에 띄울 경우, 해당 데이터의 수정이 가능
- 이후 download_button기능을 이용해서 파일로 재 다운로드 가능
실제 사용해 본 후의 장단점
장점
- 친절한 공식문서
- Streamlit가이드북이 번역되어 제공되고 있고
- 공식문서도 잘 되어 있음
- 개발 속도가 빠름
- Python기반으로 쉽고 빠르게 개발 가능
- ChatGPT를 활용한다면 기본적인 내용은 더욱 빠르게 구현 가능
- 개발한 모델을 직접 적용 가능
- Python기반 이기 때문에 바로 모델 적용이 가능함
- 적당히 귀여움
- 아이콘 적용이 가능하고, 둥글둥글한 느낌이라 깔끔한 느낌
단점
- 획일화된 느낌
- Streamlit으로 구현한 페이지는 다 비슷한 특유의 느낌이 있음
- 폰트 등을 바꾸려면 css,html등을 알아야 하고, 구조상 안되는 것도 꽤 존재함
- 프로토타입 이상은 힘듦
- 모델을 바로 사용가능한 점은 좋긴 하지만, 모델이 조금만 무거워지면 티가 확 난다
결론
- python으로 구현이 가능하기 때문에 프론트 인력이 부족한 경우 유용함
- ml모델 코드와의 호환성이 좋지만 그와 비례해서 로딩 또한 느려짐
- 중장기적으로 안정적인 서비스를 위해서는 streamlit이 아닌 다른 웹프레임워크를 활용해야 할 필요성이 있음
728x90
'Python > 일반' 카테고리의 다른 글
[Python] 주피터노트북에서 아나콘다 가상환경 실행하기 (0) | 2022.08.13 |
---|---|
[Python] pywinauto 경로에 띄어쓰기 있는 경우 경로, 이름 지정해서 저장하는법 (0) | 2022.08.12 |
[Python] 주피터 노트북 기초, 마크다운 셀 사용법, Latex 문법 참고 (0) | 2022.07.26 |
[Python] 아나콘다 프롬프트에서 가상환경 목록 확인, 활성화, 생성, 삭제 하기 (0) | 2022.07.25 |
[Python] 데이터프레임 결과, 아웃풋 생략 없이 출력하기 pandas.set_option (0) | 2022.07.21 |