0. 목적 및 준비
..
데이터를 활용하면 더 그럴 듯하고 신빙성있는 결과물을 만들 수 있습니다 🤔
그렇지만 소규모로 프로젝트를 하다보면.. 남이 만들고 개방된 데이터를 사용할 수밖에 없습니다. x_x
※ 원하는 데이터 및 가공법
서울시에 있는 쓰레기통의 위치를 지도 위에 그려보고 싶어졌습니다.
그런데.. 받아온 데이터에는 좌표는 고사하고 제대로된 도로명도 아닌 난잡한 데이터인 것이에요;;
변환이 필요해지는 상황인데.. 구글에 난잡한 주소라도 검색하면 좌표를 받아올 수 있지 않을까라는 생각이 들었습니다.
그래서.. python googlemaps 라이브러리의 geocode 함수를 활용하여 검색 결과를 받아오고 거기서 좌표(위도, 경도)에 해당하는 부분만 다시 따로 데이터 프레임에 넣어서 저만의 자료로.. 저장할 거에요,,
※ 데이터 소스
열린데이터광장 메인
데이터분류,데이터검색,데이터활용
data.seoul.go.kr
저는 일단.. 여기서 데이터 정리한 파일 가져와서 사용했어요,, 엑셀이라 csv로 변환해서 사용하시는 걸 추천..
※ csv파일로의 변환
이렇게.. 변경 가능..
1. Python 가상 환경 설정
venv 명령어를 쓰든, virtualenv 명령어를 쓰든.. 가상환경을 안쓰든.. 알아서 준비해주시고
(저는 Pycharm한테 가상환경 만들어달라하는 편입니다..)
pip install googlemaps
pip install pandas
이렇게 2개의 라이브러리만 설치해 줍시다..
2. Google Cloud Platform 가입
가입하면 현재 (2023/01/28) 기준 300 달러 크레딧을 주니깐.. "3개월 동안"
안 쓰는 구글 아이디 하나 잡아서 등록해봅시당
좌측 상단에 보면 Google Cloud 글자 우편에 프로젝트를 설정할 수 있게 되어 있는데, 그냥 대충 하나 파줍니다.
프로젝트가 생성되었으면,,
지도 메뉴의 "사용자 인증 정보" 창으로 들어가서 API 생성해주면 됩니다!!
"어..?어,,? Google Maps가 안 보여!!!!"
-> 제품 더보기 클릭하시면 됩니당~
살살 둘러보면 API 키 어디서 생성하는지 잘 보일 겁니다~~
이 API key만 클립보드에 넣고..
ㅌㅌㅌ
3. Python 코드 작성
참고로.. 여기서 쓰는 geocode request 건당 약 7원인가 합니다..
ㅈ~~~~~~ㄴ 비싸다는 말이에요..
import pandas as pd
import googlemaps
googlemaps_key = "YOUR API KEY"
gmaps = googlemaps.Client(key=googlemaps_key)
df = pd.read_csv('input.csv') // 데이터 읽기 입니다(사람마다 다름)
col = df['주소'] // 데이터 읽기 입니다(사람마다 다름)
// 저는 이렇게 3 종류의 데이터를 담으려 합니다.
address = []
latitude = []
longitude = []
for add in col:
response = gmaps.geocode(add) // response의 데이터 타입은 list입니다.
if response: // response가 유효할 때만
if add not in address: // 주소 겹치는 건 다시 할 필요가 없으니
geo_location = response[0].get('geometry')
lat = geo_location['location']['lat']
lng = geo_location['location']['lng']
print(add, lat, lng) // 데이터가 많으면 오래 걸려서 모니터링용 ㅎㅎ..
address.append(add)
latitude.append(lat)
longitude.append(lng)
data = {'address': address, 'latitude': latitude, 'longitude': longitude}
data_df = pd.DataFrame(data)
// 이 파일은 csv(,로 구분)이고 한글 깨지면 안되고 output.csv로 저장해주세요~라는 뜻입니다
data_df.to_csv(r'YOUR PATH\output.csv', sep=',', encoding="utf-8-sig")
데이터가 1000개만 넘어가도 좀 걸리더라구요 통신요청이 있어서 그런지..
4. 참고자료
https://hansuho113.tistory.com/44
Python Geocoding (Googlemaps API) 주소-좌표 변환
지오코딩: 주소를 좌표로 변환 역지오코딩: 좌표를 주소로 변환 구글 클라우드 플랫폼에 가입한 후 api key를 먼저 받아야 함. - 가입 시 구글에서 자동 가입을 방지하기 위해서 카드 등록을 요청
hansuho113.tistory.com
'대학생활' 카테고리의 다른 글
Firebase + Flutter - Firestore data streaming(Provider) (0) | 2023.02.03 |
---|---|
Firebase + Flutter - 초기 셋팅 (1) | 2023.01.30 |
[Ruby] Rails with Devise + MyPage (0) | 2023.01.03 |
[Python] gRPC server run with database (0) | 2023.01.02 |
[Docker] 도커에 관한 이야기 (0) | 2022.11.26 |