📌 [부동산 분석 2편] folium, geopandas로 지도 위에 인프라 시각화하기

2025. 6. 18. 16:03Python

지난 시간에는
부동산 실거래가 분석을 통해
'거래 금액이 안정적인 지역'을 찾는 방법을 정리했습니다.

이번 포스팅에서는 **공공 인프라 데이터(학교, 병원, 지하철)**를
지도 위에 시각화해서 겹치는 지역을 한눈에 파악하는 방법을 알려드릴게요.


✅ 목차 안내

단계 내용

1️⃣ 사용한 라이브러리 소개 및 설치 방법
2️⃣ 공공 위치 데이터를 불러오고 전처리하기
3️⃣ folium을 활용한 지도 위 시각화
4️⃣ geopandas와 함께 행정구역 경계 겹쳐보기
5️⃣ 실전 예시 – 학군+지하철+병원 겹치는 지역 도출

🚀 1️⃣ 사용 라이브러리 설치하기

!pip install folium geopandas shapely

라이브러리 역할

folium Leaflet 기반 지도 시각화
geopandas 행정구역 등 공간데이터 처리
shapely 좌표 기반 거리 계산 등 지원

📂 2️⃣ 위치 데이터 불러오기 & 정제

예시로 사용할 데이터는 아래와 같습니다.

파일명 설명

전국초중등학교위치표준데이터.csv 학교 위도/경도
의료기관(구별).csv 소아과 위치
지하철역 좌표 데이터 구글 맵 API 또는 공개 데이터 활용
import pandas as pd

school = pd.read_csv("전국초중등학교위치표준데이터.csv")
hospital = pd.read_csv("의료기관(구별).csv")

school = school.dropna(subset=["위도", "경도"])
hospital = hospital.dropna(subset=["위도", "경도"])

🗺️ 3️⃣ folium으로 지도 시각화하기

import folium

# 서울 중심 좌표
m = folium.Map(location=[37.55, 126.98], zoom_start=11)

# ✅ 학교 표시
for i, row in school.iterrows():
    folium.CircleMarker(
        location=[row["위도"], row["경도"]],
        radius=3,
        color="blue",
        fill=True,
        popup=row["학교명"]
    ).add_to(m)

# ✅ 병원 표시
for i, row in hospital.iterrows():
    folium.CircleMarker(
        location=[row["위도"], row["경도"]],
        radius=3,
        color="red",
        fill=True,
        popup=row["의료기관명"]
    ).add_to(m)

m

결과: 파란 점(학교) + 빨간 점(병원)이 동시에 표시된 인터랙티브 지도


🗺️ 4️⃣ geopandas로 행정구역 경계 표시

행정구역 정보 (예: 서울시 구 경계)는 공간정보포털에서 shp파일(.shp, .shx 등)을 받아올 수 있습니다.

import geopandas as gpd

# 서울시 행정구역 경계 불러오기
gdf = gpd.read_file('TL_SCCO_SIG.shp', encoding='cp949')

# folium 위에 GeoJson으로 덧씌우기
folium.GeoJson(gdf).add_to(m)
m

지도 위에 구별 경계선 표시까지 완성!


🔎 5️⃣ 실전 예시: 겹치는 지역 분석하기

목표:
학교, 병원, 지하철이 모두 1km 내에 위치한 구역 찾기

📌 거리 계산 로직 예시 (geopy 사용)

from geopy.distance import geodesic

def is_within_radius(center, point, radius_km):
    return geodesic(center, point).km <= radius_km

→ 특정 아파트 좌표 기준으로, 반경 1km 내 시설 유무 체크 가능!

📌 각 요소가 겹치는 지역을 score로 환산

df['score'] = (
    df['school_within_1km'].astype(int) +
    df['hospital_within_1km'].astype(int) +
    df['subway_within_1km'].astype(int)
)

top_recommend = df.sort_values(by='score', ascending=False).head(10)

결과: 실제 추천 지역 Top 10 산출!


✅ 최종 요약

항목 내용

목표 공공 인프라가 겹치는 지역 탐색
도구 folium, geopandas, geopy
지도 기능 지도 생성, 점 찍기, 경계 덧씌우기
활용 학교+병원+지하철 위치 기반 거주지 추천 가능

📎 다음 편 예고

👉 다음 포스팅에서는
거래금액의 표준편차를 이용한 ‘가격 안정성 점수화’,
지역별 집계 & 순위 시각화를 다룰 예정입니다.