Python
[Python] Streamlit 소개 및 기초 사용법
dev-grace
2024. 11. 29. 17:26
1. Streamlit 소개
Streamlit은 파이썬을 활용하여 데이터 분석 도구와 웹 대시보드를 제작할 수 있는 라이브러리이다.
HTML/CSS와 같은 웹 개발 지식 없이도 간단한 파이썬 코드만으로 데이터 업로드, 처리, 결과 확인이 가능한 웹 페이지를 손쉽게 구현할 수 있다.
1-1. 주요 기능
- 간단한 웹 애플리케이션 개발
- 데이터 시각화 및 분석
- 파일 업로드/다운로드 지원
- 인터랙티브 위젯 제공
- 실시간 데이터 처리
1-2. 설치 방법
- pip를 통한 설치
pip install streamlit
2. Streamlit 기본 사용법
2-1. 애플리케이션 구조
- 기본 레이아웃 설정
import streamlit as st
# 타이틀 설정
st.title("앱 제목")
# 헤더 설정
st.header("섹션 제목")
# 텍스트 출력
st.write("일반 텍스트")
- 위젯 사용
# 파일 업로더
uploaded_file = st.file_uploader("파일 선택", type=["xlsx"])
# 선택 박스
option = st.selectbox("옵션 선택", ["옵션1", "옵션2"])
# 버튼
if st.button("실행"):
st.write("버튼이 클릭되었습니다!")
2-2. 애플리케이션 실행 및 관리
2-2. 1) 실행 방법
- 터미널에서 다음 명령어 실행:
streamlit run app_name.py
2-2. 2) 개발 모드
- 코드 변경 시 자동 새로고침
- 실시간 오류 확인 가능
3. 활용 예시
해당 예시는 다수의 엑셀 파일을 업로드하여 사업장별로 데이터를 처리한 결과를 새로운 엑셀 파일로 변환하여 다운로드가능한 템플릿 코드이다.
주요 기능
- n개의 엑셀 파일 동시 업로드
- 사업장별 데이터 가공 및 변환
- 처리된 데이터 엑셀 다운로드
- 실시간 처리 상태 표시
import streamlit_sample as st
import pandas as pd
from io import BytesIO
def process_data(files, location):
pass
def main():
st.title("엑셀 데이터 변환")
# 파일 업로드 섹션
st.header("1. 파일 업로드")
files = []
for i in range(4):
file = st.file_uploader(f"엑셀 파일 {i+1} 선택", type=["xlsx", "xls"])
files.append(file)
# 사업장 선택
st.header("2. 사업장 선택")
location = st.selectbox("사업장을 선택하세요", ["본사", "안성", "대구"])
# 변환 버튼
if st.button("변환하기"):
if all(files): # 모든 파일이 업로드되었는지 확인
try:
# 이곳에 실제 데이터 변환 로직 구현
# processed_df = process_data(files, location)
processed_df = pd.DataFrame(
{
"금액": [100000, 200000, 300000],
"사업장": [location, location, location],
}
)
# 엑셀 파일을 메모리에 저장
buffer = BytesIO()
with pd.ExcelWriter(buffer, engine="openpyxl") as writer:
processed_df.to_excel(writer, index=False)
buffer.seek(0)
# 결과 다운로드 버튼
st.success("변환이 완료되었습니다!")
st.download_button(
label="변환된 파일 다운로드",
data=buffer,
file_name=f"변환결과({location}).xlsx",
mime="application/vnd.ms-excel",
)
except Exception as e:
st.error(f"오류가 발생했습니다: {str(e)}")
else:
st.warning("모든 파일을 업로드해주세요.")
if __name__ == "__main__":
main()
3-1. 파일 업로드 및 데이터 처리
- 다중 엑셀 파일 업로드
files = []
for i in range(4):
file = st.file_uploader(f"엑셀 파일 {i+1} 선택", type=["xlsx", "xls"])
files.append(file)
3-2. 데이터 변환 및 다운로드
- DataFrame 생성 및 처리
def process_data(files, location):
pass
# processed_df = process_data(files, location)
processed_df = pd.DataFrame({
"금액": [100000, 200000, 300000],
"사업장": [location, location, location]
})
- 엑셀 파일 생성
buffer = BytesIO()
with pd.ExcelWriter(buffer, engine="openpyxl") as writer:
processed_df.to_excel(writer, index=False)
3-3. 사용자 피드백 제공
- 성공/실패 메시지 표시
st.success("변환이 완료되었습니다!")
st.error("오류가 발생했습니다")
st.warning("모든 파일을 업로드해주세요")