본문 바로가기

Python 입문

데이터 분석1-2. 이탈 분석

1. 목적

스파르타 코딩 클럽 A강의에서 수강생이 이탈하는 지점은 어디일까?

개인적으로는 2주차를 끝내고, 3주차 강의를 시작하기가 어려웠는데, 과연 데이터는 어떨지 궁금하다.

 

2. 준비: 강의별 유저수 합계

지난주와 동일하지만, 손에 익숙해 질 수 있도록 계속 입력해본다.

 

데이터를 불러오고

import pandas as pd

enroll = pd.read_csv('./data/enrolleds_detail.csv')

 

강의별 유저수 합계가 필요하므로
enroll_detail = enroll.groupby('lecture_id')['user_id'].count()

그래프를 그려서 눈에 띄는 지점이 있는지 살펴본다.

import matplotlib.pyplot as plt
plt.rcParams['font.family'] = "AppleGothic"

plt.figure(figsize=(22,5))
plt.bar(enroll_detail.index, enroll_detail)
plt.title('강의에 따른 수강 완료 수의 합계')
plt.xticks(rotation=90)
plt.show()

눈에 띄는 지점은 찾았지만, lecture_id 값으로 되어 있어, 알아볼 수가 없다.

알아볼 수 있도록 강의명 데이터를 불러와서 붙여준다.

 

3. 준비: 강의명 데이터

강의 데이터를 포함한 데이터를 불러오고

lectures = pd.read_csv('./data/lectures.csv')

1번에서 정제한 데이터와 매칭 하는 고유값을 기준으로 강의 데이터도 정제하고

lectures = lectures.set_index('lecture_id')

 

두 개의 데이터를 붙일 수 있도록 1번에서 준비한 데이터를 새로운 데이터 프레임으로 준비(a.k.a 엑셀 시트 생성)

lecture_count = pd.DataFrame(enroll_detail)

하지만, 인덱스 값이 lecture_id로 되어 있어서 2번 데이터의 고유값이랑 매칭 될 수 없으므로

인덱스 값이 lecture_id

 

인덱스 값을 초기화하여 0, 1, 2, ... 순번이 있고 lecture_id, user_id 열이 있는 데이터로 준비하면

lecture_count = lecture_count.reset_index()

인덱스 값 재설정한 결과

두 개의 데이터를 합칠 준비가 완료되었다.

 

참고로 헤더 명칭을 변경하는 코드는 다음과 같다.

lecture_count = lecture_count.rename(columns= {'user_id':'count'})

 

4. 데이터 참조 (a.k.a Join)

2~3번에 걸쳐서 준비한 두 개의 데이터를 합치고

full_lecture = lecture_count.join(lectures, on='lecture_id')

x축에 강의명을 넣어주면, 원하는 그래프를 완성할 수 있다.

plt.figure(figsize=(22,5))
plt.bar(full_lecture['title'], full_lecture['count'])
plt.title('강의에 따른 수강 완료 수의 합계')
plt.xlabel('강의명')
plt.xticks(rotation=90)
plt.show()

'Python 입문' 카테고리의 다른 글

데이터 분석1-4. 요일/시간 분석  (0) 2021.06.26
데이터 분석1-3. 워드 클라우드  (0) 2021.06.26
데이터 분석 1-1. 상권 분석  (0) 2021.06.16
Matplotlib 연습  (0) 2021.05.23
Pandas 연습  (0) 2021.05.23