本文的文字及圖片來源于網路,僅供學習、交流使用,不具有任何商業用途,著作權歸原作者所有,如有問題請及時聯系我們以作處理
以下文章來源于菜J學Python ,作者J哥
前言
不知道大家會在什么場合使用地圖可視化,對我來說地圖可視化的優點除了它可以展示海量的位置資料,更重要的是它可以很酷很炫,給人一種賞心悅目的舒適感,如下是J哥做的一個簡單熱力圖:
熱力地圖
制作此類可視化地圖的前提是獲得海量的經緯度資料,資料從何而來?當然是騰訊地圖、高德地圖和百度地圖這些大家耳熟能詳的平臺,所以今天給大家分享用Python批量獲取經緯度的三種方法,并分別評測它們的效率,
一、騰訊地圖
首先,咱們需要在騰訊位置服務平臺注冊并獲得一個key,作為位置資料呼叫的密匙,步驟如下:
騰訊地圖開放平臺
1、建構式
獲得key以后,咱們就可以構造API資料請求函式tengxun(),將json格式資料中的經緯度決議出來即可,Python代碼如下:
import requests def 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 json def 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 json def 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秒
四、小結
僅從決議速度來看,百度地圖效率高于高德地圖,高德地圖高于騰訊地圖,當然,決議速度還要考慮程式運行時的網路狀況、電腦自身配置等因素,另外,地址資料決議還要考慮準確率,只有綜合考慮決議速度和準確率,才能更加客觀地判斷哪一種方法最優,準確率方面的評測將在以后的文章中進行分享,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/182732.html
標籤:Python
