본문 바로가기

자기계발/대외활동

[공공빅데이터 청년인턴십] [day12 - 07.20(화)] Q-GIS 공간분석 실습기초(2)

 R로 배우는 데이터분석 이해(탐색적분석)

 Q-GIS 공간분석 실습기초(2)

 

오늘 강의 역시 위와 같이 총 2개의 파트로 구성되는데, 

처음에는 R을 활용해 탐색적 분석에 대해 학습하고 

그 다음에 어제의 QGIS 공간분석 sw tool을 활용하는 실습시간을 갖는다. 

 


 

 R로 배우는 데이터분석 이해(탐색적분석)

 

데이터 분석 유형

Descriptive Analysis(기술통계)

- 주어진 데이터를 요약/집계하여 결과를 도출

- 과거의 데이터의 단순 계산/집계 fact

- 분석 결과를 따로 해석하는 과정 거치지 않음

 

Exploratory Analysis(탐색적분석)

- 여러 변수 간 trend, 패턴, 관계를 찾는 것

- 통계적 기법을 사용한 모델링이라기보다는 그래프, 주로 plot 을 통한 사실 확인이 주된 작업

- 주로 데이터 분석 프로젝트 초기에 가설을 수립하기 위해 사용

 

Interferential Analysis(추론적 통계분석)

- 샘플-모집단 간의 관계를 탐구하는 것이 분석 유형의 목적

- 샘플에서 얻어낸 정보가 모집단에도 적용될 수 있는지를 검토하는 것

- 예) 95%의 확률로 모집단의 평균 점수는 80~85점 사이라고 말할 수 있다

- 예) 그룹 A의 성적이 그룹 B보다 유의미하게 높았다는 식의 결론이 inferential analaysis의 결과

Predictive Analysis(예측 분석)

- 머신러닝, 의사결정나무 등 다양한 통계적 기법을 사용하여 미래 혹은 발생하지 않은 어떤 사건에 대한 예측이 주요 목표

- "왜"보다는 "정확한 예측을 하는 것"이 주요 관심

- 특정한 설명 변수가 어떤 매커니즘으로 목표 변수에 영향을 미치는 가에 대한 설명력은 약하다

 

 

☞ 더 알아보기

http://www.dodomira.com/2016/01/12/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D%EC%9D%98-%EC%9C%A0%ED%98%95/

 

데이터 분석의 유형 6가지 - 목적에 따라 달라지는 분석 방법 - DODOMIRA

데이터 분석의 첫 단계는 “문제 정의”이다. 데이터 분석을 시작하기 전 단계에서 분석을 통해 알고 싶은 것이 “무엇”인지를 구체적으로 명확히 정의하지 않으면 “어떻게” 분석해야 할 지

www.dodomira.com

 

 

탐색적 자료 분석

존 튜키라는 통계학자가 창안한 것으로 가설 검정 등에 치우친 기존 통계학을 보완한 방법론

- 평균, 중앙값, 분산, 표준편차, 사분위수 등의 기초 통계량을 활용하거나 그래프를 통한 시각화를 활용

- 방대한 양의 데이터를 한눈에 볼 수 있도록 도표나 그래프로 시각화하면 즉각적인 상황 판단에 유리하고, 데이터를 기억하기 쉬우며, 사람들로부터 흥미를 유발시킴

 

신뢰성 있는 데이터 분석 수행 방법

- 선입견 없이 객관적으로 진행되고 있는지 주의함

- 분석 목표 수립 : 가설 수립, 트랜드 파악, 변수 간의 관계 파악

- 데이터 분석 전, 데이터 제공처와 수집 과정의 신뢰성 체크

 

 

데이터 대표값 탐색

데이터 요약을 통해 데이터의 특징, 데이터 간 차이를 파악할 수 있으며, 대부분의 값이 어디쯤 위치하는 지 추정할 수 있음

 

- mean()함수로 평균, median()함수로 중앙값을 구할 수 있다.

- 최소값, 최대값을 각각 min()함수, max()함수로 구할 수 있다.

