PAPS란?
예전의 초, 중, 고등학교 학생의 체력장 제도를 전면적으로 바꾼 학생건강체력평가시제도이다.
구체적으로는 학생들의 건강 체력과 비만, 그리고 선택적으로 심폐지구력 정밀평가와 심리검사인 자기신체평가, 자세평가와 같이 학생들의 신체활동과 관계된 종합적인 평가가 이루어지고 평가 결과를 토대로 신체활동처방이 주어지는 종합 평가시스템이다.
*출처 : 교육부(2009), 학생건강체력평가 매뉴얼
2023년도 1학기에 우리 반 학생들 Paps 등급 측정을 하였다.
그 결과
| 등급 | 학생 수 |
| 1등급 | 2명 |
| 2등급 | 8명 |
| 3등급 | 9명 |
| 4등급 | 4명 |
| 5등급 | 0명 |
이 나왔다.
*학생 이름을 가명처리하고, 일부 데이터를 수정해 비식별화를 한 데이터를 보고 싶다면 다음의 링크로 들어가면 된다.
https://raw.githubusercontent.com/RaccoonTeacher/PapsClustering/main/(%EB%B9%84%EC%8B%9D%EB%B3%84%ED%99%94)PapsData.csv
이걸 보고 우리 반 학생들과 나는 참으로 좋아했다.
5등급이 아무도 없다고. 체력이 나쁜 편이 아니라고.
그런데 시간이 지나면서 하나의 문제가 보였다.
학생들의 체력이 정말 부족하다는 것.
체육시간에 수업을 하다보니
단지 준비운동을 위해 운동장을 2바퀴 뛰었음에도 불구하고 뒤처지는 학생과 굉장히 숨차하는 학생들이 보이기 시작했다.
5등급이 아니면 문제될 정도의 체력은 아니라고 생각했었는데 말이다.
대부분의 초등학생들은 PAPS 등급 중 어디에 많이 분포하고 있을까?
분석을 바로 진행해보았다.
데이터 가져오기 및 살펴보기
학교알리미 사이트에서 "학생의 체력 증진에 관한 사항" 데이터를 가져왔다.
여기서 최근 3년간의 초, 중, 고등학교 PAPS 관련 데이터를 가져올 수 있다.
가져온 데이터에는 아래와 같은 속성들이 포함되어 있다.
'시도교육청', '지역교육청', '지역', '정보공시 학교코드', '학교명', '학교급코드', '설립구분', '제외여부', '제외사유', '학년', '성별', '왕복오래달리기(회)', '오래달리기걷기(초)', '스텝검사(PEI)', '앉아윗몸앞으로굽히기(cm)', '종합유연성(점)', '(무릎대고)팔굽혀펴기(회)', '윗몸말아올리기(회)', '악력(kg)', '50m달리기(초)', '제자리멀리뛰기(cm)', 'BMI(kg/㎡)', '체지방률(%fat)', '인원', '%', '인원.1', '%.1', '인원.2', '%.2', '인원.3', '%.3', '인원.4', '%.4', '검사인원수'
속성이 너무 많다.
위 속성 중 나에게 필요한 속성만 추려보았다.
'시도교육청', '지역교육청', '지역', '학교명', '인원', '%', '인원.1', '%.1', '인원.2', '%.2', '인원.3', '%.3', '인원.4', '%.4', '검사인원수'
위 속성의 이름이 직관적이지 않은 것들이 있어 변경했다.
#Before
'인원', '%', '인원.1', '%.1', '인원.2', '%.2', '인원.3', '%.3', '인원.4', '%.4'
#After
"1등급인원", "1등급비율", "2등급인원", "2등급비율", "3등급인원", "3등급비율", "4등급인원", "4등급비율", "5등급인원", "5등급비율"
이상치 제거하기
위 데이터에는 총 25085개의 초등학교가 있다.
그런데 초등학교별로 PAPS를 실시한 학생 수에 많은 차이가 있었다.
가장 적게 검사한 학생 수는 1명,
가장 많게 검사한 학생 수는 246명.
위와 같은 이상치가 있으면 분석이 제대로 이루어지지 않기 때문에 IQR을 활용해 이상치를 제거했다.
*IQR을 활용한 이상치 제거 방법은 아래의 글에서 구체적으로 설명해두었다.
https://aigoamigo.tistory.com/105
그랬더니 제거된 학교 수는 324개였다.
25085개 중 324개는 충분히 작은 숫자라 생각하고 분석을 이어나갔다.
결측값 제거하기
데이터 분석을 하다가 1등급~5등급까지 비율의 합에 문제가 있다는 걸 알게 되었다.
| 합계 | 해당 학교 수 |
| 100.0 | 16,527 |
| 100.1 | 2,106 |
| 99.9 | 1,577 |
| 99.9 | 1,412 |
| 100.1 | 1,196 |
| 100.0 | 923 |
| 100.0 | 788 |
| 100.1 | 44 |
| 100.2 | 41 |
| 0.0 | 36 |
| 100.2 | 28 |
| 99.9 | 24 |
| 100.1 | 17 |
| 99.8 | 14 |
| 99.9 | 14 |
| 99.8 | 10 |
| 99.8 | 3 |
| 100.2 | 1 |
100.0과 100.1 등과 같이 같은 수임에도 다르게 분류되는 이유는 소수점 2번째 이하의 숫자가 다르기 때문이었다.
즉, 100.0으로 딱 떨어지는 학교는 16,527개에 불과했다.
하지만 99.8~100.2 사이의 값은 전체 비율을 더하다보면 생길 수 있다.
위 사이의 값에 해당하는 학교는 분석에 부정적인 영향을 미치지 않을 거라 판단했다.
그래서 합계가 0.0인 36개의 학교만 제거했다.
데이터 분석하기
전국 학교의 PAPS 등급별 학생 비율(총 100%)은 아래와 같이 나왔다.
| 등급 | 학생 비율 | (학생이 23명일때) 학생 수 |
우리 반 학생 수 |
| 1등급 | 4.735478 | 1.089160 | 2 |
| 2등급 | 33.994115 | 7.818647 | 8 |
| 3등급 | 47.417120 | 10.905938 | 9 |
| 4등급 | 12.490614 | 2.872841 | 4 |
| 5등급 | 1.365018 | 0.313954 | 0 |
위 표에서 나타낸 바와 같이
우리 반 학생은 전체 학교의 평균과 굉장히 유사하다.
우리 반 학생은 전국적으로 보았을 때, 체력적으로 뛰어난 학생들도 아니고, 부족한 학생들도 아니다.
전국 학교의 PAPS 등급별 학생 비율을 그래프로 나타냈다.

