주제선정
우리조는 교육 데이터를 주제로 실전 프로젝트를 진행하기로 했다.
온라인 강의 플랫폼에 저장된 데이터를 활용해서 해당 서비스의 현황을 확인할 수 있는 대시보드를 생성합니다.
- 강의 참여자들의 수강 기록을 바탕으로 해당 플랫폼과 각 강의별 참여도를 확인할 수 있는 대시보드 생성
- 온라인 강의 및 서비스 활성화 정도를 확인할 수 있는 지표 생성
- 생성된 대시보드를 바탕으로 현황 분석 및 개선 방안 제안
인적사항 별 EDA
#나이 컬럼 생성
df['age'] = df['start_time_DI'].dt.year - df['YoB']
sns.histplot(df['age'], bins=30, kde=True)
plt.show()
컬럼이 태어난 날짜밖에 없어서 시작 시간을 기준으로 나이를 다시 계산해주고 히스토그램으로 분포를 확인했다.
20대에서 40대가 가장 많지만 최소 나이는 0세, 최고 나이는 84세까지있어서 너무 어린 나이는 이상치처리를 해야할 것 같다.
성별
sns.countplot(x='gender',data = df)
for p in plt.gca().patches:
plt.gca().annotate(f'{p.get_height()}',
(p.get_x() + p.get_width() / 2., p.get_height()),
ha='center', va='baseline', fontsize=12)
plt.show()
남자가 훨씬 많은 것으로 보인다.
# 분석할 열들
activity_columns = ['nevents', 'ndays_act', 'nplay_video', 'nchapters', 'nforum_posts']
# 성별 기준으로 평균 계산
gender_mean = df.groupby('gender')[activity_columns].mean().reset_index()
# 그래프 시각화
plt.figure(figsize=(15, 8))
gender_mean.set_index('gender').T.plot(kind='bar', figsize=(15, 8), rot=0)
plt.title('Average Activity Counts by Gender')
plt.xlabel('Activity Type')
plt.ylabel('Average Count')
plt.legend(title='Gender')
plt.tight_layout()
plt.show()
근데 학습 참여율을 보면 여성이 더 많은편
학력
plt.figure(figsize=(12,5))
sns.countplot(x='LoE_DI',data = df)
for p in plt.gca().patches:
plt.gca().annotate(f'{p.get_height()}',
(p.get_x() + p.get_width() / 2., p.get_height()),
ha='center', va='baseline', fontsize=12)
plt.show()
대졸>고졸>석사 순으로 많다
gender_mean = df.groupby('LoE_DI')[activity_columns].mean().reset_index()
# 그래프 시각화
plt.figure(figsize=(15, 8))
gender_mean.set_index('LoE_DI').T.plot(kind='bar', figsize=(15, 8), rot=0)
plt.title('Average Activity Counts by Gender')
plt.xlabel('Activity Type')
plt.ylabel('Average Count')
plt.legend(title='Gender')
plt.tight_layout()
plt.show()
그래도 석사 박사가 학습률은 제일 높다!
결측치 처리
nplay_video 457530
roles 641138
incomplete_flag 540977
이 세 컬럼은 결측치가 전체의 50% 이상이므로 삭제하기로 했다.
ndays_act는 null 이면서 grade는 0.1이상인 것 ->24건
ndays_act 는 not null 이면서 2이상, last_event_DI는 null 인 것 ->9102건
위 이상치는 제거,
나머지 ndays_act 결측치는 0으로 대체
나머지 last_event_DI 결측치는 ndays_act가 1인 것으로 확인됨.(즉 start_time_DI가 last_event_DI랑 같다는 뜻이므로 start_time_DI로 대체)
nevents ,nchapters도 0값이 없으므로 0으로 대체
last_event_DI,ndays_act 가 모두 null인데 nchapters는 null이 아니고 'certified'는 1임
즉 하루만에 모든 챕터를 다 학습하고 수료까지 했다는 것.
결측치를 학습 안한 사람으로 보려면 정확한 기준이 필요해보임.
'데이터분석 6기 > 본캠프' 카테고리의 다른 글
2025-05-13 통계 검증 및 인사이트 정리 (0) | 2025.05.13 |
---|---|
2025-05-12 실전프로젝트 2 - 학습일 별로 데이터 분류 (1) | 2025.05.12 |
2025-05-08 태블로 개인과제 (0) | 2025.05.08 |
2025-05-07 태블로 실습 (0) | 2025.05.07 |
20205-05-02 태블로 실습 (0) | 2025.05.02 |