본문 바로가기
개발

[Pandas] 아파트 매매 실거래가

by ▶ Carpe diem ◀ 2023. 10. 20.

이전 글([Pandas] 법정동코드 조회하기)에서 법정동이란 무엇인지에 대해 알아보았고, 법정동코드를 조회하는 방법에 대해 알아보았습니다.

2023.10.14 - [개발] - [Pandas] 법정동코드 조회하기

 

[Pandas] 법정동코드 조회하기

[Pandas] 법정동코드 조회하기 이전 글(아파트 매매 실거래가 데이터 조회하기)에서 LAWD_CD 이야기를 하면서 행정표준관리시스템(https://www.code.go.kr)에서 법정코드 이야기를 했었습니다. 2023.10.13 - [

wide-shallow.tistory.com

 

이번에는 조회한 법정동코드 중 앞에 5자리(시도(2자리) + 시군구(3자리))를 이용하여 아파트 매매 실거래가를 조회하는 Streamlit app을 작성해보겠습니다.

 

Streamlit app 화면 구성

예제 화면 페이지
예제 화면 페이지

 

코드 설명

Service Key를 공공데이터포털에서 발급받는 방법에 대해서는 이전 글을 참고하면 좋을 것 같습니다.

2023.10.13 - [개발] - 아파트 매매 실거래가 데이터 조회하기

 

아파트 매매 실거래가 데이터 조회하기

아파트 매매 실거래가 데이터 조회하기 아파트 매매 실거래가 데이터를 이용하기 위해서는 먼저 공공데이터포털에서 API 활용 신청을 해야 합니다. 공공데이터포털 API 활용 신청 공공데이터포

wide-shallow.tistory.com

 

공공데이터포털에 실거래가 정보를 요청하기 위한 필요한 정보

이전 글(아파트 매매 실거래가 데이터 조회하기)에서 설명했었지만, 공공데이터포털에서 아파트 매매 실거래가를 조회하기 위해 필요한 정보는 다음과 같습니다.

  • LAWD_CD: 지역별 코드로 법정동코드 10자리에서 앞 5자리를 이용
  • DEAL_YMD: 거래된 시기 (YYYYMM 형식)
  • serviceKey: 공공데이터포털에서 발급한 키

 

로컬 PC에서 작업할 때는 Service Key를 환경변수로 설정하고 아래와 같이 환경변수에서 읽어보고 있습니다. 

service_key = os.getenv('SERVICE_KEY')

하지만 Streamlit Share를 통해 호스팅할 때는 환경변수로에 값을 설정/읽어오지 못 해 st.text_input()를 이용하여 웹 페이지로부터 Service Key를 입력 받을 수 있도록 하였습니다.

아파트 매매 실거래가를 조회하기 위해서는 거래 지역과 거래 시기에 대한 정보가 필요합니다. 이를 위해 시도, 시군구, 계약년월 정보를 입력받고 있습니다. 폐지여부, 시도, 시군구를 선택하는 것은 이전 글([Pandas] 법정동코드 조회하기)에서 했던 방법과 동일하고, 계약년월은 st.text_input()을 통해 입력받습니다.

위에서 말한 정보들을 입력받기 위한 코드는 아래를 참고하시면 됩니다.

  with st.container():
      service_key = st.text_input('Service Key', value=pa.get_service_key(), type='password')
      if not pa.is_existed_service_key() and not service_key:
          st.warning('Please set the service key for public api first')

      exist_or_not = st.radio('폐지여부', options = ['존재', '폐지'])
      category = lawd.extract_category(exist_or_not)

      col1, col2, col3 = st.columns(3)
      with col1:
          main_category = st.selectbox(
              '시/도',
              tuple(category.keys()))

      with col2:
          sub_category = st.selectbox(
              '시/군/구',
              ('시/군/구', ) + tuple(sorted(category[main_category])))

      with col3:
          contract_date = st.text_input('계약년월', '201512')

      search = st.button('조회하기')

 

시도, 시군구를 선택하면 앞서 설명드린 것과 같이 10자리의 법정동코드가 조회되는데 아파트 매매 실거래가를 조회하기 위해 필요한 것은 10자리 코드 중 앞 5자리입니다.

      def get_lawd_code(self, exist, lawd):
          is_data_existed = self.raw_data['폐지여부'] == exist
          is_searched = self.raw_data['법정동명'] == lawd
          return self.raw_data[is_data_existed & is_searched].법정동코드.tolist()[0][0:5]

 

공공데이터포털에 실거래가 정보 요청

위와 같이 공공데이터포털에 실거래가 정보를 요청하기 위해 필요한 정보를 생성한 후, 공공데이터포털에 정보를 요청합니다. 예제 코드에서는 필요에 의해 함수를 조금 더 나누었지만, 아래와 같은 방법으로 Request 하기 위한 메시지를 생성합니다.

      def make_request(self, location_code, contract_date):
          self.url = 'http://openapi.molit.go.kr:8081/OpenAPI_ToolInstallPackage/service/rest/RTMSOBJSvc/getRTMSDataSvcAptTrade?'
          self.service_key = os.getenv('SERVICE_KEY')
		  self.payload = 'LAWD_CD=' + location_code + '&' + \
                  'DEAL_YMD=' + contract_date + '&' + \
                  'serviceKey=' + self.service_key
          return self.url + self.payload

Response 를 아래와 같이 파싱하면 조회하고자 하는 지역의 기간내 실거래가 정보를 확인할 수 있습니다.

  def get_items(response):
      root = ET.fromstring(response.content)
      item_list = []
      for child in root.find('body').find('items'):
          elements = child.findall('*')
          data = {}
          for element in elements:
              tag = element.tag.strip()
              text = element.text.strip()
              # print tag, text
              data[tag] = text
          item_list.append(data)
      return item_list

 

아래는 위에 방법을 통해 조회한 화면입니다.

아파트 매매 실거래가 조회 화면
아파트 매매 실거래가 조회 화면

 

이렇게 원하는 지역, 기간의 아파트 매매 실거래가를 조회하는 방법에 대해 알아보았고, 위 예제 전체 동작을 확인할 수 있도록 Streamlit app으로 제공하고 있습니다. 실제 코드나 전체 코드가 궁금하신 분은 '[Pandas]_아파트_매매_실거래가' 예제 사이트를 참고해보시면 좋을 것 같습니다.