해당 코드는 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'로 바꾸면 하나의 차트에 겹쳐서 시각화 할 수 도 있습니다.
공식 문서 참조하여 더 많은 라이브러리를 활용해보세요!
'programming > Python' 카테고리의 다른 글
[파이썬] streamlit의 tabs&columns 기능활용하기 (0) | 2023.12.28 |
---|---|
[파이썬] streamlit의 slider 이용해서 위젯 만들기 (0) | 2023.12.28 |
[파이썬] streamlit의 metric활용하기(전일대비 등락폭 등 시각화) (0) | 2023.12.27 |
[파이썬] streamlit의 data_editor로 편집&분석도구 만들기 (0) | 2023.12.27 |
[파이썬] streamlit의 dataframe& session_state 알아보기 (0) | 2023.12.27 |