A_salary <- c(25,28,50,60,30,35,40,70,40,70,40,100,30,30) #백만원 단위
B_salary <- c(20,40,25,25,35,25,20,10,55,65,100,100,150,300)

#####################
#평균
#####################
mean(A_salary)

mean(B_salary)

#결측값(NA)이 있는 경우 결측값을 제거하고
#평균을 구할 때는 na.rm = T 인자를 사용
mean(A_salary, na.rm = T)


#####################
#중앙값
#####################
median(A_salary)

median(B_salary)

median(A_salary, na.rm = T)


#평균만으로는 대표값으로 충분하지 않은 경우가 많음
# 위의 예시에서 중앙값보다 평균이 높은 이유는
# 몇몇 직원이 월등히 높은 월급을 받고 있어서 
# 평균이 높아져버림


#####################
#절사평균
#####################
# 데이터 요약을 통해서 데이터의 특징, 
# 데이터 간 차이를 파악할 수 있으며,
# 대부분의 값이 어디쯤 위치하는 지 추정
# - 이상값에 민감한 평균의 특징을 보완한 것

mean(A_salary, trim = 0.1) # 양 끝 10%씩 값을 제외하고 평균 구함
mean(B_salary, trim = 0.1) # 양 끝 10%씩 값을 제외하고 평균 구함


#####################
#가중평균
#####################
# 여러 모집단의 샘플이 똑같이 수집되지 않는 경우가 많음
# 이를 보정하기 위한 방법 -> 데이터가 부족한 그룹에 더 높은 가중치 적용

* 가중평균 식

 

 

데이터 분산도 탐색

최소값, 최대값으로 범위 탐색

분산도 (degree of dispersion)

- 관측된 데이터가 흩어져 있는 정도

- 범위, 분산, 표준편차 등

 

범위 (range)

- 관측된 값들 중에서의 최대값과 최소값의 차이로 분산도를 측정하는 간단한 방법

- 이해가 쉽고 계산도 편리하지만 두 극단적인 수치의 차이만 나타냄

- 극단적인 수치들 사이에서의 분포 양상은 설명하지 못함

 

#####################
#범위
#####################

# A기업과 B기업의 연봉 범위
range(A_salary) #최소값 25 최대값 100
range(B_salary) #최소값 10 최대값 300

# 최소값, 최대값 구하기
min(A_salary)
max(A_salary)

min(B_salary)
max(B_salary)

# B기업의 최소값, 최대값의 범위가 더 넒음
# 극단값만 차이가 나는 것일수도 있음


#####################
# 분산과 표준편차
# - 객관적인 편차 확인 위해 분산과 표준편차를 구해봐야 함
#####################

# 분산
var(A_salary)
var(B_salary)

# 표준편차
sd(A_salary)
sd(B_salary)

 

 

데이터 분포 탐색

백분위수와 사분위수

백분위수 : 데이터를 정렬한 후, 특정 퍼센트 지점의 수

- 최소값 : 0% 지점의 수

- 최대값 : 100% 지점의 수

- 중앙값 : 50% 지점의 수

 

백분위수 - quantile()

상위 10% 해당되는 지점의 두 회사의 연봉이 궁금하다면 90% 지점의 백분위수 구하기

 

사분위수 : 백분위수 중 0%, 25%, 50%, 75%, 100% 지점의 수

 

상자그림 Boxplot

전체 관측값 범위와 사분위수, 그리고 이상값까지 시각적으로 확인해볼 수 있는 그래프

 

히스토그램

연속형 수치 데이터의 경우 사용한다. 막대와 막대 사이를 붙여서 그린다.

- 구간별 값의 분포 시각화, 데이터가 연속형 수치 데이터인 경우 데이터의 분포를 시각화하기에 좋은 그래프

- hist() : breaks 매개인자의 숫자만큼 구간을 나누어 x축에 배치하고, 그 구간의 데이터 개수를 y축의 막대 길이로 표현

 

막대그래프

이산형 수치 데이터나 범주형 데이터의 경우 사용한다. 막대와 막대 사이를 떨어뜨려 표현한다.

 

막대그래프 vs 히스토그램 비교

 

도수분포표

