본문 바로가기
데이터 분석

서울 생활이동 데이터 분석 (3) - QGIS

by 너굴맨_ 2021. 11. 17.

QGIS를 활용하여  많은 사람들이 많이 방문하는 지역에 대해 시각적으로 확인해보자.

QGIS에서 시군구 코드를 사용해야 함으로 원래 데이터를 활용하여 진행하자

 

사용되는 데이터 목록

- 서울시 생활이동 데이터

- QGIS 코드

QGIS가 사용하는 행정구역 코드와 서울시의 시군구 코드가 일치하지 않아 QGIS에 맞게 수정함

 

시각화 결과

1. 출발지 이동인궁에 대한  시각화

결론

출발지에 대한 인구이동에 대한 시각표로 총 7개의 범주로 분류하였고 색상이 짙을 수록 이동인구가 많은 지역이며 강남, 송파, 서초 이 3개의 구가 특히 이동인원이 많은 지역임을 알 수 있음

 

2. 도착지 이동인구에 대한 시각화

결론

도착지에 대한 인구이동에 대한 시각표로 출발지와 동일한 상황에 대한 옵션을 적용. 출발지와 비교하면 좀더 퍼져있다는 느낌을 받을 수 있다. 퇴근 후나 출발지에 비해 좀 더 자유롭다는 느낌이 든다. 값 자체로 따지면 여전히 서초, 강남, 송파에 몰려있는 형태이다.

 

 위 서울 생활이동  데이터의 생활이동은 출발지 혹은 도착지가 서울인 (출발지와 도착지 모두 서울인 경우 포함) 이동만을 집계한 내용으로 경기도 xx시 -> 경기도 xx시의 이동에 대한 정보는 포함되지 않았습니다. 따라서 위 시각자료를 볼 때 이 점 유의하시기 바랍니다.

 

<코드>

## import module
import numpy as np
import pandas as pd
import re

## 서울 생활이동 데이터 분석 (1)의 자료를 업로드
origin_data = pd.read_csv("C:\\Users\\USER\\Desktop\\Project\\Proceed\\Seoul_population_movement\\origin_sep_movement.csv", encoding='utf-8')
gu_code = pd.read_excel("C:\\Users\\USER\\Desktop\\Project\\Proceed\\Seoul_population_movement\\replace_code.xlsx")

departure_data = origin_data['출발 시군구 코드'].value_counts()
departure_data = pd.DataFrame(departure_data)
departure_data.reset_index(inplace = True)
departure_data['지역 이름'] = departure_data['index']
departure_data.columns = ['지역구 코드','인원(출발지)','지역']

## 코드를 이용해 지역명으로 변환
for i in range(0,len(gu_code)):
    departure_data['지역'] = departure_data['지역'].replace(gu_code['시군구'][i], gu_code['full name'][i])
    
## QGIS에 사용할 수 있도록 저장
departure_data.to_csv("C:\\Users\\USER\\Desktop\\Project\\Proceed\\Seoul_population_movement\\departure_sep.csv", encoding='utf-8', index=False)

위 코드에서 문제가 발생

QGIS의 행정구역 코드와 서울시 시군구 코드와 매칭이 되지 않는 문제가 발생하여 서울시 시군구 코드를 행정구역 코드에 맞춰 변경

qgis_code = pd.read_excel("C:\\Users\\USER\\Desktop\\Project\\Proceed\\Seoul_population_movement\\QGIS_code.xlsx")

### 출발지에 대한 시각화
mod_departure = origin_data['출발 시군구 코드'].value_counts()
mod_departure = pd.DataFrame(mod_departure)
mod_departure.reset_index(inplace = True)

mod_departure['지역 이름'] = mod_departure['index']
mod_departure['수정된 지역구 코드'] = mod_departure['index']
mod_departure.columns = ['지역구 코드','인원(출발지)','지역', '수정된 지역구 코드']

