부동산 변동률은 데이터 자체의 가공과 시각화가 끝이 났다.
이제 인구이동률을 좀 만져봐야하는데 이건 지금 CSV 파일로 준비되어있다. 이걸 조금 더 사용하기 편하게 가공, 그리고 QGIS에서도 사용할 수 있게 위도, 경도 데이터 추가까지 해주면 될 것 같음.
이건 아예 새로운 프로젝트를 생성해서 하는 편이 더 간단할 것 같아서 그냥 파이썬 프로젝트로 생성해줬음.
# process_population_data.py
import pandas as pd
# 위도와 경도 추가하기 위한 대표 값 (임의로 설정한 예시)
coordinates = {
'세종특별자치시': {'latitude': 36.4800, 'longitude': 127.2890},
'서울특별시': {'latitude': 37.5665, 'longitude': 126.9780},
'부산광역시': {'latitude': 35.1796, 'longitude': 129.0756},
'인천광역시': {'latitude': 37.4563, 'longitude': 126.7052},
'대구광역시': {'latitude': 35.8714, 'longitude': 128.6014},
'대전광역시': {'latitude': 36.3504, 'longitude': 127.3845},
'광주광역시': {'latitude': 35.1595, 'longitude': 126.8526},
'울산광역시': {'latitude': 35.5384, 'longitude': 129.3114},
'제주특별자치도': {'latitude': 33.4996, 'longitude': 126.5312},
'경상남도': {'latitude': 35.2354, 'longitude': 128.6922},
'경상북도': {'latitude': 36.1584, 'longitude': 128.7364},
'전라남도': {'latitude': 34.8006, 'longitude': 126.2994},
'전라북도': {'latitude': 35.8175, 'longitude': 127.1400},
'충청남도': {'latitude': 36.6353, 'longitude': 126.7404},
'충청북도': {'latitude': 36.6297, 'longitude': 127.9210},
'강원도': {'latitude': 37.8225, 'longitude': 128.1555},
'경기도': {'latitude': 37.4138, 'longitude': 127.5183}, # 경기도
'강원특별자치도': {'latitude': 37.8225, 'longitude': 128.1555}, # 강원특별자치도
'전북특별자치도': {'latitude': 35.8175, 'longitude': 127.1400} # 전북특별자치도
}
# 해당 지역에 위도와 경도를 추가하는 함수
def add_coordinates(row):
region = row['지역'] # 지역명이 '지역' 컬럼에 들어 있다고 가정
if region in coordinates:
row['latitude'] = coordinates[region]['latitude']
row['longitude'] = coordinates[region]['longitude']
else:
row['latitude'] = None
row['longitude'] = None
return row
# CSV 파일을 읽어오는 함수
def process_population_data(input_file_path, output_file_path):
# CSV 파일 불러오기
population_data = pd.read_csv(input_file_path)
# '행정구역(시도)별' 컬럼을 '지역'으로 변환하여 위도/경도 추가
population_data['지역'] = population_data['행정구역(시도)별'].apply(lambda x: x.strip()) # 공백 제거
# 위도/경도 데이터 추가
population_data = population_data.apply(add_coordinates, axis=1)
# 새로운 CSV 파일로 저장
population_data.to_csv(output_file_path, index=False)
print(f"처리된 파일이 저장되었습니다: {output_file_path}")
# 예시 실행
if __name__ == '__main__':
input_file_path = 'data/인구이동률_월__분기__년__20250120211642.csv' # 업로드된 파일 경로
output_file_path = 'data/processed_population_data.csv' # 저장할 파일 경로
process_population_data(input_file_path, output_file_path)
스크립트는 간단하게 끝냈고, 문제없이 파일도 생성함.

