안녕하세요, 작은 비버입니다!
오늘은 새로운 카테고리인 '작은 비버의 과제 수행'으로 찾아뵙게 되었습니다.
이 카테고리에서는 제가 개인적으로 공부한 내용이나 과제로 수행했던 내용에 대해서 올라올 예정입니다.
첫 번째 편, 오늘은 공공데이터 포털에서 OpenAPI를 이용해 데이터를 추출하는 방법에 대해서 알아보고자 합니다.
'공공데이터 포털'에서는 공공기관이 생성 또는 취득하여 관리하고 있는 공공데이터를 한 곳에서 제공하는 통합 창구입니다. 포털에서는 국민이 쉽고 편리하게 공공데이터를 이용할 수 있도록 파일 데이터, 오픈 API, 시각화 등 다양한 방식으로 제공하고 있으며, 누구라도 쉽고 편리한 검색을 통해 원하는 공공데이터를 빠르고 정확하게 찾을 수 있습니다.
-공공데이터 포털 소개 자료
심심할 때 공공데이터 뭐가 있나 찾아보면 정말 신기한 것들이 많습니다,,
민박 펜션업소와 관련된 데이터도 있고, 전국 도시공원 표준 데이터, 전기안전점검결과 통계, 폐기물 배출자 신고현황, 교통정보, 현장체험정보, 석탄재 현황 등등 정말 신기한 데이터들이 많습니다.
궁금하신 분들은 아래 사이트 남겨놓을 테니 한 번 들어가서 구경해보세요!
이번에 사이트 리뉴얼하면서 정말 예뻐졌는데 저도 들어가 보고 깜짝 놀랐습니다..(2020.05.01 기준)
https://www.data.go.kr/index.do
원래 이렇지 않았어요,, 엄청 딱딱한 사이트였따구요,, 엄청 깔끔하면서도 보기 쉽게 구성을 배치한 사이트 모습!
색깔 일단 너무 마음에 들어요ㅜㅜ 아이콘 배치한 것도 맘에 쏙 듦..ㅜㅜㅜㅜ
저는 이 공공데이터 포털 사이트를 이용해서 '전국 소방서 목록'을 수집해 볼 것입니다!
1. 공공데이터 포털에 접속하고 로그인 하기!(로그인 후, 데이터 사용 및 다운 가능)
https://www.data.go.kr/index.do
2. 본인이 수집하고 싶은 자료를 검색하거나 찾기!
본인이 원하는 데이터의 종류를 선택(사이트에서 수집하여 올려놓은 데이터 목록, 국가 데이터 목록, 이슈 데이터)하기
아니면 검색창에서 검색조건(분류체계, 서비스 유형, 확장자)을 설정하여 더 자세하게 검색하실수 있습니다.
3. 저는 전국 소방서의 목록을 수집하고 싶기 때문에 '소방서 위치조회서비스' Click!
제가 찾은 데이터는 OpenAPI라고 적혀있습니다.
여기서 OpenAPI란?
오픈 API란 누구나 사용할 수 있도록 공개된 API를 말합니다. 데이터를 표준화하고 프로그래밍을 통해 외부 소프트웨어 개발자나 사용자들과 공유하는 프로그램입니다. 개방된 오픈 API를 이용해 다양하고 재미있는 서비스나 애플리케이션, 다양한 형태의 플랫폼을 개발할 수 있습니다.
*API란? Application Programming Interface의 약자로 응용 프로그램 프로그래밍 인터페이스를 말합니다. 다양한 응용 프로그램에 사용할 수 있는 운영 체제, 혹은 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스입니다.
-공공데이터 포털 소개 자료
활용신청 전에, 본인이 사용할 정보에 대해 간단하게 정보를 확인해봅시다!
제가 사용할 데이터는 '행정안전부'에서 제공한 데이터입니다. 누구나 사용할 수 있는 OpenAPI로 구성되어 있습니다.
데이터를 얻기 위해서는 요청 주소 서비스 URL에 요청 변수를 넣어 요청합니다.(여기서는 '법정동 코드'가 요청 변수라고 적혀있습니다.)
요청 변수를 넣어 URL에 요청하면 결과 코드, 결과 메시지, 시설물명, 위도, 경도, 주소, 전화번호, 팩스번호 등 총 8가지 항목의 데이터를 얻을 수 있습니다.
이제 이 OpenAPI를 사용하기 위해서는 '활용 신청'을 해봅시다!
3. '활용 신청' 및 '참고 문서' 다운로드하기
저렇게 활용 목적을 선택하고 이유를 작성하면 됩니다. 자동승인의 경우, 바로 사용할 수 있고 승인이 필요한 경우에는 담당자의 승인을 받은 후에 데이터를 사용하실 수 있습니다.
제가 사용할 데이터는 '자동승인'으로 활용신청 후에 바로 사용할 수 있습니다.
활용기간은 승인일로부터 24개월 간 활용 가능합니다.
시스템 유형을 선택하고 활용신청 버튼을 누르시면 됩니다.
4. 마이페이지> 오픈 API> 개발계정 API키 받기
마이페이지>오픈API>개발계정 탭으로 들어가시면 본인이 신청한 자료를 보실 수 있습니다. 클릭하시면 저렇게 서비스 정보에 '일반 인증키'라고 되어있습니다. 이 키가 저희가 사용하게 될 OpenAPI키입니다!!
그리고 저기 활용신청 상세 기능 정보란에서 미리보기를 통해서 어떤 식으로 데이터가 나오는지 확인할 수 있습니다.
저는 법정동 코드가 요청 변수였기 때문에 법정동 코드를 넣어 어떤 식으로 나오는지 미리 확인해봤습니다.
법정동 코드는 대전광역시 동구로 대전광역시 동구에 위치한 소방서 목록을 확인하실수 있습니다.
5. 어떻게 사용하는지 참고 문서를 통해 확인하기
보시면 서비스 인증방법이 '서비스 key'라고 되어있는데 이 말은 서비스 key만 있으면 된다는 표시입니다. 또한 교환 데이터 표준은 XML을 제공한다고 되어있습니다. 인터페이스 표준은 'REST(GET, POST, PUT, DELETE) 방식으로 요청하라고 나와있습니다. 메시지 교환 유형은 Request-Response라는 것을 알 수 있습니다.
요청 메시지는 저기 보이는 END POINT URL에다 본인의 서비스 KEY와 법정동 코드를 넣어 요청하면 원하는 자료를 응답받을 수 있다.
응답받을 수 있는 내용은 결과 코드, 결과 메시지, 소방 서명, 소방서의 위도, 경도, 주소, 전화번호, 팩스번호 이렇게 총 8가지 데이터를 받을 수 있다.
제공된 URL에 서비스 key와 법정동 코드를 넣어서 해당 URL에 요청하면 응답을 받을 수 있다.
위의 사진은 대전광역시 동구의 소방서 목록 예시이다.
6. 실전 실전!! jupyter notebook을 이용한 '전국 소방서 목록' 자료 추출하기!(python)
공공데이터포털에서 참고자료와 같이 제공한 법정동 코드 목록을 보시면 법정동 코드, 시명, 구명, 동명, 지명으로 세부적으로 주소가 나눠져있습니다. 총 20,555개 법정동 코드로 구성되어있습니다. 전 여기서 법정동 코드, 시명, 구명만을 추출하여 다시 데이터를 정리했습니다!
어차피 종로구의 법정동 코드를 이용하면 종로구에 있는 모든 소방서의 목록을 수집할 수 있기 때문에 구까지만 데이터를 추려냈습니다.
수정된 법정동 코드 목록의 개수는 총 288개로 이뤄져 있습니다.
서비스 KEY 있고, END POINT URL 확인 완료, 법정동 코드 완료!
- END POINT URL
- http://openapi.safekorea.go.kr/openapi/service/firestation/item?serviceKey=[서비스 Key]&firestation_addr_cd=[법정동 코드]
- 서비스 KEY
- 법정동 코드
- 실행환경 : Jupyter notebook(python)
- 법정동 코드 목록 개수(288개)만큼 반복문 돌리기
- URL에 넣기 위한 Parameter준비
- 서비스 key, code_num(법정동 코드)
- URL로 Request 보내기
- Html 파싱, 태그가 붙은 정보 findAll
- 수집할 자료들을 넣기 위한 Address_list ~ tel_list 리스트를 만듦
- Text만 추출하기 위해 find(). text사용
- 수집된 결과를 result_data 리스트에 넣는다.
전국에 있는 소방서 목록을 수집했습니다.
전국 17개 시/도(e.g., 강원도, 경기도, 인천광역시..)
총 수집된 소방서 목록 개수는 983개입니다.
여기서 수집한 자료 항목은 주소, 소방서 이름, 위도, 경도, 전화번호입니다!
오늘은 공공데이터 포털에서 OpenAPI를 이용해 데이터를 수집해보았습니다.
여러분들이 직접 공공데이터포털에서 원하는 데이터 활용신청도 해보시고 코드 작성하셔서 데이터를 수집해보는 것을 추천해드립니다.
전 이제 이 데이터를 이용해서 어떤 것을 해볼지 고민을 좀 해봐야겠어요! 헿
오늘도 제 글 읽어주셔서 감사드립니다!
-이상 배고픈 작은 비버-
'작은비버의 성장과정 > 과제 및 성장기' 카테고리의 다른 글
[빅데이터] kickstarter에서 Project에 큰 영향을 미치는 Feature 확인하기(1. 상세사이트 링크 수집) (0) | 2020.08.30 |
---|---|
[프로젝트]주제 Hate Speech Detection_2020(++ 실험 결과, Word Attention visualization) (1) | 2020.06.03 |
[프로젝트]코로나19에 대한 사회적 반응[지하철 승객 수의 변화] (0) | 2020.05.10 |
[프로젝트]주제 Public reaction during pandemic (0) | 2020.04.30 |
[프로젝트]HateSpeech Dataset(2019) (0) | 2019.12.23 |