서울시 젠트리피케이션 지수 개발 및 시기별 비교 분석¶
공공데이터 기반 젠트리피케이션 측정 및 팬데믹 전후 비교 분석 프로젝트
개요¶
경리단길에 오래 거주하시며 그 흥망성쇠를 모두 경험하신 팀원분의 호기심에서 시작된 프로젝트. 서울시 공공데이터 7종을 수집하여 12개 변수 기반 상업 젠트리피케이션 지수를 개발하고, 팬데믹 전후의 변화를 비교 분석했다. 프로그래머스 데브코스 4기의 마지막 프로젝트로, 데이터 수집부터 정제, 분석, 시각화까지 모든 과정을 진행했던 가장 재밌었지만 어렵기도 했던 프로젝트였다.
- 수행 기간: 2024.10 ~ 2024.11 (프로그래머스 데브코스 4기)
- 데이터 출처: 서울 열린데이터 광장, 서울시 상권분석서비스, 공공데이터포털, KOSIS
- 분석 도구: Python (pandas), Google BigQuery, Tableau
- GitHub: Gyuhyeon-Eom/Final_Project
- Tableau: 대시보드 링크
문제정의¶
젠트리피케이션(Gentrification)은 도심의 낙후 지역이 개발되면서 임대료가 상승하고, 기존 주민들이 밀려나는 현상.
핵심 문제:
- 젠트리피케이션은 서울시 주요 상권에서 발생하고 있으며, 지역 상권의 생존 및 지역 주민의 삶에 영향을 미친다
- 기존 지표는 젠트리피케이션을 정량적으로 포착하기 어렵고, 특히 상업적 관점의 지표는 부재
- 팬데믹이라는 외부 충격 이후 젠트리피케이션의 양상 또한 변화했을 가능성
따라서 서울시의 상업 젠트리피케이션을 측정할 수 있는 정량적 지수 구축이 필요하며, 이를 통해 팬데믹 전후의 변화를 분석하는 것이 핵심 과제로 판단했다.
가설설정¶
가설 1: 상업 젠트리피케이션은 정량화가 가능할 것¶
- 상권 변화, 유입되는 업종/고객층, 점포의 운영 기간 등 상업 활동 지표를 조합하여 지수로 산출 가능
가설 2: 팬데믹 전후 젠트리피케이션 특성에는 차이가 존재할 것¶
- 팬데믹 전후로 젠트리피케이션의 진행 양상의 정도와 방향성에 차이가 나타날 것
데이터¶
젠트리피케이션 현상의 복합적인 특성을 고려하여, 3가지 영역(인구학적, 부동산 시장, 상권)에서 변수를 종합적으로 선정하고 관련 논문을 참고하여 데이터셋을 탐색했다.
변수 선정 (12개 변수)¶
| 영역 | 변수명 | 관계 | 설명 |
|---|---|---|---|
| 인구학적 | 상주인구 | 부(-) | 과잉 상업화로 상주인구 감소 |
| 인구학적 | 유입인구 | 정(+) | 상권 활성화 정도 측정 |
| 부동산 | 집객시설 비율 | 정(+) | 상권 활성화에 정적 영향 |
| 부동산 | 평당 환산 임대료 | 정(+) | 상권 활성화로 임대료 상승 |
| 상권 | 점포수 순증가율 | 정(+) | 상권 확장 측정 |
| 상권 | 요식업 비율 | 정(+) | 젠트리피케이션 전형 업종 |
| 상권 | 프랜차이즈 비율 | 정(+) | 소상공인→대기업 변화 측정 |
| 상권 | 청년층 매출 비율 | 정(+) | 청년층 소비 취향 상권 특성 |
| ... | (총 12개 변수) |
수집 데이터 (7종)¶
| 데이터명 | 기준년도 | 출처 |
|---|---|---|
| 서울시 상권분석서비스(추정매출-행정동) | 2021-2024/2 | 서울시 열린데이터 광장 |
| 서울시 상권분석서비스(상권변화지표-행정동) | 2021-2024/2 | 서울시 열린데이터 광장 |
| 서울시 상권분석서비스(집객시설-행정동) | 2021-2024/2 | 서울시 열린데이터 광장 |
| 서울시 상권분석서비스(점포-행정동) | 2021-2024/2 | 서울시 열린데이터 광장 |
| 서울시 행정동별 임대료 | 2021-2024/2 | 서울시 상권 분석 서비스 |
| 서울시 생활이동 데이터 중 유입인구 | 2021-2024/2 | 서울시 생활 이동 데이터 |
| 행정구역별 주민등록인구 | 2021-2024/2 | KOSIS 국가통계포털 |
데이터 수집의 어려움¶
- 유료 데이터 문제: 유동인구 데이터가 250만원 수준으로, 공공데이터와 웹스크래핑으로 대체
- PK 설정 문제: 상권별 분류 기준이 데이터마다 달라 행정동을 PK로 통일
- 인코딩 문제: BigQuery 업로드 시 cp949 → utf-8 인코딩 필수
유입인구 웹스크래핑 (Selenium)¶
서울시 생활이동 데이터는 동적 웹페이지로, Selenium을 사용해 스크래핑했다.
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 25개 자치구 × 28개 행정동(최대) × 32개월 = 약 22,000건 스크래핑
for code_gu in range(2, 27):
for code_dong in range(2, 29):
for code_yrmnt in range(4, 36):
condition = scraper.retry_set_condition(driver, code_gu, code_dong, code_yrmnt, retries=3)
if condition is False:
break
pop_total = scraper.scrap_pop_total(driver)
임대료 웹스크래핑 (BeautifulSoup)¶
from bs4 import BeautifulSoup
import pandas as pd
with open('20234_20242.html', 'r', encoding='utf-8') as file:
html = file.read()
soup = BeautifulSoup(html, 'html.parser')
table = soup.find('table', {'id': 'table1'})
분석/모델링¶
데이터 통합 (BigQuery)¶
약 300만 건 이상의 데이터를 처리하며, 행정동 단위 기준 통일을 위해 Python(pandas)로 전처리 후 BigQuery로 데이터 통합·JOIN.
from google.cloud import bigquery
# UTF-8 인코딩 필수, 컬럼명 영어로 사전 변환
client = bigquery.Client()
table_id = 'project.gentrification.commercial_rent'
job = client.load_table_from_dataframe(df, table_id)
job.result()
전처리 이슈: - 행정동명 변경 (2023년 1월): 상일1동/2동 → 상일동, 일원2동 → 개포3동으로 통합 - 결측치 처리: 구로구 항동 데이터(21년 1분기~22년 1분기) bfill/ffill 보간 - 공간 단위 매핑, 분기 단위 변환 등 데이터 정규화 로직 설계 및 실행
젠트리피케이션 지수 산출¶
기존 연구보다 확장된 12개 변수 기반 정량 지수를 구성했다. 각 변수를 표준화한 후 가중치를 적용하여 복합 지수를 산출.
from sklearn.preprocessing import StandardScaler
# 지표 표준화
scaler = StandardScaler()
features = ['rent', 'resident_pop', 'inflow_pop', 'store_change',
'franchise_ratio', 'restaurant_ratio', 'youth_sales', ...]
df_scaled = pd.DataFrame(
scaler.fit_transform(df[features]),
columns=features
)
# 가중치 적용 (논문 참고 + 상관관계 분석 기반)
weights = {
'rent': 0.15,
'resident_pop': -0.10, # 부의 관계
'inflow_pop': 0.12,
'store_change': 0.10,
# ... (총 12개 변수)
}
df['gentrification_index'] = sum(
df_scaled[col] * weight
for col, weight in weights.items()
)
위험군 유형화¶
지수 결과를 기반으로 단계별 위험군 유형화 체계를 구축했다.
| 위험군 | 지수 범위 | 특성 |
|---|---|---|
| 고위험 | 상위 10% | 임대료 급등, 기존 상권 이탈 진행 |
| 주의 | 상위 10-25% | 상권 변화 활발, 모니터링 필요 |
| 관찰 | 상위 25-50% | 초기 징후 발견 |
| 안정 | 하위 50% | 현재 안정적 |
결과¶
Tableau 대시보드¶
분석 결과를 기반으로 위험군 포지셔닝 맵, 상권 활성화/변화 지수 대시보드를 구성했다.

