수십기가짜리 데이터 파일도 쉽게 다룰 수 있게 해주는 R패키지입니다.

disk.frame 패키지

 

대용량 파일을 하드 디스크에 쪼개어 넣고 병렬처리하는 방식이라

메모리보다 훨씬 큰 데이터도 빠르게 다룰 수 있습니다. 

무엇보다 dplyr함수들을 적용할 수 있습니다. spark를 이용할때보다도 속도가 빠르다고 합니다. 

github.com/xiaodaigh/disk.frame/

www.youtube.com/watch?v=EOjObl_GSi4

 

 

좋은 블로그가 있기에 스크랩해왔습니다. 

이해를 간결하게 시켜주시고 재밌는 예시를 들어주셔서 리포스팅하게 되었습니다. 

 

 

 

m.blog.naver.com/PostView.nhn?blogId=ibuyworld&logNo=221520332874&proxyReferer=https:%2F%2Fwww.google.com%2F

'R > R베이스의 머신러닝' 카테고리의 다른 글

대용량 데이터 다루기 R  (0) 2021.04.05

wikidocs.net/book/2841

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

 

공부하다가 너무 유용한 사이트가 있어서 가져왔어요!

 

이 에러는 연산이  되지 않는 특성이 입력값에 있는 경우입니다.

 

주로 str()를 이용해 데이터 타입을 확인하고 안에 factor가 있다면, 이는 연산이 되지 않습니다.

이런경우 as.character로 바꿔서 사용하고 다시 factor처리를 해주는 방법이 있습니다.

R  새로운 종류의 Plot 

  1. 상자그림(box plot)

    1. 사분위수: 데이터의 분포를 설명

      1. 1Q: 데이터 분포에서 25프로거나 이내의 데이터

      2. 2Q: 50프로

      3. 3Q: 75프로

    2. boxplot(데이터)

      1. boxplot을 객체로 주면 데이터 stats저장 가능

        1. ex) boxstat <- boxplot(iris$Sepal.Width, horizontal=T)

    3. outlier에 text입히기

      1. x값은 outlier값, y값은 1로 위치 설정

        1. ex) text(boxstat$out, rep(1,nrow(boxstat$out)), pos=1)

  2. 히스토그램(hist)

    1. hist(데이터)

      1. 구간: break라는 파라메터를 사용, 기본값 = ‘Sturges’, 이것은 막대의 너비를 [log_x(n)+1]로 지정 (세로값)

      2. 각 구간별 데이터 갯수: freq, 기본값= null. (가로값)

        1. freq=FALSE: 구간의 확률밀도가 그려짐, 확률밀도이므로 너비의 합이 1이 된다.

  3. 밀도 그림(density): 히스토그램의 분포를 살펴보기위해 가장 잘 알려진 함수

    1. density(데이터)

    2. rug() 함수: 실제데이터의 위치를 표시하는 함수

      1. rug(jitter(데이터)), 여기서 jitter는 데이터가 겹치지 않도록

  4. 막대 그림(barplot)

    1. barplot(값1,2,3,...)

  5. 파이 그래프 (pie)

    1. 패스~~ 다음에 하자

  6. 모자이크 플롯 (mosaicplot)

    1. 범주형 다변량 데이터를 표현

    2. mosaicplot(데이터, color = T)

      1. 만약 어떤 변수에 따른 모자이크  플롯만 그리고 싶다면 -> mosaicplot(~Class + Survived, data=Titanic, color = T)

  7. 산점도 행렬 (pairs)

    1. pairs(~ 산점도에 넣고싶은 column + column, …, col = c(‘색상1’,’색상2’,...)[범주형데이터명])

      1. ex) pairs(~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width, data = iris, col=c(‘red’,’green’,’blue’)[iris$Species])

  8. 투시도와 등고선

    1. 패스~~

 

'R > 기초' 카테고리의 다른 글

