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