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
'데이터 분석' 카테고리의 다른 글
2020년 전세계 인구 지표 (2) - 인구 수 파악하기 (0) | 2021.12.09 |
---|---|
2020년 전세계 인구 지표 (1) - 데이터 설명 및 전처리 (0) | 2021.12.08 |
서울 생활이동 데이터 분석 (2) (0) | 2021.11.17 |
서울 생활이동 데이터 분석 (1) (0) | 2021.11.15 |
세계 GDP 분석(4) (0) | 2021.11.02 |
댓글