R 데이터 plot 함수  (0) 2019.08.13
R 데이터 조작 II  (0) 2019.08.13
R 데이터 조작 I  (0) 2019.08.12
R에서 사용하는 제어문, 함수, 그에따른 연산  (0) 2019.08.12
R에서 사용하는 변수  (0) 2019.08.12

R  데이터 Plot 

 

  1. 기본이 되는 시각화 툴, graphics

    1. 사용전에 데이터 셋 가져오기: data(dataset이름) -> global enviroment에 저장

      1. data(mlbench) 불러오자, mlbench -> 데이터 데모 목적

      2. ? 데이터셋: 데이터셋이 어떻게 구성되어있는지 설명

    2. 기본 사용법

      1. plot(데이터,데이터)

  2. 그래프 내부를 예쁘게 만들기

    1.  축 이름 설정하기

      1. xlab, ylab=’이름’

    2. 그래프 이름

      1. main=’Ozone’

    3. 점 모양

      1. pch는 plotting characters

      2. pch= 숫자, 혹은 원하는 심볼 ‘x’

    4. 점 크기

      1. cex = 1 ’default’

    5. 점 색상

      1. colors() 함수를 사용해 적용가능 색상을 검색 가능

      2. col=’red’

    6. 좌표축 값 설정

      1. xlim, ylim = c(최솟값, 최댓값)

    7. jitter: 데이터 겹치지 않게 하지

      1. 같은 값 위에 여러값이 존재하면 이를 겹치지 않게 보기위해 함수를 사용

    8. 범례, legend()

      1. legend(‘위치’, legend=c(‘이름’,’이름’),pch=c(‘’,’’), cex=0.8, col=c(‘black’,’red’),bg=’grey’)

  3. 데이터 위에 선,점 그리고 도형 그리기

    1. plot을 선으로 하고 싶을 때, 혹은 ‘o’로 하고 싶을 때

      1. plot(cars, type =’1’ or ‘o’, cex= 0.5)

      2. 한 축의 값이 여러개인게 거슬린다?

        1. tapply로 x축에대해 y축 값으 평균낸다

        2. ex) x<-tapply(x축, y축, mean)

        3. plot(x, type=’o’)

    2. points(): 데이터 점을 덧 그리기

      1. plot()시행하고 points를 하면 원래 창에 점을 덧 그릴 수 있음

      2. 없는 데이터 위에 points()함수를 사용하고 싶다면

        1. type=’n’으로 해서 plot()을 사용

    3. lines(): 데이터 선을 덧 그리기

      1. points()와 비슷한 함수

      2. 비모수적 회귀분석

        1. lowess(데이터): 회귀분석 시행

        2. 그 외의 함수: loess(), ksmooth(), smooth.spline(),earth() 등

    4. abline(): 직선그리기

      1. a= 기울기, b= x계수/ 혹은 y= h, x=v도 가능

    5. curve(함수, 함수식, 범위): lines와 다르게 함수식이 맨 앞에 나와서 바로 적용 가능

    6. polygon()

      1. x<-c(x데이터, x데이터의 끝 값, rev(x 데이터), x데이터의 첫값)

      2. y<-c(y데이터, y데이터의 끝 값, rev(y 데이터), y데이터의 첫값)

      3. polygon(x,y)

    7. text()

      1. 우선 데이터를 plot()

      2. 그 데이터의 값을 순서대로 text표시 가능: text(x좌표, y좌표, pos=데이터 주변에 어디에 표시할지, 예를들면 1= 밑, 2=왼쪽 등)

  4. 행렬 데이터 그리기: matplot()/ matlines()/ matpoints()

    1. matplot(x데이터, 행렬y (내부에는 컬럼이 여러개 있음))

  5. 그래프상에 그려진 데이터 식별

    1. 데이터를 우선 그리기

      1. plot(cars)

    2. identify(그래프의 x데이터, 그래프의 y데이터) 식별해주기

      1. identify(cars$speed, cars$dist)

    3. 그래프위에 점을 찍으면 주변 데이터를 표시해줌

  6. 여러 데이터 그리기

    1. par사용: 여러 그래프 함수를 사용할 수 있도록 그래픽 인수를 설정하고 조회하는 함수

      1. 객체 <-par(mfrow=c(1,2))

      2. plot(), plot(): 플랏을 각각 한번씩 별개로 시행하고, par(opar) 수행

 

