[ 오늘 학습한 것 ]
※ 중간중간 py파일 수정하고 나서, 파일 저장 → Streamlit 페이지 새로고침 순서를 지켜야 코드 수정한 게 바로 반영!
+ 사용할 수 있는 함수는 https://docs.streamlit.io/ 공식 문서에 잘 정리되어 있다.
1. 텍스트 계열 함수
| st.header() | st.header("이것은 헤더입니다.") | 섹션 제목 크기의 굵은 텍스트로 표시됨 |
| st.subheader() | st.subheader("이것은 서브헤더입니다.") | 헤더보다 한 단계 작은 제목으로 표시됨 |
| st.markdown() | st.markdown("**굵게** 또는 *기울임*") | 마크다운 문법이 그대로 스타일 적용돼서 렌더링됨 (표, 색상, 이모지도 가능) |
| st.caption() | st.caption("주석 텍스트") | 작은 회색 글씨로 캡션처럼 표시됨 |
| st.text() | st.text("간단 텍스트") | 스타일 없는 순수 텍스트로 표시됨 |
| st.write() | st.write("텍스트") / st.write({"key":"value"}) | 입력한 객체 종류(텍스트, 딕셔너리, 데이터프레임 등)에 맞게 자동으로 적절한 형태로 표시됨 |
2. 코드 및 수식 표현
| st.code() | st.code(code_example, language="python") | 코드 블록이 예쁘게 표시되고 복사 버튼도 자동 생성됨 |
| st.latex() | st.latex(r"\frac{n!}{k!(n-k)!}") | LaTeX 문법으로 수식이 렌더링됨 |
- 만약 프론트엔드 코드로 직접 이런 걸 구현하려면 회색 배경 음영 처리하고, 복사 버튼도 하나하나 만들고, 함수/텍스트 색깔도 일일이 지정하고... 참 귀찮은데 Streamlit은 이미 만들어진 기능을 그냥 갖다 쓸 수 있어서 훨씬 편하다
- 데이터분석가들이 많이 쓰는 도구라서 그런지 수식이나 텍스트 표현 기능을 잘 지원하는 느낌
3. 입력 위젯
| st.text_input() | user_name = st.text_input("이름을 입력하세요", placeholder="홍길동") | 한 줄 텍스트 입력창이 생기고, 입력값이 user_name 변수에 저장됨 |
| st.text_area() | user_memo = st.text_area("메모를 남겨주세요", height=100) | 여러 줄 입력 가능한 텍스트 박스 생성 |
| st.number_input() | age = st.number_input("나이를 입력하세요", min_value=1, max_value=120, value=20) | 숫자 입력창(증감 버튼 포함) 생성 |
| st.date_input() | selected_date = st.date_input("날짜 선택") | 캘린더 형태의 날짜 선택 위젯 생성 |
| st.selectbox() | fruit = st.selectbox("어떤 과일을 좋아하세요?", ["사과", "바나나", "딸기"]) | 드롭다운으로 하나만 선택 가능한 위젯 생성 |
| st.multiselect() | colors = st.multiselect("좋아하는 색을 골라보세요", ["빨강", "파랑", "초록", "노랑"], ["빨강"]) | 여러 개 복수 선택 가능한 위젯 생성 |
| st.radio() | choice = st.radio("어떤 동물을 좋아하세요?", ("고양이", "강아지", "코끼리")) | 라디오 버튼 형태로 하나 선택 |
| st.file_uploader() | uploaded_file = st.file_uploader("CSV 파일을 업로드 해주세요", type=["csv"]) | 파일 업로드 창 생성, 업로드하면 uploaded_file.name으로 파일명 확인 가능 |
| st.button() | if st.button("클릭"): st.write("클릭됨!") | 클릭하면 True를 반환하는 버튼 생성 (Boolean 타입) |
| st.slider() | val = st.slider("값을 선택하세요", 0, 100, 50) | 범위 안에서 값 조절 가능한 슬라이더 생성 |
- user_name = st.text_input(...)처럼, 위젯이 반환하는 값을 변수에 저장해서 바로 아래에서 활용하는 패턴이 계속 반복됨 → 이 구조가 Streamlit의 기본 흐름인 듯
- 텍스트 표현 방법이 이렇게 다양한 건, 절대 다 외울 필요 없고 프로젝트할 때 다시 와서 구글링하거나 GPT한테 물어보면서 그때그때 찾아 쓰면 됨!

4. 그래프 시각화
1) Streamlit 기본 차트
- st.line_chart(), st.bar_chart(), st.area_chart()로 데이터프레임 넣으면 바로 차트가 그려짐
- 장점: 코드가 매우 간단함 / 단점: 커스터마이징이 제한적
- 근데 기본 제공 차트는 너무 단순해서 실제로는 거의 안 쓰는 편이라고,..
2) Matplotlib & Seaborn
- st.pyplot(fig)로 matplotlib Figure 객체를 그대로 렌더링 가능
- matplotlib은 pyplot 인터페이스(자동 카메라처럼 간단, 초보자용)와 객체 지향 인터페이스(수동 카메라처럼 세밀한 제어 가능, fig, ax = plt.subplots()로 시작) 두 방식이 있음
- 한글 깨질 때는 pip install koreanize-matplotlib 설치하고 import koreanize_matplotlib 해주면 해결됨
3) Plotly
- st.plotly_chart(fig)로 렌더링하면 마우스 오버 시 툴팁, 드래그로 확대·축소까지 인터랙티브하게 가능
5. 프로젝트 때 Streamlit 활용 꿀팁 ⭐
- GPT한테 물어볼 때는 그냥 질문하지 말고, Streamlit 공식 홈페이지 내용을 복사해서 붙여넣은 다음 "이걸 참고해서 답변해줘"라고 하는 게 훨씬 낫다! (Streamlit이 업데이트가 빨라서 GPT가 최신 정보를 못 따라갈 수 있음)
- 공식 문서를 자주 확인하는 게 중요한 이유: st.header() 같은 함수 안에도 다양한 파라미터가 있어서, 내가 필요한 기능을 문서에서 찾을 수 있음
- 공식 홈페이지가 전부 영어라서, GPT한테 번역 부탁하면서 보는 것도 좋음


오늘의 운세는...
대박~
'Today I Learned' 카테고리의 다른 글
| [내일배움캠프 QA/QC 6기] TIL #053 (1) | 2026.07.28 |
|---|---|
| [내일배움캠프 QA/QC 6기] TIL #052 (0) | 2026.07.27 |
| [내일배움캠프 QA/QC 6기] TIL #050 스트림릿 입문 (0) | 2026.07.23 |
| [내일배움캠프 QA/QC 6기] TIL #048 태블로 프렙 (0) | 2026.07.21 |
| [내일배움캠프 QA/QC 6기] TIL #047 (0) | 2026.07.20 |