Skip to content

Streamlit DataFrame: 데이터 프레임의 표시, 스타일링 및 최적화

데이터 과학의 영역에서 데이터 시각화와 상호 작용이 매우 중요합니다. Python 라이브러리인 Streamlit은 데이터와의 상호 작용을 혁신하여 대화 형이고 데이터가 풍부한 웹 애플리케이션을 만들기가 이전보다 쉬워졌습니다. Streamlit의 가장 강력한 기능 중 하나는 인기있는 데이터 조작 라이브러리인 Pandas에서 사용되는 데이터 구조인 데이터 프레임을 사용할 수 있는 기능입니다. 이 문서에서는 Streamlit DataFrame의 세계에 관해 알아보고, Pandas 데이터 프레임을 시각화, 스타일링 및 최적화하는 방법을 실전 예제와 팁과 함께 탐색해 보겠습니다.

Streamlit DataFrame이란?

Streamlit DataFrame은 Streamlit 라이브러리의 기능으로, Pandas 데이터 프레임을 인터랙티브하고 시각적으로 매력적으로 표시할 수 있습니다. 일반적으로 정적인 형식으로 Jupyter 노트북이나 Python 스크립트에서 볼 수 있는 표준 Pandas 데이터 프레임을 동적인 웹 기반 애플리케이션에서 사용할 수 있게 만들어 줍니다.

Streamlit의 DataFrame 기능은 Python의 강력한 데이터 조작 라이브러리인 Pandas 위에 구축되었습니다. Pandas 데이터 프레임은 레이블이 지정된 축을 가진 2차원 크기 변경 가능한 이질적인 테이블 데이터 구조입니다. 이러한 데이터 프레임은 매우 다용도로 사용되며 데이터 과학자의 도구 상자에는 필수적입니다. Streamlit은 Pandas 데이터 프레임의 기능을 향상시켜 인터랙티브하게 표시하고 조작할 수 있는 플랫폼을 제공합니다.

Streamlit DataFrame 튜토리얼

Streamlit 애플리케이션을 Tableau로 손쉽게 변환할 수 있는 멋진 데이터 분석 및 데이터 시각화 도구를 들어보셨나요?

PyGWalker (opens in a new tab)는 자신의 Streamlit 앱에 Tableau와 유사한 UI를 손쉽게 임베드할 수 있도록 도와주는 Python 라이브러리입니다. Coding is Fun (opens in a new tab)의 Sven이 제작한 이 멋진 비디오를 확인하여 이 강력한 데이터 시각화 Python 라이브러리로 Streamlit 앱을 업그레이드하는 방법에 대한 자세한 단계를 확인해보세요!


PyGWalker 커뮤니티에 Sven과 그의 훌륭한 기여 (opens in a new tab)에 대해 감사드립니다!

또한, PyGWalker GitHub 페이지 (opens in a new tab)에서 더 많은 PyGWalker 예제를 확인할 수도 있습니다.

Streamlit Dataframes로 시작하기

Streamlit DataFrame을 사용하려면 먼저 Streamlit을 설치해야 합니다. 터미널에서 pip install streamlit 명령을 실행하여 설치할 수 있습니다. Streamlit이 설치되면 Pandas와 함께 Python 스크립트에 가져와야 합니다.

import streamlit as st
import pandas as pd

다음으로, 표시할 간단한 DataFrame을 생성해 보겠습니다. 이 예제에서는 과일의 다양한 유형에 대한 데이터가 포함된 DataFrame을 사용할 것입니다.

data = {
    '과일': ['사과', '바나나', '체리', '데이트', '엘더베리'],
    '수량': [10, 15, 20, 25, 30],
    '가격': [0.5, 0.25, 0.75, 1.0, 2.0]
}
df = pd.DataFrame(data)

이 DataFrame을 Streamlit에서 표시하려면 st.dataframe() 함수를 사용하면 됩니다.

st.dataframe(df)

Streamlit 앱을 실행하면 DataFrame이 인터랙티브한 표로 표시됩니다. 열 머리글을 클릭하여 표를 정렬할 수 있으며, 모서리를 드래그하여 표의 너비와 높이를 조정할 수도 있습니다.

이것은 Streamlit DataFrame으로 할 수 있는 기본적인 예시에 불과합니다. 이 주제를 더 깊이 들어가면 데이터 시각화를 더욱 업그레이드하기 위한 다양한 기능과 기술을 발견할 수 있게 될 것입니다.

Streamlit에서 데이터 프레임 표시하기

Streamlit을 사용하여 데이터 프레임을 인터랙티브한 테이블로 표시하는 방법

