'Split'에 해당되는 글 2건

  1. 2015.10.05 R의 split 활용
  2. 2012.02.03 아파치 로그를 쉽게 필터링 할 수 있는 프로그램 cronolog~

R의 split 활용

|



R의 apply 함수들을 살펴봤는데 이와 함께 사용할 수 있는 유용한 split() 함수에 대해서 알아보도록 하자. 

split

split은 말 그대로 데이터를 나누는 함수이다. 

벡터, 리스트, 데이터셋과 같은 객체를 지정된 팩터(factor)에 따라 분리하는 기능을 한다. 


split을 이해하기 위해서 먼저 데이터를 생성해보자. 

rnorm(10)을 이용해서 평균 0, 표준편차 1인 정규분포의 수 10개를 생성하고, 

runif(10)를 이용해서 균등분포를 갖는 10개의 수를 만들고, 

rnorm(10, 1)을 통해 평균 1, 표준편차 1인 정규분포의 임의의 숫자 10개를 만든다. 


그리고 gl(3, 10)을 통해 3개의 팩터(factor)1, 2, 3에 해당하는 각각의 수 10개를 만든다. 

이후 split(x, f)로 임의의 수 30개를 각각 10개씩 분리했다. 


이렇게 분리한 데이터에서 대해 각각의 팩터에 대한 평균을 구할 경우, 

다음과 같이 lapply를 적용할 수 있다. 


데이터셋에 Split 적용

이번에는 데이터 셋을 가지고 생각해 보자. 


공기의 오염도를 나타내는 airquality 데이터셋을 가져와서 월별로 평균을 구한다고 가정해 보자. 

이때 위처럼 split을 적용하면 airquality 데이터를 airquality$Month로 분할할 수 있다. 

그리고 lapply를 통해 "Ozone", "Solar.R", "Wind" 필드에 대해 평균을 구하면 다음과 같다. 


결과를 리스트가 아닌 벡터로 활용하기 위해서는 sapply를 사용하면 된다. 

그리고 NA 값을 제외하고 싶은 때는 na.rm = TRUE를 지정해서 월별 평균을 최종적으로 구할 수 있다. 


좀 더 복잡한 경우를 생각해 보자. 

오존 오염도가 월별로 가장 높은 날짜(월, 일)와 해당 오존 오염도를 출력해보는 예제를 만들어보자. 

이 경우, 데이터 셋을 월별, 오존 오염도 순으로 정렬을 해야 하고

정렬된 데이터에 월별로 split을 적용한 다음, 

lapply나 sapply로 월, 일, 오존 오염도를 출력하면 된다. 


최종 결과는 다음과 같이 나오면 된다. 


여러가지 방법이 있겠지만 지금까지 정리한 내용으로 구성한 소스는 다음과 같다. 


sapply를 적용하니 행과 열이 반대로 나와서 do.call(rbind...)를 사용했다. 

더 나은 방법이 있으면 댓글로 남겨주기 바란다~~


미니의 R 주요 강좌...

데이터 통계 분석을 위한 R 설치와 활용

R 실행을 위한 기본적인 내용들~

R 데이터 구조에 대한 정리

R 패키지 설치하기

R 데이터셋 처리 함수들에 대한 간단한 정리~

R 데이터셋 정렬하기~

R 데이터셋의 일부 데이터 가져오기

R의 lapply, sapply, vapply를 이해하자~

R의 apply, tapply의 활용법을 알아보자~

R의 split 활용

R의 함수 작성 및 활용~

R 시뮬레이션 - 랜덤 변수 샘플링

R 함수에서 캐시 활용하기~

R 디버깅 툴 활용하기~


신고



Trackback 0 And Comment 0

아파치 로그를 쉽게 필터링 할 수 있는 프로그램 cronolog~

|



아파치 로그를 분석하는 awstats에 대해서는 지난번에 블로깅을 한 적이 있습니다. 
2011/08/20 - [프로그래밍/리눅스] - 웹로그 분석 프로그램 AWStats 활용 

그런데 최근 로그 파일을 분석하려고 해보니 2달 정도 쌓이 로그가 6G 정도 되더라구요. 
(월별로 쌓도록 구성했어야 했는데.. 설정을 변경해야 겠네요. ㅠㅠ)
awstats가 분석하다가 결국 out of memory라는 말을 남기고 그대로 종료해 버렸습니다. 

그래서 로그 파일을 분할하는 프로그램을 찾아봤는데요. 
cronolog(http://cronolog.org/)라고 하는 프로그램이 있더군요. 


원래는 아파치 로그가 쌓일때 월별, 날짜별로 저장하도록 필터를 쉽게 설정할 수 있는 프로그램이라고 합니다.
그런데 여기 실행파일을 보면 cronosplit 이라는 파일이 있습니다. 
바로 이 파일을 활용해서 지정된 형태로 기존 파일을 분할 할 수 있었습니다.

그럼 cronolog의 설치와 사용에 대해서 살펴보도록 하죠.
wget을 이용해서 소스 파일을 받습니다. (아 우분투에서 테스트했습니다.)

> wget http://cronolog.org/download/cronolog-1.6.2.tar.gz 

압축을 풀고 소유권을 조정한 후 /usr/local 폴더로 옮겼습니다.

> tar xvfpz cronolog-1.6.2.tar.gz
> chown -R root:root cronolog-1.6.2/
> cp -R cronolog-1.6.2/ /usr/local/

이제 컴파일을 진행했습니다.

> cd /usr/local/cronolog-1.6.2
> ./configure
> make && make install 
 
컴파일 후 살펴보니 cronosplit 프로그램은 src 폴더에 있었네요. 
파일에 실행 권한이 없어서 실행 권한을 부여했습니다. 

> cd /etc/usr/local/cronolog-1.6.2/src
> chmod 755 ./cronosplit 

자 이제 파일 분할을 시작해 보겠습니다.
template를 통해서 파일 분할해서 저장할 형태를 지정할 수 있는데요.
첫번째는 일별로, 두번째는 월별로 저장하는 겁니다. 

> ./cronosplit access_log --template=%Y%m%d_access_log
> ./cronosplit access_log --template=%Y%m_access_log 
 
신고



Trackback 0 And Comment 0
prev | 1 | next