본문 바로가기
파이썬으로 부동산 매매가 조회기 만들기

파이썬으로 부동산 매매가 조회기 만들기 - 6. 조건 필터와 엑셀로 내보내기 만들어보기

by 유티끌 2023. 1. 8.

파이썬으로 부동산 매매가 조회기 만들기 - 6. 조건 필터와 엑셀로 내보내기 만들어보기

거의 다왔습니다. 이번 포스트에서는 조건 필터와 필터링한 파일들을 엑셀로 내보내기를 만들어보겠습니다.

원하는 매매거래 데이터만 뽑아내기

일단 property 하위에 filter_data 라는 폴더를 만들고, 여기에 filter_by_condition.py 라는 파일을 만들었습니다.

filter_by_condition.py

def filtering_transaction_amount(sheet_name, df:pd.DataFrame):
    df = df[df["거래금액"] <= 60000]

    return sheet_name, df.sort_values(by=["전용면적(평)"], ascending=False)

저는 아파트이던 빌라이던 6억 이하의 거래건들만 보려고했습니다. 직거래가 아닌 중개거래의 경우 거래가가 곧 그 주변 혹은 아파트의 다른 매물들에 대한 시세로 이어지기 때문에, 6억이하 대의 매물들에서 직장까지의 위치라던가 주변 인프라들을 네이버지도로 보고 판단하려고했습니다.

하여, 거래금액이 6억 이하 (단위가 만원입니다.)인 데이터에 한해, 전용면적(평) 이 넓은 거래건 순으로 정렬을 넣었습니다.

이 정렬 조건에 대해서는 필요하신 컬럼으로 지정하셔도 됩니다. 시군구라던지, 거래금액이라던지 등등..

해제여부 컬럼에 대해서도 필터링을 적용할까 고민을 했습니다. 매매 후 취소로 인해서 허위데이터이기 때문인데요, 일단은 매물의 위치를 확인해서 그 주변 시세도 확인하고, 취소 후 다시 매물 등록을 얼마단위로 했는지 알고 싶어서.. 당장은 해제여부 에 대해서는 필터를 넣지 않았습니다.

엑셀로 내보내는 메소드 만들어보기

이 기능은 이미 주식 소형주 스크리너 만들면서 구현해놓은거라, 그냥 import해서 사용할 생각입니다. 해당 파일의 전체 코드는 아래와 같습니다.

export_to_excel.py

import array
import pandas as pd


class ExportToData:
    def __init__(self):
        self.pandas = pd

    def export_to_excel(self, file_path, sheet_name, file):
        print("Exporting result to excel file.....")
        writer = self.pandas.ExcelWriter(file_path, engine='openpyxl')
        file.to_excel(writer, sheet_name=sheet_name)

        writer.save()
        print("Export complete.")

    def export_to_excel_with_many_sheets(self, file_path, files: array):
        print("Exporting result to excel file.....")
        writer = self.pandas.ExcelWriter(file_path, engine='openpyxl')

        for sheet_name, file in files:
            file.to_excel(writer, sheet_name=sheet_name)

        writer.save()
        print("Export complete.")

하나의 시트일 때와 여러개의 시트일 때 엑셀데이터를 만드는 메소드입니다.


데이터 조회해서 엑셀파일로 만들어보기

이제 다 완성되었습니다. test 폴더에 주피터 노트북 파일을 하나 생성해서 (아니면 기존에 만든 파일도 괜찮습니다) 조회하고, 필터링하고 내보내기까지 해보려합니다.

저는 직전 달의 매매 데이터가 필요하고,
요새 한창 핫한 서울시 모든 구의 데이터 / 수원시 모든 구 데이터 / 성남시 모든 구

의 데이터를 조회해서 필터링 한후, 내보내기를 해보겠습니다.

연도와 월이 합쳐진 6자리 형태의 날짜 계산하기

today = date.today()
month_ago = today.replace(day = 1) - timedelta(days = 1)
year = str(month_ago.year)
month = str(month_ago.month).zfill(2)

인터넷에 돌아다니는 코드 가져왔습니다. 혹시나 이 코드를 나중에 빌드업해서 연도와 월을 따로따로 사용할 수 있기 때문에, 일단 따로 계산하고 덧하기 동작으로 6자리로 사용해봅니다.

아래는 코드를 실행하는 전체 코드 입니다.

from datetime import timedelta, date
from export_data.export_to_excel import ExportToData
import property.extract_data.extract as extract
import property.filter_data as filter_data

today = date.today()
month_ago = today.replace(day = 1) - timedelta(days = 1)
year = str(month_ago.year)
month = str(month_ago.month)

seoul_apartment =extract.get_seoul_data(
    "아파트",
    "매매",
    year+month
)

seoul_villa = extract.get_seoul_data(
    "연립다세대",
    "매매",
    year+month
)

suwon_apartment = extract.get_district_data(
    "경기도",
    "수원",
    "아파트",
    "매매",
    year+month
)
suwon_villa = extract.get_district_data(
    "경기도",
    "수원",
    "연립다세대",
    "매매",
    year+month
)

seongnam_apartment = extract.get_district_data(
    "경기도",
    "성남",
    "아파트",
    "매매",
    year+month
)
seongnam_villa = extract.get_district_data(
    "경기도",
    "성남",
    "연립다세대",
    "매매",
    year+month
)

exporter = ExportToData()

exporter.export_to_excel_with_many_sheets(
    f"{YOUR_FOLDER_ROOT}/{YOUR_EXCEL_FILE_NAME}.xlsx",
    [
        filter_data.filtering_transaction_amount("서울 아파트 6억이하 매매", seoul_apartment),
        filter_data.filtering_transaction_amount("서울 빌라 6억이하 매매", seoul_villa),
        filter_data.filtering_transaction_amount("수원 아파트 6억이하 매매", suwon_apartment),
        filter_data.filtering_transaction_amount("수원 빌라 6억이하 매매", suwon_villa),
        filter_data.filtering_transaction_amount("성남 아파트 6억이하 매매", seongnam_apartment),
        filter_data.filtering_transaction_amount("성남 빌라 6억이하 매매", seongnam_villa),
        ("서울아파트매매가 데이터_raw_data", seoul_apartment),
        ("서울빌라매매가 데이터_raw_data", seoul_villa),
        ("수원아파트매매가 데이터_raw_data", suwon_apartment),
        ("수원빌라매매가 데이터_raw_data", suwon_villa),
        ("성남아파트매매가 데이터_raw_data", seongnam_apartment),
        ("성남빌라매매가 데이터_raw_data", seongnam_villa)
    ]

)

서울, 수원, 성남의 아파트와 다세대 빌라의 매매건들에 대해 각각 6억 이하 매매이력들로만 필터링을 한 후에, 다시 편집하지 않은 raw data를 추가로 저장해줍니다.

null

그럼 위와 같이 잘 정리된 엑셀 내용이 출력됩니다. 엑셀을 사용하지 않으시는 분들은, 생성된 엑셀파일을 열지 마시고 구글 스프레드시트에 바로 업로드하시면 아마 열리지 않을까 싶습니다. (해보진 않았습니다만, 구글 스프레드 시트는 엑셀파일에 호환성을 지원합니다.)

일단 이렇게해서 스크리너는 완성되었는데요, 지역별 매물 종류에 따라 시트를 만드니 시트를 좀 많이 만드는 것 같아.. 지역별로 합치고 매물구분 컬럼을 추가해볼까 합니다.

다음 포스트에서는 리팩토링에 관해 기재합니다.

끝!

반응형

댓글