Streamlit에서 데이터 프레임을 인터랙티브한 테이블로 표시하는 것은 이전 섹션에서 보았던 대로 st.dataframe() 함수를 사용하는 것만으로 간단합니다. 그러나 데이터 프레임을 표시하는 것 이외에도 표시를 사용자의 필요에 맞게 사용자 정의할 수 있는 기능이 있습니다.

예를 들어, height 매개변수를 사용하여 표시할 행의 수를 설정할 수 있습니다. 특히 큰 데이터 프레임과 작업할 때 유용할 수 있습니다. 다음은 예시입니다:

st.dataframe(df, height=300)

이 예시에서는 데이터 프레임을 약 10개의 행에 맞는 높이로 표시됩니다. 데이터 프레임이 10개의 행보다 많으면 스크롤 막대가 나타나고 데이터를 스크롤할 수 있습니다.

또한, 특정 조건에 따라 데이터 프레임의 특정 셀을 강조 표시할 수도 있습니다. 예를 들어, 특정 임계값을 초과하는 값을 가진 셀을 강조 표시할 수 있습니다. 다음과 같이 데이터 프레임의 style 메서드를 사용하여 이 작업을 수행할 수 있습니다:

st.dataframe(df.style.highlight_max(axis=0))

이 예제에서는 각 열의 최대값을 가진 셀이 강조 표시됩니다. highlight_max() 메서드 내에서 조건을 수정하여 사용자의 필요에 맞게 강조 표시를 사용자 정의할 수 있습니다.

Streamlit에서 대용량 데이터 프레임 처리하기

Streamlit에서 대용량 데이터 프레임을 처리하는 것은 성능과 사용성 측면에서 다소 도전적일 수 있습니다. 그러나 Streamlit은 대용량 데이터 프레임을 효과적으로 처리할 수 있도록 도와주는 여러 기능을 제공합니다. 하나의 기능은 페이지네이션입니다. 페이지네이션을 사용하면 큰 데이터프레임을 더 작고 관리하기 쉬운 청크로 표시할 수 있습니다. 이는 수백 개 또는 수천 개의 행을 가진 데이터프레임을 처리할 때 특히 유용합니다.

Streamlit에서 페이지네이션을 구현하려면 st.beta_container() 함수와 for 루프를 함께 사용할 수 있습니다. 다음은 예시입니다:

container = st.beta_container()
for i in range(0, len(df), 50):
    container.dataframe(df[i:i+50])

이 예제에서는 데이터프레임을 50개의 행으로 나눈 다음 각 청크를 별도의 컨테이너에 표시합니다. 스크롤바를 사용하여 청크를 탐색할 수 있습니다.

Streamlit에서 데이터프레임 스타일링

Streamlit에서 CSS를 사용하여 데이터프레임에 스타일 적용 가능한가요?

네, Streamlit에서 CSS를 사용하여 데이터프레임에 스타일을 적용할 수 있습니다. st.markdown() 함수를 사용하여 스타일을 적용할 수 있습니다. 이 함수를 사용하면 Streamlit 앱에서 HTML 및 CSS 코드를 직접 작성할 수 있습니다.

예를 들어, 다음과 같이 데이터프레임의 배경색을 변경할 수 있습니다:

st.markdown("""
<style>
table {background-color: #f0f0f0;}
</style>
""", unsafe_allow_html=True)
st.dataframe(df)

이 예제에서 st.markdown() 함수는 테이블의 배경색을 연한 회색으로 변경하는 CSS 스타일을 정의하는 데 사용됩니다. unsafe_allow_html=True 매개변수를 사용하여 markdown에서 HTML 및 CSS를 사용할 수 있도록 해야 합니다.

Streamlit에서 데이터프레임 스타일링

CSS 외에도 Streamlit은 데이터프레임에 다양한 스타일을 적용할 수 있는 여러 내장 함수를 제공합니다. 이러한 함수를 사용하면 특정 셀을 강조 표시하거나 텍스트의 색상을 변경하는 등 다양한 스타일을 적용할 수 있습니다.

예를 들어, highlight_max() 함수를 사용하여 각 열에서 최대값을 가진 셀을 강조 표시할 수 있습니다. 또한 다음과 같이 background_gradient() 함수를 사용하여 데이터프레임에 색상 그래디언트를 적용할 수도 있습니다:

st.dataframe(df.style.background_gradient(cmap='Blues'))

