배꼽파, 오늘도 배꼽 대신 데이터를 판다

교육 효과 분석 2편: 분석 결과를 Streamlit 대시보드로 만들기 본문

실전 기술 활용/데이터 분석

교육 효과 분석 2편: 분석 결과를 Streamlit 대시보드로 만들기

배꼽파 2026. 6. 3. 19:06

분석 결과를 Streamlit 대시보드로 연결한 과정

사전·사후 설문 분석 결과를 보고서로만 남기지 않고,
회차·직무·엑셀 사용 경력 기준으로 바로 확인할 수 있는 Streamlit 대시보드로 재구성했다.
핵심은 분석 결과를 운영자가 바로 볼 수 있는 화면으로 바꾸는 것이었다.

 


들어가며

1편에서는 사전·사후 설문 데이터를 매칭하고, 통계 검증을 통해 교육 효과를 확인한 과정을 정리했다.

 

https://programming-bellybutton.tistory.com/257

 

교육 효과 분석: 대응표본 t-test로 검증한 교육 전후 변화

교육 만족도만으로는 부족했다사전·사후 설문 데이터로 교육 효과를 검증한 과정만족도 평균만 보던 교육 운영 데이터를, 사전·사후 설문 매칭과 통계 검증으로 다시 해석해 “실제로 교육 효

programming-bellybutton.tistory.com

 


하지만 분석 결과가 나왔다고 해서, 그 자체로 실무에서 바로 활용되지는 않는다.

현업에서는 노트북 파일이나 분석 리포트를 매번 열어보지 않는다.


대신 지금 바로 확인할 수 있는 숫자, 비교 가능한 기준, 빠르게 읽히는 화면이 필요하다.

그래서 이번에는 분석 결과를 운영자가 바로 볼 수 있는 대시보드로 다시 구성했다.
목표는 단순했다.

  • 전체 교육 효과를 한눈에 보여주기
  • 조건별 차이를 바로 비교할 수 있게 만들기
  • 운영 판단에 필요한 기준을 빠르게 확인할 수 있게 하기

 


1. 왜 대시보드로 만들었나

분석 결과를 문서로 정리하는 것과, 실제로 활용할 수 있게 만드는 것은 다르다.

운영에서는 보통 이런 질문이 먼저 나온다.

  • 지금 전체 만족도는 어떤가?
  • 사전·사후 차이는 얼마나 나는가?
  • 특정 회차만 보면 결과가 다른가?
  • 초급자 집단에서 효과가 더 큰가?

그래서 이 프로젝트에서는 분석 결과를 설명용 문서가 아니라,
의사결정용 화면으로 다시 정리했다. README에서도 마지막 단계가 KPI 재정의, 대시보드 생성, 액션 및 의사결정 지원으로 이어진다.

 


2. 첫 화면에 넣은 KPI

대시보드 상단에는 5개의 핵심 지표를 배치했다.

KPI 의미
응답자 수 현재 조건에 해당하는 응답 수
전체 만족도 사후 평균 점수
사전 평균 교육 전 평균 점수
사후 평균 교육 후 평균 점수
평균 향상폭 사후 평균 - 사전 평균

코드에서도 이 5개를 metric 카드로 구현했다.
difference는 사후 평균에서 사전 평균을 뺀 값으로 계산했고, overall_sat는 사후 평균을 기준으로 잡았다.

기존에는 만족도 평균만 봤다면, 이 구조에서는 향상폭까지 함께 볼 수 있다.
즉, “좋았는가”뿐 아니라 “실제로 얼마나 달라졌는가”까지 한 화면에서 확인할 수 있게 한 셈이다.

 


3. 필터는 3개만 뒀다

필터는 많을수록 좋은 게 아니라, 실제로 자주 나눠보는 기준만 남기는 것이 더 중요했다.

이번 대시보드에서는 아래 3개만 사용했다.

  • 회차
  • 직무
  • 엑셀 사용 경력

코드상으로는 각 항목을 멀티셀렉트로 만들고, 전체를 선택하면 전체 데이터를 보도록 구성했다. 그렇지 않으면 선택한 값만 필터링되도록 처리했다.

