프로그램 설치와 소개
- R프로그램 다운로드
: 메인서버인 0-Cloud를 비롯한 전세계에서 사용되는 서버목록에서 다운로드 가능
http://www.r-project.org - 추가적인 Java프로그램 설치 : R프로그램의 자체기능으로 해결할 수 없는 분석작업을 수행하기 위함( ex. 텍스트 마이닝 )
R에서 사용하는 많은 Java 기반 패키지들( rJava, XLConnect, RWeka 등 ... )은 Java 8(JRE 1.8) 버전에 맞춰 개발되었기에 이 버전을 설치한다. - 반드시 관리자 권한으로 실행
- R패키지 : 특정기능을 제공하는 라이브러리
설치시 제공되는 기본 패키지 + 외부에서 설치하는 패키지( 공식적으로 CRAN or 검색엔진에서 [ 키워드 in r ]로 검색 )
install.packages("패키지명")
#CRAN 미러사이트(Korea)를 선택하면 패키지가 설치됨
.libPaths() #설치된 패키지들의 경로확인, lib옵션으로 경로지정가능
library("패키지명") #설치된 패키지를 실행하여 사용가능하게 함
update.packages("패키지명") #패키지 업데이트, 특정 패키지 지정안할경우 전부 업데이트
installed.packages() #설치된 패키지들의 목록확인
remove.packages("패키지명") #패키지 삭제
library(help=패키지명) #설치되어있는 패키지의 정보확인, 함수매뉴얼 확인
available.packages( ) #추가로 설치가능한 패키지 확인
- 스크립트창 : R프로그램 내의 메모장( 파일 - 새 스크립트 )
메모장이기에 실행기능은 없다. 실행하고자 하는 명령어 블록선택 → ctrl+r(Run) - 작업디렉토리(working directory) : 프로그램이 접근(저장, 탐색.. )할 기본폴터 ( 기본경로는 내문서(Documents)로 지정 )
getwd() : 현재 설정된 작업디렉토리를 반환
setwd("작업디렉토리경로") : 작업디렉토리를 지정( 역슬래쉬(\) 두번입력, 백슬래쉬(/) 한번이상입력 )
-> 프로그램 종료시 초기화, 먼저 디렉토리를 구축해두고 등록해야한다.
변수와 다양한 데이터 유형
변수 : 데이터가 담겨있는 메모리 주소값 = 데이터를 담는 그릇
변수이름 <- 값 #선언
변수이름 = 값 #선언
변수이름 #출력(호출)
class(변수이름) #변수의 데이터종류를 확인
- 데이터(값, R-value) 주의사항
숫자나 변수이름 데이터의 경우 그냥 사용한다.
문자(열) 데이터의 경우 쌍따옴표 혹은 홑따옴표로 값을 선언해야한다.
날짜 데이터의 경우 as.Date() 함수를 사용하여 값을 선언해야한다. - 변수이름 주의사항 : 문자로 시작, 대소문자 구별, 예약어 사용불가
[ 숫자형 데이터 ]
- 연산자 : +, -, *, / , %%
- 지수형식 지정
: 기본적으로 소수점 위에 0이 5개가 되면 지수형태로, 소수점 이하 4자리가 될때부터 지수형태로 표현됨
options(scipen=999) # 지수형식X, 숫자그대로 표현
options(scipen=0) # 지수형식 지원, 기본값
- 소수점 처리함수
round(x, digits) # x를 digits자리까지 반올림
trunc(x) # x의 소수점이하 버림
ceiling(x) # x보다 크거나 같은 정수
floor(x) # x보다 작거나 같은 정수
[ 문자형 데이터 ]
nchar(str) # 문자열변수의 길이반환
paste(str1, str2) # 문자열 연결(공백으로 연결, sep옵션으로 구분자지정가능)
substr(data, 시작위치, 종료위치) # 특정 부분만 추출
strsplit(tel, ")") # 특정기호로 문자열 분리
[ 날짜형 데이터 ]
: lubridate( ) 패키지를 설치하여 이용한다.
[ NA 형과 NULL 형 데이터 ]
- NA( Not Applicable , Not Available ) : 사용할 수 없는 데이터, 이상치( 정상범위를 벗어나거나 잘못된 이상한 데이터 )
- NULL : 존재하지 않는 데이터, 결측치( 비어있는 데이터 )
- 삭제방법 : na.rm=TRUE
x <- c(1, 2, NA, 4)
sum(x) # 결과: NA
sum(x, na.rm=TRUE) # 결과: 7
- 치환방법 : is.na(), is.null()
x <- c(1, 2, NA, 4, NA)
x[is.na(x)] <- 0 # NA를 0으로 치환
print(x) # 결과: 1 2 0 4 0
x <- c(1, 2, NULL, 4, NULL)
x[is.na(x)] <- 0 # NULL을 0으로 치환
print(x) # 결과: 1 2 0 4 0
대량의 데이터 관리기법
[ 벡터(vector) ]
: 한종류의 데이터를 한줄로 저장
벡터 생성방식 : c() : concatenate함수를 의미
벡터이름 = c( 값1, 값2, 값3 .. )
벡터이름 <- c( 값1, 값2, 값3 .. )
is.vector(벡터이름) # TRUE값이 출력됨
class(벡터이름) # 동일한 데이터 유형
벡터 접근방식
벡터이름[ 행번호 ] # 특정 행만 조회
벡터이름[ -행번호 ] # 특정 행을 제외하고 조회
벡터이름[ 시작행:종료행 ] # 해당 행범위를 조회
벡터이름[ -시작행:-종료행 ] # 해당 행범위를 제외하고 조회
벡터 연산
벡터1 + 벡터2 # 위치가 대응되어 연산, 위치가 부족하면 처음부터 진행
length(벡터) # 벡터의 길이 = 요소의 개수
union( vec1, vec2 ) # 합집합
setdiff( vec1, vec2 ) # 차집합
intersect( vec1, vec2 ) # 교집합
[ 행렬(matrix) ]
: 한종류의 데이터 벡터를 가로, 세로로 저장
기본적으로 n행1열(하나의 벡터)로 생성 -> nrow, ncol 옵션으로 행갯수, 열갯수 지정가능
byrow옵션 : 기본적으로 열단위로 채워지나 행단위로 채워짐을 원하는 경우 지정( byrow = TRUE )
행렬 생성방식
행렬이름 = matrix( c(1,2,3,4) )
행렬이름 <- matrix( c(1,2,3,4) )
행렬이름 <- matrix( c(1:20) nrow=행갯수 )
행렬이름 <- matrix( c(1:20) ncol=열갯수 )
행렬이름 <- matrix( c(1,2,3,4) nrow=행갯수 byrow=TRUE ) # 저장순서 변경
행렬 접근방식
행렬이름[ 행번호, 열번호 ]
행렬이름[ c( 행번호1, 행번호2.. ), c( 열번호1, 열번호2.. ) ]
행렬이름[ , 열번호 ] # 모든 행
행렬이름[ 행번호, ] # 모든 열
[ 배열(array) ]
: 한종류의 데이터를 3차원으로 저장 = Tensor와 유사개념
(생략)
[ 리스트(list) ]
: 서로 다른 종류의 데이터를 한줄로 저장, 키=값의 형태로 저장
리스트 생성방식
리스트이름 = list( 키1=값1, 키2=값2, .. )
리스트이름 <- list( 키1=값1, 키2=값2, .. )
리스트 접근방식
리스트이름$키이름 # 키의 값 출력, 대소문자 구별
리스트이름[번호] # 키의 값 출력
[ 데이터프레임(dataframe) ]
: 서로 다른 종류의 데이터를 줄로 저장, 표(table)의 형태로 라벨(컬럼)에 대응되는 값들이 저장
(1) 파일로딩시 자동으로 생성
(2) 벡터(열)를 결합하여 생성
데이터프레임이름 = data.frame( 라벨1 = 벡터1, 라벨2 = 벡터2, 라벨3 = 벡터3 ... )
데이터프레임이름 <- data.frame( 라벨1 = 벡터1, 라벨2 = 벡터2, 라벨3 = 벡터3 ... )
데이터프레임이름 = data.frame( 라벨1 = c(1,2,3), 라벨2 = c(1,2,3), 라벨3 = c(1,2,3) ... )
str(데이터프레임) # 데이터프레임 각 열의 자료형들 출력
데이터프레임 접근방식
데이터프레임명$라벨명 # 대응되는 벡터값 전부 출력, 라벨명 대소문자구분 주의
데이터프레임명[ 행, 열 ] # 행렬식 접근도 가능
which( 데이터프레임$라벨명=="값" ) # 라벨이 값과 일치하는 행번호를 출력
데이터프레임 합치기(merge) : all=T옵션을 활용하여 손실을 막는다. key, by 옵션을 활용하여 합칠기준이 되는 컬럼을 정한다.
merge( 데이터프레임1, 데이터프레임2 ) # 첫번째 데이터프레임 기준 공통부분만 합침
merge( 데이터프레임1, 데이터프레임2, all=T ) # 모든 데이터 합쳐서 출력, 데이터 손실을 막지만 NA값 발생가능
merge( 데이터프레임1, 데이터프레임2, key="grade" )
merge( 데이터프레임1, 데이터프레임2, key="grade", all=T ) #key컬럼이 일치하는 모든 경우의 수 출력
새로운 행과 열 추가하기
데이터프레임$라벨명 = c (벡터값)
데이터프레임 <- transform( 데이터프레임, 라벨명=c(벡터값), 라벨명=c(벡터값) ... ) #여러개 열 추가시
rbind( 기존 데이터프레임, 추가 데이터프레임 ) # 기존 데이터프레임의 라벨명과 동일해야함(대소문자 동일)
cbind( 기존 데이터프레임, 추가 데이터프레임 ) # 기존 데이터프레임과 행의 갯수가 동일해야함( 아니라면 merge )
특정 열 삭제하기
데이터프레임 <- 데이터프레임[ , -열번호 ] # 행렬식 접근
데이터프레임 <- subset( 데이터프레임, select= -(라벨명) )
데이터불러오기와 저장하기
데이터는 파일 혹은 DB ( SQL로 접근 ) 에 저장되어 있다. 파일의 종류는 매우 다양하고 종류에 따라 다른 명령어로 접근하여 처리한다.
기본적으로 작업디렉토리에 존재하는 파일만 파일명으로 접근이 가능하다.(폴더접근X)
작업디렉토리 외의 파일은 절대경로를 써야한다.
[ 비정형 데이터 불러오기 ]
readLines() : 텍스트 파일의 각 줄을 벡터의 요소로 저장
list.files() # 워킹디렉토리 하에 있는 파일 및 디렉토리 목록확인
txt = readLines("구매후기.txt")
txt <- readLines("구매후기.txt")
txt = readLines("구매후기.txt", encoding="UTF-8") # 인코딩 옵션
txt = readLines("구매후기.txt", encoding="CP949") # 인코딩 옵션
[ 정형 데이터 불러오기 ]
read.table() : 표에서 공백으로 컬럼을 구분하여 저장
txt = read.table("전공.txt")
txt <- read.table("전공.txt")
txt <- read.table("전공.txt", fileEncoding="UTF-8") # 인코딩 옵션
기본적으로 표에 자동으로 컬럼명이 붙는다.( V1, V2, V3 .. )
컬럼명이 데이터에 존재하는 경우 header=True 옵션을 사용하면 첫행이 컬럼명이 된다.
txt = read.table( "전공.txt", header=TRUE )
컬럼을 구분하는 기본구분자는 공백이지만 sep 옵션으로 별도로 지정할 수 있다.
txt = read.table( "전공.txt", header=TRUE, sep=":" )
[ CSV 전용 읽어오기 ]
CSV파일 : 컬럼의 구분이 ,(콤마)로 저장되어있는 파일, 확장자는 다양할 수 있다.
txt = read.csv( "전공3.txt" )
[ 엑셀파일 읽어오기 ]
readxl( ) 패키지를 설치하여 read_excel()을 활용한다.
install.packages("readxl") # 설치
library("readxl") # 실행
txt = read_exel( "전공.xls" )
txt = read_exel( "전공.xls", sheet=1 ) # sheet옵션으로 엑셀시트의 번호, 이름을 지정가능
[ 사용자로부터 데이터 입력받기 ]
scan() : 공백단위의 단어를 입력받음, 공백을 기준으로 분리하여 개별원소로 인식
nol = scan() # 숫자
nol = scan( what="" ) # 문자, 날짜
readline() : 엔터단위 문자열을 입력받음
txt = readline()
[ PDF파일 읽어오기 ]
pdftools( ) 패키지를 설치하여 pdf_text()을 활용한다.
install.packages("pdftools") # 설치
library("pdftools") # 실행
txt = pdf_text("파일1.pdf")
[ 비정형 형태로 저장 ]
: write(), writeLines()
[ 정형 형태로 저장 ]
write.table( txt, 파일명 ) # 공백구분 테이블로 저장
write.csv( txt, 파일명 ) # CSV 형태로 저장
install.packages("xlsx")
library("xlsx")
write.xlsx( txt, 파일명 ) # 엑셀파일로 저장
사용자정의 함수
함수정의
함수호출시 return된 값은 화면에 출력된다.
함수이름 <- function( 입력변수 ) {
// 함수처리
return( 결과값 )
}
조건문
if( 조건 ){
// 조건에 맞는 경우
} else {
// 조건에 맞지 않는 경우
}
ifelse( 조건 , 참일 경우 실행 값 , 거짓일 경우 실행 값)
# 이때 print는 자동옵션이므로 print 작업을 실행에 넣을 경우 2번 출력된다.
반복문
탈출옵션 break, 건너뛰는 옵션 next
while( 조건 ) { // 조건이 참일동안 반복 }
for( 변수 in 반복시작숫자 : 반복종료숫자 ) { // 반복횟수만큼 수행 }
gugudan <- function(x) {
for( i in 1 : 9 ){
y <- x*i
print( paste( x, "X", i, "=", y ) )
}
}
// 반복숫자에서 1씩 증가시키면서 연산한다.
for( 변수 in 반복시작숫자 : 반복종료숫자 +연산 ) { }
for( i in 3 *10 ) {
print( paste( i,"번 앞으로 나오세요." ) )
}
//출력결과
[1] "10 번 앞으로 나오세요."
[1] "20 번 앞으로 나오세요."
[1] "30 번 앞으로 나오
'data' 카테고리의 다른 글
[ R 프로그래밍 ] 미세먼지관련 소셜키워드 분석 (0) | 2024.08.27 |
---|---|
[ R 프로그래밍 ] 제주 여행지 추천 키워드 분석하기 (9) | 2024.08.26 |
[ R 프로그래밍 ] 경주여행 추천키워드 분석하기 (0) | 2024.08.26 |
R 프로그램을 활용한 빅데이터 분석특강 - 데이터처리 (1) | 2024.08.24 |
Tibero DBMS 설치 및 설정 ( Linux, Windows ) (0) | 2024.03.10 |