Streamlit 데이터프레임 선택하기
Streamlit 데이터프레임 선택하기
Streamlit은 데이터 분석을 웹 애플리케이션 형태로 빠르고 쉽게 시각화할 수 있는 매우 직관적인 프레임워크입니다. 이 블로그 글에서는 Streamlit을 활용하여 DataFrame 내의 데이터를 선택하고, 선택된 데이터를 다양한 방식으로 시각화하는 방법을 살펴보겠습니다. 아래의 코드는 예시로 작성된 Streamlit 애플리케이션으로, 유저의 프로필 데이터를 생성하고, 선택된 유저의 활동 데이터를 비교하는 기능을 구현하고 있습니다.
주요 기능 요약
- 유저 프로필 데이터 생성: Faker 라이브러리를 이용해 가짜 유저 데이터를 생성합니다.
- DataFrame 데이터 선택: 유저 프로필 리스트에서 다중 선택이 가능하며, 선택된 유저의 데이터를 별도로 시각화합니다.
- 활동 데이터 시각화: 선택된 유저들의 일간 활동 및 연간 활동 데이터를 각각 막대 차트와 선 차트로 비교합니다.
1. 라이브러리 불러오기
import numpy as np
import pandas as pd
import streamlit as st
from faker import Faker
필요한 패키지를 불러옵니다. numpy
와 pandas
는 데이터 처리와 생성에 사용되며, streamlit
은 웹 애플리케이션 구축, faker
는 가짜 데이터를 생성하는 데 사용됩니다.
2. 데이터 생성 함수
@st.cache_data
def get_profile_dataset(number_of_items: int = 20, seed: int = 0) -> pd.DataFrame:
= []
new_data
= Faker()
fake
np.random.seed(seed)
Faker.seed(seed)
for i in range(number_of_items):
= fake.profile()
profile
new_data.append(
{"name": profile["name"],
"daily_activity": np.random.rand(25),
"activity": np.random.randint(2, 90, size=12),
}
)
= pd.DataFrame(new_data)
profile_df return profile_df
위 함수는 Faker 라이브러리를 사용하여 20명의 가짜 유저 데이터를 생성합니다. 각 유저는 name
, daily_activity
, activity
를 포함한 데이터를 갖고 있습니다.
name
: 유저의 이름daily_activity
: 최근 25일간의 일간 활동 데이터 (0에서 1 사이의 실수)activity
: 12개월 동안의 활동 데이터 (2에서 90 사이의 정수)
이 함수는 @st.cache_data 데코레이터로 캐싱되어, 같은 인자를 입력할 경우 재실행을 방지하고 성능을 향상시킵니다.
3. Column Configuration 설정
= {
column_configuration "name": st.column_config.TextColumn(
"Name", help="The name of the user", max_chars=100, width="medium"
),"activity": st.column_config.LineChartColumn(
"Activity (1 year)",
help="The user's activity over the last 1 year",
="large",
width=0,
y_min=100,
y_max
),"daily_activity": st.column_config.BarChartColumn(
"Activity (daily)",
help="The user's activity in the last 25 days",
="medium",
width=0,
y_min=1,
y_max
), }
st.column_config
를 이용하여 데이터프레임에 표시할 열을 설정합니다.
name
: 유저의 이름을 텍스트 형태로 표시.activity
: 지난 1년간의 활동을 선 차트로 시각화.daily_activity
: 지난 25일간의 활동을 막대 차트로 시각화.
이를 통해 데이터를 더욱 직관적이고 쉽게 시각화할 수 있습니다.
4. 탭 구성 및 멤버 선택
= st.tabs(["Select members", "Compare selected"]) select, compare
Streamlit의 탭 기능을 사용해 데이터를 표시할 탭을 두 가지로 나눕니다: - Select members
: 전체 멤버 목록에서 유저를 선택할 수 있는 탭. - Compare selected
: 선택된 멤버들의 활동 데이터를 비교할 수 있는 탭.
4.1 멤버 선택 탭 구현
with select:
"All members")
st.header(
= get_profile_dataset()
df
= st.dataframe(
event
df,=column_configuration,
column_config=True,
use_container_width=True,
hide_index="rerun",
on_select="multi-row",
selection_mode
)
"Selected members")
st.header(= event.selection.rows
people = df.iloc[people]
filtered_df
st.dataframe(
filtered_df,=column_configuration,
column_config=True,
use_container_width )
select
탭에서는 전체 멤버 목록이 표시됩니다. 유저는 DataFrame에서 여러 명을 선택할 수 있으며, 선택된 유저들의 정보는 filtered_df
에 저장되어 다시 표시됩니다. on_select
옵션은 데이터 프레임이 선택될 때의 동작을 정의 하며 아래와 같습니다.
“ignore” (기본값): 이 설정에서는 데이터프레임에서 발생하는 선택 이벤트에 대해 Streamlit이 아무런 반응을 보이지 않습니다. 즉, 데이터프레임은 입력 위젯처럼 동작하지 않으며, 사용자가 행이나 열을 선택해도 앱이 다시 실행되지 않습니다.
“rerun”: 이 설정을 사용하면 사용자가 데이터프레임에서 행이나 열을 선택할 때, Streamlit은 해당 이벤트에 반응하여 앱을 다시 실행합니다. 이 경우, st.dataframe 함수는 선택된 데이터를 딕셔너리 형태로 반환합니다. 즉, 사용자가 선택한 행 또는 열의 정보가 담긴 딕셔너리를 사용할 수 있습니다.
Callable (호출 가능 객체): 이 설정은 사용자가 데이터를 선택할 때마다 Streamlit이 앱을 다시 실행하고, 지정된 콜백 함수 또는 메서드를 실행하도록 만듭니다. 이 때도, st.dataframe은 선택된 데이터를 딕셔너리 형태로 반환하며, 콜백 함수가 먼저 실행된 후 나머지 앱 로직이 실행됩니다.
4.2 선택된 멤버의 활동 데이터 비교
/blog/posts/2024/20240915.qmdwith compare:
website= {}
activity_df for person in people:
"name"]] = df.iloc[person]["activity"]
activity_df[df.iloc[person][= pd.DataFrame(activity_df)
activity_df
= {}
daily_activity_df for person in people:
"name"]] = df.iloc[person]["daily_activity"]
daily_activity_df[df.iloc[person][= pd.DataFrame(daily_activity_df)
daily_activity_df
if len(people) > 0:
"Daily activity comparison")
st.header(
st.bar_chart(daily_activity_df)"Yearly activity comparison")
st.header(
st.line_chart(activity_df)else:
"No members selected.") st.markdown(
compare
탭에서는 선택된 멤버들의 활동 데이터를 비교합니다. 두 가지 주요 비교 포인트가 있습니다:
- Daily activity: 지난 25일간의 활동을 막대 차트로 비교.
- Yearly activity: 지난 1년간의 활동을 선 차트로 비교.
만약 선택된 멤버가 없을 경우, “No members selected.”라는 메시지를 표시합니다.
5. 결과
이 Streamlit 애플리케이션을 실행하면 유저는 가짜 프로필 데이터를 통해 원하는 멤버를 선택하고, 그들의 활동 데이터를 쉽게 비교할 수 있습니다. 특히 일간 활동 및 연간 활동을 차트로 직관적으로 시각화할 수 있어 데이터를 분석하기에 매우 유용한 도구가 됩니다.