수집된 변수의 데이터를 범주 또는 동일한 크기의 구간으로 분류하고 각 구간마다 몇 개의 데이터가 존재하는지를 정리한 표로 많은 데이터를 알기 쉽게 정리하는 통계적인 방법 중의 하나

 

- 데이터 특성을 요약하고 정리하는 기술 통계학에서 가장 기본적인 역학

- 수치 데이터 → 도수 분포표 생성 시 cut()함수

- 범주형 데이터 → 도수 분포표 생성 시 table()함수

- 상대적 빈도표 - prop.table()
: 한 범주에 속하는 빈도가 전체 관찰 수에 비하여 어느 정도의 비중을 차지하고 있는가를 알아봄. 상대적인 빈도가 유용한 경우 

 

###########################
#데이터 분포 탐색
###########################

### 백분위수와 사분위수
A_salary <- c(25,28,50,60,30,35,40,70,40,70,40,100,30,30) #백만원 단위
B_salary <- c(20,40,25,25,35,25,20,10,55,65,100,100,150,300)


# 90% 백분위수
quantile(A_salary, 0.9)
quantile(B_salary, 0.9)

# 사분위수
quantile(A_salary)
quantile(B_salary)


### 상자그림 boxplot()
# A 기업과 B기업 연봉 데이터를 상자그림으로 비교
boxplot(A_salary, B_salary, names = c("A회사 샐러리", "B회사 샐러리"))


### 히스토그램 hist()
hist(A_salary, xlab = "A사 salary", ylab = "인원수", breaks = 5)
hist(B_salary, xlab = "B사 salary", ylab = "인원수", breaks = 5)


### 도수분포표 cut()
# A_salary 변수의 데이터를 5구간으로 나눈 후 도수분포표를 생성하는 예
cut_value <- cut(A_salary, breaks = 5)
freq <- table(cut_value)
freq

# 회사별 남녀의 도수분포표 생성 예
A_gender <- as.factor(c('남','남','남','남','남','남','남','남','남','여','여','여','여','여'))
B_gender <- as.factor(c('남','남','남','남','여','여','여','여','여','여','여','남','여','여'))

A <- data.frame(gender <- A_gender, 
                salary <- A_salary)
B <- data.frame(gender <- B_gender, 
                salary <- B_salary)

# 도수 분포표 생성
freqA <- table(A$gender)
freqA
freqB <- table(B$gender)
freqB

### 상대적 빈도표 - prop.table()
# A사의 남녀 도수분포표를 구해 저장한 freqA를 이용
prop.table(freqA) #64.28% 남자,  35.71% 여자

# B사의 남녀 도수분포표를 구해 저장한 freqB를 이용
prop.table(freqB) #64.28% 여자,  35.71% 남자



### 막대그래프 - barplot() 
# 범주형 데이터나 이산형 수치데이터의 도수분포표

# A사의 남녀 도수분포표를 구해 저장한 freqA를 이용
barplot(freqA, names = c("남", "녀"), col=c("skyblue","pink"), ylim = c(0,10))
title(main="A사")
# B사의 남녀 도수분포표를 구해 저장한 freqB를 이용
barplot(freqB, names = c("남", "녀"), col=c("skyblue","pink"), ylim = c(0,10))
title(main="B사")


### 파이그래프 - pie()
# 분포의 시각화를 위해 사용
# 범주가 몇 개 되지 않고,
# 차이가 확연한 경우 사용
pie(x=freqA, col=c("skyblue","pink"),main="A사")
pie(x=freqB, col=c("skyblue","pink"),main="B사")

 

 

데이터 관계 탐색

산점도 그래프 Scatter plot

: 변수와 변수 간의 관계 시각화에 유용한 그래프. 데이터를 X축과 Y축에 점으로 표현

- 두 변수가 양의 선형적 상관관계를 가지고 있을 때 > 정비례

- 두 변수가 음의 선형적 상관관계를 가지고 있을 때 > 반비례

- 두 변수가 독립적일 때

plot() 함수로 표현

 

- pairs() 함수 : 여러가지 변수의 산점도 그래프를 한눈에 볼 수 있도록 작성

 

 

