R – 함수와 데이터 정제 스크립트로 알아보기

Script )

데이터 정제: 이상한 데이터를 처리하거나 삭제하는 등의 기술

# R user's function

# 팩토리얼 함수 만들어보기 
fact=function(x){
  fa=1
  while(x>1){
    fa=fa*x
    x=x-1
  }
  return(fa)
}

fact(5)

my.is.na<-function(x){
  # 결측값이 있는지 없는지 확인하기 위해 is.na함수를 쓰고 False와 True의 개수를 table함수로 구한다. 
  # is 함수는 확인하는 용도로 많이 쓰인다. 
  # is.na를 하면 데이터들을 True(결측값)와 false로 모두 나타낸다. 
  table(is.na(x))
}

str(airquality)
is.na(airquality)
my.is.na(airquality)
my.is.na(airquality$Ozone)

# 데이터 정제 1
# 입력이 누락된 값: 결측값(NA) 처리하기!!

# Temp속성에는 NA(결측값)이 없어서 평균을 구할 수 있지만 Ozone은 평균을 구할 수 없다.
mean(airquality$Temp)
mean(airquality$Ozone)

# 결측값을 없애고 Ozone의 데이터 평균 값 구하기
mean(airquality$Ozone,na.rm=T)

# airquality의 Ozone필드에 있는 결측값을 빼서 데이터 프레임을 만듬
air_narm=airquality[!is.na(airquality$Ozone),]
air_narm

# na.omit함수를 사용하면 데이터의 모든 결측값을 사라지게 한다. 
air_narm1=na.omit(airquality)
table(is.na(air_narm1))

# 특정 속성의 결측값을 사라지게 하고 그 속성이 가진 데이터만 air_narm2가 가지게 한다. 
air_narm2=na.omit(airquality$Ozone)
table(is.na(air_narm2))
str(air_narm2)

# var은 표준편차 구하는 함수 
var(airquality$Ozone,na.rm=T)

# 데이터 정제 2
# 이상한 값: 이상값(outlier) 처리하기!!

# 이상값이 포함된 환자 데이터
patients = data.frame(name = c("환자1", "환자2", "환자3", "환자4", "환자5"), age = c(22, 20, 25, 30, 27), gender=factor(c("M", "F", "M", "K", "F")), blood.type = factor(c("A", "O", "B", "AB", "C")))
patients

# 성별에서 이상값 제거
patients_outrm = patients[patients$gender=="M"|patients$gender=="F", ]
patients_outrm	


# 성별과 혈액형에서 이상값 제거
patients_outrm1 = patients[(patients$gender == "M"|patients$gender == "F") & (patients$blood.type == "A"|patients$blood.type == "B"|patients$blood.type == "O"|patients$blood.type == "AB"), ]
patients_outrm1	 

# 이상값이 포함된 환자 데이터
patients = data.frame(name = c("환자1", "환자2", "환자3", "환자4", "환자5"), age = c(22, 20, 25, 30, 27), gender = c(1, 2, 1, 3, 2), blood.type = c(1, 3, 2, 4, 5))
patients	

# 성별에 있는 이상값을 결측값으로 변경
# ifelse문을 사용해서 (참인 조건,참일 때 처리 방향, 거짓일 때 처리 방향)을 정한다.
# gender<1 or gender>2일 때는 결측값으로 만들고 아니면 일반 gender데이터로 처리한다. 
patients$gender = ifelse((patients$gender<1|patients$gender>2), NA, patients$gender)
patients

# 형액형에 있는 이상값도 결측값으로 변경
patients$blood.type = ifelse((patients$blood.type<1|patients$blood.type>4), NA, patients$blood.type)
patients

# 결측값을 모두 제거
patients[!is.na(patients$gender)&!is.na(patients$blood.type), ]

# 박스 플롯(박스 시각화) 활옹하기!! 
boxplot(airquality)
# 박스 시각화를 하는데 데이터 프레임의 1~4속성 데이터만 보이게 함 
boxplot(airquality[,c(1:4)])
# 박스 시각화를 하고 그 통계값을 계산하려면 '$stat'키워드를 쓴다.
boxplot(airquality[,c(1)])$stat

북 참고) R로 배우는 데이터 과학

Leave a Reply

Your email address will not be published. Required fields are marked *