이렇게.
근데 칼럼명이 조금 복잡하고 맘에 안들어서 이거 수정하는 스크립트로 한번에 수정해보려고 한다.
# CSV 파일을 정리하는 함수
def process_population_data(input_file_path, output_file_path):
# CSV 파일 불러오기
population_data = pd.read_csv(input_file_path)
# '행정구역(시도)별' 컬럼을 '지역'으로 변환하여 위도/경도 추가
population_data['지역'] = population_data['행정구역(시도)별'].str.strip() # 공백 제거
# 위도/경도 데이터 추가
population_data = population_data.apply(add_coordinates, axis=1)
# 컬럼 이름 정리
column_mappings = {}
for col in population_data.columns:
if "/" in col:
try:
period, metric = col.split('/')
year, quarter = period.split('.')
quarter_map = {
'1': 'Q1',
'2': 'Q2',
'3': 'Q3',
'4': 'Q4'
}
suffix = ''
if metric.endswith('.1'):
suffix = '_전출률'
elif metric.endswith('.2'):
suffix = '_순이동률'
else:
suffix = '_전입률'
column_mappings[col] = f"{year}_{quarter_map[quarter]}{suffix}"
except Exception as e:
print(f"Error processing column: {col}, Error: {e}")
# 매핑되지 않은 컬럼 로그 출력
unmapped_columns = [col for col in population_data.columns if col not in column_mappings and '/' in col]
if unmapped_columns:
print(f"Unmapped columns: {unmapped_columns}")
# 컬럼 이름 변경
population_data.rename(columns=column_mappings, inplace=True)
# 새로운 CSV 파일로 저장
population_data.to_csv(output_file_path, index=False)
print(f"처리된 파일이 저장되었습니다: {output_file_path}")
이렇게 해서 정리 했음.
데이터 가공이랑 파일 준비까지 되었으니 시각화를 위해서 QGIS 다운 받아보자고..
해당사이트에서 다운 진행했고.

다운 끝!

새로운 프로그램이다. 적응해보자고..
우선 내가 생각한 시나리오는 방금 뽑아낸 CSV 파일의 시각화다. 그래서 위도 경도 데이터까지 추가해준것이고,

일단 이렇게 레이어 추가를 할 수 있네.
죄표계 설정까지 하고 추가하니까,

흰 바탕에 점이 나온다.
흰 바탕은 지도를 추가해주면 된다고한다.
"플러그인" → "플러그인 관리 및 설치" 에서 "QuickMapServices" 설치해보자.

오 적용해주니까 이렇게 뜬다. 이걸 이제 어떻게 시각화하지...?
일단 쿼터로 분기별 데이터니 시간순으로 애니메이션으로 보여줄 수 있으면 좋겠다고 생각하는데,
찾아보니까 애니메이션 같은 기능도 제공을 한다.
아까랑 같은 방법으로 TimeManager 라는 플러그인 다운.
나중에 적용하도록 하고,
지금 하려는 작업을 편안하게 하기 위해서 이런 작업이 필요할 것 같음.

그래서 스크립트 수정 이후 다시 파일을 뽑았는데 문제 없이 잘 가공했음.

그래서 타임매니저까지 적용해서 이런 모습으로 되었고 저기서 시간기준을 설정해주는듯?

이런식으로 설정하는 것 같은데 이게 지금 YYYY-mm-dd 형식이 아니라서 못알아먹는 것 같음.
우선 형식에 맞게 맞춰주고 전입률 등의 칼럼도 완전히 분리해버리자.
다시 파이썬 스크립트로.
우선 분리 완료했고 아무런 오류 없이 세팅도 된다.
그럼 데이터 변화가 시간에 따라 눈에 보이려면 일단 마커의 형태도 수치에 따라서 달라진다던지, 그리고 전출률, 순이동률, 전입률 표시도 각 지역마다 보여야되고 이래저래 설정할게 많겠는데..
뭐 해봐야지.

여기서 심볼의 모양을 선택할 수 있는 것 같음.
전출률, 순이동률, 전입률의 칼럼을 나누는 작업까지 해서 다시 레이어 추가해줬음.

오 이런식으로 설정도 되는듯?

이렇게 규칙 추가해서 음수일 땐 적색 양수일 땐 녹색으로 설정해봤음.

지도에는 이렇게 표시됨.
일단 순이동률의 데이터는 크기별로 분류할 수 있게 해두긴 했는데.

많이 겹쳐있는 것 같음.. 아마 프레임 단위로 뭔가 제대로 나눠지지 않은 탓일 것 같긴한데 일단은 넘어가자.
아오 어떻게 해도 지금 타임매니저가 일자를 제대로 읽지를 못해서 QGIS 삭제후에 재설치중임..
일단 자고 내일 하자.
너무 늦었다.