이 예제에서는 데이터프레임에 색상 그래디언트를 적용하여 데이터프레임의 값에 해당하는 색상 강도가 적용됩니다. cmap 매개변수는 그래디언트에 사용할 색상 맵을 지정합니다.

Streamlit에서 데이터프레임 최적화

Streamlit을 사용하여 Pandas 데이터프레임을 최적화하는 방법

Streamlit에서 Pandas 데이터프레임을 최적화하려면 성능과 효율성을 향상시켜야 합니다. 특히 대량의 데이터셋을 처리할 때 Streamlit은 캐싱 및 메모리 최적화와 같은 기능을 제공하여 데이터프레임을 최적화하는 데 도움이 되는 여러 가지 기능을 제공합니다.

Streamlit에서 캐싱을 사용하면 큰 데이터프레임을 다룰 때 앱의 성능을 크게 향상시킬 수 있습니다. @st.cache 데코레이터를 사용하여 데이터프레임이 한 번만 계산되고 결과가 캐시에 저장되도록 할 수 있습니다. 다음은 예시입니다:

@st.cache
def load_data():
    # 데이터프레임을 여기에서 로드합니다
    df = pd.read_csv('large_dataset.csv')
    return df
 
df = load_data()
st.dataframe(df)

이 예제에서 load_data() 함수는 CSV 파일에서 대량의 데이터프레임을 로드하고 @st.cache로 데코레이트됩니다. 이는 데이터프레임이 한 번만 로드되고 결과가 캐시에 저장됨을 의미합니다. Streamlit 앱을 다시 실행하면 데이터프레임이 다시 계산되는 대신 캐시에서 로드됩니다. 이로써 많은 시간을 절약할 수 있습니다.

Streamlit 데이터프레임 캐싱 및 성능 팁

Streamlit에서 캐싱의 힘을 제대로 활용하면 앱의 성능을 크게 향상시킬 수 있습니다. 그러나 예기치 않은 동작을 방지하기 위해 조심스럽게 사용해야 합니다. 다음은 기억해야 할 몇 가지 중요한 포인트입니다:

  • 함수 입력 매개변수: @st.cache 데코레이터는 함수의 입력 매개변수를 기반으로 결과를 캐시합니다. 이러한 매개변수가 변경되면 함수가 다시 계산됩니다. 이 기능은 사용자 입력에 기반하여 데이터프레임을 업데이트하려는 경우 특히 유용할 수 있습니다.
@st.cache
def load_data(file_name):
    # 데이터프레임을 여기에서 로드합니다
    df = pd.read_csv(file_name)
    return df
 
# 파일 이름에 대한 사용자 입력
file_name = st.text_input('파일 이름 입력')
df = load_data(file_name)
st.dataframe(df)
  • 출력 변이: Streamlit은 @st.cache 데코레이터의 allow_output_mutation=True 매개변수를 사용하여 출력을 변이시킬 수 있는 함수를 캐시할 수 있습니다. 그러나 올바르게 사용하지 않으면 예기치 않은 동작을 일으킬 수 있으므로 주의해야 합니다.
@st.cache(allow_output_mutation=True)
def load_and_process_data(file_name):
    # 데이터프레임을 여기에서 로드하고 처리합니다
    df = pd.read_csv(file_name)
    df['new_column'] = df['old_column'].apply(some_function)
    return df
  • DataFrame 표시 제한: 대량 데이터프레임을 처리할 때는 한 번에 표시되는 데이터 양을 제한하는 것이 좋습니다. 이를 위해 st.dataframe() 함수의 height 매개변수를 사용할 수 있습니다. 이를 통해 앱의 성능을 크게 향상시킬 수 있으며 사용자 경험을 개선할 수 있습니다.
# 데이터프레임의 일부분만 표시
st.dataframe(df, height=300)

Streamlit DataFrame: 고급 사용 사례

Streamlit 데이터프레임 필터링

필터링은 특정 조건에 따라 데이터의 하위 집합을 선택하는 데이터 분석에서 일반적으로 사용되는 작업입니다. Streamlit에서는 라이브러리에서 제공하는 대화형 위젯을 사용하여 데이터프레임 필터링을 쉽게 구현할 수 있습니다.

예를 들어, 사용자가 필터링할 열을 선택할 수 있는 세렉트박스와 포함할 값의 범위를 선택할 수 있는 슬라이더를 사용할 수 있습니다. 다음은 예시입니다:

column = st.selectbox('필터링할 열 선택', df.columns)
min_val, max_val = st.slider('값의 범위 선택', min(df[column]), max(df[column]), (min(df[column]), max(df[column])))
filtered_df = df[(df[column] >= min_val) & (df[column] <= max_val)]
st.dataframe(filtered_df)