상관계수

변수 간의 관련성을(상관관계를) 수치로 계산

- 가장 많이 사용하는 계산법 : 피어슨 상관계수

- 피어슨 상관계수는 -1에서 1사이의 값을 가짐

- 피어슨 상관계수값이 1에 가까울수록 양의 상관관계

- 피어슨 상관계수값이 -1에 가까울수록 음의 상관관계

- 두 변수가 독립일 때 0에 가까운 수를 갖음

- cor()함수 사용

 

상관행렬 Correlation Matrix Heatmap

여러 변수 간의 상관계수 값으로 생성한 행렬

cor()함수 사용

 

 

상관행렬 히트맵

많은 변수로 상관행렬을 만들면 상관계수 값을 일일이 확인하기 어려운 경우

heatmap() 사용

 

 

 

 

 

 

 Q-GIS 공간분석 실습기초(2)

 

1. Q-GIS 소개 및 설치

2. Q-GIS를 활용한 벡터 데이터 편집1

3. Q-GIS를 활용한 벡터 데이터 편집2_포인트

4. Q-GIS를 활용한 벡터 데이터 편집3_라인

5. Q-GIS를 활용한 벡터 디엍 편집4_폴리곤

6. Q-GIS 고급 기능을 활용한 벡터 데이터 편집

7. Q-GIS를 활용한 데이터 검색

 

어제 Q-GIS 공간분석 실습기초(1)에서는 위의 내용을 공부했고,

오늘은 다음의 내용을 학습한다.

 

8. QGIS를 활용한 데이터 결합

9. 디지털 지도 제작 실습

10. 래스터 데이터 편집

11. 래스터 데이터 기반 지형 분석

12. 래스터 데이터 분류 실습

 

 

어제는 공간데이터 중 점,선,면으로 구성되는 벡터 데이터 활용 및 편집에 대해 공부했는데,

오늘은 픽셀 기반의 래스터 데이터 활용에 대해 알아본다.

  

 

8. QGIS를 활용한 데이터 결합

데이터 결합 이론

  • GIS에서 데이터 결합은 속성에 의한 결합(join) 공간에 의한 결합 (spatial join)으로 구분됨
  • 속성에 의한 결합은 GIS 데이터베이스 내에서 서로 다른 테이블을 하나의 테이블로 결합하는 과정을 의미하며, 서로 다른 테이블에서 존재하는 공통의 레코드를 조합하여 하나의 테이블로 결합
  • 공간에 의한 결합은 서로 다른 레이어의 공간 객체 특성(라인, 포인트, 폴리곤)과 위치관계(교차, 포함 등)를 이용하여 새로운 속성 값을 생성하는 과정을 의미한다.

 

☞ QGIS 실습 - 속성에 의한 결합

 

먼저 join을 수행할 CSV 파일을 불러온다.

 

레이어 > 레이어 추가 > 구분자로 분리된 텍스트 레이어 추가

 

파일 불러오기 > 인코딩 지정 > 파일 포맷 선택 > 도형 정의 선택 > 추가 버튼 클릭

 

혹은, 아래 그림과 같이 탐색기에서 레이어로 바로 드래그해서 불러올 수도 있다.

 

3개의 파일의 공통된 속성 필드를 파악 

: 모두 '동'을 나타내는 속성을 공통으로 갖고 있으나, 속성의 명칭이 모두 다름

 

기준 파일(공간 데이터) > 마우스 우클릭 > 속성 창

> 결합 탭 > 결합 레이어, 결합 필드, 대상 필드 지정 > 확인 버튼 클릭

 

실습예제에서,

기준 파일 : seoul_dong

결합 (대상) 레이어 : seoul_1gagu, seoul_totgagu

 

결합할 레이어를 모두 추가한 뒤 확인 버튼을 누르면 결합 완료

 

기준 파일(공간 데이터) > 마우스 우클릭 > 속성 테이블 열기

아래와 같이 데이터 결합이 완료된 테이블을 확인할 수 있다.

 

반드시 내보내기 해서 다른 객체로 저장해줄 것!

 

 

