소개
부동산 시장에 관심이 많아 부동산 데이터로 여러 분석들을 하고 있습니다. 우리나라가 아무리 아파트 공화국이라고 해도 주거시장에서 비아파트 (연립/다세대, 오피스텔, 단독/다가구)의 비중은 여전히 적지 않습니다. 그럼에도 불구하고 부동산 시 장 분석은 아파트 데이터만 분석되고 있어서 비아파트 시장을 조사하기 위해 비아파트 데이터 분석을 진행했습니다.
서울 기준 자치구별로 차이는 있지만 30% 내외의 비중을 차지하고 있습니다.
데이터 수집
데이터 분석의 시작은 언제나 데이터 수집 후 전처리입니다. 부동산 데이터는 기본적으로 공공데이터에서 받을 수 있는데(네이버매물은 크롤링 필요), csv 파일을 받거나 API로 가져오는 방법이 있습니다. (단, 두가지 방법 모두 한번에 모든 데이터를 가져올 수는 없고, 나눠서 가져와야 하며, 하루 제한이 있습니다.)
국토교통부 실거래가 데이터 자료 제공 (csv, Excel)
데이터 전처리
1) 데이터 수집 후 결합 (구글 코랩에서 진행, Gemini 활용)
비아파트 데이터를 분석하기 위해 '연립다세대', '오피스텔', '단독다가구' 데이터 수집 후 하나로 합쳐서 분석하는데, 컬럼명이 서로 달라서 맞춰서 합쳐주는 작업을 했습니다.
# 오피스텔(매매) 데이터프레임의 '단지명' 컬럼 이름을 '건물명'으로 변경
of_sales_df = of_sales_df.rename(columns={'단지명': '건물명'})
# 단독다가구(매매) 데이터프레임의 컬럼 이름을 다른 데이터프레임과 일치시키기 위해 변경
# '매수' -> '매수자', '매도' -> '매도자', '대지면적(㎡)' -> '대지권면적(㎡)'
single_family_sales_df = single_family_sales_df.rename(columns={
'대지면적(㎡)': '대지권면적(㎡)',
'매수': '매수자',
'매도': '매도자'
})
# 각 데이터프레임에서 병합에 사용할 컬럼을 명시적으로 선택하고 순서를 맞춥니다.
# 단독다가구 데이터에는 없는 컬럼(본번, 부번, 건물명, 전용면적(㎡), 층, 등기일자)은 병합 시 자동으로 NaN으로 채워집니다.
# 연립다세대, 오피스텔 데이터에는 없는 컬럼(도로조건, 연면적(㎡))은 병합 시 자동으로 NaN으로 채워집니다.
common_columns = [
'NO', '시군구', '번지', '본번', '부번', '건물명', '전용면적(㎡)', '대지권면적(㎡)',
'계약년월', '계약일', '거래금액(만원)', '층', '매수자', '매도자', '건축년도', '도로명',
'해제사유발생일', '거래유형', '중개사소재지', '등기일자', '주택유형', '도로조건', '연면적(㎡)'
]
# 각 데이터프레임에서 common_columns에 해당하는 컬럼만 선택합니다.
# 만약 데이터프레임에 해당 컬럼이 없으면 (예: 단독다가구에 '본번'이 없는 경우),
# pandas는 이 선택 과정에서 해당 컬럼을 포함하지 않습니다.
# 이후 concat 시 없는 컬럼은 자동으로 NaN으로 채워집니다.
# 연립다세대 데이터프레임 컬럼 확인 및 선택
villa_columns_to_use = [col for col in common_columns if col in villa_sales_df.columns]
villa_sales_df_processed = villa_sales_df[villa_columns_to_use]
# 오피스텔 데이터프레임 컬럼 확인 및 선택
of_columns_to_use = [col for col in common_columns if col in of_sales_df.columns]
of_sales_df_processed = of_sales_df[of_columns_to_use]
# 단독다가구 데이터프레임 컬럼 확인 및 선택
single_family_columns_to_use = [col for col in common_columns if col in single_family_sales_df.columns]
single_family_sales_df_processed = single_family_sales_df[single_family_columns_to_use]
print("\n[진단] 단독다가구 데이터프레임 컬럼 (이름 변경 후):")
print(single_family_sales_df.columns)
print("\n[진단] 병합 전 연립다세대 데이터프레임 컬럼:")
print(villa_sales_df_processed.columns)
print("\n[진단] 병합 전 오피스텔 데이터프레임 컬럼:")
print(of_sales_df_processed.columns)
print("\n[진단] 병합 전 단독다가구 데이터프레임 컬럼:")
print(single_family_sales_df_processed.columns)
# 세 데이터프레임을 행 방향으로 병합
# ignore_index=True: 병합 후 인덱스를 재설정합니다.
# sort=False: 컬럼 순서를 알파벳 순으로 정렬하지 않습니다.
combined_sales_df = pd.concat([villa_sales_df_processed, of_sales_df_processed, single_family_sales_df_processed], ignore_index=True, sort=False)
print("\n세 파일이 성공적으로 병합되었습니다.")
print("병합된 데이터프레임의 처음 10줄:")
display(combined_sales_df.head(10))
print("\n병합된 데이터프레임의 컬럼 목록:")
print(combined_sales_df.columns)
import os
# 저장할 파일 경로 설정
folder_path = '/content/drive/MyDrive/비아파트 (매매)'
output_filename = '비아파트(매매)_merged.csv'
output_path = os.path.join(folder_path, output_filename)
# 데이터프레임을 CSV 파일로 저장
# encoding='utf-8-sig': 한글 깨짐 방지
# index=False: 데이터프레임 인덱스를 CSV에 포함하지 않음
combined_sales_df.to_csv(output_path, encoding='utf-8-sig', index=False)
print(f"🎉 '비아파트(매매)_merged.csv' 파일이 성공적으로 저장되었습니다!")
print(f"파일 위치: {output_path}")2) 데이터 전처리 (태블로 Prep에서 진행)
태블로 Prep은 태블로 제품군 중 전처리 전용도구로 노코드 기반입니다. 직접 눈으로 보면서 바로 할 수 있어서 매우 편리합니다. 또한 태블로 Prep으로 전처리하면 압축파일로 출력하여 태블로 Desktop에서 분석할 수 있기 때문에 대용량 데이터 작업에 용이합니다. ( 태블로 소개 )
구글 드라이브와 연동 가능하기 때문에 코랩에서 결합한 데이터를 태블로 Prep에서 불러와서 아래와 같이 전처리 했습니다.
데이터 분석
데이터 분석 및 시각화는 태블로 Desktop에서 합니다. 태블로는 강력한 시각화 분석 툴이고, 동적 시각화가 가능해서 대시보드로 많이 활용되고 있습니다. 저는 부동산 데이터에 대해 저만의 대시보드를 만들어서 시장을 분석하고 모니터링하고 있습니다.
먼저 매매, 전월세 데이터를 결합하고 이어서 지도에 그리기 위해 법정동 Shape과 법정동 코드 데이터를 결합하였습니다. 태블로의 장점 중 강력한 지도 시각화 기능이 있는데, 부동산 데이터는 공간에 대한 정보이기에 지도 시각화 측면에서 태블로가 유리한 점이 있습니다. 아래는 자치구/법정동 기준으로 표현하였지만 각 건물별로 현재 좌표를 다 따고 있어서 이것도 지도에 입혀볼 예정입니다.
아래 그림은 2021년과 2025년 서울의 연립/다세대, 오피스텔 매매/전세 거래량 입니다. 2021년을 보면 강서구에서 연립/다세대, 오피스텔 모두 매매/전세 거래량이 많았는데, 이 당시는 급격한 상승장으로 이 지역에서는 신축빌라를 많이 지었었습니다. 그러면서 소위 업자들의 작업(?)이 들어가게 되고 아시다시피 2년후 2023년 시장이 급격히 꺾이자 빌라사기가 사회적인 이슈로 대두될 정도였습니다.
데이터를 보면 확실히 2023년 이후 강서구의 연립/다세대 매매/전세 거래량이 감소한 반면, 오피스텔 월세는 쏠리는 모습이 보이네요. 사회적으로 큰 이슈 이후 사람들의 인식은 많이 바뀐 것 같습니다.
강서구에서는 업무지구가 있는 마곡동이 가장 가격이 높고, 화곡동은 비아파트가 많아서 그만큼 거래량도 많습니다. 비아파트는 아파트처럼 표준화되어 있지 않기 때문에 가격도 제각각이고 건물별로 거래량과 가격도 일정치 않은 특징이 있습니다. 따라서 시세를 제대로 파악하기 어려운 문제가 있는데, 시장 사이클 속에서 이러한 틈새(?), 헛점(?)을 이용한 행태들이 벌어지면서 부작용이 발생되곤 합니다. 따라서 비아파트 거래 시에는 그만큼 충분히 조사하고 각별한 주의가 필요합니다. 2025년 거래 중에도 '전세가격>매매가격'인 것들이 보이네요.ㅠㅠ
결과와 배운 점
비아파트 역시 소중한 보금자리임에도 불구하고, 비아파트 시장은 아파트 시장 대비 상대적으로 소외되어 있고, 정보의 비대칭성과 거주자 특성을 고려할 때 여러모로 개선점이 필요하다는 생각이 드네요.