본문 바로가기
Data Science/Data Analytics

[ADP-10] R 기타 유용한 기능들(paste, substr) / R 그래픽 기능 / 데이터 마트 / R reshape / sqldf / plyr / 데이터 테이블

by 루크 Luke 2022. 8. 16.
반응형

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됨

- 데이터 테이블에서 특정 값을 찾으면 인덱스를 이용한 바이너리 검색을 하기 때문에 데이터프레임과 비교했을 때 매우 빠름

- 하지만, 데이터프레임처럼 사용하면 성능은 비슷해지므로, 무조건 빨라지는 것은 아님

 

반응형

댓글