중요

번역은 여러분이 참여할 수 있는 커뮤니티 활동입니다. 이 페이지는 현재 100.00% 번역되었습니다.

17.33. 공간 처리에 R 스크립트 사용하기

이 수업은 Scuola Superiore Sant’Anna 의 후원으로 마테오 게타(Matteo Ghetta)가 기고했습니다.

공간 처리 프레임워크의 (그리고 Processing R Provider 플러그인의) 도움으로, QGIS에서 R 스크립트를 작성하고 실행할 수 있습니다.

경고

여러분의 컴퓨터에 R가 설치되어 있어야 하고, PATH도 정확하게 설정되어 있어야 합니다. 게다가 공간 처리 프레임워크는 단지 외부 R 패키지들을 호출만 할 뿐이기 때문에, 공간 처리 프레임워크가 이 패키지들을 설치할 수는 없습니다. 따라서 R에 이 외부 패키지들을 직접 설치해줘야 합니다. 사용자 지침서에 있는 R 스크립트 생성하기 를 참조하세요.

참고

패키지 관련 문제가 발생하는 경우, 공간 처리 프레임워크가 요구하는, 예를 들어 sp, rgdalraster 같은 필수 패키지들이 누락되었기 때문일 수도 있습니다.

17.33.1. 스크립트 추가하기

스크립트를 추가하는 일은 간단합니다. 가장 쉬운 방법은 공간 처리 툴박스를 열고 (R 아이콘이 붙은) R 메뉴에서 Create new R script… 를 선택하는 것입니다. 아니면 예를 들어 텍스트 편집기에서 스크립트를 생성한 다음 R 스크립트 폴더(processing/rscripts)에 저장해도 됩니다. 이 폴더에 스크립트를 저장하면, 공간 처리 툴박스에서 해당 스크립트의 이름을 오른쪽 클릭하고 Edit Script… 를 선택해서 편집할 수 있게 됩니다.

../../../_images/r_intro_1.png

참고

공간 처리에서 R가 안 보일 경우, Processing ► Options ► Providers 메뉴에서 활성화시켜야 합니다.

스크립트 편집기 창 이 열리는데, 여기에 스크립트 본문을 추가하기 전에 몇몇 파라미터들을 지정해줘야 합니다.

../../../_images/r_intro_2.png

17.33.2. 그래프 생성하기

이번 예제에서 벡터 레이어 필드의 상자 수염 그림(boxplot) 을 생성할 것입니다.

exercise_data/processing/r_intro/ 폴더에 있는 r_intro.qgs QGIS 프로젝트를 여십시오.

스크립트 파라미터

편집기를 실행해서 스크립트 처음부터 입력하십시오.

스크립트 자체를 입력하기 전에 몇몇 파라미터들을 지정 해야만 합니다:

  1. 여러분의 스크립트가 들어가야 할 그룹의 이름 (이 경우엔 ‘plots’) (해당 그룹이 존재하지 않는 경우 생성할 것입니다):

    ##plots=group
    

    공간 처리 툴박스에 있는 plots R 그룹에서 여러분의 스크립트를 찾을 수 있을 것입니다.

  2. (이 예제에서는) 공간 처리 프레임워크에 그래프를 표출하고 싶다고 말해주어야 합니다:

    ##showplots
    

    그러면 결과물 뷰어(Result Viewer) 패널에 있는 그래프를 가리키는 링크를 찾을 수 있을 것입니다. (이 패널은 View ► Panels 메뉴에서 그리고 Processing ► Results Viewer 메뉴로 켜고끌 수 있습니다.)

  3. 공간 처리 프레임워크에 여러분의 입력 데이터에 대해서도 말해주어야 합니다. 이 예제에서는 벡터 레이어의 필드 하나로부터 그래프를 생성하고자 합니다:

    ##Layer=vector
    

    공간 처리 프레임워크가 이제 입력물이 벡터라는 사실을 알았습니다. ‘Layer’라는 이름은 중요하지 않습니다. 중요한 것은 vector 파라미터입니다.

  4. 마지막으로, 벡터 레이어의 입력 필드를 (앞에서 입력한 ‘Layer’라는 이름을 사용해서) 지정해줘야 합니다:

    ##X=Field Layer
    

    공간 처리 프레임워크가 이제 ‘Layer’의 필드 하나가 필요하다는 사실과, 해당 필드의 이름이 X 라는 사실을 알게 되었습니다.

  5. name 파라미터를 사용해서 여러분의 스크립트의 이름을 정의할 수도 있습니다:

    ##My box plot script=name
    

    정의하지 않는 경우, 파일 이름을 스크립트 이름으로 사용할 것입니다.

스크립트 본문

이제 스크립트의 *머리말(heading)*를 설정했으니, 함수를 추가할 수 있습니다:

boxplot(Layer[[X]])

boxplot 은 R 함수의 이름이고, Layer 파라미터는 입력 데이터셋에 대해 정의한 이름이며, X 는 해당 데이터셋의 필드에 대해 정의한 이름입니다.

경고

X 파라미터는 이중 대괄호([[]])로 감싸야 합니다.

최종 스크립트는 다음과 같이 보일 것입니다:

##Vector processing=group
##showplots
##Layer=vector
##X=Field Layer
boxplot(Layer[[X]])
../../../_images/r_intro_3.png

