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로 배우는 데이터 과학