2023.01.29 - [부동산] - 파이썬을 이용한 투자용 주택 찾기 (1)
파이썬을 이용한 투자용 주택 찾기 (1)
최근엔 부동산이 크게 하락하고 규제들이 없어져서 관심이 없어졌지만, 취득세 중과 때문에 비규제 지역의 공시지가 1억 미만 아파트들이 각광을 받던 시절이 있었습니다. 공시지가 1억 미만 아
warlockdev.tistory.com
이전 글에서 공시지가 1억 미만의 주택들을 찾아와 봤습니다. 실거주용 주택이라면 상관없겠지만, 투자용 주택을 찾으시는 분들이라면 실제 투자금이 적게 들어가길 바라실 겁니다. 매매가가 2억인데 전세가가 8천만원 이러면 사실 좀 꺼려지시겠죠. 기왕 kb 부동산 api를 사용했으니 kb에서 제공하는 정보들을 사용해서 필요한 정보들을 좀 뽑아보겠습니다.
이번엔 거제로 가보겠습니다. 최근 거래내역들이 좀 있기는 한데, 이게 지금 적절한 가격인지 최근에 많이 오른 지역인지 알기는 어렵습니다. 실거래가 가지고 분석할 수도 있지만 과거에 전세/월세 계약 신고는 의무사항이 아니었기 때문에 기록이 없는 경우도 있습니다. KB 시세는 정확한 실거래가는 아니지만 평균 가격이나 추세는 반영하고 있으므로, 이번 글에서는 KB 시세를 이용해 분석을 해보겠습니다. 과거 KB시세 보기 버튼을 눌러봅시다.
다년에 걸친 매매, 전세, 월세의 KB 시세를 한눈에 볼 수 있습니다. 그렇다면 이전 글에서 쓴 그 방법을 다시 써보죠.
저 부분을 복사해서 붙여넣어보면
https://api.kbland.kr/land-price/price/WholQuotList?단지기본일련번호=22824&면적기준일련번호=138601&기준년=2022,2021,2020
요런 값입니다. 요걸 크롬에 붙여넣어보면
이런 형태의 데이터를 얻을 수 있습니다. 이제 코드를 좀 작성해보겠습니다.
year=2022
area_id = info['면적일련번호']
url_str = 'https://api.kbland.kr/land-price/price/WholQuotList?단지기본일련번호'
url_str += str(apt_id) + '&'
url_str += '면적일련번호=' + str(area_id) + '&'
years = ','.join(map(str,list(range(2000, year + 1))))
url_str += '기준년=' + str(years)
kb_price = requests.get(url_str, headers = headers).json()['dataBody']
이전 글에서 얻은 면적일련번호, 단지기본일련번호와 내가 보고싶은 연도값(year = 2022)을 넣어주면 위에 있는 query string을 만들어줍니다. 그럼 이제 정보를 얻었으니 가공을 해 봅시다.
jeonse_years = 3
kb_price_total = kb_price['data']['시세']
df_kb_price_total = pd.DataFrame()
for j in range(len(kb_price_total)):
temp_kb_price = kb_price_total[j]['items']
df_kb_price_total = df_kb_price_total.append(pd.json_normalize(temp_kb_price))
json은 사람이 보기 불편하니 저번처럼 pandas를 이용해서 dataframe에 담아봅시다.
웹에서는 탭별로 매매, 전세를 따로 보여주는데 실제로 가져오는 값들은 통째로 가져오네요. 그럼 이제 전세가율을 좀 알아보겠습니다. 전세가율이 높아야 투자금이 적게 들어가니 좋겠죠. 저는 이 아파트의 전반적인 전세가율과 최근 3년간의 전세가율을 알고 싶어서 jeonse_years=3으로 설정해 두었습니다. 좀더 최근의 경향을 알고 싶으시면 숫자를 줄이시면 되겠죠.
if len(df_kb_price_total) > jeonse_years*12:
jeonse_rate_total = np.mean(df_kb_price_total['전세일반거래가']/df_kb_price_total['매매일반거래가'])
jeonse_rate_latest = np.mean(df_kb_price_total['전세일반거래가'][:jeonse_years*12]/df_kb_price_total['매매일반거래가'][:jeonse_years*12])
jeonse_rate_max = np.max(df_kb_price_total['전세일반거래가']/df_kb_price_total['매매일반거래가'])
else:
jeonse_rate_total = np.mean(df_kb_price_total['전세일반거래가']/df_kb_price_total['매매일반거래가'])
jeonse_rate_max = np.max(df_kb_price_total['전세일반거래가']/df_kb_price_total['매매일반거래가'])
jeonse_rate_latest = jeonse_rate_total
이제 얻을 가격 정보는 얻었으니 아파트의 개략적인 정보와 함께 출력시켜보죠.
kb_price_curr = kb_price['data']['시세'][0]['items'][0]
url_apt_info_brif = 'https://api.kbland.kr/land-complex/complex/main?단지기본일련번호=' + str(apt_id)
url_apt_info_brif += '&매물종별구분=01&면적일련번호' + str(area_id)
apt_info_brif = requests.get(url_apt_info_brif,headers = headers).json()['dataBody']
temp_series = pd.Series([area_id, kb_price_curr['매매일반거래가'], kb_price_curr['전세일반거래가'], kb_price_curr['전세일반거래가']/kb_price_curr['매매일반거래가'], jeonse_rate_total, jeonse_rate_latest, jeonse_rate_max, apt_info_brif['data']['총세대수'], apt_info_brif['data']['준공년수'], apt_info_brif['data']['현관구조']], index = ['면적일련번호','매매일반거래가','전세일반거래가', '전세가율', '평균전세가율', '최근전세가율', '최대전세가율', '총세대수', '준공년수', '현관구조'])
df_kbprice = df_kbprice.append(temp_series, ignore_index = True)
이렇게 구할 수 있습니다. 이 temp_series를 각 아파트의 면적일련번호별로 작성해서 누적시키면 이제 한 동네의 아파트 정보들을 긁어올 수 있을 겁니다. 코드에서는 df_kbprice에 계속 append 시켜서 누적시키는 걸 보실 수 있습니다. 이 정보들을 이제 이전에 구했던 공시지가 정보와 inner join을 수행하면 원하는 형태의 테이블이 나올겁니다.
df_total = pd.merge(left = df_gpl, right = df_kbprice, how = 'inner', on = '면적일련번호')
매번 크롤링할 순 없으니 이제 엑셀 파일에 저장해서 보겠습니다.
전세가율은 현재전세가율, 최근전세가율은 아까 설정한 최근 3년의 평균 전세가율, 평균전세가율은 이 아파트의 전체적인 평균 전세가율, 최대전세가율은 이 아파트 역사상 최대 전세가율을 나타냅니다. 괜찮은 매물이라면 평균 전세가율보다 현재 전세가율보다 높을 겁니다. 그럼 전세가율 칼럼으로 내림차순 정렬해보면...
최근의 전세가율이 거의 최대 전세가율인 경우가 꽤 있네요. 조선업이 다시 활황이라 거제시에 투자해보는게 어떠냐는 글들이 있었는데 역시 근거없는 얘기는 아니었나봅니다. 물론 부동산 투자라는게 큰 돈이 들어가니 생각할게 한두개가 아니죠. 크게는 정부의 정책이나 금리부터 시작해서 작게는 초등학교의 유무까지 있을겁니다. 투자하시는 분들이라면 다양한 정보들을 조합해 자신의 투자에 대한 확신을 얻고 싶어하시니, 그 확신을 얻는데 조금이나마 도움이 되시라고 이 글을 작성해 보았습니다. 거제시 대상으로 돌려본 결과이니, 한번 살펴보시고 자신에게 도움이 될만한 지역이나 정보들을 추가해 나가시면 확신을 얻는데 도움이 되실 것 같습니다.
'부동산' 카테고리의 다른 글
파이썬을 이용한 투자용 주택 찾기 (1) (0) | 2023.01.29 |
---|