본문 바로가기
Python/MachineLearning

Google API - geocode 주소 가져오기

by 하니__ 2024. 4. 11.

 

이렇게 적혀있는 데이터들을

 

구글api를 이용하여

 

주소를 찾아

 

구 별로 나누어주는 작업을 해보자

 

 

 

우선 검색에 용이하도록

 

관서명의 데이터에서 왼쪽에는 서울, 오른쪽에는 서 대신 경찰서를 붙이는 작업
 
df['관서명'] = '서울 ' + df['관서명']
 
df['관서명'] = df['관서명'].str[ 0 : -1]
 
df['관서명'] = df['관서명'] + ' 경찰서'

 

 

이렇게 서울을 추가하고 서를 지우고 경찰서를 추가해도 좋지만

 

 

 
df['관서명'] = df['관서명'].str[ 0 : -1]
서울 + df['관서명'] + 경찰서

 

2줄로 끊으면 더욱 깔끔하겠다

 

 

 

pip install googlemaps

우선은 구글맵스 설치를 하고

 

 

 

import googlemaps
 
gmaps_key = "     " # 자신의 key를 사용합니다.
gmaps = googlemaps.Client(key=gmaps_key)
 
response = gmaps.geocode('서울 중부 경찰서', language='ko')
 
response[0]

 

 

이 순서를 통하여 구글맵스의 키를 입력하여 허가를 받고 구글맵스를 사용한다

서울 중부 경찰서를 검색하여 얻은 결과값을 리스폰스에 저장하고

리스폰스를 열어보면

 

{'address_components': [{'long_name': '27',
   'short_name': '27',
   'types': ['premise']},
  {'long_name': '수표로',
   'short_name': '수표로',
   'types': ['political', 'sublocality', 'sublocality_level_4']},
  {'long_name': '중구',
   'short_name': '중구',
   'types': ['political', 'sublocality', 'sublocality_level_1']},
  {'long_name': '서울특별시',
   'short_name': '서울특별시',
   'types': ['administrative_area_level_1', 'political']},
  {'long_name': '대한민국', 'short_name': 'KR', 'types': ['country', 'political']},
  {'long_name': '100-032', 'short_name': '100-032', 'types': ['postal_code']}],
 'formatted_address': '대한민국 서울특별시 중구 수표로 27',
 'geometry': {'location': {'lat': 37.56361709999999, 'lng': 126.9896517},
  'location_type': 'ROOFTOP',
  'viewport': {'northeast': {'lat': 37.5649660802915,
    'lng': 126.9910006802915},
   'southwest': {'lat': 37.5622681197085, 'lng': 126.9883027197085}}},
 'partial_match': True,
 'place_id': 'ChIJc-9q5uSifDURLhQmr5wkXmc',
 'plus_code': {'compound_code': 'HX7Q+CV 대한민국 서울특별시',
  'global_code': '8Q98HX7Q+CV'},
 'types': ['establishment', 'point_of_interest']}

 

 

이러한 정보가 나오게 되는데

 

우리가 필요한건 '중구'라는 구 의 데이터

그리하여

 

 

response[0]['formatted_address']
 
'대한민국 서울특별시 중구 수표로 27'

 

 

중간에 'formatted_address' 로 전체 주소를 얻어내고

 

 

 
response[0]['formatted_address'].split()
 
['대한민국', '서울특별시', '중구', '수표로', '27']

 

스플릿으로 쪼개준 뒤에

 

 
response[0]['formatted_address'].split()[2]
 
'중구'

 

 

'중구' 만을 가져온다

 

 

 

 

 

 

 

 

 

근데 이 작업을 데이터가 3천개 있다고 했을때

 

3천번 순수 노가다로 언제 할 수 있을까?

 

 

그러니

 

def get_gu_name(name):
    import googlemaps
    gmaps_key = "        " # 자신의 key를 사용합니다.
    gmaps = googlemaps.Client(key=gmaps_key)
    response = gmaps.geocode(name , language='ko')
    gu_name = response[0]['formatted_address'].split()[2]
    return gu_name

 

 

함수를 만들어준다

 

 

 

 

 

 

그 후에는

df['구이름'] = df['관서명'].apply(get_gu_name)
 

apply로 함수를 언급하여 전부 주소를 찾고 '구이름' 이라는 콜럼을 생성하여주자

 

 

 

 

컴퓨터가 알아서 잘 찾아와서 저장해주었다