[ADP] R-기초(3) : 사용자 정의 함수 / 그래픽 기능(plot) / 기타 유용한 기능

2020. 7. 13. 17:05ADP | ADsP with R/Knowledge

 R언어와 사용법에 관한 게시글들은 "한국 데이터 산업진흥원"에서 출간한 국가공인 ADP/ADsP자격증을 위한 "데이터 분석 전문 가이드"에 서술된 수준에 한정지어 다루어 볼 것입니다.

 ADP필기 준비를 위한 R의 기본적인 문법과 패키지들을 학습을 목표로 합니다.   


 

1. 사용자 정의 함수

 

# 사용자 함수 정의 addto
addto = function(a){
  isum = 0
  for (i in 1:a){
    isum = isum + i
  }
  print(isum)
}

# 사용자 함수 실행
addto(100)
addto(50)

- 위의 예시에서는 1부터 a까지 합을 계산해서 출력해내는 함수를 만들었다.

- R의 사용자 함수는 다른 함수들과 다르게 변수에 수치를 대입하듯 함수를 실행할 알고리즘을 함수를 보관하는 변수에 대입한다.

- 함수이름 = function(x,y,z)의 형식으로 선언한다. x,y,z는 함수에 들어가는 인수이다.

 


 

2. R의 그래픽 기능

1) 산점도 그래프

# dataset
height = c(170,168,174,175,188,165,165,190,173,168,159,170,184,155,165)
weight = c(68,65,74,77,92,63,67,95,72,69,60,69,73,56,55)

# making plot
plot(height,weight)

- 위의 결과는 몸무게,키 dataset을 plot함수를 통해서 산점도로 나타내었다.

 

2) 산점도 행렬

pairs(iris[1:4],main="Anderson's Iris Data - 3 species",
      pch = 21 , bg = c("red", "green3", "blue")[unclass(iris$Species)])

- 위의 결과는 iris dataset을 pairs함수를 통해서 산점도로 나타내었다.

- main = "제목"

- pch = 그래프상 찍히는 점의 모양

- bg = "색상1, 색상2, 색상3"[컬럼1, 컬럼2, 컬럼3]             // 그래프에 찍히는 점의 색상

- unclass(iris$Species) 함수는 iris의 각 컬럼마다 데이터를 분할해서 나타내는 것이다.

unclass(iris$Species)

 

3) 히스토그램

StatScore = c(88,90,78,84,76,68,50,48,33,70,48,66,88,96,79,65,27,88,96,33,64,48,77,18,26,44,48,68,77,64,88,95,79,88,49,30,29,10,49,88)
hist(StatScore, prob =T)

z

- 히스토그램은 데이터의 분포도를 나타내주는 그래프이다.

- prob = T 옵션을 통해서 상대도수를 표시하도록 변경할 수 있다.

 

4) 상자그림(Box plot)

StatScore = c(88,90,78,84,76,68,50,48,33,70,48,66,88,96,79,65,27,88,96,33,64,48,77,18,26,44,48,68,77,64,88,95,79,88,49,30,29,10,49,88)
boxplot(StatScore)

- 상자그림은 데이터의 4분위수를 그림으로 나타낸 것이다. 

- 맨 아래선과 맨 위선은 최소, 최대를 나타내며,

- 가운데 진한 선은 평균, 그 위,아래 선은 1분위선과 3분위선이다. 

 


3. 기타 유용한 기능들

1) paste

number = 1:10
alphabet = c("a","b","c")
paste(number, alphabet)
paste(number, alphabet, sep=" to the ")

- paste 함수는 입력받은 문자열을 하나로 붙인다.

- sep = "구분자"        // 구분자를 입력할 수 있다.

 

2) substr

# 문자열에서 추출
substr("BigDataAnalysis", 1,4)

- substr 함수는 문자열에서 특정 문자열을 추출하는 기능을 한다.

- substr("문자열", a, b)      // 문자열에서 a번째부터 b번째 문자열 까지 추출

 

# 벡터에서 추출
country = c("Korea","Japan","China","Singapore","Russia")
substr(country,1,3)

- 벡터도 문자열과 마찬가지로 쓰인다. 다만 문자열에서 벡터의 순서로 대체될 뿐이다.

 

3) 자료형 데이터 구조 변환

as.data.frame(x)               # 데이터프레임 형태로 변환
as.list(x)                     # 리스트 형태로 현환
as.matrix(x)                   # 행렬 형태로 변환  
as.vector(x)                   # 벡터 형태로 변환
as.factor(x)                   # 팩터(factor) 형태로 변환
as.integer(x)                  # 정수 형태로 변환
as.numeric(x)                  # 수치 형태로 변환
as.character(x)                # 문자열 형태로 변환
as.logical(x)                  # 논리값 형태로 변환

 

예시)

 

as.integer(3.14)
as.numeric("SH")
as.numeric(FALSE)
as.character(101)
as.logical(0.45)

- 자료형 구조를 변환할 경우 맞지 않는 타입이라면, 결측치 NA를 생성하고, 경고메시지를 보낸다.

- 논리값의 경우 값이 존재하면 TRUE로, 값이 0인 경우에만 FALSE로 변환한다.

- 데이터 프레임을 행렬로 변환할 경우, 수치형과 문자형, 논리형 벡터들이 함께 있으면, 모두 문자형("~~")으로 통일시켜 행렬로 변환시킨다.

 

4) 문자열 -> 날짜로 변환

Sys.Date()                    # 현재 날짜를 반환
as.Date()                     # 날짜 객체로 변환


예시)

Sys.Date()
as.Date("2020-07-13")
as.Date("07/13/2020")
as.Date("07/13/2020", format = "%m/%d/%Y")

- R에서의 기본 날짜 인식 유형은 yyyy/mm/dd형식이다. 

- 그렇기에 기본 인식이 아닌 경우 변환을 하려면 그에 맞는 형식이 출력되도록 형식을 지정해주어야 한다.

 

5) 날짜 -> 문자열 변환

format(데이터, 포멧)
as.character()

 

예시)

 

as.Date("07/13/2020", format = "%m/%d/%Y")
format(Sys.Date())
as.character(Sys.Date())
format(Sys.Date(),format = "%m/%d/%Y")

- 기존 날짜 형식을 원하는 방식으로 바꿀 수 있다.

format(Sys.Date(),'%a')  # '%a'는 요일을 출력한다.
format(Sys.Date(),'%b')  # '%b'는 월을 출력한다.
format(Sys.Date(),'%m')  # '%m'는 두 자리수 월을 출력한다.
format(Sys.Date(),'%d')  # '%d'는 두 자리수 일을 출력한다.
format(Sys.Date(),'%y')  # '%y'는 두 자리수 년도를 출력한다.
format(Sys.Date(),'%Y')  # '%Y'는 네 자리수 년도를 출력한다.

- format()함수를 통해 원하는 시간대(년도,월,일,요일)을 특정 표식으로 출력할 수 있다.