이 예제에서 사용자는 selectbox에서 필터링할 열을 선택하고, 슬라이더에서 값의 범위를 선택할 수 있습니다. 그런 다음 선택에 기반하여 DataFrame이 필터링되고, 필터링된 DataFrame이 표시됩니다.

기계 학습에서 Streamlit 데이터 프레임

Streamlit은 데이터 시각화 뿐만 아니라, 기계 학습에도 강력한 도구입니다. Streamlit을 사용하여 상호 작용하는 기계 학습 앱을 만들 수 있으며, 데이터를 표시하고 모델을 훈련하고 결과를 시각화할 수 있습니다.

예를 들어, Streamlit 앱을 사용하여 훈련 데이터의 DataFrame을 표시하고 데이터를 필터링하고 정렬할 수 있습니다. 그런 다음 버튼을 사용하여 이 데이터에서 기계 학습 모델을 훈련하고 상호 작용 플롯에 결과를 표시할 수 있습니다.

간단한 예제입니다:

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
 
# DataFrame 표시
st.dataframe(df)
 
# 모델 훈련 버튼
if st.button('모델 훈련'):
    # 데이터를 훈련 세트와 테스트 세트로 분할
    X_train, X_test, y_train, y_test = train_test_split(df.drop('target', axis=1), df['target'], test_size=0.2, random_state=42)
 
    # 모델 훈련
    model = RandomForestClassifier(n_estimators=100, random_state=42)
    model.fit(X_train, y_train)
 
    # 예측하고 정확도 계산
    y_pred = model.predict(X_test)
    accuracy = accuracy_score(y_test, y_pred)
 
    # 정확도 표시
    st.write(f'정확도: {accuracy*100:.2f}%')

이 예제에서는 RandomForestClassifier를 DataFrame df에서 'target'을 대상 변수로 훈련합니다. 모델의 정확도는 Streamlit 앱에서 표시됩니다.

이는 기계 학습 영역에서 Streamlit으로 수행할 수 있는 간단한 예제에 불과합니다. 가능성은 무궁무진하며, Streamlit의 상호 작용성을 통해 강력하고 사용자 친화적인 기계 학습 앱을 만들 수 있습니다.

결론

Streamlit은 데이터와 상호 작용하는 방식을 혁신하여 상호 작용 및 데이터 풍부한 웹 애플리케이션을 쉽게 만들 수 있게했습니다. Pandas DataFrame과 매끄럽게 작동하는 능력이 데이터 시각화와 분석에 무궁무진한 가능성을 열어 주었습니다. 경험이 풍부한 데이터 과학자이든 초보자이든, Streamlit은 DataFrame을 표시, 스타일 지정 및 최적화할 수 있는 강력하고 사용자 친화적인 플랫폼을 제공합니다.

그럼 어떤 이유로 기다리고 있나요? Streamlit DataFrame의 세계를 탐험하고 시작해 보세요!

Streamlit 앱을 Tableau로 변환하는 멋진 데이터 분석 및 데이터 시각화 도구를 들어보셨나요?

PyGWalker (opens in a new tab)는 Streamlit 앱을 쉽게 테이블과 유사한 UI로 통합하기 위한 Python 라이브러리입니다.

PyGWalker for Data visualization in Streamlit (opens in a new tab)

자주 묻는 질문

  1. Streamlit에서 DataFrame에 스타일을 적용하는 방법은 무엇인가요? Streamlit에서는 CSS와 내장된 스타일링 함수를 모두 사용하여 DataFrame에 스타일을 적용할 수 있습니다. 예를 들어, CSS를 사용하여 DataFrame의 배경색을 변경하거나, background_gradient() 함수를 사용하여 색상 그라데이션을 적용할 수 있습니다.

  2. Streamlit에서 DataFrame을 필터링하는 방법은 무엇인가요? Streamlit은 DataFrame을 필터링하는 데 사용할 수 있는 대화형 위젯을 제공합니다. 예를 들어, selectbox를 사용하여 사용자가 필터링할 열을 선택하고, 슬라이더를 사용하여 포함할 값의 범위를 선택할 수 있습니다.

  3. Streamlit에서 DataFrame에 이미지를 표시할 수 있나요? 네, Streamlit에서는 DataFrame에 이미지를 표시할 수 있습니다. st.image() 함수를 사용하여 DataFrame에 저장된 이미지를 표시할 수 있습니다. 그러나 이미지는 URL이나 이진 데이터로 저장되어야만 작동합니다.