[資料分析&機器學習] 第2.2講: 如何獲取資料? Google Map API

Yeh James
JamesLearningNote
Published in
6 min readSep 29, 2017

2018/08/10更新:

由於近期Google map api更新的關係,導致”[資料分析&機器學習] 第2.2講: 如何獲取資料? Google Map API “ 的內容跟程式有些微變化

原本google提供的places_radar api被移除了改為places_nearby,而places_nearby一次只會回傳20間店家資料,必須用裡面的next_page_token再去拿下一間的20間店家資料,但總共最多只能拿到60間的資料,相較於原本places_radar api一次能回傳200筆資料少了許多。

參考資料: Google Map Place Api : https://developers.google.com/places/web-service/search

上一講介紹了如何用Sklearn拿取內建的資料集,但如果你想要拿取自己想要的資料怎麼辦呢?有兩種方法,API或爬蟲。第一種先去Google看看有沒有公開的API,像是許多知名的軟體公司他們都會把服務以API的形式公開出來,像是Google, Facebook, Github…,並且還會提供開發者說明手冊給一般人來使用。只要搜尋你想要的服務後面加上Api就可以了,例如想要找有關地圖的服務,一開始會先想到google map,接著搜尋google map api就可以發現如何使用了。

Google Map API 介紹頁面

如果某些公司沒有公開出來, 你也可以用一些比較Hack的方式去,像是用網頁開發工具去看這個頁面的資料是否是背後透過某些API服務得到的,如果有就可以用依樣畫葫蘆的方式去猜,像是Hahow就可以以這樣的方式去獲取課程資料。

詳情可參考:hahow 課程爬蟲與簡單定價分析

除了知名軟體公司之外,許多的政府單位現在也開始配合政府的Open data政策,把許多的資料透過API的方式開放給大眾使用。舉例來說,假設我想要抓台北市立動物園所有動物的資料,就可以透過政府開放平台所提供的API來下載

台北市政府opendata
台北市立動物園動物資料
台灣政府資料開放平台

如果都沒有提供API的話可能就要自行撰寫爬蟲,關於Python爬蟲的撰寫可參考:Python爬蟲新手筆記 或是 Python 網頁爬蟲入門實戰

接著為大家示範怎麼使用Google Map API來爬全台寵物店家的資訊,首先先到搜尋“google map api python”,選取Google 地圖Web 服務的用戶端程式庫,進入之後會看到API的說明以及取得金鑰的畫面,金鑰可以想成是代表你的帳號身份,通常只可以存取某種特定服務(google 各種服務gmail, map, drive…的金鑰也都不一樣),權限比帳號密碼小,而且如果直接輸入帳號密碼也會容易被盜用。

點選下方圖表中的google places API以及Python Client for Google Maps Services

依照說明取得金鑰

依照說明安裝Python Client for Google Maps Services,只要在CMD輸入pip install -U googlemaps 即可

一開始先import 必要的library進來,以及放入你的金鑰

接著創造一個list放入全台各縣市資料

首先先創立一個名為ids 的list,撰寫一個迴圈利用gmaps.geocode函式去獲得每一個縣市GPS位址,並搜尋該縣市位址中心半徑25000公尺符合寵物的店家id,並將這些id append到我們先前創立好的ids變數中,這樣的方式可能會取到一些重複的店家,之後我們在去除重複即可

其中gmaps.geocode回傳的格式

接著利用list, set方式去除重複的店家資訊,並利用gmaps.place函式取得店家資訊

轉成Pandas格式

其中經緯度在geometry 欄位裡,如果要萃取出來,可以參考下方用map function,其他想從欄位萃取出來的資訊可以使用一樣的方式

程式碼

感謝你閱讀完這篇文章,如果你覺得這些文章對你有幫助請在底下幫我拍個手(長按最多可以拍50下手)。

[Python資料分析&機器學習]這系列文章是我在Hahow上面所開設課程的講義,如果你是新手想著看影片一步一步學習,可以參考這門課:https://hahow.in/cr/pydataml

如果你對什麼主題的文章有興趣的話,歡迎透過這個連結告訴我:https://yehjames.typeform.com/to/XIIVQC
有任何問題也歡迎在底下留言或是來信告訴我: yehjames23@gmail.com

--

--