OneMap API – Menuju AI — Teknologi, Sains, dan Teknik Terbaik
Pengarang: Shawn Tham
Visualisasi data
Koordinat Geocoding Singapura: OneMap API
Geocoding dengan Google API adalah cara yang dikenal luas. Namun, biayanya uang setelah Anda menyelesaikan kredit gratis Anda. Sebagai seseorang yang melakukan visualisasi geospasial secara teratur dengan Tableau dan Python, koordinat sangat penting untuk merencanakan. Pada artikel ini, saya akan mendemonstrasikan cara membuat geocode koordinat Singapura secara gratis menggunakan API geocoding gratis dan akurat yang dikembangkan oleh Singapore Land Authority.
Logo: OneMap oleh Singapore Land Authority
Langkah 1: Mengimpor paket yang relevan
impor panda sebagai pd
permintaan impor
Langkah 2: Baca kumpulan data dengan panda dan periksa
df = pd.read_csv(r”C:UsersshawnDownloadshdb-property-informationhdb-property-information.csv”)
df.head()
Dataset yang saya gunakan berasal dari Data.gov.sg dan berisi lokasi blok Housing Development Board (HDB) eksisting, tingkat lantai tertinggi, tahun penyelesaian, jenis bangunan dan jumlah rumah susun HDB (perincian menurut jenis flat) per blok dll. Saya mulai dengan membaca data dengan panda dan melihat 5 baris pertama untuk melihat kolom mana yang dapat saya gunakan. Untuk tujuan demonstrasi dan membuatnya serealistis mungkin, saya tidak akan membersihkan data untuk menunjukkan bagaimana Anda masih dapat menggunakan OneMap API.
5 baris pertama dari kumpulan data
Langkah 3: Membuat daftar alamat yang dapat dimasukkan ke dalam API
df[‘Address’] = df[‘blk_no’] + ” ” + df[‘street’]
daftar alamat = daftar(df[‘Address’])
Karena tidak ada kolom alamat, saya menggabungkan kolom yang berisi nomor blok dan nama jalan dan menyimpannya ke kolom baru. Geocoding memerlukan beberapa bentuk alamat sehingga langkah ini diperlukan untuk melanjutkan. Selanjutnya, saya mengubah kolom yang baru dibuat menjadi daftar yang kemudian dapat dijalankan melalui OneMap API.
Langkah 4: Menulis fungsi untuk geocoding
def getcoordinates(alamat):
req = request.get(‘https://developers.onemap.sg/commonapi/search?searchVal=’+address+’&returnGeom=Y&getAddrDetails=Y&pageNum=1’)
resultdict = eval(req.teks)
jika len(hasildict[‘results’])>0:
kembali hasil dict[‘results’][0][‘LATITUDE’], hasil dict[‘results’][0][‘LONGITUDE’]
lain:
lulus
Saya mulai dengan mendefinisikan fungsi sebagai getcoordinates . Menggunakan modul request, saya akan menggunakannya untuk mencari informasi di OneMap API. Alamat harus dimasukkan sebagai string ke dalam URL yang diberikan untuk mengambil informasi. Selanjutnya, saya menggunakan fungsi eval() untuk mengevaluasinya sebagai ekspresi Python. Karena tidak semua alamat memiliki koordinat, saya menggunakan pernyataan if-else untuk hanya mengambil yang memiliki hasil.
Langkah 5: Tulis perulangan for dengan kondisi
Perulangan for akan mulai mengekstrak koordinat sambil memberi tahu Anda jika berhasil, daftar koordinat= []
hitung = 0
gagal_hitung = 0
untuk alamat di daftar alamat:
mencoba:
jika len(getcoordinates(alamat))>0:
hitung = hitung + 1
print(‘Extracting’,count,’out of’,len(addresslist),’addresses’)
daftar koordinat.append(getcoordinates(alamat))
kecuali:
hitung = hitung + 1
hitung_gagal = hitung_gagal + 1
print(‘Gagal mengekstrak’,hitung,’keluar’,len(daftar alamat),’alamat’)
daftar koordinat. tambahkan (Tidak Ada)
print(‘Jumlah Alamat Tanpa Koordinat’,failed_count)
Sekarang, saya mulai dengan membuat daftar kosong untuk menambahkan koordinat yang diekstrak. Selanjutnya, saya menempatkan fungsi count. Dengan melakukan itu, saya dapat mengetahui di mana kemajuan saat ini dan jumlah total alamat yang tidak memiliki koordinat. Ini akan memungkinkan saya untuk melacak dengan mudah. Selanjutnya, saya memasukkan kondisi try else yang memungkinkan perulangan for terus berjalan meskipun salah satu alamat gagal mengambil koordinat apa pun dari API. Ini sangat berguna untuk memastikan loop berjalan dengan lancar, terutama untuk kumpulan data kotor yang tidak dapat menghasilkan hasil apa pun dari API. Selain itu, Anda masih dapat mencapai sebagian besar koordinat. Anda kemudian dapat menyaring alamat kotor yang tersisa dan membersihkannya, membuat hidup Anda lebih mudah karena Anda memiliki lebih sedikit untuk dibersihkan!
Langkah 6: Bergabunglah dengan koordinat yang diperoleh kembali ke DataFrame asli
df_coordinates = pd.DataFrame(daftar koordinat)
df_combined = df.join(df_coordinates)
df_combined = df_combined .rename(columns={0:’Lintang’, 1:’Bujur’})
Terakhir, saya mengubah daftar koordinat menjadi DataFrame dan menggabungkannya ke dataframe asli. Karena indeksnya masih sama, itu akan bergabung dengan sempurna. Saya juga mengganti nama kolom Latitude dan Longitude untuk lebih mencerminkan tipe data dalam kerangka data saya.
Ringkasan
Langkah 1: Mengimpor paket yang relevan Langkah 2: Membaca dataset dengan Pandas dan memeriksanya Langkah 3: Membuat daftar alamat yang dapat dimasukkan ke dalam API Langkah 4: Menulis fungsi untuk geocoding Langkah 5: Menulis perulangan for dengan kondisi Langkah 6: Bergabunglah dengan koordinat yang diperoleh kembali ke DataFrame asli
Saya harap Anda menikmati artikel saya! Anda dapat melihat kode lengkapnya di Github saya di sini.
Geocoding Singapore Coordinates : OneMap API awalnya diterbitkan di Towards AI on Medium, di mana orang-orang melanjutkan percakapan dengan menyoroti dan menanggapi cerita ini.
Diterbitkan melalui Menuju AI