본문 바로가기
데이터 어쩌구/전처리 및 시각화

[부스트코스] 캐글 실습 : 설문조사 응답 분석 (1)

by annmunju 2021. 1. 19.

www.boostcourse.org/ds116/joinLectures/28015

 

캐글 실습으로 배우는 데이터 사이언스

부스트코스 무료 강의

www.boostcourse.org

2장 설문조사 분석과 시각화 (www.kaggle.com/kaggle/kaggle-survey-2017)

 

<설문 내용>

  • 설문기간 : 2017년 8월 7일부터 8월 25일까지
  • 평균 응답 시간은 16.4 분
  • 171 개 국가 및 지역에서 16,716 명의 응답자
  • 특정 국가 또는 지역에서 응답자가 50 명 미만인 경우 익명을 위해 그룹을 '기타'그룹으로 그룹화
  • 설문 조사 시스템에 신고 된 응답자를 스팸으로 분류하거나 취업 상태에 관한 질문에 답변하지 않은 응답자는 제외(이 질문은 첫 번째 필수 질문이기에 응답하지 않으면 응답자가 다섯 번째 질문 이후 진행되지 않음)
  • 대부분의 응답자는 이메일 목록, 토론 포럼 및 소셜 미디어 Kaggle 채널을 통해 설문을 알게 됨
  • 급여데이터는 일부 통화에 대해서만 받고 해당 되는 통화에 기준하여 작성하도록 함
  • 미국 달러로 급여를 계산할 수 있도록 USD로 환산 한 csv를 제공
  • 질문은 선택적
  • 모든 질문이 모든 응답자에게 보여지는 것은 아님
  • 취업을 한 사람과 학생을 나누어 다른 질문을 함
  • 응답자의 신원을 보호하기 위해 주관식과 객관식 파일로 분리
  • 객관식과 자유 형식 응답을 맞추기 위한 키를 제공하지 않음
  • 주관식 응답은 같은 행에 나타나는 응답이 반드시 동일한 설문 조사자가 제공하지 않도록 열 단위로 무작위 지정

<데이터 파일> 

  • schema.csv : 설문 스키마가있는 CSV 파일입니다. 이 스키마에는 multipleChoiceResponses.csv 및 freeformResponses.csv의 각 열 이름에 해당하는 질문이 포함되어 있습니다.
  • multipleChoiceResponses.csv : 객관식 및 순위 질문에 대한 응답자의 답변, 각 행이 한 응답자의 응답
  • freeformResponses.csv : Kaggle의 설문 조사 질문에 대한 응답자의 주관식 답변입니다. 임의로 지정되어 각 행이 같은 응답자를 나타내지 않음
  • conversionRates.csv : R 패키지 "quantmod"에서 2017 년 9 월 14 일에 액세스 한 통화 변환율 (USD)
  • RespondentTypeREADME.txt : schema.csv 파일의 "Asked"열에 응답을 디코딩하는 스키마입니다.

<사용 라이브러리>

  • pandas
  • numpy
  • scipy > stats
  • matplotlib.pyplot
  • seaborn 
  • missingno

 

* ModuleNotFoundError 발생시 PowerShell prompt > pip install 모듈명 입력하면 설치됨.

 


1. 준비하기 : 라이브러리 불러오기, 파일 불러오기 (read csv), NaN 데이터 얼마나 될지 미리보기

#그래프 생성
%matplotlib inline

#라이브러리 불러오기
import pandas as pd
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
import seaborn as sns

# Warning 보이지 않도록
import warnings
warnings.filterwarnings('ignore')
# 질문 가져오기
question = pd.read_csv('schema.csv')
question.shape

# 결과 (290, 3)
question.head()

결과 : 질문들 미리보기(head) 5개 출력(기본값)

# 선다형 객관식 문제에 대한 응답 가져오기
mcq = pd.read_csv('multipleChoiceResponses.csv', encoding="ISO-8859-1",
                  low_memory=False)
mcq.shape

# 결과 (16716, 228)
mcq.columns

결과 : 설문에 사용된 질문의 열 이름을 불러옴

mcq.head()

결과 : 열 228개나 됨. 옆으로 스크롤 하면 많이나옴 ^^..

#missingno는 NaN 데이터들에 대해 시각화.
#NaN 데이터 칼럼이 많아 그래프만으로 내용 파악이 어려움
import missingno as msno

msno.matrix(mcq, figsize=(12,5))

결과 : 응답한 것만 색칠되어 있음. NaN값은 빈칸으로 표시됨.

 

728x90