QGIS 기반 공간통계

샘플 프로그램 분석

앞의 예제에서 우리는 어떤 지역별 자료를 가져와 이에 대한 Moran’s I 계수를 산출하고, 기대값을 확인 한 후, 정규분포상의 계수를 확인해 보는 과정까지를 다 해 본 것이다. 이것이 Moran’s I 분석과정의 전부다.

이제 한 줄씩 의미를 파악해 보자.

 

>>> import pysal

파이썬에서 공간분석용 라이브러리인 PySAL을 쓸 수 있도록 가져오는(import) 명령이다. 이렇게 사용할 라이브러리를 가져오는 것은 필요한 라이브러리만 가져오는 것이 코딩시에도 실행시에도 효율적이기에, 파이썬 기본 명령을 제외한 것들은 사용자가 이처럼 import 해 주어야 사용이 가능하다.

만일 이 명령에서 오류가 생긴다면 pysal이 정상적으로 설치되지 않은 것이니 개발환경구성 강의를 참조하여 다시 설치해 보시기 바란다.

 

>>> import numpy as np
이 명령은 PySAL이 사용하는 자료구조를 담고 있는 NumPy라는 라이브러리를 가져오는 것이다. 앞의 PySAL의 경우와는 조금 다른 것이 as np 라는 명령이 추가되어 NumPy를 짧게 줄여 np라는 이름으로 부를 수 있게 가져오고 있다.

 

>>> w = pysal.open(pysal.examples.get_path("stl.gal")).read()
이 명령에서는 stl.gal 이라는 샘플 파일의 경로를 알아내(pysal.examples.get_path()), 이 파일을 열어(pysal.open()), 읽은 후(.read()), rm 내용을 w(weight metrix의 약자)라는 변수에 저장했다.

weight metrix라는 것은 공간가중치행렬인데 두 지역이 인접해 있는 지를 기술하는 행렬로, 보통 i 번째 지역과 j 번째 지역이 인접해 있으면 행렬의 i,j 번째 항목이 1, 인접하지 않으면 0이 된다.

stl.gal 파일을 열어보면 다음에서 보듯이 첫 줄에 전체 지역수(73)이 있고, 둘째 줄에는 첫번째 지역의 구분자(1)과 인접지역 수(3)이 있고, 세번째 줄에 1번 지역과 인접한 지역의 구분자 3개(7 3 6)이 기술되어 있고, 네번째 줄에 다시 두번째 지역의 구분자(2)와 인접지역의 수(3), 다섯번째 줄에 2번 지역과 인접지역의 구분자 3개가 나오는 식으로 구성되어 있다.

PySAL이 이렇게 지역들간의 인접관계가 기술된 gal 파일을 일거 Weight Metrix를 만들어 주는 명령인 것이다.

파이썬 콘솔에서 w.full() 이라는 명령을 입력해보면 다음처럼 Weight Metrix를 대략적으로 확인해 볼 수 있다.

array 항목의 첫 줄에서 3번째 항목이 1이고 앞의 2개는 0임을 확인할 수 있다. 즉 1번 지역과 1번지역은 인접해 있지 않고(같은 지역임으로), 2번지역도 인접해 있지 않고, 3번째 지역은 인접해 있는 것으로 공간가중치가 부여된 것이다.

 

>>> f = pysal.open(pysal.examples.get_path("stl_hom.txt"))
이 명령은 예제에 있는 stl_hom.txt 파일을 열어(pysal.examples.get_path(“stl_hom.txt”)) f(File의 약자)라는 변수에 저장하는 명령이다.

stl_hom.txt 파일을 열어보면 다음과 같다.

첫 줄에는 자료의 개수(78)와 컬럼수(4)가 기술되어 있고, 두 번째 줄에는 컬럼들의 이름이 있으며, 세 번째  줄부터는 각 지역별 자료가 컬럼순으로 들어있다.

 

>>> y = np.array(f.by_col['HR8893'])
이 명령은 데이터 파일에서 ‘HR8893’이라는 컬럼을 읽어서(f.by_col[‘HR8893’])), 이를 NumPy의 Array 구조로 싸서(mp.array()), y라는 변수에 저장하는 명령이다. y라는 변수는 함수를 기술할때 y=f(x) 처럼 쓰는 경우의 y와 동일한 의미로, 종속변수를 의미한다.

NumPy의 Array는 파이썬의 기본 어레이보다 더 큰 자료를 빠르고 유연하게 다룰 수 있게되어 있어 PySAL등 통계나 과학계산을 하는 파이썬 라이브러리 들에서 흔히 기본자료형으로 사용되고 있다.

 

>>> mi = pysal.esda.moran.Moran(y,  w)
이제 드디어 Moran’s I를 계산하는 명령이 나왔다.  pysal.esda.moran.Moran 이 Moran’s I를 계산하는 함수이고, 사건의 결과물인 y(사건의 종속변수)와 w(공간가중치행렬)을 계산에 사용하는 인자로 받는다.

PySAL에는 공간분석을 위한 많은 기능들이 있는데 이 중 ESDA(Exploratory Spatial Data Analysys, 탐색적 공간자료 분석) 패키지가 있고, 이 중 Moran이라는 패키지가 있는데, 이 Moran 패키지의 Moran이라는 함수를 이용해 Moran’s I 계수를 계산하고 있는 것이다. 계산된 결과는 Moran’s I 계수뿐 아니라 기대값, 분산, 표준정규분포계수, 유의수준확률값 등 여러 값들이 객체형태로 반환되고, 이 결과를 mi(Moran’s I의 약자)라는 변수에 저장한 것이다.

 

>>> "%7.5f" % mi.I
'0.24366'
이 명령으로 Moran 결과 객체의 Moran’s I 계수(mi.I)를 확인해 보는 것이다. 앞에 있는 “%7.5f”는 값을 정수부 7자리, 소수부 5자리의 실수로 보여달라는 형식 지정자이고, 중간의 % 표시는 앞의 형식지정자(Formater)에 뒤의 변수를 전달하는 파이썬 문법이다.

 

>>> mi.EI
-0.012987012987012988

이 명령은 만약 자료의 공간적 특성이 랜덤인 경우의 Moran’s I 계수의 기대값을 확인해 보는 명령이다. 파이썬에서는 이렇게 형식지정자가 없어도 쉽게 값을 보여줄 수 있다.


>>> mi.p_norm
0.00027147862770937614
이 명령은 표준정규분포의 계수를 유의수준 확률값으로 바꾼 값을 확인해 보는 명령이다. 이 값을 보면 지금 분석한 자료가 무엇인지는 모르지만 이 자료가 공간적자기상관을 가진다는 것을 0.027% 유의수준에서 확률적으로 확신할 수 있음을 알 수 있다.

댓글

댓글 본문
버전 관리
BJ Jang
현재 버전
선택 버전
graphittie 자세히 보기