import pandas as pd
df = pd.read_csv('../data/crime_in_Seoul.csv', encoding='euc-kr', thousands=',')
df
이 데이터프레임에 있는 관서명을 토대로 어느 구에 속해있는지 찾아 새로운 컬럼으로 만들려한다.
위치정보를 받아오기 위해 오픈 api인 Googlemaps를 사용해 보겠다.
https://cloud.google.com/maps-platform/?h1=ko
사용하려면 구글맵스 가입을 하고 인증 key를 받아야 하는데 신용카드 등록을 해야한다...
처음에 무료체험 90일을 제공하는데 이후에는 사용량에 따라 요금이 부과된다.
# 명령프롬프트에서 pip install googlemaps
import googlemaps
gmaps_key = '자신의 키를 입력하세요'
gmaps = googlemaps.Client(key=gmaps_key) # 클라이언트로 구글맵스에 접속해서 맵을 가져온다
# gmaps.geocode( '검색할 장소', language = 'ko')
# 검색한 장소의 지리정보를 모두 가져온다
gmaps.geocode('서울중부경찰서', language='ko')
>>>[{'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', 'police']}]
* lat 는 경도(latitude), lng는 위도(longitude) 정보이다.
* 구조파악이 어려우면 json editor online 사이트에 붙여넣고 Copy를 누르면 파악하기 쉽다.
https://jsoneditoronline.org/#left=local.juxura&right=local.seviba
이제 관서명 컬럼의 값을
서울OO경찰서로 바꿔 geocode에 전달한 후,
경찰서의 주소를 가져오고,
필요한 구 이름만 가져와서,
새로운 컬럼을 만들어보자
names = '서울' + df['관서명'].str[ :-2+1] + '경찰서'
station_names = names.to_list() # 시리즈를 리스트로
station_address = []
for name in station_names:
data = gmaps.geocode(name, language='ko')
address = data[0]['formatted_address']
station_address.append(address)
station_address
>>> ['대한민국 서울특별시 중구 수표로 27',
'대한민국 서울특별시 종로구 인사동5길 41',
'대한민국 서울특별시 중구 한강대로 410',
'대한민국 서울특별시 서대문구 통일로 113',
'대한민국 서울특별시 종로구 창경궁로 112-16',
'대한민국 서울특별시 용산구 백범로 329',
'대한민국 서울특별시 성북구 삼선동 보문로 170',
'대한민국 서울특별시 동대문구 약령시로21길 29',
'대한민국 서울특별시 마포구 마포대로 183',
'대한민국 서울특별시 영등포구 국회대로 608',
'대한민국 서울특별시 성동구 행당동 왕십리광장로 9',
'대한민국 서울특별시 동작구 노량진로 148',
'대한민국 서울특별시 광진구 구의동 자양로 167',
'대한민국 서울특별시 은평구 진흥로 58',
'대한민국 서울특별시 강북구 오패산로 406',
'대한민국 서울특별시 금천구 시흥대로73길 50',
'대한민국 서울특별시 중랑구 묵2동 249-2',
'대한민국 서울특별시 강남구 테헤란로114길 11',
'대한민국 서울특별시 관악구 관악로5길 33',
'대한민국 서울특별시 양천구 신월동 화곡로 73',
'대한민국 서울특별시 강동구 성내로 57',
'대한민국 서울특별시 성북구 종암로 135',
'대한민국 서울특별시 구로구 가마산로 235',
'대한민국 서울특별시 서초구 서초3동 반포대로 179',
'대한민국 서울특별시 양천구 목동동로 99',
'대한민국 서울특별시 송파구 중대로 221',
'대한민국 서울특별시 노원구 노원로 283',
'대한민국 서울특별시 서초구 동작대로 204',
'대한민국 서울특별시 은평구 연서로 365',
'대한민국 서울특별시 도봉구 노해로 403',
'대한민국 서울특별시 강남구 개포로 617']
district_list = []
for address in station_address:
split_address = address.split(' ')
district_list.append(split_address[2])
print(district_list)
>>> ['중구', '종로구', '중구', '서대문구', '종로구', '용산구',
'성북구', '동대문구', '마포구', '영등포구', '성동구', '동작구',
'광진구', '은평구', '강북구', '금천구', '중랑구', '강남구',
'관악구', '양천구', '강동구', '성북구', '구로구', '서초구',
'양천구', '송파구', '노원구', '서초구', '은평구', '도봉구', '강남구']
df['구별'] = district_list
'Python > Pandas' 카테고리의 다른 글
Pandas 데이터프레임에서 boolean indexing의 활용 (0) | 2022.12.01 |
---|---|
Pandas 피벗 테이블(Pivot table) (0) | 2022.12.01 |
Pandas의 DataFrame.plot() 으로 시각화하기 (0) | 2022.12.01 |
pandas.read_csv() 콤마( , ) 가 포함된 수치형 컬럼 불러오기 (1) | 2022.12.01 |
matplotlib, seaborn 을 활용한 데이터 시각화(4) - 히트맵, 한글처리 (0) | 2022.11.30 |