이전 글([Pandas] 법정동코드 조회하기)에서 법정동이란 무엇인지에 대해 알아보았고, 법정동코드를 조회하는 방법에 대해 알아보았습니다.
2023.10.14 - [개발] - [Pandas] 법정동코드 조회하기
이번에는 조회한 법정동코드 중 앞에 5자리(시도(2자리) + 시군구(3자리))를 이용하여 아파트 매매 실거래가를 조회하는 Streamlit app을 작성해보겠습니다.
Streamlit app 화면 구성
코드 설명
Service Key를 공공데이터포털에서 발급받는 방법에 대해서는 이전 글을 참고하면 좋을 것 같습니다.
2023.10.13 - [개발] - 아파트 매매 실거래가 데이터 조회하기
공공데이터포털에 실거래가 정보를 요청하기 위한 필요한 정보
이전 글(아파트 매매 실거래가 데이터 조회하기)에서 설명했었지만, 공공데이터포털에서 아파트 매매 실거래가를 조회하기 위해 필요한 정보는 다음과 같습니다.
- 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]_아파트_매매_실거래가' 예제 사이트를 참고해보시면 좋을 것 같습니다.
'개발' 카테고리의 다른 글
[Architecture] Architectural Style 이란? (2) | 2024.03.11 |
---|---|
[파일 변환] JPG 또는 PNG 이미지를 WEBP 로 저장하는 방법 (190) | 2024.01.21 |
[Pandas] Dataframe 중복 데이터 찾기, 제거하기 (0) | 2023.10.26 |
[Pandas] 법정동코드 조회하기 (0) | 2023.10.14 |
아파트 매매 실거래가 데이터 조회하기 (0) | 2023.10.13 |