[오픈소스 리뷰기] 공공데이터포털(2) - 전기차 충전소 정보 데이터 API 이용하기
오프소스 리뷰 : 슬기로운 오픈소스 사용법 리뷰해드립니다!
#2 공공데이터포털(2) - 전기차 충전소 정보 데이터 API이용하기
지난 시간에 이어서 공공데이터포털을 이용한 오픈소스 활용법 두번째 시간입니다!
이번에는 요즈 또한 이슈인 전기차 충전소 정보를 확인해 볼건데요.
지난번과 마찬가지로 공공데이터포털에 들어가 로그인을 한 뒤,
공공데이터 포털
국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datase
www.data.go.kr
전기차충전소를 검색해 위와같이 환경공단에서 제공하는 API 서비스에 활용신청을 하고,
코로나19 API와 마찬가지로 활용신청을 한 뒤 key를 발급받아 사용하면 됩니다.
하지만 전기자동차 충전소 정보 제공 서비스는 총 2가지의 상세기능이 있는데요.
첫번째, 전기자동차 충전소 상태는 충전소ID, 충전기ID에 따른 현재 충전기 상태를 제공합니다.
두번째, 전기자동차 충전소 정보 기능에서는 충전소 상태뿐만 아니라 충전소 정보들을 제공합니다.
충전소 상태뿐만 아니라 운영기관, 충전소위치, 주차료무료 여부 등 충전소와 관련된 정보를 함께 수집하고자 하므로
오늘 여기서는 두번째 상세기능인 전기자동차 충전소 정보 서비스를 이용해볼게요!
인증key 입력은 이전 API사용법과 동일하지만, 서비스URL은 이전과 다른 점이 있습니다.
위와 같이 전기자동차 충전소 상태, 전기자동차 충전소 정보 서비스는 요청주소가 다른데 사용하고자 하는 서비스에 맞는 요청주소를 url에 입력해야 정상적으로 API를 이용할 수 있습니다.
url = 'http://apis.data.go.kr/B552584/EvCharger/getChargerInfo'
service_key = '서비스키를 입력하세요'
params = '?' + \
urlencode({
quote_plus('ServiceKey') : service_key,
quote_plus('pageNo') : '0',
quote_plus('numOfRows') : '30',
})
request = Request(url + params)
# request.get_method = lambda: 'GET'
response_body = urlopen(request).read()
root = ElementTree.fromstring(response_body)
df = pd.DataFrame()
for item in root.iter('item'):
item_dict = {}
item_dict['충전소명'] = (item.find('statNm').text)
item_dict['충전소ID'] = item.find('statId').text
item_dict['충전기ID'] = item.find('chgerId').text
item_dict['충전기타입'] = item.find('chgerType').text
item_dict['주소'] = item.find('addr').text
item_dict['위도'] = item.find('lat').text
item_dict['경도'] = item.find('lng').text
item_dict['이용가능시간'] = item.find('useTime').text
item_dict['운영기관명'] = item.find('busiNm').text
item_dict['연락처'] = item.find('busiCall').text
item_dict['충전기상태'] = item.find('stat').text
item_dict['상태갱신일시'] = item.find('statUpdDt').text
item_dict['충전량'] = item.find('powerType').text
item_dict['무료주차'] = item.find('parkingFree').text
item_dict['안내'] = item.find('note').text
item_dict['이용자제한'] = item.find('limitYn').text
item_dict['이용자제한사유'] = item.find('limitDetail').text
df = df.append(item_dict, ignore_index=True)
df.head(10)
경도 무료주차 상태갱신일시 안내 연락처 운영기관명 위도 이용가능시간 이용자제한 이용자제한사유 주소 충전기ID 충전기상태 충전기타입 충전량 충전소ID 충전소명
0 126.99588 Y 20210905072310 None 1661-9408 환경부 37.571076 24시간 이용가능 N None 서울특별시 종로구 종로 157 01 9 03 None ME000001 종묘 공영주차장
1 126.976011 Y 20210831224310 None 1661-9408 환경부 37.573611 24시간 이용가능 N None 서울특별시 종로구 세종대로 189 01 9 06 None ME000002 세종로 공영주차장
2 127.002350 N 20210905083810 None 1661-9408 환경부 37.559352 24시간 이용가능 N None 서울특별시 중구 동호로 287 01 9 06 None ME000003 그랜드앰배서더 서울
3 127.002804 Y 20210905105810 None 1661-9408 환경부 37.540085 24시간 이용가능 N None 서울특별시 용산구 한남동 산10-84 01 9 03 None ME000004 한강진역 공영주차장
4 127.064226 N 20210720194310 20190626 공사로 인한 임시철거 1661-9408 환경부 37.544834 24시간 이용가능 Y 20190626 공사로 인한 임시철거 서울특별시 성동구 성수이로26길 61 01 9 03 None ME000005 기아차 성동서비스센터
5 127.0455256 N 20210727232310 None 1661-9408 환경부 37.5660935 24시간 이용가능 N None 서울특별시 성동구 마장동 808 01 9 06 None ME000006 마장동사무소 앞(공중전화부스)
6 127.047938 N 20210905101310 None 1661-9408 환경부 37.580650 24시간 이용가능 N None 서울특별시 동대문구 왕산로 214 01 9 03 None ME000007 청량리롯데백화점
7 127.061848 N 20210803110810 None 1661-9408 환경부 37.598454 10:00~24:00 N None 서울특별시 동대문구 이문로 136 01 9 03 None ME000008 이마트 이문점
8 127.08154 N 20210720194810 None 1661-9408 환경부 37.580612 10:00~24:00 N None 서울특별시 중랑구 사가정로 332 01 9 03 None ME000010 홈플러스 면목점
9 127.04002398 N 20210905102810 None 1661-9408 환경부 37.60208293 10:00~24:00 N None 서울특별시 성북구 화랑로 76 01 9 03 None ME000011 홈플러스 월곡점
이번에는 지역구분 코드를 요청변수로 추가하여 원하는 지역의 충전소 정보만 가져와봅시다.
지역구분코드에 입력하는 값은 행정구역코드 앞 2자리로 서울의 경우 '11' 입니다.
행정구역코드는 아래와 같은 조회사이트에서 확인할 수 있습니다.
법정동코드목록조회
params = '?' + \
urlencode({
quote_plus('ServiceKey') : service_key,
quote_plus('pageNo') : '0',
quote_plus('numOfRows') : '100',
quote_plus('zcode') : '11',
})
request = Request(url + params)
# request.get_method = lambda: 'GET'
response_body = urlopen(request).read()
root = ElementTree.fromstring(response_body)
df = pd.DataFrame()
for item in root.iter('item'):
item_dict = {}
item_dict['충전소명'] = (item.find('statNm').text)
item_dict['충전소ID'] = item.find('statId').text
item_dict['충전기ID'] = item.find('chgerId').text
item_dict['충전기타입'] = item.find('chgerType').text
item_dict['주소'] = item.find('addr').text
item_dict['위도'] = item.find('lat').text
item_dict['경도'] = item.find('lng').text
item_dict['이용가능시간'] = item.find('useTime').text
item_dict['운영기관명'] = item.find('busiNm').text
item_dict['연락처'] = item.find('busiCall').text
item_dict['충전기상태'] = item.find('stat').text
item_dict['상태갱신일시'] = item.find('statUpdDt').text
item_dict['충전량'] = item.find('powerType').text
item_dict['무료주차'] = item.find('parkingFree').text
item_dict['안내'] = item.find('note').text
item_dict['이용자제한'] = item.find('limitYn').text
item_dict['이용자제한사유'] = item.find('limitDetail').text
df = df.append(item_dict, ignore_index = True)
df
경도 무료주차 상태갱신일시 안내 연락처 운영기관명 위도 이용가능시간 이용자제한 이용자제한사유 주소 충전기ID 충전기상태 충전기타입 충전량 충전소ID 충전소명
0 126.99588 Y 20210905072310 None 1661-9408 환경부 37.571076 24시간 이용가능 N None 서울특별시 종로구 종로 157 01 9 03 None ME000001 종묘 공영주차장
1 126.976011 Y 20210831224310 None 1661-9408 환경부 37.573611 24시간 이용가능 N None 서울특별시 종로구 세종대로 189 01 9 06 None ME000002 세종로 공영주차장
2 127.002350 N 20210905083810 None 1661-9408 환경부 37.559352 24시간 이용가능 N None 서울특별시 중구 동호로 287 01 9 06 None ME000003 그랜드앰배서더 서울
3 127.002804 Y 20210905105810 None 1661-9408 환경부 37.540085 24시간 이용가능 N None 서울특별시 용산구 한남동 산10-84 01 9 03 None ME000004 한강진역 공영주차장
4 127.064226 N 20210720194310 20190626 공사로 인한 임시철거 1661-9408 환경부 37.544834 24시간 이용가능 Y 20190626 공사로 인한 임시철거 서울특별시 성동구 성수이로26길 61 01 9 03 None ME000005 기아차 성동서비스센터
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
95 127.064114 Y 20210904223201 None 1661-9408 환경부 37.508834 24시간 이용가능 N None 서울특별시 강남구 테헤란로606 01 2 06 None ME181101 파크하얏트서울호텔
96 126.934744 Y 20210903115310 None 1661-9408 환경부 37.590003 24시간 이용가능 N None 서울특별시 서대문구 연희로 353 01 9 06 None ME181102 스위스그랜드호텔(구 그랜드힐튼호텔)
97 126.931298 Y 20210623113310 None 1661-9408 환경부 37.513933 24시간 이용가능 N None 서울특별시 동작구 대방동 70-5 01 9 06 None ME181103 현대남부서비스센터
98 127.045491 Y 20201222172810 None 1661-9408 환경부 37.667731 24시간 이용가능 N None 서울특별시 도봉구 마들로 645 (방학동) 01 9 06 None ME181129 롯데 VIC마켓 도봉점
99 126.895698 Y 20210904123425 None 1661-9408 환경부 37.470581 10:00~22:00 N None null 01 2 06 None ME181133 롯데 VIC마켓 금천점
100 rows × 17 columns
이렇게 오늘은 공공데이터포털을 이용해 전기차 충전소 정보들에 관한 데이터를 수집해 보았는데,
잘 따라오셨나요? :)
이 외에도 위와 같은 방법들로 API를 활용하여 정부에서 제공하는 많은 데이터들을 손쉽게 수집해 보시길 바랍니다!!