본문 바로가기

BLOG/오픈소스 리뷰기

[오픈소스 리뷰기] 공공데이터포털(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를 활용하여 정부에서 제공하는 많은 데이터들을 손쉽게 수집해 보시길 바랍니다!!