<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          三種方法!教你用Python分析經(jīng)緯度數(shù)據(jù)

          共 3137字,需瀏覽 7分鐘

           ·

          2020-09-15 13:57

          點擊上方數(shù)據(jù)管道”,選擇“置頂星標”公眾號

          干貨福利,第一時間送達

          不知道大家會在什么場合使用地圖可視化,對我來說地圖可視化的優(yōu)點除了它可以展示海量的位置數(shù)據(jù),更重要的是它可以很酷很炫,給人一種賞心悅目的舒適感。如下是J哥做的一個簡單熱力圖:
          熱力地圖
          制作此類可視化地圖的前提是獲得海量的經(jīng)緯度數(shù)據(jù),數(shù)據(jù)從何而來?當然是騰訊地圖、高德地圖和百度地圖這些大家耳熟能詳?shù)钠脚_。所以今天給大家分享用Python批量獲取經(jīng)緯度的三種方法,并分別評測它們的效率。

          一、騰訊地圖

          首先,咱們需要在騰訊位置服務平臺注冊并獲得一個key,作為位置數(shù)據(jù)調(diào)用的密匙。步驟如下:
          騰訊地圖開放平臺

          1、構造函數(shù)

          獲得key以后,咱們就可以構造API數(shù)據(jù)請求函數(shù)tengxun(),將json格式數(shù)據(jù)中的經(jīng)緯度解析出來即可,Python代碼如下:
          import requests

          def tengxun(addr):
          url = "https://apis.map.qq.com/jsapi?" #騰訊地圖API接口
          para = {
          "qt": "geoc",
          "addr":addr, #傳入地址參數(shù)
          "output": "json",
          "key": "D7EBZ-NHYKX-UAH4A-74TW4-6M2JE-UHFLY", #即騰訊地圖API的key
          "pf":"jsapi",
          "ref":"jsapi"
          }
          req = requests.get(url,para) #請求數(shù)據(jù)
          req = req.json() #轉(zhuǎn)為json格式
          #print(req)
          m = req["detail"]
          g = f"{m['pointx']},{m['pointy']}" #解析到經(jīng)緯度數(shù)據(jù)
          print(g)
          return g
          tengxun(addr="深圳市")
          傳入自變量“深圳市”,運行Python代碼,即可獲得深圳市的經(jīng)緯度數(shù)據(jù):
          '113.883080,22.553290'

          2、讀取數(shù)據(jù)

          函數(shù)構造好以后,導入準備好的excel文件,文件包含廣州500所學校的地址數(shù)據(jù)。
          import pandas as pd
          df1 = pd.read_excel("gz_school.xlsx")
          df1.head()
          數(shù)據(jù)預覽:
          3、應用函數(shù)
          將學校數(shù)據(jù)中的地址列應用于前文構造的函數(shù),批量獲取500所學校的經(jīng)緯度數(shù)據(jù)并進行程序計時。
          import time
          time_start = time.time() #程序起始時間
          df1['經(jīng)緯度']=df1['address'].apply(tengxun) #調(diào)用函數(shù)
          time_end = time.time() #程序結束時間
          t = time_end-time_start #運行時間
          print('共用時%s秒'%t)
          通過騰訊地圖批量解析500個地址獲取經(jīng)緯度數(shù)據(jù)共用時約52.40秒,平均1秒鐘可以獲取9個地址的經(jīng)緯度。
          共用時52.39904499053955

          4、保存數(shù)據(jù)

          獲取到經(jīng)緯度數(shù)據(jù)后,保存為excel文件。
          df1.head()
          df1.to_excel('result.xlsx',index = False)

          數(shù)據(jù)預覽:

          二、高德地圖

          同樣的,高德也需要提前在高德開放平臺注冊并創(chuàng)建應用,獲取你的專屬key。
          高德地圖開放平臺

          1、構造函數(shù)

          import pandas as pd
          import requests
          import time
          import csv
          import json

          def gaode(addr):
          para = {
          'key':'你自己的', #高德地圖開放平臺申請的key
          'address':addr #傳入地址參數(shù)
          }
          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、應用函數(shù)

          df2 = pd.read_excel('gz_school.xlsx') #讀取地址數(shù)據(jù)
          time_start = time.time()
          df2['經(jīng)緯度'] = df2['address'].apply(gaode) #調(diào)用函數(shù)
          time_end = time.time()
          t = time_end-time_start
          print('共用時%s秒'%t)
          通過高德地圖批量解析500個地址獲取經(jīng)緯度數(shù)據(jù)共用時約37.74秒,平均1秒鐘可以獲取13個地址的經(jīng)緯度,解析速度高于騰訊地圖。
          共用時37.740272998809814

          三、百度地圖

          百度地圖批量獲取經(jīng)緯度方法與高德地圖一致。
          百度地圖開放平臺

          1、構造函數(shù)

          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, #傳入地址參數(shù)
          "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、應用函數(shù)

          df3 = pd.read_excel('gz_school.xlsx')
          time_start = time.time()
          df3['經(jīng)緯度'] = df3['address'].apply(baidu)
          time_end = time.time()
          t = time_end-time_start
          print('共用時%s秒'%t)
          通過百度地圖批量解析500個地址獲取經(jīng)緯度數(shù)據(jù)共用時約24.06秒,平均1秒鐘可以獲取20個地址的經(jīng)緯度,解析速度高于高德地圖和騰訊地圖。
          共用時24.0550799369812

          四、小結

          僅從解析速度來看,百度地圖效率高于高德地圖,高德地圖高于騰訊地圖。當然,解析速度還要考慮程序運行時的網(wǎng)絡狀況、電腦自身配置等因素。另外,地址數(shù)據(jù)解析還要考慮準確率,只有綜合考慮解析速度和準確率,才能更加客觀地判斷哪一種方法最優(yōu),準確率方面的評測將在以后的文章中進行分享。

          瀏覽 132
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  特黄AAAAAAAA免费看直播 | 麻豆成人在线 | 亚洲中文字幕在线看 | 91精品夂久久久久 | 三级片91久久精品欧美亚洲三级片 |