Challenge & Study 데이터 분석

데이터 분석 - 현업 데이터로 분석해보기 3-1 본문

데이터 분석 - Python/정리하자

데이터 분석 - 현업 데이터로 분석해보기 3-1

Factful_Day 2020. 7. 30. 23:47

**해당 데이터는 제가 학원 강의를 수료하며 받은 데이터이며 원본 데이터는 기업으로부터 제공받은 데이터라서 공유할 수 없습니다.
**본문은 공부를 하며 과정을 이해하며 생각하기 위함이니 참고 해주시면 감사드리겠습니다.

## Environment : Anaconda-navigator
## Programming Language : Python 3
## Import Pandas as pd
## import Numpy as np

## import seaborn as sns
## import matplotlib as mpl
## import matplotlib pyplot as plt
## Origin data has been provided by DS school
## DS School is a company that mentioned as below.

DS School 은 직무교육 스타트업으로 데이터 사이언스와 데이터 마케팅 수업을 진행하고 있습니다.

Target

  1. 데이터를 불러오기 및 전반적인 정보 확인
  2. 불러온 데이터들을 전처리
  3. 데이터 분석

데이터셋에 대한 설명부터 확인하고 분석을 시작하겠습니다.

사용할 수 있는 테이블의 리스트는 다음과 같습니다.

  • surveys
    DS School 홈페이지에 접속하게 되면 설문조사를 수행하게 되고, 이 결과를 바탕으로 적절한 강의를 선정해 과목 추천을 해드리고 있습니다. 이 때, 수집한 설문조사 내용은 고객의 수요를 조사하는데 아주 소중한 자산이 되고, 강의 내용에 대한 피드백이나 향후 오픈할 강의의 우선순위를 정하는데 쓰일 수 있습니다.
  • users
    여러가지 마케팅 채널들을 통해서 유입된 고객들에게는 별도의 id가 부여가 됩니다. 이를 통해 고객의 결제 유무 등을 파악할 수 있고, 이는 마케팅 채널별 효율 분석에 소중한 자산이 됩니다. mixpanel에서 사용하는 id와 DS School에서 자체적으로 사용하는 데이터베이스의 user id를 연결시켜주는 역할을 하고, 고객에 개인정보를 가지고 있습니다. 이는 비식별화 과정을 거쳐 제공됩니다.
  • payments
    유저들의 결제 정보입니다. 연락처와 수강신청한 기수, 결제일, 결제 상태 등이 제공되는데 마찬가지로 개인정보는 비식별화되어있는 상태로 제공됩니다. 2018년 이전의 결제 정보가 포함되어 있습니다.
  • 믹스패널 데이터
    DS School은 웹로그 데이터 분석을 위해 믹스패널을 사용합니다. 2009년 설립된 믹스패널은 사용자 추적을 기본으로 하는 분석 툴로, 원하는 서비스 사용자를 지정하면 해당 유저의 활동을 모두 조회할 수 있는 기능을 제공해줍니다. 이를 통해 해당 사용자 그룹의 특성과 사용 패턴을 알 수 있습니다. 유명 액셀러레이터 ‘Y Combinator’의 멤버로 트위치, 우버, 핏빗, 스포티파이, 세일즈포스 등의 고객사를 보유하고 있으며 2016년 1월 기준 누적 투자액 800억원을 기록함과 동시에 기업 가치 9,000억원대로 평가 받는 분석툴이기도 합니다. 실시간분석이 가능하며 코호트 분석과 잔존율, 퍼널 분석이 가능합니다. 믹스패널 데이터 또한 고객의 유입경로 등의 정보를 가지고 있습니다. 제공되는 데이터는 믹스패널 데이터베이스에서 추출한 자료이기 때문에 csv파일로 제공됩니다.

데이터베이스에서 설문조사 결과를 읽어온 후 사용자와 질문을 기준으로 정렬하겠습니다.

설문조사 결과를 분석하여, DS School 홈페이지에 접속하는 사람들이 왜 데이터 사이언스에 관심이 있는지 파악하려고 합니다. 고객들의 니즈를 파악하여 향후 어떤 강의를 우선적으로 오픈할지 결정할 수도 있고, 수강생들에게 어떤 내용의 자료를 보여드려야할지 결정할 수도 있습니다.

