Streamlit 멀티 select 사용하기

Streamlit 멀티 select 사용하기

Streamlit
Streamlit 멀티 select 사용하기
Author

gabriel yang

Published

September 21, 2024


Streamlit의 st.multiselect는 여러 선택 항목 중에서 사용자가 다중 항목을 선택할 수 있도록 해주는 위젯입니다. 이를 활용하면 인터랙티브한 대시보드나 웹 애플리케이션에서 필터링 기능을 쉽게 구현할 수 있습니다. 아래에서는 st.multiselect의 기본적인 사용법을 설명하고, 간단한 예제 코드를 제공합니다.

st.multiselect란?

st.multiselect는 여러 옵션 중에서 하나 이상의 항목을 선택할 수 있는 위젯입니다. 사용자가 선택한 항목들은 리스트 형태로 반환되며, 이를 바탕으로 데이터를 필터링하거나 특정 동작을 수행할 수 있습니다.

함수 정의

st.multiselect(
    label: str,  # 위젯에 표시될 라벨
    options: Sequence[Any],  # 선택할 수 있는 항목들의 리스트
    default: Union[Sequence[Any], None] = None,  # 초기 선택값
    format_func: Callable[[Any], str] = str,  # 항목을 표시하는 방법
    key: Optional[str] = None,  # 고유 키값
    help: Optional[str] = None,  # 위젯에 표시할 도움말
    on_change: Optional[Callable[[], None]] = None,  # 선택이 바뀔 때 호출되는 콜백 함수
    args: Optional[Tuple[Any, ...]] = None,  # 콜백 함수에 전달할 추가 인자
    kwargs: Optional[Dict[str, Any]] = None,  # 콜백 함수에 전달할 추가 키워드 인자
    max_selections: Optional[int] = None,  # 선택 가능한 최대 항목 수
    disabled: bool = False,  # 위젯 비활성화 여부
    label_visibility: str = "visible"  # 라벨 가시성 ('visible', 'hidden', 'collapsed')
)

주요 파라미터 설명

  • label: 위젯 상단에 표시되는 텍스트입니다.
  • options: 사용자가 선택할 수 있는 항목들의 리스트입니다. 텍스트, 숫자, 객체 등 다양한 유형이 가능합니다.
  • default: 기본으로 선택된 항목을 지정할 수 있습니다. 선택하지 않으면 아무 항목도 선택되지 않은 상태로 위젯이 생성됩니다.
  • format_func: 옵션을 표시할 때, 기본적으로 str() 함수를 사용하지만, 이를 다른 형식으로 변경하고 싶다면 format_func을 설정할 수 있습니다.
  • max_selections: 선택 가능한 항목의 최대 개수를 제한할 수 있습니다.
  • disabled: True로 설정하면 위젯이 비활성화되어 선택할 수 없게 됩니다.

기본 사용 예시

import streamlit as st

# 선택 가능한 옵션 목록
options = ['Python', 'Java', 'C++', 'JavaScript', 'Go']

# 다중 선택 위젯
selected_options = st.multiselect(
    '프로그래밍 언어를 선택하세요',  # 라벨
    options,  # 옵션 리스트
    default=['Python'],  # 기본 선택값
)

# 선택한 항목 출력
st.write('선택한 언어:', selected_options)

결과

  • 기본으로 ’Python’이 선택된 상태로 위젯이 표시됩니다.
  • 사용자는 위젯에서 여러 언어를 선택할 수 있으며, 선택한 결과는 selected_options 변수에 리스트 형태로 저장됩니다.
  • st.write() 함수는 사용자가 선택한 항목을 화면에 출력합니다.

format_func 예제

때로는 옵션을 더 읽기 쉽게 표시하고 싶을 때가 있습니다. 이때 format_func를 사용하여 선택 항목의 표시 형식을 지정할 수 있습니다.

import streamlit as st

# 선택 가능한 옵션 목록 (언어 코드를 포함)
options = {'Python': '파이썬', 'Java': '자바', 'C++': '씨 플러스 플러스', 'JavaScript': '자바스크립트'}

# 다중 선택 위젯
selected_options = st.multiselect(
    '프로그래밍 언어를 선택하세요',
    options.keys(),  # 키 값 (영문)
    format_func=lambda x: options[x]  # 한글로 표시되게 변환
)

# 선택한 항목 출력
st.write('선택한 언어:', [options[lang] for lang in selected_options])

결과

  • 사용자는 영어 키를 선택하지만, UI에는 한글로 표시됩니다. 이처럼 format_func을 사용하여 선택 항목의 표현 방식을 사용자 정의할 수 있습니다.

max_selections 사용 예제

최대 선택 가능한 항목의 개수를 제한할 수 있습니다. 아래 예시에서는 최대 2개까지만 선택할 수 있습니다.

import streamlit as st

# 선택 가능한 옵션 목록
options = ['Python', 'Java', 'C++', 'JavaScript', 'Go']

# 다중 선택 위젯 (최대 2개 선택 가능)
selected_options = st.multiselect(
    '프로그래밍 언어를 선택하세요',
    options,
    max_selections=2  # 최대 2개까지 선택 가능
)

# 선택한 항목 출력
st.write('선택한 언어:', selected_options)

결과

  • 사용자는 2개까지만 언어를 선택할 수 있습니다. 2개를 선택하면 나머지 옵션은 비활성화됩니다.

결론

Streamlit의 st.multiselect는 사용자가 여러 항목을 선택할 수 있도록 돕는 강력한 위젯입니다. 다양한 설정을 통해 기본적인 다중 선택 기능 외에도 표시 형식, 기본값, 선택 개수 제한 등을 쉽게 설정할 수 있습니다.