R 활용(data 한남대학교wolfpack.hnu.ac.kr/Stat_Notes/softwares/about_R/R... · 2020-04-16 ·...

13
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(실행, 콘솔 실행된 프로그램의 결과 출력 -그래프 출력 공간 -함수 패키지 설치

Transcript of R 활용(data 한남대학교wolfpack.hnu.ac.kr/Stat_Notes/softwares/about_R/R... · 2020-04-16 ·...

Page 1: R 활용(data 한남대학교wolfpack.hnu.ac.kr/Stat_Notes/softwares/about_R/R... · 2020-04-16 · A=matrix(c(1,3,4,6,4,2), byrow=T, ncol=3, nrow=2) 행렬 연산 참고 사이트

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(실행,

콘솔

실행된 프로그램의 결과 출력

-그래프 출력 공간

-함수 패키지 설치

Page 2: R 활용(data 한남대학교wolfpack.hnu.ac.kr/Stat_Notes/softwares/about_R/R... · 2020-04-16 · A=matrix(c(1,3,4,6,4,2), byrow=T, ncol=3, nrow=2) 행렬 연산 참고 사이트

•프로그램에 오류가 발생하면 빨간 색으로 표현된다

•콘솔 >에 스크립트를 입력하고 리턴(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))

Page 3: R 활용(data 한남대학교wolfpack.hnu.ac.kr/Stat_Notes/softwares/about_R/R... · 2020-04-16 · A=matrix(c(1,3,4,6,4,2), byrow=T, ncol=3, nrow=2) 행렬 연산 참고 사이트

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

Page 4: R 활용(data 한남대학교wolfpack.hnu.ac.kr/Stat_Notes/softwares/about_R/R... · 2020-04-16 · A=matrix(c(1,3,4,6,4,2), byrow=T, ncol=3, nrow=2) 행렬 연산 참고 사이트

• 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

Page 5: R 활용(data 한남대학교wolfpack.hnu.ac.kr/Stat_Notes/softwares/about_R/R... · 2020-04-16 · A=matrix(c(1,3,4,6,4,2), byrow=T, ncol=3, nrow=2) 행렬 연산 참고 사이트

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

Page 6: R 활용(data 한남대학교wolfpack.hnu.ac.kr/Stat_Notes/softwares/about_R/R... · 2020-04-16 · A=matrix(c(1,3,4,6,4,2), byrow=T, ncol=3, nrow=2) 행렬 연산 참고 사이트

• 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

Page 7: R 활용(data 한남대학교wolfpack.hnu.ac.kr/Stat_Notes/softwares/about_R/R... · 2020-04-16 · A=matrix(c(1,3,4,6,4,2), byrow=T, ncol=3, nrow=2) 행렬 연산 참고 사이트

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

Page 8: R 활용(data 한남대학교wolfpack.hnu.ac.kr/Stat_Notes/softwares/about_R/R... · 2020-04-16 · A=matrix(c(1,3,4,6,4,2), byrow=T, ncol=3, nrow=2) 행렬 연산 참고 사이트

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

Page 9: R 활용(data 한남대학교wolfpack.hnu.ac.kr/Stat_Notes/softwares/about_R/R... · 2020-04-16 · A=matrix(c(1,3,4,6,4,2), byrow=T, ncol=3, nrow=2) 행렬 연산 참고 사이트

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

Page 10: R 활용(data 한남대학교wolfpack.hnu.ac.kr/Stat_Notes/softwares/about_R/R... · 2020-04-16 · A=matrix(c(1,3,4,6,4,2), byrow=T, ncol=3, nrow=2) 행렬 연산 참고 사이트

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

Page 11: R 활용(data 한남대학교wolfpack.hnu.ac.kr/Stat_Notes/softwares/about_R/R... · 2020-04-16 · A=matrix(c(1,3,4,6,4,2), byrow=T, ncol=3, nrow=2) 행렬 연산 참고 사이트

• 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

Page 12: R 활용(data 한남대학교wolfpack.hnu.ac.kr/Stat_Notes/softwares/about_R/R... · 2020-04-16 · A=matrix(c(1,3,4,6,4,2), byrow=T, ncol=3, nrow=2) 행렬 연산 참고 사이트

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

Page 13: R 활용(data 한남대학교wolfpack.hnu.ac.kr/Stat_Notes/softwares/about_R/R... · 2020-04-16 · A=matrix(c(1,3,4,6,4,2), byrow=T, ncol=3, nrow=2) 행렬 연산 참고 사이트

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