## 변경된 QGIS 코드를 이용해 지역명과 변경된 코드로 변경
for i in range(len(qgis_code)):
    mod_departure['지역'] = mod_departure['지역'].replace(qgis_code['시군구'][i], qgis_code['full name'][i])
    mod_departure['수정된 지역구 코드'] = mod_departure['수정된 지역구 코드'].replace(qgis_code['시군구'][i], qgis_code['변경된 시군구'][i])
    
## QGIS 상황에 맞게 순서 및 칼럼 선택 후 저장하기
mod_departure = mod_departure[['수정된 지역구 코드', '지역', '인원(출발지)']]

mod_departure.to_csv("C:\\Users\\USER\\Desktop\\Project\\Proceed\\Seoul_population_movement\\departure_sep_qgis.csv", encoding='utf-8', index=False)

또 다른 문제가 발생

 

QGIS를 사용하여 확인하는 도중 몇몇 구가 빠져있는 이유를 확인하였고 문제를 파악하던 중 지역구 코드 수정 과정 중에 중복되어 입력되어 있는 것을 확인함. 코드를 살펴봤지만 어떤 부분이 문제인지 찾지 못하여 위의 csv에서 이를 수정함

수정한 목록 : 서울시 종로구, 서울시 중구, 서울시 용산구, 서울시 동대문구, 서울시 성동구

 

## 위의 수정한 엑셀이 인코딩 문제로 한글이 깨짐 -> 주피터에서 불러오고 다시 저장하는 방식 차용
temp = pd.read_csv("C:\\Users\\USER\\Desktop\\Project\\Proceed\\Seoul_population_movement\\sep_departure_GIS.csv", encoding='cp949')
temp.to_csv("C:\\Users\\USER\\Desktop\\Project\\Proceed\\Seoul_population_movement\\202109_departure.csv", encoding='utf-8', index=False)
### 도착지에 관한 시각화
mod_arrive = origin_data['도착 시군구 코드'].value_counts()
mod_arrive = pd.DataFrame(mod_arrive)
mod_arrive.reset_index(inplace = True)

mod_arrive['지역 이름'] = mod_arrive['index']
mod_arrive['수정된 지역구 코드'] = mod_arrive['index']
mod_arrive.columns = ['지역구 코드','인원(도착지)','지역', '수정된 지역구 코드']

## 변경된 QGIS 코드를 이용해 지역명과 변경된 코드로 변경
for i in range(len(qgis_code)):
    mod_arrive['지역'] = mod_arrive['지역'].replace(qgis_code['시군구'][i], qgis_code['full name'][i])
    mod_arrive['수정된 지역구 코드'] = mod_arrive['수정된 지역구 코드'].replace(qgis_code['시군구'][i], qgis_code['변경된 시군구'][i])
    
# QGIS 상황에 맞게 순서 및 칼럼 선택 후 저장하기
mod_arrive = mod_arrive[['수정된 지역구 코드', '지역', '인원(도착지)']]

mod_arrive.to_csv("C:\\Users\\USER\\Desktop\\Project\\Proceed\\Seoul_population_movement\\arrive_sep_qgis.csv", encoding='utf-8', index=False)

### 출발지의 문제점인 몇몇 구역의 코드가 제대로 변경되지 않는 문제 발견 -> csv 파일에서 직접 수정

## 위의 수정한 엑셀이 인코딩 문제로 한글이 깨짐 -> 주피터에서 불러오고 다시 저장하는 방식 차용
temp = pd.read_csv("C:\\Users\\USER\\Desktop\\Project\\Proceed\\Seoul_population_movement\\arrive_sep_GIS.csv", encoding='cp949')
temp.to_csv("C:\\Users\\USER\\Desktop\\Project\\Proceed\\Seoul_population_movement\\202109_arrive.csv", encoding='utf-8', index=False)

참고한 사이트

- QGIS 

https://blog.naver.com/yunsoo30/222349957503

 

QGIS 조인(joins)

그냥 단순하게 SHP 파일을 사용하여 행정구역을 수량별 색상으로 나타내기 최근 몇년 안써서 기록해 둠 ...

blog.naver.com

 

댓글