'R > 기초' 카테고리의 다른 글

R 새로운 종류의 Plot  (0) 2019.08.13
R 데이터 조작 II  (0) 2019.08.13
R 데이터 조작 I  (0) 2019.08.12
R에서 사용하는 제어문, 함수, 그에따른 연산  (0) 2019.08.12
R에서 사용하는 변수  (0) 2019.08.12

R  데이터 조작 II

 

  1. 데이터 처리에 중요한 패키지

    1. 전처리 -> sqldf, plyr, reshape2, data.table, foreach

    2. 병렬처리 패키지 -> doMC

    3. 코드 테스트 -> testthat, browser(), system.time(), Rprof()

    4.  모두 필요하다

  2. sqldf 패키지: SQL 명령이 주어지면 자동으로 스키마 생성, 테이블로 데이터 로딩, SQL문을 수행, 이후 다시 R로 로딩

    1. sqldf(‘SQL명령문’)

      1. ex) sqldf(‘select distinct Species from iris’)

      2. iris내에 Sepal.Length의 평균을 구해보자

        1. sqldf(“select avg(Sepal_Length) from iris where Species=’setosa’”)

        2. SQL은 컬럼명에’.’이 들어갈 수 없어서 Sepal_Length로 적어야하고, 대소문자 구분이 없다.

      3. iris내의 Species별 평균을 구해보자

        1. sqldf(‘select Species, avg(Sepal_Length) from iris group by Species’)

  3. plyr 패키지: 데이터를 분활(split),특정함수에 적용(apply), 그 결과를 조합(combine)하는 세단계를 처리하는 함수를 제공

    1. 입력값: 배열, 데이터프레임, 리스트

    2. 함수의 첫번째와 두번째자리의 의미: a: array, d: data.frame, l: list 중 (1) 입력값, (2) 출력값

    3. 함수

      1. adply(): 입력값이 꼭 a일 필요가 없다. 숫자 색인으로 각 행이나 열을 읽을 수 있으면 됨

        1. 왜쓰나? apply()를 사용하면 output은 ‘행렬’로 결과를 변환해서 문자가 섞여있으면 모두 문자로 변환됨

      2. ddply()

        1. Species로 그룹지을 때, .(변수) <- 이렇게 사용

          1. ex) ddply(iris, .(Species), function(sub){data.frame(Sepal.Length.mean)=mean(Sepal.Length))})

        2. 여러변수들로  그룹지을 때 -> .(변수, 변수)

          1. ex) ddply(iris, .(Species, Sepal.Length > 5.0), function(sub){data.frame(Sepal.Length.mean=mean(Sepal.Length))})

      3. m*ply()

        1. 데이터프레임 혹은 함수만 인자로 받아서 output을 바꾸는 함수

        2. 난수 생성해서 프레임에 추가하는 예제

          1. ex) mdply(x, rnorm, n=2)

  4. transform(), summaries(), subset(): plyr()패키지들과 함께 사용되는 함수들

    1. transform(): 데이터프레임 내의 데이터를 수정하여 새로운 항목으로 추가할 때

      1. ex) ddply(baseball, .(id), transform, cyear=min(year))

      2. 만일 두개 이상의 항목을 추가하고 싶다면 -> mutate()사용

        1. ex) ddply(baseball, .(id), mutate, cyear, cyear1)

    2. summarise(): 데이터를 조작하고 추가하고 싶은 컬럼을 새로운 데이터프레임에 넣어서 반환

      1. ex) ddply(baseball, .(id), summarise, cyear= min(year))

    3. subser(): 조건에 맞는 데이터를 추출

      1. ex) ddply(baseball, .(id), g == max(g))

  5. reshape2()

    1. melt(): 데이터 변형

    2. melt(인자, dataframe name)

      1. ex) melt(id=1:4, french_fries)

        1. id는 식별해주는 id, french_fries는 data.frame자료

      2. NA값이 포함된 것을 지우고 싶을 때

        1. rm.na =T

    3. complete.cases(data.frame): 하나라도 NA가 있으면 FALSE, 하나도 없으면 TRUE를 반환

  6. cast(): dcast/ acast -> d: data.frame/ a: vector, matrix, array

    1. dcast(데이터명, formula)

      1. ex) m <- melt(id=1:2, smiths)

      2. ex) x <- dcast(m, subject + time ~ … )

      3. identical(x, smiths) : 확인작업

    2. id를 모두 안 써도 됨

      1. ex) id = time만 써도 됨

  7. data.table(): data.frame와 비슷한 구조

    1. 패키지이기 때문에 다운과 library필수

    2. 모든 내용을 print하지 않아 편리

      1. 하지만 내용을 충분히 보고 싶을때는 x[1:n,]을 사용해서 지정

    3. 데이터 프레임과 호환이 잘 되어 프레임이사용하는 함수는 웬만하면 사용 가능, 하지만 안될 시 as.data.frame()으로 변환해서 사용

    4. data.table[행,표현식,옵션]으로 인덱싱

      1. 사용법 예시: as.data.table(iris), iris[1, Species]

        1. 주의할 점: 따옴표 사용 안함, data.frame은 사용함

      2. 옵션은 by를 사용

        1. ex) iris_table[,Sepal.Length,by=Species]

    5. setkey()

      1. 만일 어떤 조건을 줘서 그에 맞는 조건에 해당하는 행을 모두 출력할 때는 R은 모든 행을 훑고지나가면서 탐색한다. 이는 시간이 많이 걸리는 행위이기 때문에 미리 조건에 맞는 색인을 만들어 놓고 한다면 훨씬 수월 -> 이를 위해, key를 지정

      2. 사용법

        1. setkey(데이터명, key로 설정할 column)

        2. ex) setkey(dt1, x)

        3. dt1[dt2,]: dt1에서 x를 key로 설정했기 때문에 이에 대응되는 dt2의 컬럼을 dt1에 추가해서 보여줌

          1.  
        4. datatable1[x=13,list(x_mean=mean(x),x_std=s\d(x))]: datatable1의 x값이 13인 애들만 search하고 y의 평균 구해라

        5. merge()사용 가능 -> 속도 느림

    6. 참조를 이용한 데이터 수정

      1. 사용법: dt[i,변수명 := 값]

    7. rbindlist

      1. plyr패키지에 ldply()가 llply()보다 느리다.

      2. rbindlist()는 llply()로 계산결과를 리스트로 반환해서 이를 list를 묶어 데이터프레임으로 변환하는 것

  8. doMC: 멀티코어를 사용해서 병렬 컴퓨팅을 하는 것