최종 결론
1등급보다 5등급이 더욱 희귀하다.
4등급인 우리 반 학생들아... 분발하자.
사실상 4등급이 가장 낮은 등급이라고 봐도 무방할 것 같거든...
추가 분석
사실 이번 분석은
"전국 PAPS 등급"과 "지역별 PAPS 등급"을 비교했다.
그런데 "전국 PAPS 등급"만으로도 굉장히 긴 글이 되었기 때문에
다음 글에서 "지역별 PAPS 등급"을 다루도록 하겠다.
이 분석은 Colaboratory에서 Python을 활용해 진행했다.
구체적인 코드를 보고 실습도 해보고 싶다면, 아래의 링크로 이동하면 된다.
https://colab.research.google.com/drive/1swxu7rsfGr4TTPR8qNceH9ZNfbKbFu7i?usp=sharing
230817_PapsByRegion.ipynb
Colaboratory notebook
colab.research.google.com
보기 편하도록 여기에도 코드를 남겨본다.
#matplotlib.pyplot에서 한글 사용을 위함
#해당 코드 실행 후 "런타임-런타임 다시 시작"을 누르기
!sudo apt-get install -y fonts-nanum
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf
#필요한 라이브러리 가져오기
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rc
#모든 열 다 볼 수 있도록 설정
pd.set_option('display.max_columns', None)
#데이터 불러오기
df = pd.read_csv("https://raw.githubusercontent.com/RaccoonTeacher/tistory/main/2023_PapsByRegion.csv")
##필요한 속성만 가져오기
list_columns = '시도교육청', '지역교육청', '지역', '학교명', '인원', '%', '인원.1', '%.1', '인원.2', '%.2', '인원.3', '%.3', '인원.4', '%.4', '검사인원수'
df_pre = df.loc[:, list_columns]
##직관적인 속성명으로 변경
fix_column_before = ['인원', '%', '인원.1', '%.1', '인원.2', '%.2', '인원.3', '%.3', '인원.4', '%.4']
fix_column_after = ["1등급인원", "1등급비율", "2등급인원", "2등급비율", "3등급인원", "3등급비율", "4등급인원", "4등급비율", "5등급인원", "5등급비율"]
df_pre.rename(columns=dict(zip(fix_column_before, fix_column_after)), inplace=True)
#이상치 제거
quartile_1, quartile_3 = df_pre["검사인원수"].quantile([0.25, 0.75])
IQR = quartile_3 - quartile_1
condition = (df_pre["검사인원수"] > quartile_3+1.5*IQR) | (df_pre["검사인원수"] < quartile_1-1.5*IQR)
df_pre = df_pre.loc[~condition, :]
#결측치 제거
list_ratio = [column for column in df_pre.columns if "비율" in column]
df_pre.loc[:,list_ratio].sum(axis=1).value_counts()
df_pre_all = df_pre.loc[:, list_ratio]
df_pre_all = df_pre_all.dropna(subset=list_ratio)
df_pre_all = df_pre_all.reset_index(drop=True)
#전국 PAPS 등급별 학생 비율
df_pre_all.mean()*0.01
#23명 일때, 등급별 학생 수
df_pre_all.mean()*0.01*23
#그래프 그리기
plt.bar(df_pre_all.mean().index, df_pre_all.mean())
plt.title("전국 PAPS 등급별 학생 비율")
'데이터 분석' 카테고리의 다른 글
| 지역별 Paps 등급은 어떨까? #2023 (1) | 2023.08.20 |
|---|---|
| 전세계 성비는 어떻게 변했을까? (0) | 2023.08.04 |
| 우리나라 성비는 어떻게 변했을까? (0) | 2023.08.03 |
| 초등학교에는 남학생이 더 많을까, 여학생이 더 많을까 (0) | 2023.08.01 |
| PAPS로 학생 군집화하여 체육시간 모둠 나누는 프로그램 만들기(ChatGPT) (5) | 2023.04.03 |
댓글