728x90

간단한 20개의 데이터로 전처리 실습을 합니다.

실습데이터 tongcon(ex)_01.csv 는 계속 수정, 보완될 예정입니다.

따라서 아래의 내용도 계속 변경될 것입니다.

* 1차 변경 :  변수 wage=999 를 여러 개 만듬(8번째와 16번째)  

* 2차 추가 :  2차원 그래프를 이용한 전처리

* 2차 추가 :  중간과정을 외부파일로 저장하는 과정 추가 

tongcon(ex)_01.csv
0.00MB

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)

 blog_03

성별(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

새로운 변수 만들기    blog_04

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

blog_05

또는 다음과 같은 형식으로 만들어도 됨

 

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

blog_11

8. 2차원 그래프 그리기 - edu =3(대졸이하) wage = 600 인 경우, wage 가 과다?

 

plot(s1$age,s1$wage)

# 연령에 따는 급여의 그림을 보면 나이에 따라 급여가 증가하는 모양...

blog_12

plot(s1$edu,s1$wage)

# 교육수준별로 보면 무난하게 보이지만 edu=3(대졸이라) wage가 600 으로 좀 튀는 것 같아 미싱처리

blog_13

s1$wage[s1$edu==3 & s1$wage > 550] <- NA 

# edu가 3이고, wage가 550 보다 큰 경우, wage 변수를 NA... 

# 그림을 보면 좀 무난...

 

plot(s1$edu,s1$wage)

blog_14

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 라는 옵션을 사용하면 첫 행이 사라지게 됩니다.

+ Recent posts