programming/Python

[파이썬] streamlit의 plotly_chart로 그룹별로 차트 시각화하기

Jofresh 2023. 12. 28. 14:23
728x90
반응형

해당 코드는 Streamlit과 Plotly를 사용하여 성별에 따른 팁(tip) 데이터를 시각화하는 간단한 웹 애플리케이션을 생성하는 코드입니다. 아래는 코드의 주요 부분을 단계별로 설명한 것입니다.

1. 라이브러리 임포트

 

import streamlit as st
import seaborn as sns
import plotly.graph_objects as go
from plotly.subplots import make_subplots

 
streamlit: Streamlit 웹 애플리케이션을 만드는 데 사용되는 라이브러리
seaborn: 시각화 라이브러리, 여기서는 샘플 데이터를 로드하기 위해 사용
plotly.graph_objects와 plotly.subplots: Plotly를 사용하여 인터랙티브한 차트를 생성하는 데 사용되는 라이브러리


2. 데이터 로드 함수 정의

@st.cache_data
def load_data():
    df = sns.load_dataset("tips")
    return df


load_data 함수: Streamlit 캐싱 데코레이터(@st.cache_data)를 사용하여 함수의 결과를 캐싱하여 성능을 최적화


3. 메인 함수 정의

 

def main():
    st.title("streamlit with plotly")
    tips= load_data()

        #데이터 가공
    m_tips = tips.loc[tips['sex'] == 'Male']
    f_tips = tips.loc[tips['sex'] == 'Female']

    #시각화 차트
    fig= make_subplots(rows=1,
                       cols=2,
                       subplot_titles=('Male','Female'),
                       shared_xaxes=True,
                       shared_yaxes=True,
                       x_title='Total Bill($)'
                        )
    fig.add_trace(go.Scatter(x=m_tips['total_bill'],y=m_tips['tip'],
                             mode='markers'),row=1,col=1)
    fig.add_trace(go.Scatter(x=f_tips['total_bill'],y=f_tips['tip'],
                             mode='markers'),row=1,col=2)
    
    fig.update_yaxes(title_text="Tip($)",row=1,col=1)
    fig.update_xaxes(range=[0,60])
    fig.update_layout(showlegend=False)

    st.plotly_chart(fig, use_container_width=True)


main 함수: Streamlit 애플리케이션의 주요 내용이 들어가는 함수
st.title: 웹 애플리케이션의 제목 설정
st.plotly_chart: Plotly 차트를 Streamlit에 플로팅
make_subplots: 여러 개의 subplot을 가진 그림을 만들기 위한 함수


4. 실행 확인

if __name__ == "__main__":
    main()


코드 마지막 부분에서 if _name_ == "_main_":은 스크립트가 직접 실행될 때만 main() 함수를 호출하도록 하는 부분입니다.
이 코드를 실행하면 Streamlit 웹 애플리케이션이 실행되고, 성별에 따른 팁 데이터가 포함된 산점도가 생성됩니다. 왼쪽은 남성의 팁 데이터, 오른쪽은 여성의 팁 데이터를 나타냅니다.

반응형

전체 코드

 

# markdown과 성격이 유사함
import streamlit as st
import seaborn as sns
import plotly.graph_objects as go
from plotly.subplots import make_subplots


@st.cache_data
def load_data():
    df = sns.load_dataset("tips")
    return df

def main():
    st.title("streamlit with plotly")
    tips= load_data()

        #데이터 가공
    m_tips = tips.loc[tips['sex'] == 'Male']
    f_tips = tips.loc[tips['sex'] == 'Female']

    #시각화 차트
    fig= make_subplots(rows=1,
                       cols=2,
                       subplot_titles=('Male','Female'),
                       shared_xaxes=True,
                       shared_yaxes=True,
                       x_title='Total Bill($)'
                        )
    fig.add_trace(go.Scatter(x=m_tips['total_bill'],y=m_tips['tip'],
                             mode='markers'),row=1,col=1)
    fig.add_trace(go.Scatter(x=f_tips['total_bill'],y=f_tips['tip'],
                             mode='markers'),row=1,col=2)
    
    fig.update_yaxes(title_text="Tip($)",row=1,col=1)
    fig.update_xaxes(range=[0,60])
    fig.update_layout(showlegend=False)

    st.plotly_chart(fig, use_container_width=True)


if __name__ == "__main__":
    main()

 

 

실행 결과

seaborn에서 제공하는 데이터로 시각화한 자료입니다. 

남성/여성이 지불한 팁을 Scatter로 시각화 해보았습니다. 

 

하나의 차트에 다른 color로 표현할 수도 있지만, 이렇게 각각 시각화할수도 있습니다.

 

만약에 1개의 차트에서 보고 싶다면, 아래 부분에서 'col=2'를 'col=1'로 바꾸면 하나의 차트에 겹쳐서 시각화 할 수 도 있습니다.

fig.add_trace(go.Scatter(x=f_tips['total_bill'],y=f_tips['tip'],
                             mode='markers'),row=1,col=2)

 

 

 

 

공식 문서 참조하여 더 많은 라이브러리를 활용해보세요!

 

공식 문서 자료1

 

공식 문서 자료2

728x90
반응형