이 세 가지를 고른 이유도 분명했다.

  • 회차: 운영 품질의 일관성을 보기 좋고
  • 직무: 어떤 직무군에서 반응이 좋은지 비교할 수 있으며
  • 엑셀 사용 경력: 실제로 향상폭 차이가 나타난 변수이기 때문이다.

즉, 필터는 단순 분류가 아니라 실제 인사이트가 있는 기준을 화면에 반영한 것이다.

 


4. 차트는 2개로 단순하게 구성했다

첫 화면 차트는 두 개만 넣었다.
정보를 많이 쌓기보다, 가장 먼저 봐야 할 비교만 남기는 쪽을 택했다.

4-1. 회차별 평균 만족도

첫 번째 차트는 회차별 사후_평균 막대그래프다.
코드에서는 회차 기준으로 그룹핑한 뒤 평균을 계산하고, 막대 위에 수치를 표시했다. y축은 0~5 범위로 고정했다.

이 차트는 “어느 회차가 더 높았나”보다,
회차 간 편차가 과도한가를 보는 데 더 유용하다.

즉, 특정 회차만 유독 낮다면 강사, 진행 방식, 참여자 구성 등 운영 요인을 추가로 점검할 수 있다.

4-2. 교육 전·후 평균 비교

두 번째 차트는 사전 평균과 사후 평균을 나란히 보여주는 막대그래프다.
코드에서는 compare_df를 별도로 만들고, 사전 평균과 사후 평균 두 값을 비교하도록 구성했다. 역시 y축은 0~5 범위로 고정했다.

이 차트의 역할은 분명하다.
복잡한 통계값을 보기 전에, 교육 전보다 교육 후가 실제로 올라갔는지를 직관적으로 보여주는 것이다.

 


5. 구현 흐름

구현 흐름 자체는 복잡하지 않다.

  1. SQLite에서 정제 데이터 로드
  2. 사이드바에서 필터 선택
  3. 조건에 맞는 데이터만 남김
  4. 전후 차이 계산
  5. KPI 계산
  6. 차트 생성

실제 코드도 survey.db에서 survey_clean 테이블을 읽고, 필터 적용 후 difference를 계산하는 구조다. 데이터 로드는 @st.cache_data로 캐시했다.

구현에서 중요했던 건 기능을 많이 넣는 게 아니라,
필터를 바꾸면 의미 있는 값이 바로 다시 계산되도록 만드는 것이었다.

대시보드는 정적인 보고서가 아니라, 질문을 바꿔가며 보는 도구에 더 가깝기 때문이다.

 


6. 왜 Streamlit이었나

이 프로젝트에서 Streamlit을 사용한 이유는 간단했다.

  • Python 분석 흐름과 바로 연결되고
  • 필터와 차트를 빠르게 붙일 수 있고
  • 결과를 웹 형태로 쉽게 보여줄 수 있기 때문이다

특히 이미 pandas 기반으로 데이터 정리와 집계가 끝난 상태라면, Streamlit은 결과를 공유 가능한 화면으로 옮기기에 적합하다.
복잡한 서비스 개발보다는 분석 결과를 빠르게 보여주는 운영용 화면에 더 잘 맞는 선택이었다.

 


마무리

 

이번 글에서는 사전·사후 설문 분석 결과를 Streamlit 대시보드로 연결한 과정을 정리했다.
핵심은 분석 자체보다, 그 결과를 운영자가 바로 볼 수 있는 형태로 바꾸는 것이었다.

정리하면 이 대시보드는

  • 교육 효과를 한 화면에서 요약해 보여주고
  • 회차·직무·사용 경력 기준으로 비교할 수 있게 하며
  • 운영 개선 판단을 빠르게 지원한다

분석은 숫자를 구하는 데서 끝나는 일이 아니라,
누가 보고 어떻게 쓸지까지 설계될 때 비로소 실무 도구가 된다고 생각한다.

 

https://github.com/devellybutton/Education-Data-Analysis/tree/main/03-training-effectiveness-evaluation

 

Education-Data-Analysis/03-training-effectiveness-evaluation at main · devellybutton/Education-Data-Analysis

설문 데이터를 분석해 핵심 지표를 도출하고, 가설 및 통계 검증을 통해 의사결정을 지원한 프로젝트입니다. - devellybutton/Education-Data-Analysis

github.com

728x90