간단한 20개의 데이터로 전처리 실습을 합니다.
실습데이터 tongcon(ex)_01.csv 는 계속 수정, 보완될 예정입니다.
따라서 아래의 내용도 계속 변경될 것입니다.
* 1차 변경 : 변수 wage=999 를 여러 개 만듬(8번째와 16번째)
* 2차 추가 : 2차원 그래프를 이용한 전처리
* 2차 추가 : 중간과정을 외부파일로 저장하는 과정 추가
1. 데이터 읽어오기
setwd("d:/r_class")
s <- read.csv("tongcon(ex)_01.csv",header=T)
s
gender : 빈칸이 보인다
age: NA가 보인다.
s_work, s_pay : 직장만족도, 급여만족도 1~5까지 인데 '9' 가 보인다. 무응답은 '9'
wage : 월 급여인데 '999' 가 보인다
hob1, hob2 : 취미에도 무응답 '9'가 보인다.
2. 데이터 구조 살펴보기 - str( ) 함수 이용
str(s)
3.기술통계량 살펴보기 - summary( ) 함수 이용
s1 <- s
summary(s1)
성별(gender): 빈칸이 있는데 미싱이지 않고 20개 관측치가 읽혔음
나이(age) : 빈칸이 있어서 NA 가 한개임을 보이고 있다. 이를 나중에 조정해야 함.
다른 변수들과의 상관계수를 구하면 전부 NA가 나오게 됨. na.rm=T 등을 사용해야 함
직장경력(career) 등 : '9' 가 미싱으로 대체되어 있음. '9' 에 대하여 NA 처리를 해 줘야 함
급여(wage) : 최대값이 999 로 입력되어 있어서 평균값의 의미가 없음
입사일자(join) : 날짜형인데 일단 문자형으로 읽어들임...
2002-02-29란 날짜는 없는데 문자로 읽어들여 현재는 에러가 없음
4. 새로운 변수 만들기
money <- s1$wage # 별도의 변수(vector) 생성
s1$money <- s1$wage # data.frame 내 변수 생성
s1
5. 그룹 변수 만들기
s1$age_g <- s1$age
s1$age_g <- ifelse(s1$age <=20, 1, s1$age_g)
s1$age_g <- ifelse(s1$age > 20 & s1$age <=30,2, s1$age_g)
s1$age_g <- ifelse(s1$age > 30 & s1$age <=40,3, s1$age_g)
s1$age_g <- ifelse(s1$age > 40 ,4, s1$age_g)
s1
또는 다음과 같은 형식으로 만들어도 됨
s1$age_ng[s1$age <=20] <- 1
s1$age_ng[s1$age > 20 & s1$age <=30] <- 2
s1$age_ng[s1$age > 30 & s1$age <=40] <- 3
#s1$age_ng[s1$age > 40] <- 4 ; NA 확인
s1
5. 상자그림(Boxplot) 그려 보기
boxplot(s1$wage)
그림 제일 위에 있는 o 이 무응답에 해당되는 '999' 임을 나타냅니다.
가운데 짙은 색은 중앙값(median) 을 나타냅니다(평균값 아님)
상위 75%, 하위 25%를 나타내는 선이 보입니다.
6. 줄기-잎(stem-leaf 그림) 그림 그리기
줄기-잎 그래프를 보면 데이터의 분포를 쉽게 볼 수 있습니다.
stem(s1$age,scale=2)
10대 해당되는 나이 18세
20대 해당되는 나이 20, 21,22,23,24,24,25,2,26,26,27,27,,29 가 보입니다.
30대 해당되는 나이 30,31,32,33
70대 해당되는 나이 78 보입니다.
아마 78 세는 잘못된 데이터 인 듯
7. 변수 wage=999 를 미싱 처리하기
s1[8,c("wage")] <- NA # 8번째 관측치, 변수 wage 의 값을 NA 처리
s1
s1$wage[s1$wage==999] <- NA # 변수 wage 의 값이 999 인 경우, 변수 wage를 NA 처리
s1
8. 2차원 그래프 그리기 - edu =3(대졸이하) wage = 600 인 경우, wage 가 과다?
plot(s1$age,s1$wage)
# 연령에 따는 급여의 그림을 보면 나이에 따라 급여가 증가하는 모양...
plot(s1$edu,s1$wage)
# 교육수준별로 보면 무난하게 보이지만 edu=3(대졸이라) wage가 600 으로 좀 튀는 것 같아 미싱처리
s1$wage[s1$edu==3 & s1$wage > 550] <- NA
# edu가 3이고, wage가 550 보다 큰 경우, wage 변수를 NA...
# 그림을 보면 좀 무난...
plot(s1$edu,s1$wage)
9. 중간과정 파일로 일단 저장하기 - write.csv( )
어느 정도 전처리가 진행되면 그 결과를 파일로 저장할 필요가 있게 됩니다.
write.csv(s1,"tongcon(out)_01.csv") # 데이터셋 s1 을 tongcon(out)_01.csv" 파일로 저장합니다.
그런데 자세히 보면 제일 첫 열(A열)에 일련번호가 생겨난 것을 볼 수 있습니다.
이것은 rownames 에 해당됩니다.
write.csv(s1,"tongcon(out)_02.csv",row.names = F)
# rownames=F 라는 옵션을 사용하면 첫 행이 사라지게 됩니다.
'R & SAS 300제 > 1. 설문지작성&전처리(S2)' 카테고리의 다른 글
제1강(s) 1.1 왜 전처리가 필요한가. 통계분석 시작...(계속 수정) (0) | 2020.10.05 |
---|---|
1.2 (g) 설문지 작성과 통계적 자료처리 (0) | 2020.09.13 |
(1.2)미싱 관련(g) - NA, NULL...is.na/sum(is.na( ))... Inf, NaN (0) | 2020.09.12 |
1.3(g) 설문지 분석 결과 해석할 때 주의할 점 (0) | 2020.07.20 |