본문 바로가기
데이터 분석/데이터 분석

[데이터 분석] 2021년 서울 아파트 갭투자 리스트 (feat. 파이썬 공공 API)

by thomasito 2021. 4. 23.
반응형

 최근 부동산 시장이 거래량이 많이 줄어서 불안한 상황이기는 하다. 그럼에도 아직도 갭투자할 물건들이 남아있는지 알아보기 위해서 부동산 실거래가 데이터를 돌려서 2021년 1월 ~ 3월까지 3개월 최신 데이터를 기준으로 물건들을 추려보았다. 너무나 감사하게도 부동산 실거래가 데이터를 손쉽게 할 수 있는 모듈이 있었다.

 

 우선 결과물을 먼저 첨부해두겠다.

서울시갭투자분석.xlsx
0.15MB

 

 우선 PublicDataReader 라는 모듈을 불러온다. 공공 API를 이용하려면 공공 데이터포털(www.data.go.kr/)에서 서비스 인증키를 받아서 아래 코드에 "서비스인증키"라는 부분에 넣어줘야 한다.

 우선 PublicDataReader 라는 모듈을 불러온다. 서울시 각 구별 코드의 리스트를 만들어 준다. 

import PublicDataReader as pdr
print(pdr.__version__)

import pandas as pd

# https://github.com/WooilJeong/PublicDataReader
# PublicDataReader 모듈 출처

# 공공 데이터 포털 Open API 서비스 인증키
serviceKey = "hFl9q%2FeZqtfS8oojngJJpqydHJGujznhkRmH4vzSm93xTdbNwzjxzFjMw3yNNe3fnEvHnubn37YsxT%2FLvntb%2FA%3D%3D"

molit = pdr.Transaction(serviceKey)

# 지역코드 검색기 (서울 구 분리하기, 서울특별시는 11000)
df_seoul = molit.CodeFinder("서울특별시")
df_seoul = df_seoul.drop_duplicates("법정구코드", keep="first")
df_seoul = df_seoul.drop([0])
df_seoul_list = df_seoul['법정구코드'].tolist()

 코드가 길긴 하지만 별 내용은 아니다. 핵심은 PriceAnalysis라는 함수에 (구별코드, 갭투자금액, 데이터시작일자, 데이터종료일자)를 넣어주면 된다. 해당 금액들은 다 평균금액으로 계산하였다.

def PriceAnalysis(code, equity, start_date,end_date):
        
    df_AptTradeDetail = molit.DataCollector(molit.AptTradeDetail, code,start_date,end_date)
    
    df_AptTradeDetail['거래금액'] = pd.to_numeric(df_AptTradeDetail['거래금액'])
    df_AptTradeDetail['전용면적'] = pd.to_numeric(df_AptTradeDetail['전용면적'])
    df_AptTradeDetail['평당가'] = df_AptTradeDetail['거래금액']/df_AptTradeDetail['전용면적']*3.305785
    
    df_AptTradeDetail_sort = df_AptTradeDetail.groupby(["아파트","전용면적"]).mean()
    
    df_AptRent = molit.DataCollector(molit.AptRent, code, start_date, end_date)
    
    df_AptRent['월세금액'] = pd.to_numeric(df_AptRent['월세금액'])
    df_AptRent['보증금액'] = pd.to_numeric(df_AptRent['보증금액'])
    df_AptRent['전용면적'] = pd.to_numeric(df_AptRent['전용면적'])
    df_AptRentt = df_AptRent[df_AptRent['월세금액'] == 0]
    
    df_AptRent_sort = df_AptRent.groupby(["아파트","전용면적"]).mean()    
    
    # 두가지 데이터 프레임을 merge
    df_merge= pd.merge(df_AptTradeDetail_sort, df_AptRent_sort,left_index=True, right_index=True)
    df_merge['갭투자금액']= df_merge['거래금액'] - df_merge['보증금액']
    
    gap_equity = df_merge['갭투자금액'] < equity
    df_merge_gap = df_merge[gap_equity]
    
    return df_merge_gap

 첫 번째 코드블럭에서 만든 서울시 구별 코드리스트를 for 문으로 돌리면서 액셀 파일에 시트별로 저장한다. 나는 2021년 1월부터 2021년 3월까지 데이터의 평균값을 추출하여 3억 이하의 갭투자가 가능한 아파트들의 리스트를 저장해보았다. 엑셀 파일명은 서울시갭투자분석.xlsx 로 저장했다. 

# for문 돌려서 구 별로 엑셀 저장하는 함수

df_seoul = df_seoul.set_index("법정구코드") 

writer = pd.ExcelWriter('df_result.xlsx', engine='xlsxwriter')

def PriceAnalysis_to_excel(equity,start_date,end_date):

    for code in df_seoul_list:
        
        df = PriceAnalysis(code,equity,start_date,end_date) 
        region_name = df_seoul.loc[code]['법정동명']
        print(region_name)
        df.to_excel(writer,sheet_name = region_name)

# 갭 투자금액 "3억"으로 매수가능한 아파트 엑셀 리스트 작성
# 실거래 데이터 추출 구간 : 202001-202003
writer = pd.ExcelWriter('서울시갭투자분석.xlsx', engine='xlsxwriter')
PriceAnalysis_to_excel(30000,"202101","202103")
writer.save()

 상대적으로 가격이 저렴한 노도강(노원, 도봉, 강북), 금관구(금천, 관악, 구로) 쪽에는 소형평수 위주의 매물이 많이 보인다. 근데 지금 타이밍이 들어가는 게 맞는지 잘 모르겠다. 다들 고민하는 장세인듯 하다.

 코드를 그대로 복붙하시면 되고 함수에다가 인풋 값만 새롭게 넣으면 원하는 데이터를 얻을 수 있다. 파이썬 공부의 길은 멀고 험난하지만 정말 재밌다. ^^

반응형

댓글