R 기타 유용한 기능들
- paste : 입력받은 문자열들을 하나로 붙여줌, sep을 통해 구분자를 삽입시킬 수 있음
- substr : 주어진 문자열에서 특정 문자열을 추출하는 기능을 함, substr("string", 1, 4)는 1번째 글자부터 4번째 글자까지 추출
- 자료형 데이터 구조 변환
as.data.frame(x) | 데이터 프레임 형식으로 변환함 |
as.list(x) | 리스트 형식으로 변환함 |
as.matrix(x) | 행렬 형식으로 변환함 |
as.vector(x) | 벡터 형식으로 변환함 |
as.factor(x) | 팩터 형식으로 변환함 |
- 강제로 데이터 구조를 변환하면 경고문이 발생할 수 있음
as.integer(3.14)
# 3
as.numeric("foo")
# NA
# 경고메세지:
# 강제형변환에 의해 생성된 NA입니다.
- 논리값인 TRUE와 FALSE를 수치형으로 변환하면 TRUE는 1로, FALSE는 0으로 변환함
- 반대로 수치형을 논리값으로 변경할 때는 0일 경우 FALSE로 변환되고, 0이 아닌 모든 수치는 TRUE로 변환됨
as.character(101)
# "101"
as.numeric(FALSE)
# 0
as.logiacal(0.45)
# TRUE
- as.matrix를 이용해서 데이터 프레임을 행렬로 변환할 수 있는데, 이 경우 문자, 숫자가 섞여있으면 숫자가 문자형으로 모두 변환됨
- Sys.Date() : 오늘 날짜를 반환함
- as.Date() : 날짜 객체로 변환함, 포맷 지정을 해야하는 경우도 있음
as.Date("2015-01-13")
# "2015-01-13"
as.Date("01/13/2015")
# 다음에 오류가 있습니다 charToDate(x) : 문자열이 표준서식을 따르지 않습니다.
as.Date("01/13/2015", format="%m/%d/%Y")
# "2015-01-13"
- as.character() : 날짜 객체를 문자열로 변환 (다른 것도 문자열로 바뀌긴 함)
- format(데이터, format="") : 날짜 객체를 문자열로 변환
format(Sys.Date())
# "2015-01-13"
as.character(Sys.Date())
# "2015-01-13"
format(Sys.Date(), format="%m/%d/%Y")
# "01/13/2015"
R 그래픽 기능
- R은 다른 통계 분석 프로그램들에 비해 그래픽 기능이 다양하고 자유자재로 그림을 그릴 수 있음
1) 산점도 그래프
- 산점도는 x변수와 y변수의 값을 한눈에 살펴볼 수 있도록 평면에 점을 찍어 표현
- plot(x, y)
2) 산점도 행렬
- 여러 가지 변수들에 대해서 각각의 산점도를 한눈에 살펴볼 수 있도록 확장된 산점도 행렬
- pairs(data, main="Title")
3) 히스토그램과 상자그림
- 탐색적 자료 분석에서 자료의 분포를 손쉽게 확인하는 방법
- 히스토그램 hist(data, prob=T)
- 상자그림(boxplot) boxplot(data)
데이터 마트
- 데이터의 한 부분으로서 특정 사용자가 관심을 갖는 데이터들을 담은 비교적 작은 규모의 데이터 웨어하우스
- 일반적인 DB 형태로 갖고 있는다양한 정보를 사용자의 요구 항목에 따라 체계적으로 분석하여 기업의 경영 활동을 돕기 위한 시스템
- 정부기관 또는 정부 전체의 상세 데이터를 포함하는 것은 아님
- 전체 데이터 웨어하우스에 있는 일부 데이터를 가지고 특정 사용자를 대상으로 함
- 데이터 웨어하우스와 데이터 마트의 구분은 사용자의 기능 및 제공 범위를 기준으로 한다.
R reshape
- reshape 패키지는 단지 melt, cast만을 사용하여 데이터를 재구성하거나 밀집화된 데이터를 유연하게 생성
- 기존 데이터 구조를 column-wise하게 전환하는데, 크게 melt와 cast 단계로 구분됨
install.packages("reshape")
library(reshape)
cf) head(df), head(df, number) : 전체 데이터가 매우 많아서 앞단의 데이터 일부분을 봄
cf2) names(df) : 데이터프레임의 변수명 출력
cf3) tolower(x) : 소문자로 바꿔줌
*melt(df, id=c("month", "day"), na.rm=TRUE)
- reshape 패키지의 주요 기능인 melt
- id에 있는 변수를 기준으로 해서 나머지 각 변수를 variable이라는 이름의 데이터를 만듬
- 원래 변수들의 값을 기 value에 저장해 모든 데이터를 표준 형식으로 변환함.
- 결측값을 제거하는 옵션인 na.rm=TRUE
*cast(melted_df, day ~ month ~ variable)
- 엑셀의 피벗팅을 하듯이 자료를 변환함
- melt된 df를 이용해 "~"를 y, x축의 dimension과 measure에 해당되는 변수(variable) 값을 표시함
- 특별히 변수 종류를 선정하지 않았으므로 모든 변수애ㅔ 대해 분리해 표시됨
- 엑셀의 피벗은 count할 때, distinct count가 안된다.
- cast(melted_df, day ~ month ~ variable, mean) : mean 함수를 적용할 수 있음 - 월별 각 변수들의 평균값을 산출함
- cast(melted_df, month ~ . | variable, mean) : 모든 변수애ㅔ 대해 평균을 구하고 "|"을 이용해서 산출물을 분리 표시함
- cast(melted_df, month ~ variable, mean, margins=c("grand_row", "grand_col")) : 행과 열에 대해 소계를 산출하는 기능
- cast(melted_df, day ~ month, mean, subset==variable=="ozone") : 모든 데이터를 처리하지 말고, 특정 변수만 처리하고자 하는 경우 서브세트 기능 활용
- cast(melted_df, month ~ variable, range) : min, max를 동시에 표시해주는 range
sqldf
install.packages("sqldf")
library(sqldf)
- 조회할 내용을 sqldf 함수의 " " 안에 sql로 표현함
sqldf("select * from df")
- 데이터의 특정 행(row)수만 조회하고자 하는 경우, limit를 정의하고 행의 개수를 써주면 된다. head와 같은 기능
sqldf("select * from df limit 10")
- like 문장을 사용할 때는 ' '을 이용하면 된다.
sqldf("select count(*) from df where Feature like 'se%'")
plyr
- 데이터를 분리하고 처리한 다음, 다시 결합하는 등 가장 필수적인 데이터 처리 기능을 제공
- apply 함수와 multi-core 사용 함수를 이용하면 for loop를 사용하지 않고 매우 간단하고 빠르게 처리할 수 잇음
- plyr은 apply 함수 기반, 데이터와 출력변수를 동시에 배열로 치환하여 처리하는 패키지
- ply()함수는 앞에 두 개의 문자를 접두사로 가지는데,
- 접두사의 첫 번째 문자는 입력하는 데이터 형태를 나타내고, 두 번째 문자는 출력하는 데ㅐ이터 형태를 나타낸다.
- d = 데이터프레임, a = 배열, l = 리스트
출력 \ 입력 | 데이터 프레임 (data.frame) |
리스트 (list) |
배열 (array) |
데이터 프레임 (data.frame) |
ddply | ldply | adply |
리스트 (list) |
dlply | llply | alply |
배열 (array) |
daply | laply | aaply |
cf) runif(생성할 난수의 개수, 최소값, 최대값)
- ddply(df, "year", function(x) {~~}) : 데이터프레임 df의 year 변수를 function을 적용하여 데이터프레임으로 출력
- ddply(df, "year", summarise, mean.count = mean(count)) : 데이터프레임 df의 year 변수의 값(count)들의 평균을 데이터프레임으로 출력
데이터 테이블
- 데이터 프레임과 유사하지만, 보다 빠른 그룹화와 순서화, 짧은 문장 지원 측면에서 매력적임
- 무조건 빠른 것은 아니므로 특성에 맞게 사용해야 함
- 특히 64비트 환경에서 RAM이 충분히 많을 때는 효율적임
install.packages("data.table")
library("data.table"
cf) rnorm(5) : 정규분포에서 5개의 난수를 생성해줌
- tables() : 여태껏 생성된 데이터 테이블 형식의 데이터를 살펴볼 수 있으며, 크기, key, 용량 등이 얼마인지 살펴볼 수 있음
- setkey(DT, x) : 데이터 테이블에 key를 지정해 해당 값으로 표시할 수 있음, x를 키로 지정함, x에 의해 ordering됨
- 데이터 테이블에서 특정 값을 찾으면 인덱스를 이용한 바이너리 검색을 하기 때문에 데이터프레임과 비교했을 때 매우 빠름
- 하지만, 데이터프레임처럼 사용하면 성능은 비슷해지므로, 무조건 빨라지는 것은 아님
댓글