- 머신 러닝 결과를 얻기 위해서는 데이터의 성격을 파악하는 과정
- 데이터 내 값의 분포, 변수 간의 관계, Null 값과 같은 결측값 존재 유무를 파악하는 과정을 EDA(Exploratory Data Analysis, 탐색적 데이터 분석)이라고 함.
- 방대한 양의 데이터를 가진 데이터프레임을
.profile_report()
라는 명령으로 탐색하는 패키지
01. 실습 파일 불러오기
- 실습을 위해 아래 링크의 spam.csv란 파일을 다운로드
import pandas as pd
import pandas_profiling
data=pd.read_csv('파일 경로',encoding='latin1')
data[:5]
- v1 : 해당 메일이 스팸인지 아닌지를 나타내는 레이블
- v2 : 메일의 본문
02. 리포트 생성하기
pr = data.profile_report()
pr.to_file('./pr_report.html')
3. 리포트 살펴보기
- 이제 html 형식으로 저장된 리포트를 분석하자.
(1) 개요(Overview)
- 데이터의 전체적인 개요를 보여줌.
- 데이터의 크기, 변수의 수, 결측값 비율(missing value), 데이터의 종류
-
Dataset info
- 해당 데이터는 총 5572개의 샘플을 가지고 있으며, 5개의 열을 가지고 있음.
- 하나의 값을 셀이라고 하였을때, 총 5572 * 5개의 셀이 존재하지만 그중 16648개(59.8%)가 결측값으로 확인됨.
-
Warnings
- Unnamed라는 3개의 열에 존재 (99% 이상의 결측값)
- v2열은 5169개의 중복되지 않은 값을 가지고 있음. (distinct value)
(2) 변수(Variables)
- 변수는 데이터에 존재하는 모든 특성 변수들에 대한 결측값, 중복을 제외한 유일한 값의 개수등의 통계치를 보여줌.
- Unnamed라는 이름을 가진 3개의 열에 대해서, 3개의 열 모두 99% 이상의 값이 결측값임.
- (예) Unnamed_2열은 총 5572개의 값 중에서 5522개가 결측값임.
- 이는 총 50개의 결측값이 아닌 값이 존재함을 의미
- 리포트 상에서 Distinct count 중복을 제거한 유일한 값의 개수는 44개임.
- 다른 2개의 열인 v1과 v2를 봤을때, v2은 메일의 본문, v1은 spam 유무
- v1은 Distinct Count가 2개로 4825개의 정상 메일, 747개의 스팸 메일이 있음.
- v2은 5169개의 유일한 내용의 메일 본문을 가짐.
- 가장 중복이 많은 메일은 Sorry, I'll call later'라는 내용의 메일로 총 30개의 메일이 존재함.
- 두 열(v1,v2)에는 결측값이 존재하지 않음.
(3) 상세사항 확인하기(Toggle Details)
v1의 상세사항 확인하기
(1) Common Values
- 총 2개의 탭이 존재하는데, 첫번째 탭인 빈도값(common values)에서는 각 값의 분포를 상세하게 보여줌.
- v1의 경우, ham이 총 4825개로 이는 전체 값 중 86.6%에 해당되며, spam은 747개로 전체 값 중에서는 13.4%에 해당됨.
(2) Complosition
- 전체 값의 최대 길이, 최소 길이, 평균 길이와 값의 구성에 대해 볼 수 있음.
- spam또는 ham이라는 1개 단어만 존재
- 문자열의 길이로 Max, Min Length가 정해짐
- spam 또는 ham 구분으로만 이루어져 있어 contains chars에만 True가 표시됨.
v2의 상세사항 확인하기
- 중복이 존재하는 상위 10개 메일의 내용 확인
(1) Composition
- 데이터 최대 길이는 910, 최소 길이는 2, 평균 길이는 80임을 알 수 있음.
- 메일 본문에는 숫자, 글자, 공백, 특수문자가 모두 포함되어 있어 모든 Contains는 True