Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Penyelesaian penuh untuk geocoding dalam Python

Penyelesaian penuh untuk geocoding dalam Python

WBOY
WBOYke hadapan
2023-04-14 16:55:031193semak imbas

Penterjemah |. Cui Hao

Penilai | ?

Data lokasi di atas sangat mengelirukan dan sukar diproses. Pengekodan alamat adalah sukar kerana ia mempunyai kardinaliti yang sangat tinggi. Jika anda cuba mengekod lajur menggunakan teknik pengekodan laluan tunggal, anda akan mendapat hasil dimensi tinggi, yang akan membawa kepada prestasi model pembelajaran mesin yang lemah. Cara paling mudah untuk menyelesaikan masalah adalah dengan geokod lajur.

Penyelesaian penuh untuk geocoding dalam Python2. Apakah itu geocoding?

Geocoding ialah penukaran alamat kepada koordinat geografi, yang bermaksud alamat asal ditukar kepada longitud/latitud.

3. Geokod dalam Python

Terdapat banyak perpustakaan berbeza yang boleh membantu anda geokod dengan Python. Yang terpantas ialah API yang disediakan oleh Peta Google Jika terdapat lebih daripada 1000 alamat yang perlu ditukar dalam masa yang singkat, saya mengesyorkan anda menggunakannya. Walau bagaimanapun, API Peta Google tidak percuma, anda perlu membayar kira-kira $5 setiap 1000 permintaan.

Alternatif percuma kepada API Peta Google ialah API OpenStreetMap. Walau bagaimanapun, OpenStreetMap API jauh lebih perlahan dan kurang tepat berbanding Peta Google.

Dalam artikel ini, saya akan membimbing anda melalui proses geokod menggunakan dua API di atas.

4. API Peta Google

Mari kita gunakan API Peta Google dahulu untuk menukar alamat kepada ketepatan/latitud. Mula-mula anda perlu membuat akaun Google Cloud dan masukkan maklumat kad kredit anda. Walaupun ini adalah perkhidmatan berbayar, Google akan memberi anda kredit percuma $200 apabila anda mula-mula membuat akaun Google Cloud. Ini bermakna anda boleh membuat kira-kira 40,000 panggilan dengan API geocoding mereka sebelum anda dicaj. Selagi anda tidak mencapai had ini, akaun anda tidak akan dicaj.

Pertama, buat akaun percuma di Google Cloud. Kemudian, setelah anda menyediakan akaun, anda boleh mengikuti tutorial ini untuk mendapatkan kunci API Peta Google anda.

Setelah anda menerima kunci API, anda boleh memulakan pengekodan

(1) Prasyarat

Gunakan Restoran Zomato dalam set data Kaggle tutorial ini. Pastikan set data dipasang di laluan anda. Kemudian, gunakan arahan ini untuk memasang pakej API googlemaps.

(2) Baca set data

pip install -U googlemaps

Sekarang, mari kita baca set data dan semak pengepala bingkai data.

data = pd. read_csv('zomato.csv',encoding="ISO-8859-1")
df = data.copy()
df.head()
Set data ini mempunyai 21 lajur dan 9551 baris.

Penyelesaian penuh untuk geocoding dalam PythonAnda hanya perlu geokod lajur alamat, jadi alih keluar semua lajur lain. Kemudian, rekod pendua dialih keluar, dan akhirnya hanya maklumat lajur alamat diperolehi.

Lihat pengepala bingkai data sekali lagi Selepas memproses, anda hanya melihat maklumat alamat.

df = df[['地址']]
df = df. drop_duplicates()

Seterusnya, anda boleh mulakan geokod.

Penyelesaian penuh untuk geocoding dalam Python

(3) Geocoding

Mula-mula, gunakan Python untuk mengakses kunci API kami dan jalankan baris kod berikut untuk menyelesaikan tugasan ini.

Sekarang, mari cuba geokod alamat dan lihat outputnya.

gmaps_key = googlemaps.Client(key="your_API_key")
Jalankan kod di atas dan dapatkan output yang serupa dengan yang berikut.

add_1 = df['地址'][0]
g = gmaps_key. geocode(add_1)
lat = g[0]["geometry"]["location"]["lat"]
long = g[0]["geometry"]["location"]["lng"]
print('Latitude: '+str(lat)+', Longitude: '+str(long))

Jika anda mendapat output di atas, hebat! Ini bermakna semuanya berjalan lancar. Kami boleh menggunakan pemprosesan yang serupa pada keseluruhan set data seperti berikut:

Penyelesaian penuh untuk geocoding dalam Python

Semak pengepala set data sekali lagi untuk melihat sama ada kod tersebut berfungsi.

def geocode(add):
g = gmaps_key. geocode(add)
lat = g[0]["geometry"]["location"]["lat"]
lng = g[0]["geometry"]["location"]["lng"]
return(lat, lng)。
df['geocoded'] = df['Address']. apply(geocode)

df.head()
Jika output kelihatan seperti tangkapan skrin di atas, tahniah! Anda telah berjaya mengekodkan alamat di seluruh bingkai data anda.

Penyelesaian penuh untuk geocoding dalam Python5. OpenStreetMap API

OpenStreetMap API adalah percuma sepenuhnya, tetapi berbanding dengan Google Maps API, ia lebih perlahan dan kurang tepat. API ini tidak dapat mengesan banyak alamat dalam set data, jadi kali ini kami akan menggunakan lajur lokasi. Sebelum memulakan tutorial, mari lihat perbezaan antara bar alamat dan bar lokasi. Jalankan baris kod berikut untuk menyelesaikan tugas ini.

地址栏(Address)比地点(Locality)栏细化得多,它提供了餐厅的确切位置,包括楼层号。这可能是地址不被OpenStreetMap API识别,而地点却被识别的原因。

让我们对第一个Locality进行地理编码,看看输出结果。

地理编码

运行以下几行代码。

Import url
Import requests

data = data[['Locality']]

url = 'https://nominatim.openstreetmap.org/search/' + urllib. parse. quote(df['Locality'][0]) +'?format=json' 。
response = requests.get(url).json()
print('Latitude: '+response[0]['lat']+', Longitude: '+response[0]['lon'] )

左右滑动查看完整代码

上述代码的输出与谷歌地图API生成的结果非常相似。

Penyelesaian penuh untuk geocoding dalam Python

现在,让我们创建一个函数来寻找整个数据集合的坐标。

def geocode2(locality):
url = 'https://nominatim.openstreetmap.org/search/' + urllib. parse. quote(locality) +'?format=json'
response = requests.get(url).json()
if (len(response)!=0)。
return(response[0]['lat'], response[0]['lon'] )
else:
return('-1')

data['geocoded'] = data['Locality']. apply(geocode2)

很好!现在,让我们来看看数据集合的头部。

Data.head(15)

请注意,这个API无法为数据集合中的一些地方提供坐标。

虽然它是谷歌地图API的免费替代品,如果用OpenStreetMap进行地理编码,有可能会失去大量的数据。本教程到此结束!希望你从这里学到了一些新的东西,并对处理地理空间数据有了更好的理解。

原文链接:https://www.kdnuggets.com/2022/11/geocoding-python-complete-guide.html

译者介绍

崔皓,51CTO社区编辑,资深架构师,拥有18年的软件开发和架构经验,10年分布式架构经验。

Atas ialah kandungan terperinci Penyelesaian penuh untuk geocoding dalam Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:51cto.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam