Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
R 활용(data 만들기, 속성, 조작) 한남대학교 권세혁교수
설치 & 기초
1.R 설치하기
•R 설치 파일 - http://www.r-project.org
•R 사용 편리하게 하는 플랫폼 : https://www.rstudio.com
2. 스크립트 script
•프로그램을 작성하고 실행하는 공간
•프로그램 라인 아무 곳에서나 ctrl+R 엔터하면 해당 라인 프로그램이 실행된다
•2개 라인 이상 프로그램을 실행하려면 전체 선택하여 실행한다
3. 콘솔 consol
•프로그램 실행 결과가 나타된다(로그).
1
script 공간
프로그램을 입력하고 ctrl+R(실행,
콘솔
실행된 프로그램의 결과 출력
-그래프 출력 공간
-함수 패키지 설치
•프로그램에 오류가 발생하면 빨간 색으로 표현된다
•콘솔 >에 스크립트를 입력하고 리턴(return)하면 결과가 아래 나타난다
•콘솔에서 이전 스크립터 불러오기는 화살표 ↑, 이후 스크립터는 화살표 ↓ 사용한다.
기초 개념
1. 함수 function
• 원하는 계산 결과 값이 산출되도록 사전 작업된 작은 프로그램
• 함수가 모여 패키지를 이룬다.
• R의 모든 함수 이름, 오브젝트 이름은 case-sensitive(대소문자 구별)함에 유의, 그러므로 Max() 함수는 존재하지 않는다.
함수이름() - mean(), sd(), var()
•이처럼 원하는 작업에 대한 함수가 만들어져 있고 그것을 사용하면 된다.
•만약 원하는 작업의 함수가 없으면 자신이 직접 만들면 된다. [사용자함수_만들기.pdf ]
2. 오브젝트 object
•함수 계산 결과, 분석 결과를 저장하는 공간
•오른쪽 함수 결과가 왼쪽 이름의 오브젝트에 저장된다.
•오브젝트에는 데이터(행렬 포함), 분석 결과, 통계량 등 모든 형태의 정보가 가능하다.
•오브젝트는 행과 열의 형식을 갖고 []을 사용하여 불러온다
오브첵트이름 <- 함수()
2
•seq(s,e, by) : 정수 s 부터 e까지 by씩 증가, by 사용하지 않으면 1씩 증가함
•c() 함수는 데이터 입력 : 문자열(string)은 “”을 사용
max(c(1,5,7))sum(seq(1,10))
grade<-c("A+","B-","C+","A-")name<-c("Milky","John","Sunny","Bob")age<-c(23,21,25,22)fin<-cbind(grade,name,age)fin; fin[c(1,3),2]
• cbind() : 데이터 오브젝트를 열로 합치기 : 오브젝트 fin에는 3개 변수 4개 관측치
• 세미콜론(;)의 의미 : 프로그램 끝 라인 바뀐 효과
• fin[행 지정, 열 지정] : fin[c(1,3), 2] - 행은 1, 3, 열은 2 관측치 가져오기
3. 관련 help
help(lm);?lm??lmexample(lm)
첫 행 - 선형모형 분석 함수 lm() 도움말, ??는 패키지 정보, 세번 째 - 예제는 제공되지 않을 수 있음
Data 입력
1. 예제 데이터
http://wolfpack.hnu.ac.kr/iBooks/example_data/SMSA_USA.csv : 미국 시 사회경제변수
http://wolfpack.hnu.ac.kr/iBooks/DATA/cars.sas7bdat : SAS 예제 car 데이터
2. csv(comma seperate value)
• 쉼표(,)로 분리된 데이터 형식 - 모든 통계 소프트웨어에서 변환 없이 바로 읽어 들일 수 있음 : 가능하면 모든 데이터를 이 형식으로 저장하자.
smsa<-read.csv("SMSA_USA.csv")names(smsa)smsa$mortality_index
3
• names() : 데이터 오브젝트 내의 변수 이름 보기
• 데이터 오브젝트 smsa 안 변수 이름은 smsa$변수이름 사용한다.
3. SAS 데이터
• sas에서 만들어진 데이터는 패키지(함수가 들어 있는 오브젝트) 설치 필요
install.packages("sas7bdat")library(sas7bdat)car<-read.sas7bdat("cars.sas7bdat")names(car)
Data 속성 attribution
1. dataframe()
• 외부 데이터를 읽어오면 자동으로 데이터 형식으로 통계분석의 기본 오브젝트임
• names() 함수에 의해 데이터의 변수이름이 출력된다.
2. matrix()
• 행렬 자료 입력 형식 : byrow=T 는 자료를 행 값부터 먼저 일어들인다.
• nrow = 행의 개수 지정, ncol = 열의 개수 지정
matrix(c(데이터 값), byrow=T, nrow=, ncol=)
4
A=matrix(c(1,3,4,6,4,2), byrow=T, ncol=3, nrow=2)
행렬 연산 참고 사이트 이동
3. as.matrix()
CAR<-as.matrix(car)names(CAR)
• data 오브젝트를 행렬로 만들었으므로 더 이상 변수 이름이 없음
4. as.numeric() - 문자를 숫자로 변환, as.character() - 숫자를 문자로 변환
5. factor()
• 숫자 1, 10개, 0 5개가 만들어지고 (0, 1)의 수준을 갖는 요인 오브젝트가 된다.
데이터 관련 함수
ls()names(car)class(car); class(CAR)length(car); dim(car)
5
• ls() : 현재 저장된 오브젝트 출력
• class() : 데이터, 행렬, 요인 등의 오브젝트 종류
• length() : 변수 개수, dim() : 행렬의 차수
데이터 정렬 (sort)
install.packages("doBy")library(doBy)orderBy(~MSRP-Weight,data=car)
•doBy 패키지가 필요함
•car 데이터의 변수 MSRP 값의 크기 순, 그 다음 Weight 변수 값의 크기 역순으로 데이터를 정렬한다.
car[order(car$MSRP,-car$Weight),]
•방법2 ; 위의 결과와 동일 car2<-car[] 로 새로운 데이터 car2 만들거나 <-을 사용하지 않으면 car 데이터 정련만 된다.
데이터 선택 (selection)
1. 변수 선택
smsa[,c("city_name","july_temp")]smsa[,c(1,3)]smsa[,c(-2,-4:-17)]
•3 방법 모두 동일하다. 삭제하고 싶은 변수 이름을 적거나 번호, 삭제는 이름 앞에 - 붙인다.
•[행지정,열지정] - 행 지정 부분은 빈칸
2. 관측치 선택
6
car[c(1,2,3,4,5),]car[c(1:5),]car[c(-6:-428),]
•3 방법 모두 동일하다.
•첫 행 5개 관측치만 가져온다
3. 관측치 선택 (방법2) - 조건 검색
subset(car, Make=="Acura", select=c(Make, Model, MSRP))car[which(car$Make=="Acura"),c("Make", "Model", "MSRP")]
• 두 방법 모두 동일한 결과를 갖는다
데이터 합치기 (merge, cbind, rbind)
1. 예제 데이터 만들기 (smsa)
7
smsa1<-smsa[c(1:20),] #data of row 1~20smsa2<-smsa[c(-1:-20),] #data of row 21~*smsa3<-smsa[,c(1,2)] # data of (city_name,jan_temp)smsa4<-smsa[,c(1,3)] # data of (city_name,july_temp)
• smsa1 데이터 : smsa(59개 관측치, 17개 변수) 데이터 중 첫 20개 데이터
• smsa2 데이터 : smsa(59개 관측치, 17개 변수) 데이터 중 첫 20개 제외한 데이터
• smsa3 데이터 : smsa(59개 관측치, 17개 변수) 데이터 중 1번째(도시이름) 2번째 변수(1월 기온) 데이터
• smsa4 데이터 : smsa(59개 관측치, 17개 변수) 데이터 중 제1변수와 제3 변수(7월 기온) 데이터
2. 가로 합치기 (rbind)
dim(rbind(smsa1,smsa2))
• smsa를 두 개의 겹치지 않는 데이터로 나눈 차원 (n=20, p=17) 데이터, (n=39, p=17)가 합쳐져 원 데이터 smsa가 된다.
3. 세로 합치기 (cbind)
dim(cbind(smsa3,smsa4))
• 열 합치기 하여 공통된 변수 (city_name)이 있더라도 고려하지 않는다.
• 공통변수가 있을 경우는 merge()함수 이용하는 것이 적절하다.
4. 세로 합치기 방법2 (merge)
8
merge(smsa3,smsa4,by=c("city_name"))
• 공통변수 이름은 by= 옵션에 지정하면 된다. 2개 이상 사용 가능하다.
• by=c(“변수1”,”변수2”)
변수 변경
1. 변수 값 변경 : 측정형->측정형
• SMSA 데이터에서 1월 기온은 화씨(F)이다. 이를 섭씨(C)로 바꾸어 보자
• 공식 : C = (F − 32) * 9/5
• 굳이 새로운 변수를 만들 필요가 없는 경우 동일한 변수에 저장하면 된다. 화씨 데이터 값도 필요하다면 SMSA$jan_C <- 을 사용하면 된다.
SMSA$jan_temp<-(SMSA$jan_temp-32)*9/5SMSA$jan_temp
2. 변수 값 변경 : 범주형->이름 다른 범주형
• 교육 수준을 10년 미만, 10년, 11년, 12년 4개의 그룹으로 나누자.
9
SMSA$education_g[SMSA$education<10]<-"10년미만"SMSA$education_g[SMSA$education>=10 & SMSA$education<11]<-"10년"SMSA$education_g[SMSA$education>=11 & SMSA$education<12]<-"11년"SMSA$education_g[SMSA$education>=12]<-"10년"
- SMSA 데이터에 “education_g” 변수, 범주형이 만들어진다.
데이터 변형
1. 전치 transpose
smsa0<-smsa[1:3,c("rainfall","southern")]t(smsa0)
• smsa0 데이터 : smsa 데이터의 1~3 행 관측치, 변수는 강우량과 남부지역 2개
• 전치한 데이터는 행렬임. 데이터로 만들려면 dataframe() 함수 사용
2. 융합 melt
library(reshape)smsa00<-smsa[1:3,c("city_name","jan_temp","july_temp")]melt(smsa00,id=c("city_name"))
10
• reshape 패키지 필요 : 두 변수 값을 한 변수로 융합
3. cast() 함수
smsa000<-melt(smsa00,id=c("city_name"),na.rm=TRUE)cast(smsa000, city_name~variable, mean)
• cast()함수는 반드시 melt()함수와 동행, id 변수에 사용된 변수 이름을 사용한다.
• mean -> sd, var, min, max 모두 사용가능
데이터 요약 summary
1. 분류형 변수 - 빈도, 상대빈도(비율)
table(car$Origin)#빈도prop.table(table(car$Origin))#상대빈도
11
2. 측정형 기초 통계량
library(Hmisc)describe(car$MSRP)
fivenum(car$MSRP) #5대 순서통계량min(car$MSRP) #최소값quantile(car$MSRP,0.25) #제1사분위값median(car$MSRP);quantile(car$MSRP,0.50) #제2사분위값, 중앙값quantile(car$MSRP,0.75) #제3사분위값max(car$MSRP) #최대값IQR(car$MSRP) #사분위범위, inter-quartile range
mean(car$MSRP);sd(car$MSRP) #평균, 표준편차
12
3. 측정형 기초통계량 - 범주형 그룹
summaryBy(MSRP~Make,data=car,FUN=c(mean,var,length))
• car 데이터, make별 딜러 판매가격(MSRP) 평균, 분산, 데이터 크기 출력
tapply(car$MSRP,car$Make,mean,na.rm = TRUE)
4. 교차표 만들기
table.car<-table(car$Type,car$Origin) #cross tableprop.table(table.car) #cell percentageprop.table(table.car,1) #row percentageprop.table(table.car,2) #column percentage
13