Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 계리적손익
- 예측단위적립방식
- 종합보험료방식
- 공적연금재정방식
- 일반수학
- 기초율산정
- IFRS 17
- 연금수리학
- 보험계리사
- 계리가치
- 연금재정방식이론
- 종합가입보험료방식
- 도달연령방식
- 현재단위적립방식
- 문제풀이
- 보험수리적손익
- 개인평준보험료방식
- 연금수리
- 가입연령방식
- 초기채무동결방식
- 표준부담금
- 연금수리개관
- 최신연금수리학
- 보험수학
- 연금채무
- 사외적립자산
- 근로자퇴직여법
- 중급회계
- 확률과 통계
- LDI
Archives
- Today
- Total
Ruser
R 프로그래밍 기초 본문
R 프로그래밍 기초
swub
2018-12-07
Introduce R
- R 프로그래밍 언어
- R은 통계 계산과 그래픽을 위한 프로그래밍 언어이자 소프트웨어 환경이다.
- 뉴질랜드 오클랜드 대학의 로스 이하카와 로버트 젠틀맨에 의해 시작되어 현재는 R 코어팀이 개발하고 있다.
- R은 GPL(General Public License)하에 배포되는 S프로그래밍 언어로 구현되어 GNU S라고 한다.
- R의 특징
- 표준 플랫폼(S 언어 기반)
- 모든 운영체제에서 사용 가능(맥, 리눅스, 윈도우)
- 메모리 저장방식
- 객체지향언어이며 함수형 언어
- 오픈소스 프로그램으로 무료
- 통계분석도구의 비교
SAS | SPSS | 오픈소스 R | |
---|---|---|---|
프로그램 비용 | 유료, 고가 | 유료, 고가 | 오픈소스, 공짜 |
설치용량 | 대용량 | 대용량 | 모듈화로 간단 |
다양한 모듈 지원 및 비용 | 별도구매 | 별도구매 | 오픈소스 |
최근 알고리즘 및 기술반영 | 느림 | 다소느림 | 매우빠름 |
학습자료 입수의 편의성 | 유료 도서 위주 | 유료 도서 위주 | 공개 논문 및 자료 많음 |
질의를 위한 공개 커뮤니티 | NA | NA | 매우 활발 |
Basic of R
작업환경 설정
# 작업환경 경로 설정 setwd("/home/.../r/basic") # 작업환경 경로 확인 getwd("/home/.../r/basic")
R 패키지 사용
# 원하는 패키지(stringr)을 설치한다. install.packages("stringr") # install.packages()를 사용할 때는 패키지 이름에 ""을 써야한다. # 설치되어있는 패키지를 불러와서 사용한다. library(stringr) # 패키지에 대한 설명을 웹상에서 보여준다. help(stringr)
변수(객체) 생성 및 제거
# x라는 변수에 객체 100을 저장 x <- 100 # y라는 변수에 객체 a,b,c를 저장 y <- c("a","b","c") # 객체 출력 print(x) # print는 한번에 하나의 변수값만 출력가능하다.
## [1] 100
cat(x,y) # cat은 여러개의 변수를 한번에 출력 가능하다.
## 100 a b c
# 변수목록 확인 ls() # 현재 생성된 변수 목록
## [1] "x" "y"
rm(x) # 변수 x 삭제 ls() # x가 삭제됨
## [1] "y"
R 함수 만들기
# kim,jo와 park의 영어,수학 성적 name <- c("kim", "jo", "park") english <- c(80, 85, 90) math <- c(60, 75, 100) grade <- cbind(name, english, math) #name,english와 math를 열로 결합된 행렬 생성 class(grade)
## [1] "matrix"
grade <- data.frame(name,english,math) #name,english와 math이 열로 결합된 dataframe 생성 class(grade)
## [1] "data.frame"
# 평균을 구하는 mean이라는 base함수가 있지만 쉬운 예시를 위해 평균에 대한 함수생성 # 각각의 평균에 대한 함수 생성 M <- function(data=grade, who="kim"){ idx <- which(grade$name==who) M <- mean(grade$english[idx], grade$math[idx]) M } # 함수를 사용하여 각각의 평균 구하기 M(grade, "kim") #kim의 평균
## [1] 80
M(grade, "jo") #jo의 평균
## [1] 85
M(grade, "park") #park의 평균
## [1] 90
R base 코드: 변수 생성
# c(): 문자,숫자,논리값 객체 또는 변수들을 결합하여 변수 생성 x <- c(1,2,3,4) y <- c(1.5, 2.5, 3.5) z <- c("kim", "jo", "park") t <- c(x,y,z) #변수 x,y,z를 하나의변수로 합침 print(t)
## [1] "1" "2" "3" "4" "1.5" "2.5" "3.5" "kim" "jo" "park"
# 수열 생성 x <- 1:5 #1부터 5까지 저장 print(x)
## [1] 1 2 3 4 5
y <- seq(from=1, to=5, by=1) #1부터 5까지 1 간격으로 나열함 print(y)
## [1] 1 2 3 4 5
z <- seq(from=1, to=5, by=0.1) #1부터 5까지 0.1 간격으로 나열함 print(z)
## [1] 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5 2.6 ## [18] 2.7 2.8 2.9 3.0 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 4.0 4.1 4.2 4.3 ## [35] 4.4 4.5 4.6 4.7 4.8 4.9 5.0
# 반복 x <- rep(1, time=5) #1을 5번 반복하여 x에 저장 print(x)
## [1] 1 1 1 1 1
y <- rep(1:4, each=2) #1부터 4까지 각각 2번씩 반복 나열 print(y)
## [1] 1 1 2 2 3 3 4 4
# 행렬 만들기 x <- 1:9 matrix(x, 3, 3, byrow=T) #변수 x를 3X3 행렬로 만듬 (byrow=T : 행으로 입력)
## [,1] [,2] [,3] ## [1,] 1 2 3 ## [2,] 4 5 6 ## [3,] 7 8 9
matrix(x, 3, 3, byrow=F) #변수 x를 3X3 행렬로 만듬 (byrow=T : 열로 입력)
## [,1] [,2] [,3] ## [1,] 1 4 7 ## [2,] 2 5 8 ## [3,] 3 6 9
R base 코드: 기초통계
x <- c(1:10) y <- c(11:20) mean(x) # 변수의 평균
## [1] 5.5
sum(x) #변수의
## [1] 55
median(x) #변수의 중앙값
## [1] 5.5
log(x) #변수의 로그값
## [1] 0.0000000 0.6931472 1.0986123 1.3862944 1.6094379 1.7917595 1.9459101 ## [8] 2.0794415 2.1972246 2.3025851
sd(x) #변수의 표준편차
## [1] 3.02765
var(x) #변수의 분산
## [1] 9.166667
cov(x,y) #변수간의 공분산
## [1] 9.166667
cor(x,y) #변수간의 상관계수
## [1] 1
length(x) #변수의 길이
## [1] 10
R base 코드: 변수 다루기
a <- matrix(1:6, 2,3) dim(a) #행렬 a이 몇행 몇열인지를 보여준다
## [1] 2 3
diag(a) #행렬 a의 대각원소
## [1] 1 4
t(a) #행렬 a의 전치행렬
## [,1] [,2] ## [1,] 1 2 ## [2,] 3 4 ## [3,] 5 6
b <- matrix(c(2,3,4,1), 2,2) #2X2의 정방행렬 생성 solve(b) #행렬 b의 역행렬
## [,1] [,2] ## [1,] -0.1 0.4 ## [2,] 0.3 -0.2
b %*% a #행렬의 곱은 %*%으로 나타낸다
## [,1] [,2] [,3] ## [1,] 10 22 34 ## [2,] 5 13 21
rownames(a) <- c("1행","2행") #행렬a의 행의 이름 생성 colnames(a) <- c("1열","2열","3열") #행렬a의 열의 이름 생성 print(a)
## 1열 2열 3열 ## 1행 1 3 5 ## 2행 2 4 6
rownames(a)
## [1] "1행" "2행"
colnames(a)
## [1] "1열" "2열" "3열"
grade[1,1] # 데이터프레임 grade의 1행 1열
## [1] kim ## Levels: jo kim park
grade$name # 데이터프레임 grade의 name 변수값
## [1] kim jo park ## Levels: jo kim park
subset(grade, select=name) # 데이터프레임 grade의 name 변수값
## name ## 1 kim ## 2 jo ## 3 park
grade[1,] # 데이터프레임 grade의 1행
## name english math ## 1 kim 80 60
subset(grade, name=="kim") # 데이터프레임 grade에서 name이 "kim"인 행
## name english math ## 1 kim 80 60
dfm1 <- data.frame(name, english) print(dfm1)
## name english ## 1 kim 80 ## 2 jo 85 ## 3 park 90
dfm2 <- data.frame(name, math) print(dfm2)
## name math ## 1 kim 60 ## 2 jo 75 ## 3 park 100
merge(dfm1, dfm2, by="name") # dfm1과 dmf2를 동일변수 name으로 결합
## name english math ## 1 jo 85 75 ## 2 kim 80 60 ## 3 park 90 100
R base 코드: 데이터 구조 변환
as.character() #자료형을 character로 변환 as.numeric() #자료형을 numeric으로 변환 as.double() #자료형을 doublue로 변환 as.integer() #자료형을 integer로 변환 as.logical() #자료형을 logical로 변환 as.data.frame() #자료형을 dataframe으로 변환 as.list() #자료형을 list로 변환 as.matrix #자료형을 matrix로 변환 as.vector #자료형을 vector로 변환 unlist() #list형 자료를 벡터로 변환
R base 코드: 기타
data(iris) #R 내장데이터인 iris 불러오기 summary(iris) #iris 내용 요약, 각 변수의 분위수,평균,중위수
## Sepal.Length Sepal.Width Petal.Length Petal.Width ## Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100 ## 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300 ## Median :5.800 Median :3.000 Median :4.350 Median :1.300 ## Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199 ## 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800 ## Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500 ## Species ## setosa :50 ## versicolor:50 ## virginica :50 ## ## ##
head(iris) #iris데이터의 상위 6개만 표현
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species ## 1 5.1 3.5 1.4 0.2 setosa ## 2 4.9 3.0 1.4 0.2 setosa ## 3 4.7 3.2 1.3 0.2 setosa ## 4 4.6 3.1 1.5 0.2 setosa ## 5 5.0 3.6 1.4 0.2 setosa ## 6 5.4 3.9 1.7 0.4 setosa
round(3.333,1) #소수점 1번째 자리까지 표시 2번째 에서 반올림
## [1] 3.3
round(3.366,1)
## [1] 3.4
lapply(iris$Sepal.Length[1:3], function(x){round(x)}) #함수의 결과를 리스트형식으로 출력
## [[1]] ## [1] 5 ## ## [[2]] ## [1] 5 ## ## [[3]] ## [1] 5
sapply(iris$Sepal.Length[1:3], function(x){round(x)}) #함수의 결과를 벡터형식으로 출력
## [1] 5 5 5
R base 코드: 문자열 다루기
nchar("이단어의문자길이가몇개일까") #문자열길이
## [1] 13
paste("a","b","c",sep=",") # a,b,c를 ","로 붙임
## [1] "a,b,c"
paste0("a","b","c") #a,b,c를 붙임 paste에서 sep이 ""인것과 같다
## [1] "abc"
substr("UniversalBank", 1,4) #UniversalBank의 1번째 부터 4번째까지의 문자 추출
## [1] "Univ"
strsplit("벌써 11시 30분이네", split = " ") # 구분자(split)를 기준으로 나눠줌
## [[1]] ## [1] "벌써" "11시" "30분이네"
sub("바나나", "사과", "바나나는 빨개요") # sub(old,new,string) string에서 old를 new로 바꾸어줌
## [1] "사과는 빨개요"
gsub("바나나", "사과", c("바나나는 빨개요", "아침 바나나")) # 한번에 적용
## [1] "사과는 빨개요" "아침 사과"