단위 면적당 평균 실거래가 시각화하기
데이터 결합
비주얼 스튜디오 코드에서 새로운 파일을 생성하고 파일명을 'step_3_3.py'로 변경합니다. 다음과 같이 코드를 입력하고 대화형 창에서 실행하면 'output' 폴더에 'step_3_3.geojson' 파일이 생성됩니다.
ch_11/step_3_3.py
from pathlib import Path
import geopandas as gpd
import pandas as pd
from step_1_1 import OUT_DIR
from step_2_4 import OUT_2_4
from step_3_2 import OUT_3_2
OUT_3_3 = OUT_DIR / f"{Path(__file__).stem}.geojson"
def merge_dataFrame():
gdf_geo = gpd.read_file(OUT_3_2, encoding="utf-8") # 행정구역 경계 데이터 # 11
gdf_price = gpd.read_file(OUT_2_4, encoding="utf-8") # 살거래가 데이터 # 12
gdf_merge = pd.merge( # 13
gdf_geo,
gdf_price,
left_on="adm_nm",
right_on="locatadd_nm",
how="inner",
) # 19
gdf_filter = gdf_merge.filter(["adm_nm", "avg_area", "avg_price", "geometry"]) # 20
gdf_result = gdf_filter.astype({"avg_area": float, "avg_price": float}) # 21
str_jsoned = gdf_result.to_json(drop_id=True, ensure_ascii=False, indent=2) # 22
OUT_3_3.write_text(str_jsoned, encoding="utf-8") # 23
if __name__ == "__main__":
merge_dataFrame()
11~12 geopandas 패키지의 함수 read_file()을 사용하여 행정구역 경계 데이터와 아파트매매 실거래가 데이터를 지오데이터프레임으로 변환하고 gdf_geo와 gdf_price에 저장합니다.
13~19 함수 merge()를 사용해 두 데이터 지역 주소명이 정확히 일치하는 행에 대해 결합합니다.
20 지역 주소명, 평균 전용 면적, 단위 면적당 평균 실거래가, 행정구역 경계 데이터열을 추출합니다.
21 read_file()은 모든 열을 문자열로 처리하므로, 함수 astype()을 사용해서 평균 전용 면적과 단위 면적당 평균 실거래가 열의 데이터 타입을 부동소수점수로 변환합니다.
22~23 geopandas 패키지의 함수 to_json()은 pandas 패키지와 달리 자동으로 json 파일을 저장하자 않으므로 함수 write_text()를 사용해 파일을 저장하는 코드를 작성해야 합니다.
실행 결과로 출력된 GeoJSON 파일을 열면 다음과 같이 문자열을 화인할 수 있습니다.
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {
"adm_nm": "서울특별시 종로구",
"avg_area": 75.84654247491639,
"avg_price": 1379.1973324807864
},
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
...
],
},
...생략...
아파트매매 실거래가 데이터 시각화
ch_11_step_3_4.py
from pathlib import Path
import geopandas as gpd
import matplotlib.pyplot as plt
import seaborn as sns
from step_1_1 import OUT_DIR
from step_3_3 import OUT_3_3
OUT_3_4 = OUT_DIR / f"{Path(__file__).stem}.png"
def geojson_to_img(): # 10
sns.set_theme(context="poster", font="Malgun Gothic") # 11
fig, ax = plt.subplots(figsize=(16, 9), dpi=100) # 크기 및 해상도 지정 # 12
gdf_raw: gpd.GeoDataFrame = gpd.read_file(OUT_3_3, encoding="utf-8")
gdf_raw.plot( # 행정구역 경계 데이터 시각화 # 14
column="avg_price", # 단계구분도 기준 열 설정 # 15
cmap="OrRd", # 단계구분도 색상 설정 # 16
edgecolor="k", # 경계선 색상 설정 # 17
legend=True, # 범례 표시 여부
legend_kwds={"label": "(단위: 만원)", # 19
"orientation": "vertical"}, # 범례 설정 # 20
ax=ax,
)
ax.set_axis_off() # 축 제거
ax.set_title("단위 면적당 평균 아파트 매매 실서래가") # 제목 설정
fig.set_layout_engine("tight") # 여백 제거
fig.savefig(OUT_3_4) # PNG 파일로 저장
if __name__ == "__main__":
geojson_to_img()
실행결과

10 GeoJSON 파일을 이미지로 시각화하는 함수 geojson_to_img()를 정의합니다.
11 이미지의 크기와 글꼴을 설정하는 seaborn 패키지의 함수 set_theme()를 호출합니다.
12 함수 subplots()를 사용해 이미지의 크기와 해상도를 지정합니다.
14 함수 plot()을 사용해서 지로데이터프레임을 시각화합니다.
15 단계구분도의 기준을 평균 실거래가로 설정합니다.
16 매개변수 cmap에 'OrRd'를 전달해서 단계구분도의 색을 붉은 계열로 지정합니다
17 매개변수 edgecolor에 'k'를 전달해서 단계구분도 내 경계선의 색을 검정으로 지정합니다.
19~20 범례의 제목은 '(단위: 인원)'으로, 반환은 수직(vertical)으로 설정합니다.
'프로그래밍 언어 > Python' 카테고리의 다른 글
| 맛집 검색 자동화하기 (0) | 2026.06.22 |
|---|---|
| 맛집 탐색 자동화하기- 파이썬 패키지 준비하기 (0) | 2026.06.19 |
| GeoJSON으로 데이터 저장 (0) | 2026.06.16 |
| 행정구역 경계 시각화 (0) | 2026.06.13 |
| 행정구역 경계 표시하기 (0) | 2026.06.10 |