본문 바로가기

R Programming

[R Programming] R 데이터 활용1 (subset, 내보내기) - Week 3-2

GIST에서 공개하는 청년 AI. Big Data 아카데미 온라인 기초과정 빅데이터 분석과 R프로그래밍 강의를 참고하였다.

 

R Studio를 실행하여 실습을 해본다.

 

subset(데이터 이름, 조건)

조건에 맞는 데이터를 추출한다. 우선 csv파일인 brain2210.csv를 읽어서 brain 데이터를 생성하였다. brain 데이터는 성별과 뇌의 무게로 구성되어있다.

1
2
3
4
5
6
brain<-read.csv("brain2210.csv")
head(brain)
attach(brain)
brainf<-subset(brain, sex=='f') 
mean(brainf$wt)
sd(brainf$wt)
cs

brainf <-subset(brain, sex=='f'): brain 데이터에서 subset함수를 사용하여 성별이 여자인 데이터만을 추출하여 brainf 데이터를 생성하였다.

생성한 brainf 데이터의 wt 속성을 보면 평균은 1117.169, 표준편차는 98.97094라는 정보를 알 수 있다. 여기서는 attach함수를 사용하지 않았기 때문에 brainf 데이터에 wt 속성이라는 것을 표시해주어야 한다.(brainf$wt)

 

1
2
brain1300<-subset(brain,brain$wt<1300)
summary(brain1300)
cs

brain1300 데이터는 brain데이터에서 뇌의 무게가 1300 미만인 데이터들만 추출한 데이터이다.

summary함수로 brain1300의 요약 통계치를 확인해보면 최소값, 25% 값, 중간, 평균, 75% 값, 최댓값을 출력하여 확인할 수 있다.

 

summary함수는 데이터 타입이 numeric 변수에 대해서는 위의 brain1300 데이터와 같은 출력을 하지만 범주형 변수에 대해서는 brainf 데이터와 같이 빈도를 출력한다.

 

aggregate(변수~그룹, 데이터, 함수)

aggregate 함수는 그룹별로 요약 통계치를 출력하는 함수이다.

1
2
aggregate(wt~sex, data=brain, FUN=mean)
aggregate(wt~sex, data=brain, FUN=sd)
cs

aggregate(wt~sex, data=brain, FUN=mean): brain 데이터를 사용하여 성별 그룹 별로 뇌의 무게의 평균을 출력한다.

aggregate(wt~sex, data=brain, FUN=sd): 위와 같은 데이터의 표준편차를 출력한다.

그룹별로 평균, 표준편차, 최소값, 최댓값 등을 비교하고자 한다면 aggregate 함수를 이용하는 것이 더 편리하다.

 

추출한 데이터의 활용(그룹별 히스토그램)

그룹별로 히스토그램을 생성하여 데이터를 분석할 수 있다.

1
2
3
par(mfrow=c(2,2))
brainf<-subset(brain,brain$sex=='f') 
brainm<-subset(brain,brain$sex=='m')
cs

par(mfrow=c(2,2)): Plot창을 나눌 수 있다. 2x2로 나누어서 4개의 그래프를 볼 수 있다.

성별로 그룹을 나누어 2개의 데이터 brainf, brainm을 생성하였다.

1
2
hist(brainf$wt, breaks=12, col="green", cex=0.7, main="Histogram (Female)" ,xlab="brain weight")
hist(brainm$wt, breaks=12, col="orange", main="Histogram with (Male)" , xlab="brain weight")
cs

 

성별로 히스토그램을 생성하였다. 여자는 왼쪽의 연두색 히스토그램이고 남자는 오른쪽의 주황색 히스토그램이다. 하지만 둘의 데이터는 범위가 차이가 있기 때문에 정확한 비교가 어렵다.

1
2
hist(brainf$wt, breaks = 12,col = "green",cex=0.7, 
main="Histogram with Normal Curve (Female)" , xlim=c(900,1700),ylim=c(0,25), xlab="brain weight")
hist(brainm$wt, breaks = 12,col = "orange", 
main="Histogram with Normal Curve (Male)" , xlim=c(900,1700), ylim=c(0,25),xlab="brain weight")
cs

그렇기 때문에 위의 코드처럼 xlim, ylim 옵션을 사용하여 같은 스케일을 두어 높이를 비교할 수 있다.

 

데이터 내보내기

write 함수로 데이터를 txt, csv 파일로 내보낼 수 있다. setwd()로 지정한 작업 폴더에 저장된다.

1
2
3
write.table(brainf,file="brainf.csv", row.names = FALSE, sep=",", na=" ")
write.csv(brainf,file="brainf.csv", row.names = FALSE)
write.table(brainm, file="brainm.txt", row.names = FALSE,  na=" ")
cs

write.table(brainm, file="brainm.txt", row.names=FALSE, na=" "): txt 파일로 brainm 데이터를 저장한다. 파일 이름은 "brainm.txt"이고 줄 번호는 표시하지 않는다. 없는 값에는 " "를 넣는다.

왼쪽의 brainm.txt. 는 row.names를 FALSE 하여 줄 번호를 표시하지 않은 파일이고 오른쪽의 brainm2.txt는 row.names를 TRUE 하여 줄 번호를 표시한 파일이다.

 

write.csv(brainf, file="brainf.csv", row.names=FALSE): csv 파일로 brainf 데이터를 저장한다. 파일 이름은 "brainf.csv"이고 줄 번호는 표시하지 않는다.

brainf.csv 파일을 열어보면 위와 같이 저장되어 있는 것을 볼 수 있다.