열렬히.뛰기

3. EDA 체크리스트

수학 & 통계 > 탐색적 자료분석 > 탐색적 자료분석 : 목차 > 3. EDA 체크리스트

체크리스트 살펴보기

  1. Formulate your question (질문을 만들어라.)
    • 왜 분석을 하는지에 대한 이유 찾기
    • 모집단 정하고, 표본 디자인,
  2. Read in your data (너의 데이터에서 읽어라.)
    • R로 불러오기
  3. Check the packaging (분석에 필요한 패키지 찾기)
    • 구글링….
    • 토털 패키지로써의 의미도 포함
  4. Run str() (str() 돌려보기)
    • 변수를 전체적으로 훑어보기
  5. Look at the top and the bottom of your data (처음과 끝 보기)
    • head(), tail() 변수를 보면서 찾아보기
  6. Check your “n”s (샘플수 확인하기)
    • 샘플수가 틀리면 처음부터 다시 해야 한다.
    • 테이블을 편집하는 것이 제일 시간이 많이 걸린다.
  7. Validate with at least one external data source (이상치를 확인해라)
    • 이상치(outlier)가 나왔을 때, 꼭 확인해볼 것.
    • ex. 20대 혈압 자료 중 280이 나왔다면?
    • ex. 측정값에 음수가 포함되어 있는 경우
      • 0 이하의 값은 0으로 처리하기
  8. Try the easy solution first (쉬운 것부터)
    • 가장 쉬운 것부터 해보기
    • 솔루션 → 확인
  9. Challenge your solution
    • 목적에 맞게 더 분석
  10. Follow up questions
    • 기타 고급분석 등등

중요한 것 : 원하는 자료인지 확인하기

1번~5번 - 시작 전 확인

Formulate your question

  • 질문을 만듬으로써, 과정을 찾고, 분석 방법을 제한시킬 수 있다.
  • 구체적인 질문과 가정은 변수를 줄이는 역할을 해준다.
    • 변수 줄이기 = 차원 축소
    • 질문에 답할 수 있는 맞는 데이터가 있나?

Read in Your Data

  • 데이터를 읽는 것.
  • 데이터 : 굉장히 지저분하게 나올수도 있다.
    • 데이터를 Cleaning하는 것은 굉장히 중요하다.

Check the Packaging

  • 데이터를 분석하기 전, 제대로 된 데이터인지 확인

Run str()

  • str() 돌려보기

Look at the Top & Bottom of Your Data

  • 아래쪽에 이상한 값들이 있거나, 데이터 자체가 없을 수 있기에 확인
  • head(), tail()

예시 데이터와 질문

미국 환경부에서 따온 데이터를 가지고 질문 만들기

  • 어느 곳의 오염도가 더 심각한가? 동부 vs 서부

좀 더 심도 있게 질문을 만든다면 다음과 같다.

  • 시간당 오존 레벨이 평균적으로 높은 곳은? 뉴욕 vs LA
  • 지역 ⇒ 대표성을 띄는 도시로 축소

진짜 질문은 다음과 같다.

  • 공기중 오존 레벨이 가장 높은 county는?

시작 전 확인 - 코드

hourly_44201_2014_ver2.csv를 ozone이라는 이름으로 저장.

이후 데이터 확인 절차를 밟는다.

해답 : 1번 ~ 5번
r
library(readr)
ozone = read_csv("", col_types="ccccinn")

names() = make.names(names(ozone))
r
dim(ozone)

nrow(ozone)
ncol(ozone)

str(ozone)
head(ozone)
tail(ozone)

6. Check your “n”s

  • 샘플수에 대해서 민감해야 한다.
  • 샘플수가 30개 정도일때 missing이 있으면 값이 확확 줄어들 수 있다.

예를 들어 데이터가 다음과 같을 경우….

v1 v2 v3 v4
NA 12 1 3
0.1 12 1 1
0.25 NA 2 10
0.4 23 2 NA
NA 25 1 NA

결측값을 지워버리면 제대로 된 것이 없다!

이럴 때는 이 변수가 제대로 된 건지 확인해야 한다.

예시

  1. 미국의 hourly ozone data를 보자. 힌트 : table()
해답
r
table(ozone$Time.Local)
  1. 미국의 주를 기준으로 분석한다고 할 때, 주가 아닌 것들이 있다. 주의 이름을 나열해 이들을 찾아보자. 힌트 : unique()
해답
r
# 중복된 행을 삭제해야 하므로 unique를 쓴다.
unique(ozone$State.Name)

7. vaildate

데이터의 이상치 확인해보기.

예시문제

1번. summary of sample measurements를 구해보자.

2번. 이후 sample measurements의 십분위수(decile) 확인. 힌트 = quantile()

1번, 2번 해답
r
summary(ozone$Sample.Measurement)
quantile(ozone$Sample.Measurement, seq(0, 1, 0.1))

8. Try the Easy one

오존 레벨 top 10인 지역들을 확인해보자.

해답
r
# aggregate 함수로 만들어주기
ranking = aggregate(Sample.Measurement~State.Name+County.Name, 
ozone, mean)
# 이름 바꿔주기 : ozone으로
names(ranking)[3] = "ozone"
# ranking의 order 정리
ranking = ranking[order(ranking$ozone, decreasing=T),]
  • 열들을 붙이고, 계산을 할 때 aggregate를 쓴다.

How many observations in California, Mariposa?

힌트 : 새 데이터프레임을 만들고 행의 갯수를 샌다.

해답
r
# 이름 알아보기
mariposa.data = ozone[(ozone$State.Name == "California" & 
ozone$County.Name == "Mariposa"),]

# mariposa의 갯수 알아보기
nrow(mariposa.data)

시간 순으로 체크해보자. 힌트 : 테이블을 만든다.

해답
r
with(mariposa.data, table(Method.Name, Time.Local))

월별 오존농도를 체크해보자. 힌트 : aggregate 사용

해답
r
ozone$Date.Local = as.Date(ozone$Date.Local)
ozone$month = factor(months(ozone$Date.Local))
data = aggregate(Sample.Measurement~month, ozone, mean)
names(data)[2] = "ozone"
data

9. Challenge Your Solution

부트스트랩 샘플을 이용해 샘플을 뽑아나고, 새 ranking을 만들어보자.

해답
r
set.seed(10234)
N = nrow(ozone)
idx = sample(N, N, replace=T)
ozone2 = ozone[idx, ]

이후 기존의 ranking과 새 ranking(ranking2)를 붙여보자.

해답
r
# ranking2 만들기
ranking2 = aggregate(Sample.Measurement~State.Name + County.Name, 
ozone2, mean)
names(ranking2)[3] = "ozone"
ranking2 = ranking2[order(ranking2$ozone, decreasing=T),]

# ranking, ranking2 붙이고 확인
cbind(head(ranking, 10), head(ranking2, 10))
cbind(tail(ranking, 10), tail(ranking2, 10))

10. Follow-up question

  • 이렇게 했는데 이상한 데이터가 나올 수 있다.
  • 분명히 numeric으로 했는데, text로 나오는 경우
    • 빈칸 = ND(not detected)로 적은 경우 당연히 numeric으로 인식될 줄 알겠지만, 실제로 보니 char.
  1. 필요한 변수가 있는가?
  2. 다른 데이터도 추가로 필요한가?
  3. 올바른 질문인가?
  • EDA의 목표
    • 데이터에 대해 자료를 다시 확인
    • 필요하다면 목적에 맞는 데이터를 다시
    • iterative process