EDA - 범죄 2 : 데이터 취업 스쿨 스터디 노트 11/29

slocat·2023년 11월 29일
0

start-data

목록 보기
27/75
crime_station.index

현재 인덱스는 경찰서 이름이다. 구 이름으로 바꾸려면?

4. Google Maps에서 경찰서의 정보 얻기

https://anaconda.org/conda-forge/googlemaps

구글맵 API에서 경찰서의 위도와 경도, 속한 구 정보를 얻어보자.

import googlemaps

gmaps_key = "인증키"
gmaps = googlemaps.Client(key=gmaps_key)

gmaps.geocode("서울영등포경찰서", language="ko")

필요한 정보는 'formatted_address', 'geometry'이다.
(위도 = latitude, 경도 = longitude)

tmp[0].get("formatted_address").split()[2]
tmp[0].get("geometry")["location"]['lat']
tmp[0].get("geometry")["location"]['lng']

⭐DataFrame.iterrows()

데이터의 행-열/데이터 정보를 "튜플" 형태의 generator 객체로 반환

for idx, rows in crime_station.iterrows():
    # '서울영등포경찰서' 처럼 만들어준다.
    if idx in ["동작", "용산"]:
        station_name = str(idx) + "경찰서"
    else:
        station_name = "서울" + str(idx) + "경찰서"
    
    tmp = gmaps.geocode(station_name, language="ko")
    
    tmp_gu = tmp[0].get("formatted_address")
    lat = tmp[0].get("geometry")["location"]["lat"]
    lng = tmp[0].get("geometry")["location"]["lng"]
    
    crime_station.loc[idx, "구별"] = tmp_gu.split()[2]    
    crime_station.loc[idx, "lat"] = lat
    crime_station.loc[idx, "lng"] = lng
    

왜인지 geocode()에 '서울동작경찰서', '서울용산경찰서'를 넣으면 빈 리스트가 반환된다. if문을 써서 '동작경찰서', '용산경찰서'로 변경했다.

5. 컬럼명 정리

# 컬럼 확인
crime_station.columns
crime_station.columns.get_level_values(0)
len(crime_station.columns.get_level_values(0))
type(crime_station.columns.get_level_values(1)[2])  # str

get_level_values()로 가져온 인덱스 리스트에 들어 있는 값이 문자열인 것을 이용하여 0레벨과 1레벨의 컬럼명을 합쳐준다.

tmp = [
    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 = tmp

저장 한 번 하고 다음 단계로!😉

crime_station.to_csv("경로", sep=",", encoding="utf-8")

0개의 댓글