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