- 전체
- Python 일반
- Python 수학
- Python 그래픽
- Python 자료구조
- Python 인공지능
- Python 인터넷
- Python SAGE
- wxPython
- TkInter
- iPython
- wxPython
- pyQT
- Jython
- django
- flask
- blender python scripting
- python for minecraft
- Python 데이터 분석
- Python RPA
- cython
- PyCharm
- pySide
- kivy (python)
Python 자료구조 공공 데이터 csv 파일로 저장하기 [1]
2017.10.10 18:26
공공 데이터 csv 파일로 저장하기 [1]
센트럴리밋 2017.07.20 16:06국내의 공공 데이터 역시 시대의 흐름에 맞게 open API로,
딥러닝을 포함한 여러 데이터 기반 어플리케이션 프로그램 제작에 필요한 데이터들이 open API 를 통해 공개 되어 있다. (https://www.data.go.kr/)
이 사이트에서 자신이 원하는 데이터의 종류를 검색하고, 매우 간단한 회원 가입을 통해 (즉, 공인인증서와 같은 번거롭고 복잡한 절차 없는 가입을 통해)
서비스 키를 요청하면 대부분의 데이터의 경우 자동적이고 즉각적으로 api key가 발급이 된다.
이때 url로 쿼리를 전송하여 공공 데이터를 저장하는데 사용한 언어는 python인데 다른 경우들과 마찬가지로 한글 encoding이 꽤나 귀찮은 문제가 되곤한다.
따라서 이번 포스트에서는 한글을 포함한 공공 데이터 파일을 query를 통해 요청하고 그 response를 한글 encoding으로 저장하여,
궁극적으로 이 데이터를 csv 로 저장하는 방법에 대해 다루도록 하겠다.
Part1 에서는 쿼리를 보내고, 이 쿼리의 데이터를 어레이로 저장하는 법에 대해 다루고,
Part2에서는 그 쿼리의 데이터를 csv로 저장하는 법에 대해 다루겠다.
1. Query sender 메소드:
- 기능: local code( 서울 시내 특정 구에 해당하는 코드), time code(201612와 같이 특정 연월을 입력함.) 을 받아,
특정 구에서 특정 연월에 일어난 아파트 실거래 데이터를 한글로 읽어들여 문자열로 저장하는 함수이다.
- 구현
이 때 url 코드로 쿼리를 전송하는데, 쿼리의 내용을 작성하고 요청을 전송하기 위해 request instance를 만들어야하는데 python3 의 경우 다음과 같은 library import가 필요하다.
import urllib.request
이 때 urllib.request.urlopen(request).read() 를 통해 쿼리를 전송하고 response를 읽어온다.
그리고 이 response는 utf-8 format이 아닐 수 있기 때문에, response body를 "utf-8" 로 읽어들여 스트링으로 저장한다.
def query_sender(localcode, timecode): url = 'http://openapi.molit.go.kr:8081/OpenAPI_ToolInstallPackage/service/rest/RTMSOBJSvc/getRTMSDataSvcAptTrade?' code_info = 'LAWD_CD='+ localcode + '&DEAL_YMD=' + timecode key = '&serviceKey=발급한 서비스키' request = urllib.request.Request(url+code_info+key) request.get_method = lambda: 'GET' response_body = urllib.request.urlopen(request).read() u = str(response_body, "utf-8") return u
- 사용: 그러면 아래와 같이 쿼리를 보내면, 쿼리에 대한 응답을 문자열로 반환한다.
그러나 이는 문자열에 지나지 않으며, 우리가 원하는 정보들을 산발적으로 보관하고 있다.
따라서 이 스트링으로 부터 우리가 원하는 정보를 csv형태로 저장하는 메소드가 추가적으로 더 필요하다.
2. Xml_to_item_list
- 기능: xml_string과 local_name과 time code를 받아, xml string으로 부터 data array를 만든다.
- 구현:
먼저 xml string 스트링을 parsing하여, elementTree를 만든다. ( ElementTree는, xml을 효율적으로 관리해 데이터를 tree형태로 보관할수 있도록 하는 python 외부 라이브러리이다.)
(없는 경우 pip3 install ElementTree를 통해 설치하도록 하자.) 이 경우 ET.fromstring(xml_string)는, 그 tree의 root를 반환하기 때문에 우리가 원하는 item list를 반환받기 위해서는
elements = root.findall('body/items/item')
과 같이 해주어야한다. 그리고 이 elements list를 순회하면서, item_list array에 정보들을 append하고, 이를 result에 append하면 된다.
(그리고 중간에 에러가 날 수 있는데, 이 부분은 저장하지 않도록 한다. missing entry가 있는 record는 추후 에러를 일으킬 소지가 있다.)
- 사용 : 그리고 다음과 같이 이 함수를 호출하면, 해당 쿼리에 저장된 데이터들이 array에 마치맞게 잘 저장이 된다.
이를 pprint로 출력하면
이 뜬다는 것을 알 수 있다.
출처: http://superelement.tistory.com/15 [아마추어 엔지니어 노트]
출처: http://superelement.tistory.com/15 [아마추어 엔지니어 노트]
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
댓글 0
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
|---|---|---|---|---|
| 10 |
[Kivy (python)] Kivy에서 Hello World
| 졸리운_곰 | 2024.12.20 | 358 |
| 9 |
[Kivy (python)] Kivy 시작하기 1 (1.11.1 버전 - 설치하기)
| 졸리운_곰 | 2024.12.20 | 401 |
| 8 | [Kivy (python)] Kivy 앱 배포: Android APK 생성하기 | 졸리운_곰 | 2024.12.20 | 347 |
| 7 |
[kivy (python)] [Python] 파이썬 키비(kivy) 앱 개발 - Screen Manager
| 졸리운_곰 | 2024.12.20 | 509 |
| 6 |
[kivy (python)] [Python] 파이썬 키비(kivy) 앱 개발 - 머티리얼 디자인, KivyMD
| 졸리운_곰 | 2024.12.20 | 392 |
| 5 |
[kivy (python)] [Python] 파이썬 키비(kivy) 앱 개발 - 레이아웃 개요와 입력창
| 졸리운_곰 | 2024.12.20 | 495 |
| 4 |
[kivy (python)] [Python] 파이썬 키비(Kivy) buildozer로 APK 앱 빌드 in Linux
| 졸리운_곰 | 2024.12.20 | 383 |
| 3 |
[kivy (python)] [Python] 파이썬 키비(kivy) 앱 개발 - 설치와 예제 앱 분석
| 졸리운_곰 | 2024.12.20 | 427 |
| 2 |
[kivy (python)] [Python] 파이썬 키비(kivy) 앱 개발 - kv 파일과 한글 폰트
| 졸리운_곰 | 2024.12.20 | 385 |
| 1 |
[kivy (python)] <재정리> 파이썬 키비(Kivy) buildozer로 APK 앱 완벽 변환하기 in Linux Ubuntu, 변환 환경 제공!
| 졸리운_곰 | 2024.12.20 | 598 |

