用Python评测三种批量查询经纬度的方法,你pick哪一种?
不知道大家會在什么場合使用地圖可視化,對我來說地圖可視化的優點除了它可以展示海量的位置數據,更重要的是它可以很酷很炫,給人一種賞心悅目的舒適感。如下是J哥做的一個簡單熱力圖:
熱力地圖
制作此類可視化地圖的前提是獲得海量的經緯度數據,數據從何而來?當然是騰訊地圖、高德地圖和百度地圖這些大家耳熟能詳的平臺。所以今天給大家分享用Python批量獲取經緯度的三種方法,并分別評測它們的效率。
一、騰訊地圖
首先,咱們需要在騰訊位置服務平臺注冊并獲得一個key,作為位置數據調用的密匙。步驟如下:
騰訊地圖開放平臺
1、構造函數
獲得key以后,咱們就可以構造API數據請求函數tengxun(),將json格式數據中的經緯度解析出來即可,Python代碼如下:
import requestsdef tengxun(addr):url = "https://apis.map.qq.com/jsapi?" #騰訊地圖API接口para = {"qt": "geoc","addr":addr, #傳入地址參數"output": "json","key": "D7EBZ-NHYKX-UAH4A-74TW4-6M2JE-UHFLY", #即騰訊地圖API的key"pf":"jsapi","ref":"jsapi"}req = requests.get(url,para) #請求數據req = req.json() #轉為json格式#print(req)m = req["detail"]g = f"{m['pointx']},{m['pointy']}" #解析到經緯度數據print(g)return g tengxun(addr="深圳市")傳入自變量“深圳市”,運行Python代碼,即可獲得深圳市的經緯度數據:
'113.883080,22.553290'2、讀取數據
函數構造好以后,導入準備好的excel文件,文件包含廣州500所學校的地址數據。可在「菜J學Python」公眾后臺回復學校自動獲取。
import pandas as pd df1 = pd.read_excel("gz_school.xlsx") df1.head()數據預覽:
3、應用函數
將學校數據中的地址列應用于前文構造的函數,批量獲取500所學校的經緯度數據并進行程序計時。
import time time_start = time.time() #程序起始時間 df1['經緯度']=df1['address'].apply(tengxun) #調用函數 time_end = time.time() #程序結束時間 t = time_end-time_start #運行時間 print('共用時%s秒'%t)通過騰訊地圖批量解析500個地址獲取經緯度數據共用時約52.40秒,平均1秒鐘可以獲取9個地址的經緯度。
共用時52.39904499053955秒4、保存數據
獲取到經緯度數據后,保存為excel文件。
df1.head() df1.to_excel('result.xlsx',index = False)數據預覽:
二、高德地圖
同樣的,高德也需要提前在高德開放平臺注冊并創建應用,獲取你的專屬key。
高德地圖開放平臺
1、構造函數
import pandas as pd import requests import time import csv import jsondef gaode(addr):para = {'key':'你自己的', #高德地圖開放平臺申請的key'address':addr #傳入地址參數}url = 'https://restapi.amap.com/v3/geocode/geo?' #高德地圖API接口req = requests.get(url,para)req = req.json()print('-' * 30)m = req['geocodes'][0]['location']print(m)return m gaode(addr="深圳")2、應用函數
df2 = pd.read_excel('gz_school.xlsx') #讀取地址數據 time_start = time.time() df2['經緯度'] = df2['address'].apply(gaode) #調用函數 time_end = time.time() t = time_end-time_start print('共用時%s秒'%t)通過高德地圖批量解析500個地址獲取經緯度數據共用時約37.74秒,平均1秒鐘可以獲取13個地址的經緯度,解析速度高于騰訊地圖。
共用時37.740272998809814秒三、百度地圖
百度地圖批量獲取經緯度方法與高德地圖一致。
百度地圖開放平臺
1、構造函數
import pandas as pd import requests import time import csv import jsondef baidu(addr):url = "http://api.map.baidu.com/geocoding/v3/?" #百度地圖API接口para = {"address": addr, #傳入地址參數"output": "json","ak": "你自己的" #百度地圖開放平臺申請ak}req = requests.get(url,para)req = req.json()#print(req)print('-' * 30)m = req["result"]["location"]g = f"{m['lng']},{m['lat']}"print(g)return g baidu(addr="深圳")2、應用函數
df3 = pd.read_excel('gz_school.xlsx') time_start = time.time() df3['經緯度'] = df3['address'].apply(baidu) time_end = time.time() t = time_end-time_start print('共用時%s秒'%t)通過百度地圖批量解析500個地址獲取經緯度數據共用時約24.06秒,平均1秒鐘可以獲取20個地址的經緯度,解析速度高于高德地圖和騰訊地圖。
共用時24.0550799369812秒四、小結
僅從解析速度來看,百度地圖效率高于高德地圖,高德地圖高于騰訊地圖。當然,解析速度還要考慮程序運行時的網絡狀況、電腦自身配置等因素。另外,地址數據解析還要考慮準確率,只有綜合考慮解析速度和準確率,才能更加客觀地判斷哪一種方法最優,準確率方面的評測將在以后的文章中進行分享。
由于微信平臺算法改版,公號內容將不再以時間排序展示,如果大家想第一時間看到我們的推送,強烈建議星標我們和給我們多點點【在看】。星標具體步驟為:
總結
以上是生活随笔為你收集整理的用Python评测三种批量查询经纬度的方法,你pick哪一种?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Amazon:大数据分析技能,你满足几条
- 下一篇: Python学会了,然后呢?