서울시 젠트리피케이션 현황 분석 대시보드 - 지역별 위험도 지도 및 포지셔닝맵

월별 총 이동인구 시계열 분석 (2022.04 ~ 2024.07)
주요 시각화 구성:
- 지역별 젠트리피케이션 지수 히트맵: 서울시 전체 지도에 위험도 표시
- 포지셔닝 맵: 상권 활성화 지수 vs 변화 지수 2차원 맵
- 시계열 추이: 주요 지역의 분기별 지수 변화
- 위험군 분류 현황: 단계별 행정동 수 및 분포
주요 성과¶
- 기존 연구보다 확장된 12개 변수 기반 정량 지수 구성으로 분석 신뢰도 향상
- 수십 GB 규모의 원시 데이터를 50MB 이내로 최적화하여 Tableau 시각화에 적합한 형태로 가공
- 젠트리피케이션 조기경보 도구 설계 및 단계별 위험군 유형화 체계 구축
- 지수 구조를 정책 적용 및 민간 상권 진입 전략 설계에 활용 가능하도록 모델링
배운 점¶
- 공공데이터 활용: API와 웹스크래핑을 조합한 효율적인 데이터 수집
- BigQuery 활용: 대용량 데이터 처리에 클라우드 DW의 효용성
- 복합 지표 설계: 단일 지표의 한계, 다차원 분석의 중요성
- 시각화 커뮤니케이션: Tableau를 통한 비전문가 대상 효과적 전달
기술 스택¶
| 구분 | 기술 |
|---|---|
| 전처리 및 데이터 통합 | Python (pandas), Google BigQuery (SQL) |
| 웹스크래핑 | Selenium, BeautifulSoup |
| 시각화 및 대시보드 설계 | Tableau |
| 문서화 및 버전 관리 | GitHub, Notion |