새해 기념이랄까, 아니면 이사를 가고 싶어서일까..
작년에 했었던 아파트 매매 관련 분석을 다시 해보고 싶어졌다.
dovah.tistory.com/11?category=884682
이전에는 공공데이터 포털과 네이버 뉴스 데이터를 모아서 분석하는 걸 해보려했었는데,
이번에는 매매 데이터를 DB에 넣고
이를 간단히 시각화하고 지역별 비교같은 분석을 해보고 싶어졌다.
그래서 이전에 했던 API 연결 코드를 활용해서 했는데,,,,,
어쩐일인지... 에러가 자꾸 나타났다...
몇가지 이유가 있었는데,
실제 특정기간의 데이터이다.
두번째 데이터에는 도로명, 일련번호가 존재했으나, 첫번째 데이터에는 해당 내용을 찾아볼 수가 없다.
이전의 만든 코드는 특정 변수에 대해 전체 값을 가져와서 데이터프레임에 새로운 변수로 넣는 형식이었다.
for col in col_list: temp_list = [i.text for i in root.iter(col)] temp_data[col] = temp_list
그렇기 때문에 특정 항목에 대한 값이 없을 경우 데이터 수가 맞지 않아 에러가 발생한다.
해결해볼려고 참 많은 시도를 했었는데, elementtree를 통해서 parsing하는 경우에는 잘 되지 않았다.
상위 노드인 'item'을 활용하면 될 것 같았는데, 이상하게 잘 안되었다.
(아마 내가 못한 것이겠지..)
그래서 이번에는 beautifulsoup을 통해서 진행하는 걸로 변경했다.
또한, 한 변수씩 진행했던 것을 1개의 row로 수집하는 걸로 변경했다.
temp_url = 'http://openapi.molit.go.kr/OpenAPI_ToolInstallPackage/service/rest/RTMSOBJSvc/getRTMSDataSvcAptTradeDev?'\ +'ServiceKey={service_key}&LAWD_CD={g}&DEAL_YMD={d}' col_list = ['거래금액', '건축년도', '년', '도로명', '도로명건물본번호코드', '도로명시군구코드', '도로명일련번호코드', '도로명코드', '법정동', '법정동본번코드', '아파트', '월', '일', '전용면적', '지번', '지역코드', '층'] for geo in tqdm(geo_code): for period in period_list: url = temp_url.format(service_key=service_key, g=geo, d=period) r = requests.get(url) temp_data = pd.DataFrame(columns = col_list) xml_parser = BeautifulSoup(r.text, 'xml') i = 0 #(1) for item in xml_parser.find_all('item'): #(2) temp_list = [] #(3) for col in col_list: #(4) try: temp_list.append(item.find(col).text) #(5) except: temp_list.append('None_Value') temp_data.loc[i] = temp_list #(6) i += 1 #(7) data_list.append(temp_data)
col_list의 경우 내가 임의로 선정한 변수들이다.
beautifulsoup을 통해서 xml 형태로 파싱한다.
(1) 데이터 프레임에 1개의 row로 쌓아야하기 때문에, 인덱스 i를 0으로 생성한다.
(2) 각 item별로 확인할 수 있도록 반복 구문으로 진행한다.
(3) 1개의 item을 확인할때 마다 새로운 list를 생성한다.
(4) 각 변수별로 반복구문을 진행하며,
(5) 앞서 선정한 변수별로 현재 item에서 값을 찾는다. 만약 값이 없을 경우 'None_Value' 값으로 반환한다.
(6) (1)에서 설정된 인덱스 값을 바탕으로 temp_data에 쌓는다.
(7) 인덱스 값에 1을 더한다.
사실 이게 맞는거다! 라고 할 순없다.
그치만 내 개인적으론 여러 지역과 긴 기간의 데이터를 활용해보고 싶었기 때문에
발생할 수 있는 에러를 최대한 제어하고 싶었다.
현재는 일일트래픽이 1000개여서 하루에 1년치정도만 수집할 수 있는데, 아마 기간이 늘어나면 다른 에러들도 마주칠것 같다.
그때 또 고쳐야지 뭐...
추가로, 내가 참고 했던 것은 아니지만 많은 분들이 해당 API에 대해 깔끔하게 정리해서 같이 공유할까 한다.
1. wooiljeong.github.io/python/public_data_reader_01/
이 분은 실제 라이브러리화까지 진행하신 것 같다.
처음 API 연결할때 많이 참고했다.
A-Z까지 깔끔하게 해주셨다.
다만 법정동 데이터를 txt로 받고 python에서 txt로 읽는 방법을 선택하셨는데, 개인적으로 그냥 텍스트 파일을 엑셀로 읽어서 저장하는게 훨씬 편한 것 같다.
'Analysis Tips' 카테고리의 다른 글
[공공데이터] 수집한 데이터 flask로 표현해보기 (0) | 2021.07.31 |
---|---|
[공공데이터] DB에 저장하고 Flask와 연결해보기 (0) | 2021.01.10 |
[Python] Selenium으로 KBO 기록실을 털어보자 -2탄 (2) | 2020.07.13 |
[Python] Beautifulsoup으로 KBO 기록실을 털어보자 -1탄 (6) | 2020.06.21 |
[Python] 네트워크 분석 시각화(networkx+bokeh) (0) | 2020.03.04 |
댓글