☞ QGIS 실습 - 공간에 의한 결합

서울시 구별 데이터(seoul_gu_2010.shp; 폴리곤)공공 도서관 데이터(seoul_library.shp; 포인트)를 활용하여 서울시 구별 공공 도서관 개수 확인하기(포함관계를 활용한 새로운 속성값 생성) 실습을 진행

 

우선 실습 대상 데이터 2개 (seoul_gu_2010.shp, seoul_library.shp) 레이어에 추가

 > 벡터(Vector) > 분석 도구 > 폴리곤이 포함하는 포인트 개수 계산 클릭

 

 

 

공간 join이 반영된 개수 라는 새로운 객체가 생성

(우클릭 > 속성테이블 열기 하면, NUMPOINTS라는 새로운 속성 칼럼이 생긴 걸 확인할 수 있다. )

 

아까와 마찬가지로 내보내기 (export) 해서 저장해줘야 join결과를 유지할 수 있다.

 

 

공간에 의한 결합 - 시각화

 

서울시 구별 도서관 개수 정보를 맵에 시각화하기 

대상 파일/데이터(개수) 마우스 우클릭 > 속성 > 라벨 탭 > 단일 라벨 

 

심볼 탭 > 단계구분 에서 도서관 갯수(NUMPOINTS)에 따라서 구의 색상을 달리 지정해줄 수도 있다.

 

 

 

9. 디지털 지도 제작 실습

속성 테이블 제작

 

아래와 같이 기존의 속성 정보(1인가구 수, 총가구 수)를 활용하여 새로운 속성(1인 가구비율)을 만들어낼 수 있다.

(대상 객체 우클릭 > 속성테이블 열기 > 필드계산기 활용)

 

 

 

단계 구분 기능을 활용한 디지털 지도 제작

 

▼ 앞서 공부한대로 심볼 탭 > 단계구분 에서 기준값 (면적, 1인가구비율 등)에 따른 분류를 지도에 표시

 

 

(디지털) 지도 구성 요소 추가

지도 구성 주요 요소

  • 지도 제목 title
  • 축적 scale
  • 범례 legend
  • 방위 north arrow
  • 그리드 grid 

 

1) 새 지도 레이아웃 생성

프로젝트 > 새 인쇄 조판 클릭 > 제목 입력하기

 

 

2) 지도추가 버튼 클릭 > 마우스 드래그를 통해 원래 작업중이던 지도 복사해올 수 있음

 

3) 라벨, 범례, 축적 등도 추가

 

▼  완성된 디지털 지도

 

 

도형 표현 기능 활용

파이차트, 텍스트 다이어그램, 누적막대, 히스토그램 등 원하는 도형 표현 기능을 선택하고 표현할 속성 정보(1인 가구, 총가구)를 선택, 동일한 과정을 적용하여 디지털 지도를 제작

 

 

 

▼  프로젝트 > 새 인쇄 조판 을 이용해 이전과 같은 방식으로 디지털 지도 생성

 

 

10. 래스터 데이터 편집

벡터 데이터를 래스터 데이터로 변환

 

 

 

▼  래스터 > 변환 > 래스터화 (벡터를 래스터로) 결과

 

※ 위의 래스터 변환이 작동하지 않는 경우가 있는데 (오류 발생), 그럴 때는 메뉴의 플러그인 > 플러그인 관리 및 설치 에서 'grass'를 검색, 관련 플러그인을 설치해준다. 

또는 폴더와 파일명을 모두 영문으로 변경하여, 경로에 한글이 포함되지 않게 변경한 다음, QGIS를 다시 시작해 볼수도 있다. 사실 나는 그냥 컴퓨터를 껐다 켜기만 했는데, 오류가 사라지고 래스터 변환 산출물이 제대로 생성되었다.   

 

 

 

 

 

 

 


(이 이후 강의내용에 대해서는 아직 정리중입니다.)

 

래스터 데이터 분류

 

래스터 데이터 자르기 : 범위

 

래스터 데이터 자르기 : 마스크 레이어

 

 

11. 래스터 데이터 기반 지형 분석

 

12. 래스터 데이터 분류 실습