Streamlit - Column configuration
Introducing column config ⚙️
Take st.dataframe and st.data_editor to the next level!
blog.streamlit.io
Streamlit 사용자들이 데이터프레임 커스터마이징 기능에 대한 요구사항들이 있었고 최근 해당 기능이 릴리즈 되었다! 🎉
사용자들이 요구했던 기능들은 다음과 같다.
- 인덱스 열 숨기
- 테이블 셀에 이미지 또는 클릭 가능한 링크 보여주기
- 특정 열에 대해 편집 비활성화하기
Streamlit 1.23부터 해당 기능들을 사용할 수 있게 되었다.
이제 st.dataframe과 st.data_editor의 모든 열을 원하는 대로 커스터마이징 할 수 있다.
기능 예제
이번 기능의 메인 주인공은 column_config 매개변수이다. 해당 매개변수가 st.dataframe과 st.data_editor에 추가되었다. column_config는 칼럼 타입을 config에 매핑하는 딕셔너리이다.
st.data_editor(
df,
column_config={
"column 1": "Name", # change the title
"column 3": st.column_config.ImageColumn("Avatar"),
"column 4": st.column_config.NumberColumn(
"Age", min_value=0, max_value=120, format="%d years"
),
"column 8": st.column_config.LineChartColumn(
"Activity (1 year)", y_min=0, y_max=100
),
},
)
위와 같이 예시를 통해 알 수 있는 기능들
- 멋진 차트가 생겼다! 📈
- 링크를 더블 클릭해서 열 수 있다.
- 셀을 더블 클릭하여 편집하고 입력 유효성 검사하는 기능이 작동한다.
⇒ 여기에서는 Age 칼럼에 max_value를 120으로 제한해 주었기 때문에 120 이상 입력하려고 할 때 입력이 반영되지 않는다.
뿐만 아니라 텍스트에서 이미지 및 스파크라인 차트까지 모든 것을 다루는 14가지 다른 칼럼 유형도 있다. 이러한 각 클래스는 열의 표시 및 편집 동작을 구성하는 추가 매개변수를 설정할 수 있게 해 준다.
parameter 살펴보기
column_config 설정을 건드리지 않고 인덱스 열을 숨길 수 있도록, column_config 매개변수 외에도 몇 가지 매개변수가 추가되었다.
- 인덱스 열 숨기기 : hide_index=True
- 열이 표시되는 순서를 설정 : column_order=["col 3", "col2"]
- st.data_editor에서 개별 열의 편집을 비활성화하기 : disabled=["col1", "col2"]
수정된 데이터에 접근하기
때로는 편집된 전체 데이터 프레임을 다시 가져오는 것보다 어떤 셀이 변경되었는지 아는 것이 더 편리하다.
Streamlit은 세션 상태(session state)를 통해 이를 쉽게 할 수 있게 해 준다.
만약 key 매개변수가 설정되면, Streamlit은 데이터프레임에 대한 변경 사항을 세션 상태에 저장한다.
st.data_editor(df, key="data_editor") # 👈 Set a key
st.write("Here's the session state:")
st.write(st.session_state["data_editor"]) # 👈 Access the edited data
위 코드에서 key는 "data_editor"로 설정되어 있다. st.data_editor 인스턴스에서 데이터에 가해지는 모든 변경사항은 Streamlit에 의해 추적되며 "data_editor"라는 키로 세션 상태에 저장된다.
데이터 편집기가 생성된 후, 세션 상태의 "data_editor" 키의 내용이 st.write(st.session_state["data_editor"])를 사용하여 화면에 출력된다.
이를 통해 데이터 편집기에서 전체 데이터프레임을 반환하지 않고도 원본 데이터프레임에 가해진 변경사항을 확인할 수 있다. 이는 큰 데이터프레임을 다룰 때 유용하며, 전체 수정된 데이터프레임이 아니라 어떤 셀들이 변경되었는지만 알고 싶을 때 유용하다.