<1차 가공데이터> - 경찰서 기준으로 분류된 데이터
<2차 가공데이터> - 행정구역 기준으로 분류된 데이터
Google Maps API를 사용하여 경찰서 기준으로 분류된 데이터를 행정구역 기준으로 분류된 데이터로 가공하자
# 특정 키워드를 검색하면 주소를 반환하는 gmaps를 만들어 보자.
import googlemaps
gmaps_key = "******개인이 구글계정으로 할당 받은 key값********"
gmaps = googlemaps.Client(key = gmaps_key)
연관 포스팅
구글맵 API 키 할당 받는 방법
상단에서 형성한 gmaps 객체의 geocode 메소드는 특정 키워드를 parameter로 넣어주면 딕셔너리 형태로 주소값을 반환한다.
gmaps.geocode("서울영등포경찰서", language = "ko")
tmp = gmaps.geocode("서울영등포경찰서", language = "ko")
tmp[0].get("formatted_address").split()
서울+str(경찰서 이름)+경찰서로 키워드를 형성해서 gmaps의 geocode 메소드 parameter에 넣어준다.
해당 리스트 내의 딕셔너리 key중 "formatted_address" 값으로 반환된 주소(value)를 공백으로 쪼갠 리스트를 받는다.(split())
리스트 중 "구"에 해당하는 item(인덱스=2)만 추출한다.
# "서울영등포경찰서" 키워드를 통해 "영등포구" 데이터 추출하기
tmp = gmaps.geocode("서울영등포경찰서", language = "ko")
tmp[0].get("formatted_address").split()[2]
이제 "구별"로 된 column을 생성한 뒤, 이 column에 경찰서별 행정구역을 표기하도록 데이터프레임을 확장하자.
crime_station["구별"]= np.nan #컬럼 생성, 일단 NaN값으로 채움
for idx, rows in crime_station.iterrows():
# for문에서 데이터프레임.iterrows()의 기능
# list의 enumerate처럼 data frame의 idx, rows를 순차적으로 반환
station_name = "서울" + str(idx) +"경찰서" #키워드 형성
tmp = gmaps.geocode(station_name, language="ko") #키워드 검색
temp_gu = tmp[0].get("formatted_address") # 주소 추출
crime_station.loc[idx,"구별"] = temp_gu.split()[2] #행정구역만 추출
crime_station.head()
# column 명이 두 개로 나누어져 있는데 합치기
# 강도->검거, 강도-> 발생으로 column이 2개인데
# 강도검거, 강도발생으로 column이 1개가 되도록
# for문을 이용해서 대체할 column 리스트 생성
temp_list =[
crime_station.columns.get_level_values(0)[n]\
+ crime_station.columns.get_level_values(1)[n]
for n in range(0, len(crime_station.columns.get_level_values(0)))
]
crime_station.columns = temp_list
crime_station.head()
#가공한 데이터 중간 저장!
crime_station.to_csv(
"../data/02. crime_in_Seoul_raw.csv",
sep =",",
encoding = "utf-8")