데이터 전처리
앞서 통합한 df_new 데이터를 분석 전 가공해야하는 단계가 왔다.
아래와 같은 4단계의 전처리 process를 기억하면 좋을 듯 한다.
1. 분석변수 추출 & 변수이름 변경
2. 변수의 결측치, 이상치 확인 후 처리
3. 파생변수 만들기
4. 분석 데이터 최종 확인
제일 먼저, 원재료를 다른 이름으로 복제시켜 놓고 데이터를 가공하고자 했다.
seoulair <- df_new
str()함수로 전체적인 변수들을 확인하고 분석에 쓸 변수를 체크한다.
str(seoulair)
분석변수: 날짜, 측정소명, 미세먼지, 초미세먼지
변수유형: 날짜+측정소명은 cha, 미세먼지+초미세먼지는 num
변수이름변경: 날짜는 date, 측정소명은 district, 미세먼지 pm10, 초미세먼지 pm2.5
위에서 정한 것들을 아래 코드와 같이 seoulair 데이터에 업데이트 해준다.
seoulair <- seoulair %>%
rename(date = '날짜',
district = '측정소명',
pm10 = '미세먼지 PM10\n(\u338d/m3)',
pm2.5 = '초미세먼지\nPM2.5 (\u338d/m3)') %>%
select(date, district, pm10, pm2.5)
확인해 보면, 아래와 같이 간결한 분석 테이블이 완성된 것을 확인할 수 있다.
str(seoulair)
앞선 데이터 통합글을 보고 오신분들은 아시겠지만, 나는 따로 다운받은 엑셀파일들의 header를 다 날리고 쌩 데이터 부분들만 통합한 후 따로 colnames로 변수명을 지정했다.
각자 어떻게 데이터를 통합했느냐에 따라 결측치나 불필요한 항목을 제거하도록 하자.
결측치는 문자형 변수&실수형 변수를 각각 확인하도록 한다.
1) 문자형 변수(date, district)
" table() "
table(seoulair$date)
아래와 같이 날짜만 이어져 문제가 없음을 확인
table(seoulair$district)
마지막을 보면 장소명이 아닌 평균 항목이 보인다. 추후 데이터 중복 계산이 되므로 제거하도록 하자.
seoulair <- seoulair %>%
filter(district != '평균')
1) 실수형 변수(pm10, pm2.5)
" summary() "
summary(seoulair$pm10)
NA(결측치)가 40개 있음을 확인한다.
summary(seoulair$pm2.5)
NA(결측치)가 32개 있음을 확인한다.
특별한 이상치는 발견되지 않았으며, 결측치는 영구 제거하는 것이 아닌 분석과정에서 filter(!is.na())로 처리하도록 한다.
현재 분석하는 미세먼지 데이터는 날짜에 관한 데이터 활용이 높을 것으로 예상되므로, 그와 관련한 date 파생변수들을 추가하도록 한다.
1) month, day 만들기
월별, 계절별 분석을 대비하여 substr() 함수로 date 변수에서 월과 일을 분리한다.
현재 내 date 데이터의 포맷은 'yyyy-mm-dd', 월은 6~7번째, 일은 9~10번째에 위치한다.
seoulair$month <- substr(seoulair$date, 6,7)
seoulair$day <- substr(seoulair$date, 9,10)
추가된 월과 일 파생 변수를 보니 chr 유형이다. 추후 데이터 활용을 위해 num으로 변경한다.
seoulair$month <- as.numeric(seoulair$month)
seoulair$day <- as.numeric(seoulair$day)
2) season 변수 만들기
month 변수를 이용하여 파생변수 season을 만든다. 계절구분은 3달씩
seoulair$season <- ifelse(seoulair$month %in% c('3','4','5'), 'spring',
ifelse(seoulair$month %in% c('6','7','8'), 'summer',
ifelse(seoulair$month %in% c('9','10','11'), 'autume', 'winter')))
이제 데이터 전처리는 끝났다. 더 필요한 파생변수는 분석과정에서 그때그때 추가하면 된다고 한다.