| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- TiL
- 방송대컴퓨터과학과
- Git
- 클라우드컴퓨팅
- nestjs
- 항해99
- 꿀단집
- CSS
- 파이썬
- 중간이들
- 코딩테스트준비
- mongoDB
- 개발자취업
- 99클럽
- 데이터분석
- 파이썬프로그래밍기초
- 오픈소스기반데이터분석
- Python
- 코딩테스트
- 프로그래머스
- node.js
- 유노코딩
- HTML
- 코드잇
- JavaScript
- aws
- 방송대
- 데이터베이스시스템
- 엘리스sw트랙
- Azure
- Today
- Total
배꼽파, 오늘도 배꼽 대신 데이터를 판다
교육 효과 분석 2편: 분석 결과를 Streamlit 대시보드로 만들기 본문

분석 결과를 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. 구현 흐름
구현 흐름 자체는 복잡하지 않다.
- SQLite에서 정제 데이터 로드
- 사이드바에서 필터 선택
- 조건에 맞는 데이터만 남김
- 전후 차이 계산
- KPI 계산
- 차트 생성
실제 코드도 survey.db에서 survey_clean 테이블을 읽고, 필터 적용 후 difference를 계산하는 구조다. 데이터 로드는 @st.cache_data로 캐시했다.
구현에서 중요했던 건 기능을 많이 넣는 게 아니라,
필터를 바꾸면 의미 있는 값이 바로 다시 계산되도록 만드는 것이었다.
대시보드는 정적인 보고서가 아니라, 질문을 바꿔가며 보는 도구에 더 가깝기 때문이다.

6. 왜 Streamlit이었나
이 프로젝트에서 Streamlit을 사용한 이유는 간단했다.
- Python 분석 흐름과 바로 연결되고
- 필터와 차트를 빠르게 붙일 수 있고
- 결과를 웹 형태로 쉽게 보여줄 수 있기 때문이다
특히 이미 pandas 기반으로 데이터 정리와 집계가 끝난 상태라면, Streamlit은 결과를 공유 가능한 화면으로 옮기기에 적합하다.
복잡한 서비스 개발보다는 분석 결과를 빠르게 보여주는 운영용 화면에 더 잘 맞는 선택이었다.
마무리

이번 글에서는 사전·사후 설문 분석 결과를 Streamlit 대시보드로 연결한 과정을 정리했다.
핵심은 분석 자체보다, 그 결과를 운영자가 바로 볼 수 있는 형태로 바꾸는 것이었다.
정리하면 이 대시보드는
- 교육 효과를 한 화면에서 요약해 보여주고
- 회차·직무·사용 경력 기준으로 비교할 수 있게 하며
- 운영 개선 판단을 빠르게 지원한다
분석은 숫자를 구하는 데서 끝나는 일이 아니라,
누가 보고 어떻게 쓸지까지 설계될 때 비로소 실무 도구가 된다고 생각한다.
Education-Data-Analysis/03-training-effectiveness-evaluation at main · devellybutton/Education-Data-Analysis
설문 데이터를 분석해 핵심 지표를 도출하고, 가설 및 통계 검증을 통해 의사결정을 지원한 프로젝트입니다. - devellybutton/Education-Data-Analysis
github.com
'실전 기술 활용 > 데이터 분석' 카테고리의 다른 글
| 교육 효과 분석 1편: 대응표본 t-test로 검증한 교육 전후 변화 (0) | 2026.06.03 |
|---|---|
| 추론 통계 기본 개념 정리 - 표준편차, 신뢰구간, p-value까지 (0) | 2026.06.03 |
| 기술통계 정리 - 수식과 그래프로 이해하기 (0) | 2026.06.03 |