[250822금1927H] 웹프레임워크 & Streamlit (2)

윤승호·2025년 8월 22일

기능을 전부 익히려니 Streamlit도 어려운 것 같다 ㅠㅠ

학습시간 09:00~02:00(당일17H/누적1927H)


◆ 학습내용

Streamlit 기능

(1) 텍스트

import streamlit as st

st.write("Hello Streamlit!")

st.title("Title")
st.header("Header")
st.subheader("Subheader")
st.text("Text")
st.divider()

st.markdown("""
# Title(Markdown)
## Header
### Subheader
text
- A
  - a

(2) 콜아웃

st.success("성공")
st.info("정보")
st.warning("경고")
st.error("오류")

(3) 매트릭

st.metric("날씨", "10°C", delta=-2)

(4) 이미지

st.image("meerkat.jpg", width=400)

st.image("https://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Meerkat_%28Suricata_suricatta%29_Tswalu.jpg/728px-Meerkat_%28Suricata_suricatta%29_Tswalu.jpg", width=400)

(5) 인풋

name = st.text_input("이름")
description = st.text_area("전체 소감")
student_type = st.selectbox("교육과정", options=["중학생", "고등학생", "대학생"])
level = st.number_input("학년", 1, step=1)
preference = st.slider("과목 선호도", min_value=1, max_value=10)
difficulty = st.radio(
    "난이도",
    options=["쉬웠다", "어려웠다"],
)
is_retaking = st.checkbox("재수강 여부")

(6) 날짜

date = st.date_input("날짜")
date_str1 = date.strftime("%Y-%m-%d") ### 2026-02-02
date_str2 = date.strftime("%Y.%m.%d.") ### 2026.02.02.

(7) 버튼

clicked = st.button("확인")
st.write(clicked)
if clicked:
    st.write("클릭함!")
st.link_button("네이버 바로가기", "https://naver.com")

(8) 테이블

st.table([
    "도윤",
    "하빈",
    "유하"
])
st.table({
    "아이스 커피": 4500,
    "카페 모카": 5000,
    "녹차": 5000
})
st.table([
    {"메뉴": "아이스커피", "가격": 4500},
    {"메뉴": "카페 모카", "가격": 5000},
    {"메뉴": "녹차", "가격": 5000},
])

(9) 차트

import streamlit as st

data = [
    {
        "날짜": "2024-01",
        "평균 기온": -0.5,
        "평균 최저 기온": -3.9,
        "평균 최고 기온": 3.6
    },
    {
        "날짜": "2024-02",
        "평균 기온": 3.8,
        "평균 최저 기온": 0.2,
        "평균 최고 기온": 8.2
    },
    {
        "날짜": "2024-03",
        "평균 기온": 7,
        "평균 최저 기온": 2.4,
        "평균 최고 기온": 12
    },
    {
        "날짜": "2024-04",
        "평균 기온": 16.3,
        "평균 최저 기온": 11.5,
        "평균 최고 기온": 22.4
    }
]

st.header("2024년 서울 날씨")
st.line_chart(data, x="날짜", y=["평균 기온", "평균 최저 기온", "평균 최고 기온"], x_label="날짜", y_label="기온")

(10) 컬럼

import streamlit as st

col1, col2, col3 = st.columns([1, 2, 3])
with col1:
    st.header("제목1")
    st.text("column 1")

with col2:
    st.header("제목2")
    st.text("column 2")
    st.button("확인")

with col3:
    st.header("제목3")
    st.text("column 3")

모바일에서는 작동 X

(11) 탭

import streamlit as st

tab1, tab2, tab3 = st.tabs(["Python", "Streamlit", "Pandas"])

with tab1:
    st.header("Python")
    st.text("I ❤️ Python")
with tab2:
    st.header("Streamlit")
    st.text("I ❤️ Streamlit")
with tab3:
    st.header("Pandas")
    st.text("I ❤️ Pandas")

(12) 기억

import streamlit as st

st.title("st.session_state 예제 🎈")

### 1. session_state 초기화
if 'count' not in st.session_state:
    st.session_state.count = 0

### 2. 버튼을 누르면 숫자를 1씩 증가시키는 함수
def increment_counter():
    st.session_state.count += 1

### 3. 버튼 생성 및 함수 연결
st.button("숫자 올리기", on_click=increment_counter)

### 4. 현재 숫자 표시
st.write("현재 숫자: ", st.session_state.count)

import streamlit as st
import pandas as pd

### 페이지 제목 설정
st.title("가장 선호하는 프로그래밍 언어는?")

### st.session_state에 'votes'가 없으면 초기화
if 'votes' not in st.session_state:
    st.session_state.votes = {'Python': 0, 'JavaScript': 0, 'Java': 0, 'C++': 0}

### 선택 옵션 (라디오 버튼)
options = ('Python', 'JavaScript', 'Java', 'C++')
selected_lang = st.radio("마음에 드는 언어", options)

### "투표하기" 버튼
if st.button("투표하기"):
    st.session_state.votes[selected_lang] += 1

### 현재 투표 현황 제목
st.subheader("현재 투표 결과")

### st.bar_chart로 결과 시각화
chart_data = pd.Series(st.session_state.votes)
st.bar_chart(chart_data)

(13) 폼

import streamlit as st

data = {}

with st.form("과목 설문 조사"):
  data["date"] = st.date_input("수강 날짜")
  data["name"] = st.text_input("이름")
  data["description"] = st.text_area("전체 소감")
  data["level"] = st.number_input(label="학년", value=1, step=1)
  data["preference"] = st.slider(label="과목 선호도", min_value=1, max_value=10)
  data["difficulty"] = st.radio(
      label="난이도",
      options=["쉬웠다", "보통", "어려웠다"],
  )
  data["is_retaking"] = st.checkbox(label="재수강 여부")
  st.form_submit_button("적용")

st.table(data)

profile
나는 AI 엔지니어가 된다.

0개의 댓글