-
[5월 1주차-5/9]🌍 Streamlit으로 만드는 CO2 배출량 대시보드Why Not SW CAMP 5기/수업 기록 2025. 5. 9. 11:29
이번 실습에서는 Streamlit을 활용하여 자동차의 엔진 크기, 연료 소비량, CO2 배출량 데이터를 시각화하는 웹 대시보드를 제작하였습니다.
🛠 사용 기술
- Python
- Pandas
- Plotly Express
- Streamlit
📁 데이터셋 정보
사용한 데이터는 CO2_Emissions.csv이며, 주요 컬럼은 다음과 같습니다.
- Vehicle Class
- Engine Size(L)
- Fuel Consumption City (L/100 km)
- Fuel Consumption Hwy (L/100 km)
- Fuel Consumption Comb (L/100 km)
- CO2 Emissions(g/km)
- Make
📌 사이드바 필터 설정
Streamlit의 사이드바 기능을 활용하여 사용자가 분석할 차량 등급과 엔진 크기 범위를 직접 선택할 수 있도록 구성하였습니다.
with st.sidebar: st.markdown('Filter the data you want to analyze: :tulip:') st.multiselect( 'Select the vehicle class you want to ananlyze: ', makers, default=['TWO-SEATER'], key='maker_filter' ) st.slider( 'Select the engine size (Liter) you want to analyze: ', min_value=df['Engine Size(L)'].min(), max_value=df['Engine Size(L)'].max(), value=(df['Engine Size(L)'].quantile(0.1), df['Engine Size(L)'].quantile(0.95)), step=.3, key='engine_filter' )
이 필터를 기준으로 전체 그래프가 자동으로 갱신되도록 설계하였습니다.
📊 대시보드 구성
1. 🚗 Engine Size 분석
제조사별 엔진 크기 분포를 boxplot으로 시각화하였습니다.
어떤 제조사가 더 큰 엔진을 주로 생산하는지 확인할 수 있습니다.st.subheader('Analysis of Engine Sizes') col1, col2 = st.columns(2) with col1: st.write( ''' The box plot of engine sizes by automotive manufacturer. What types of engine sizes do manufacturers produce the most for each brand? ''' ) with col2: fig1 = px.box( data_frame=df.sort_values('Engine Size(L)', ascending=False), x='Make', y='Engine Size(L)', width=300, height=400, points='all' ) st.plotly_chart(fig1) st.divider()
2. ⛽ 연료 소비량 분석
엔진 크기와 연료 소비량 간의 관계를 산점도로 표현하였습니다.
Y축은 도심, 고속도로, 복합 연비 중에서 선택할 수 있으며,
동일한 엔진 크기에서도 제조사마다 연비에 차이가 있음을 확인할 수 있습니다.st.subheader('Analysis of Fuel Consumption') col3, col4 = st.columns(2) with col3: st.write( ''' The scatter plot graph illustrating fuel efficiency based on engine sizes. Which manufacturer might have lower fuel efficiency within the same engine size? Which manufacturer might have higher fuel efficiency within the same engine size? ''' ) st.selectbox( 'Select Y-axis: ', [ 'Fuel Consumption City (L/100 km)', 'Fuel Consumption Hwy (L/100 km)', 'Fuel Consumption Comb (L/100 km)' ], key='fig2_yaxis' ) with col4: fig2 = px.scatter( data_frame=df, x='Engine Size(L)', y=st.session_state['fig2_yaxis'], width=500, color='Make', trendline='ols', trendline_scope='overall' ) st.plotly_chart(fig2) st.divider()
3. 🌫 CO2 배출량 분석
연료 소비량과 CO2 배출량의 상관관계를 시각화하였습니다.
같은 연비 조건에서 어떤 제조사가 더 많은 CO2를 배출하는지를 파악할 수 있습니다.st.subheader('Analysis of Carbon Emissions') col5, col6 = st.columns(2) with col5: st.write( ''' The scatter plot graph depicting the correlation between fuel efficiency and carbon emissions, with color differentiation for each manufacturer. Which manufacturer might have higher carbon emissions within the same fuel efficiency range? ''' ) st.selectbox( 'Select X-axis: ', [ 'Fuel Consumption City (L/100 km)', 'Fuel Consumption Hwy (L/100 km)', 'Fuel Consumption Comb (L/100 km)' ], key='fig3_xaxis' ) with col6: fig3 = px.scatter( data_frame=df, x=st.session_state['fig3_xaxis'], y='CO2 Emissions(g/km)', width=500, color='Make', trendline='ols', trendline_scope='overall' ) st.plotly_chart(fig3)
💡 실습 후기
Streamlit은 데이터 분석 결과를 웹으로 빠르게 공유할 수 있게 해주는 매우 효율적인 도구입니다. Streamlit을 통해 복잡한 프론트엔드 작업 없이도 직관적이고 인터랙티브한 웹 앱을 구현할 수 있었습니다.
이번 실습을 통해 단순한 데이터 분석을 넘어서 사용자와 상호작용할 수 있는 데이터 시각화 대시보드를 직접 만들어보며 그 가능성을 확인할 수 있었습니다.'Why Not SW CAMP 5기 > 수업 기록' 카테고리의 다른 글
[5월 3주차-5/20(2)]🎙️ Whisper + GPT-4로 회의록 자동 생성 시스템 만들기 (요약부터 교정, 워드 저장까지) (1) 2025.05.20 [5월 3주차-5/20(1)]AI 기반 문서 요약 및 회의록 자동화 시스템 (1) 2025.05.20 [5월 1주차-5/8]🎈 Python으로 웹 대시보드 만들기- Streamlit (1) 2025.05.08 [5월 1주차-5/7]🧩 Django로 RESTful API 만들기 & 실시간 채팅 앱 구축 (Channels 활용) (0) 2025.05.07 [4월 5주차-4/29~30]🌐 Django로 나만의 로그인 + 이미지 북마크 웹사이트 만들기 (feat. 구글 소셜 로그인까지) (2) 2025.04.30