공간 처리 프레임워크가 제안하는 기본 경로(processing/rscripts)에 스크립트를 저장하십시오. 스크립트 머리말에 name 을 정의하지 않았다면, 공간 처리 툴박스에 여러분이 선택한 파일 이름이 스크립트 이름으로 나타날 것입니다.

참고

원하는 위치 어디에라도 스크립트를 저장할 수 있지만, 그러면 공간 처리 프레임워크가 공간 처리 툴박스에 해당 스크립트를 자동으로 포함시키지 못 할 것입니다. 즉 여러분이 직접 업로드해줘야 합니다.

이제 편집기 창 최상단에 있는 버튼을 클릭해서 스크립트를 실행해보십시오:

../../../_images/r_intro_4.png

편집기 창이 닫히고나면, 공간 처리 프레임워크의 텍스트란을 사용해서 여러분의 스크립트를 찾아보십시오:

../../../_images/r_intro_5.png

이제 공간 처리 알고리즘 창에서 요구하는 파라미터들을 채울 수 있습니다:

  • Layersample_points 를 선택하십시오.

  • X 필드에 value 를 선택하십시오.

Run 버튼을 클릭하십시오.

../../../_images/r_intro_6.png

결과물 뷰어 가 자동으로 열릴 텐데, 열리지 않을 경우 Processing ► Result Viewer… 메뉴 항목을 클릭하면 됩니다.

뷰어에 있는 링크를 클릭하면 다음을 보게 될 것입니다:

../../../_images/r_intro_7.png

참고

그래프를 오른쪽 클릭하면 이미지를 열고, 복사하고, 저장할 수 있습니다.

17.33.3. 벡터 생성하기

벡터 레이어를 생성해서 QGIS에 자동으로 불러올 수도 있습니다.

다음 예시는 온라인 R 스크립트 모음에서 찾을 수 있는 Random sampling grid 스크립트로부터 발췌한 것입니다. (https://github.com/qgis/QGIS-Processing/tree/master/rscripts 에서 이 온라인 스크립트 모음을 찾을 수 있습니다.)

이 예시의 목적은 sp 패키지의 spsample 함수를 사용해서, 입력 벡터 레이어의 범위로 제한된 랜덤한 포인트 벡터 레이어를 생성하는 것입니다.

스크립트 파라미터

이전과 마찬가지로 스크립트 본문을 입력하기 전에 몇몇 파라미터들을 설정해줘야 합니다:

  1. 여러분의 스크립트가 들어가야 할 그룹 이름을 지정하십시오. 이 경우 ‘Point pattern analysis’입니다:

    ##Point pattern analysis=group
    
  2. 랜덤한 포인트들의 배치를 제한하게 될 입력 파라미터(벡터 레이어)를 정의하십시오:

    ##Layer=vector
    
  3. 생성될 포인트들의 개수에 대한 입력 파라미터를 (기본값이 10Size 를) 설정하십시오:

    ##Size=number 10
    

    참고

    기본값(10)을 정의했기 때문에, 사용자가 이 숫자를 변경할 수도 있고, 또는 파라미터에 숫자를 지정하지 않아도 됩니다.

  4. (Output 이라는) 산출 벡터 레이어를 지정하십시오:

    ##Output=output vector
    

스크립트 본문

이제 함수 본문을 추가할 수 있습니다:

  1. spsample 함수를 사용하십시오:

    pts=spsample(Layer, Size, type="random")
    

    이 함수는 포인트들의 배치를 제한하기 위해 Layer 를 사용합니다. (해당 레이어가 라인 레이어인 경우, 포인트들이 레이어에 있는 라인 상에 생성되어야 하며, 폴리곤 레이어인 경우 포인트들이 폴리곤 내부에 생성되어야 합니다.) 생성될 포인트 개수는 Size 파라미터에서 가져옵니다. 샘플링 메소드는 random 입니다.

  2. 산출물을 (Output 파라미터를) 작성하십시오:

    Output=SpatialPointsDataFrame(pts, as.data.frame(pts))
    

최종 스크립트는 다음과 같이 보일 것입니다:

##Point pattern analysis=group
##Layer=vector
##Size=number 10
##Output=output vector
pts=spsample(Layer, Size, type="random")
Output=SpatialPointsDataFrame(pts, as.data.frame(pts))
../../../_images/r_intro_8.png

스크립트를 저장한 다음 실행 버튼을 눌러 실행하십시오.

새 창에서 파라미터들을 올바르게 입력하십시오:

../../../_images/r_intro_9.png

Run 버튼을 클릭합니다.

산출 레이어가 목차에 추가되고 그 포인트들이 맵 캔버스에 보일 것입니다:

../../../_images/r_intro_10.png

17.33.4. R의 텍스트 및 그래프 산출물 - 문법

공간 처리 프레임워크는 (Processing R Provider plugin 을 통해) R로부터 결과물을 얻기 위해 특수 문법을 사용합니다:

  • 명령어 앞에 >lillie.test(Layer[[Field]]) 처럼 > 를 삽입하는 것은 결과물을 R 산출물(결과물 뷰어)로 보내야 한다는 의미입니다.

  • ‘plot’ 뒤에 + 를 삽입하면 그래프들을 중첩시킬 수 있습니다. plot(Layer[[X]], Layer[[Y]]) + abline(h=mean(Layer[[X]])) 처럼 말이죠.