하지만, 중복응답이 가능한 설문조사이다 보니, 데이터베이스에 정보가 보기좋게 정리되어 있지는 않습니다. 이를 응답한 사람과 질문 번호 순으로 정렬해보겠습니다.

# 판다스는 테이블을 출력할 때, row나 column이 일정 개수 이상 넘으면 생략해서 보여줍니다
# column을 생략하길 원하지 않는 경우 아래와 같이 옵션을 주어 생략되지 않도록 할 수 있습니다
pd.options.display.max_columns = 50

# data폴더의 dsschool.db에 접속을 합니다
connect = sqlite3.connect('dsschool.db')
connect

# 'surveys' 테이블의 모든 컬럼을 가져오는 쿼리를 작성 후 read_sql로 불러옵니다
query = "SELECT * FROM 'surveys'"

surveys = pd.read_sql(query, connect)

print(surveys.shape)
surveys.head(5)

surveys 테이블을 잘 불러왔습니다.

추후 편리한 분석을 위해 surveys를 user_id와 question_id, 그리고 created_at를 기준으로 정렬하겠습니다. user_id를 우선으로 정렬해야 합니다.

# 3개 컬럼 기준으로 정렬하며 user_id를 우선 정렬 진행
surveys = surveys.sort_values(['user_id', 'question_id', 'created_at'])

# surveys의 상단 3개 항목 확인
surveys.head(3)

정렬이 잘 되었습니다.

 

Surveys 테이블은 원본 데이터이기 때문에 분석을 위해서는 cleaning 작업이 필요합니다. 아래 조건에 맞춰 진행해보겠습니다.
  
- answer 값이 't', 'f'로 입력되어 있는데 이를 True, False로 변환합니다.
- created_at과 updated_at을 datetime 형식으로 변환합니다.
- 같은 user_id가 여러번의 설문조사를 응답한 경우도 제거합니다.

# 다음 절차를 위해 컬럼들의 특성을 파악합니다
surveys.columns

보시면 answer값을 가지는 컬럼들이 answer숫자_selected 형식을 취하고 있습니다. 코딩 후 내용을 확인해 보겠습니다.

# answer{i}_selected의 숫자가 들어가는 범위 지정
for i in range(1, 13):
    old_column = f'answer{i}_selected'                 # 현재 컬럼들 변수 지정
    new_column = f'answer{i}_selected(bool)'           # 새로 만들 컬럼들 변수 지정
    surveys[new_column] = (surveys[old_column] == 't') # 기존 컬럼의 내용이 t이면 새로운 컬럼의 값이 True 아니면 False 출력
    
# surveys 변수에 할당된 데이터의 행렬(row, column) 사이즈를 출력
print(surveys.shape)

# surveys컬럼 중 아래 2개의 상위 5개 데이터 출력
surveys[['answer1_selected', 'answer1_selected(bool)']].head()

새로운 컬럼이 잘 생성되었습니다.

두번째로 created_at과 updated_at을 datetime 자료형으로 변환해보겠습니다.

surveys['created_at'] = pd.to_datetime(surveys['created_at'])
surveys['updated_at'] = pd.to_datetime(surveys['updated_at'])
surveys[['created_at','updated_at']].dtypes

변환이 완료되었습니다.

세번째로 동일한 user_id가 여러번 설문조사를 진행한 중복 내용을 제거하겠습니다.

# surveys에서 drop_duplicates함수를 사용하여 user_id, question_id컬럼 기준 최신 정보만 남기며 중복 내용 제거
surveys = surveys.drop_duplicates(['user_id', 'question_id'], keep='last')

print(surveys.shape)
surveys.head()

내용이 잘 정리되었습니다.

 

다음 페이지에서는 본 환경을 이어서 분석을 진행하도록 하겠습니다.

*** 본 페이지는 본인의 공부를 위해 작성되었으며, 협찬이나 문의를 받고 기재한 내용이 아닙니다. 혹시 문의사항이 있으시거나 문제가 될 경우 연락 주시기 바랍니다.***