plyr(), foreach()함수를 사용해서 가능

'R > 기초' 카테고리의 다른 글

R 새로운 종류의 Plot  (0) 2019.08.13
R 데이터 plot 함수  (0) 2019.08.13
R 데이터 조작 I  (0) 2019.08.12
R에서 사용하는 제어문, 함수, 그에따른 연산  (0) 2019.08.12
R에서 사용하는 변수  (0) 2019.08.12

R  데이터 조작 I

 

  1. 데이터 읽고 쓰기, 데이터 자체를 저장, 데이터끼리 묶기

    1. read.csv(파일명, header=TRUE/FALSE)

      1. 읽어올 때 문자들을 모두 factor처리하기 때문에, 이를 문자열로 바꾸기 위해 -> stringAsFactors=FALSE처리하여 들여옴 ex)read.csv(a.csv, stringAsFactors=FALSE)

      2. NA를 읽어들어 올때, 이를 문자처리 하기 위해 NIL로 변환되서 들어옴.  이 때, 그 열의 나머지 숫자들도 문자처리해서 이를 막아줘야 함. -> na.strings이용 ex) x <- read.csv(a.csv, na.strings=c(‘NIL’)) : 이러면 NIL을 인식해 na처리

    2. write.csv(변수, ‘파일이름.csv’,row.names = F)

      1. row.names는 행에 자동으로 이름을 부여하는가인데, default가 T

      2. save,load: 데이터만 저장하고 읽어올 수 있음

        1. save(x,y,file=’xy.RData’)

        2. load(‘xy.RData’)

    3. rbind/cbind: rowbind/columnbind

      1. rbind로 벡터나 데이터 프레임을 결합할 수 있음

      2. data.frame을 생성할 때, stringsAsFactors = FALSE로 하는 이유는 데이터가 명목형이 아닌 단순 문자열이기 때문이다.

      3. 데이터프레임은 cbind로 결합은 가능하나 오른쪽에 같다 붙이는거라서 새로운 행이 추가됨, 목적과 맞지 않음.

        1. $를 사용해서 열 추가

 

  1. apply류 함수

    1. 기본 구조 apply류함수(적용대상, 함수->만드는 것 가능)

      1. ex)apply(x, function(x){x*2})

    2. 행렬의 경우 -> apply함수를 사용

      1. ex)apply(행렬, 1/2=행/열, apply함수명)

      2. iris데이터를 이용 -> apply(iris[,1:4],2,sum): 4개 열들의 합

        1. 대체가능한 함수들

          1. rowSums(),colSums()

          2. ex) colSums(iris[,1:4])

    3. 벡터 또는 리스트의 경우 -> lapply

      1. ex)lapply(1:3,function(x){x*2}) -> output이 list가 아닌 벡터이고 싶을 때 -> unlist(리스트) 사용

      2. list를 사용해서 평균구하기 -> ex) lapply(리스트,mean)

        1. list인 아웃풋을 데이터프레임으로 변환하고 싶을 때 -> 

          1. unlist(): 벡터로 변환

          2. matrix(): 행렬로 변환

          3. as.data.frame(): 행렬을 데이터프레임으로 변환

          4. do.call(): data.frame(do.call(cbind, lapply(iris[,1:4],mean))) -> 이런 방식 가능

    4. 벡터, 리스트, 데이터프레임의 경우, output이 list가 아닌 행렬,벡터로 반환하는 함수 -> sapply

      1. ex) sapply(iris[,1:4],mean) -> 결과가 벡터 -> as.data.frame을 이용해서 데이터프레임으로 구조 변환 가능

        1. 이 때, 행과 열이 뒤바뀌어서 나오는데, t(행렬)을 수행해서 원래 모양으로 변형

      2. 한가지 타입만 저장 가능한 벡터, 행렬, 배열로 반환하기 때문에 입력값들이 동일한 구조형이어야한다. -> 여러 데이터 타입에 대해 사용하고 싶다면 lapply()사용

    5. 어떤 범주에 해당f하는 값들만 연산하고 싶을 때 -> tapply()

      1. ex) tapply(iris$Sepal.Length, iris$Species, mean): 종에 따른 꽃받침 길이의 평균

    6. 함수에 인자를 넘겨주어서 연산 -> mapply()

      1. ex) mapply(function, c(1,2,3), c(‘a’,’b’,’c’))를 수행하면 (1,’a’)와 (2,’b’),(3,’c’)로 묶여서 function에 들어가서 연산하여 결과를 도출

      2. ex) mapply(mean, iris[1:4]): 1부터 4열까지 한 열씩 평균을 구함

 

  1. base패키지가 기본이 됨

    1. summary(): generic function in r

      1. 인자가 자료일 땐 -> 통계값, 인자가 모델일 때 ->모델 요약

      2. 수치형 자료의 경우 quantile사용 가능

        1. ex) quantile(iris$Sepal.Length)

    2. order(): index를 output으로 내보냄

      1. 기본 패키지여서 자주사용

    3. sample(): 주어진 데이터에서 샘플 추출

      1. replace =TRUE 중복 허용

      2. sample(1:10,5,replace=T)

      3. 무작위로 데이터 뽑고 싶을 때 사용

        1. iris[sample(nrow(iris)),]: iris데이터를 무작위 index를 부여해 무작위로 뽑음

    4. split(데이터, 분리조건)

      1. ex) split(iris, iris$Species): 종을 기준으로 iris구분

        1. 반환값은 list - > lapply사용

 

  1. doBy 패키지

    1. summaryBy(): 특정 조건을 주어서 summary를 함

      1. ex) summaryBy(Sepal.Length + Sepal.width ~ Species, iris)

        1. +로 묶은건 열을 주는 것, Species는 행, iris는 데이터

    2. orderBy(): 특정 조건으로 ordering

      1. ex) orderBy(~Sepal.Width, iris)

        1. 모든 열을 볼것이기 때문에 공백 후, ~ Sepal.Width를 기준으로 정렬

        2. 이 때, Species에 의해 먼저 정렬 후, 정렬

    3. sampleBy()

      1. ex) sampleBy(~Species, frac=0.1, data=iris)

      2. 10%로씩 끊어서 추출



  1. subset(데이터, 조건, select=열선택)

    1. split()함수와 유사하지만 특정 조건의 것을 분류하는데 사용

      1. ex) subset(iris, Species ==’setosa’ & Sepal.Width > 5.0, select = c(Sepal.Width))

        1. select 조건을 걸면 그 조건에 해당하는 것만 보여줌

        2. 특정열을 제외하려면 select = -c(Sepal.Width)이런 식

  2. merge(): 두개의 공통된 프레임으로 데이터셋을 묶는 것

    1. ex) x<- data.frame(name =c(‘a’,’b’,’c’), math =c(20,30,40))

    2. ex) y<- data.frame(name =c(‘a’,’b’,’c’), english =c(20,30,40))

    3. ex) merge(x,y)

      1. 만약 한쪽 데이터의 갯수가 모자르면 all=TRUE로 설정

        1. 빈 데이터를 NA로 채움

    4. cbind()는 단순히 열을 합치는 것

  3. sort()/order()

    1. sort(): 값을 반환

    2. order(): index반환

  4. with()/within()

    1. with(): 데이터프레임의 열을 데이터프레임 이름 없이 접근하기 위함

      1. ex) with(iris, {print(Sepal.Width)})

    2. within(): 데이터를 수정할 때 사용, with와 비슷

      1. ex) within(x, ifelse(is.na(val),val <- median(val, rm.na =T),x))

      2. median(열, na값을 지움)

  5. attach()/detach(): with()와 within()함수랑 비슷, 아얘 불러놓고 쓰기

    1. ex) attach(iris)

    2. attach()하고 나서 데이터 프레임을 변경하면 detach()하고나서 변한 데이터가 적용되지 않음

  6. which(): 조건에 해당하는 위치 찾음

    1. ex) which(x%%2==0)

    2. ex) x[which(x%%2==0)]

      1. which.min(x), ex) x[which.min(x)]

      2. which.max(x)

  7. aggregate(formula, 데이터, 함수)

    1. ex) aggregate(Sepal.Length ~ Species, iris, mean)

  8. stack()/ unstack(): summaryBy()등을 사용하기 편치않은 데이터 구조를 바꿀 때

    1. x<- data.frame(medicine =c(‘a’,’b’,’c’), ctl = c(1,2,3), exp = c(2,3,4))

    2. stack(x)

    3. unstack(stacked_x, values~ind)

 

'R > 기초' 카테고리의 다른 글

R 새로운 종류의 Plot  (0) 2019.08.13
R 데이터 plot 함수  (0) 2019.08.13
R 데이터 조작 II  (0) 2019.08.13
R에서 사용하는 제어문, 함수, 그에따른 연산  (0) 2019.08.12
R에서 사용하는 변수  (0) 2019.08.12

+ Recent posts