Lewati ke konten utama

Geocoding untuk Data Scientist: Pengantar dengan Contoh

Dalam tutorial ini, Anda akan mempelajari tiga cara berbeda untuk mengonversi alamat menjadi lintang dan bujur menggunakan Geopy.
Diperbarui 28 Sep 2026  · 9 mnt Baca

Jelajahi bersama AI

ChatGPTClaudePerplexity

Saat bekerja dengan data dunia nyata, Anda tidak bisa begitu saja berasumsi bahwa dataset memuat semua informasi penting untuk menyelesaikan proyek data science Anda. Sebagian besar waktu, Anda hanya memiliki informasi parsial dan harus memperkaya data dengan fitur tambahan.

Bisa saja dataset berisi alamat, tetapi pada saat yang sama, lintang dan bujur tidak tersedia. Dalam kasus tersebut, langkah pertama untuk memperkaya data adalah menambahkan sepasang koordinat ini. Proses mengonversi alamat menjadi lintang dan bujur ini disebut geocoding.

Geocoding sangat penting di banyak bidang, seperti real estat, keuangan, dan logistik. Tanpa teknik ini, Anda tidak dapat menganalisis dan memvisualisasikan data ke dalam peta. Dalam tutorial ini, kita akan melakukan geocoding di Python berkat sebuah library penyelamat bernama Geopy. Mari mulai!

Apa itu Geocoding?

Geocoding adalah proses mengonversi alamat (seperti "1600 Amphitheatre Parkway, Mountain View, CA") menjadi koordinat geografis (seperti lintang 37.423021 dan bujur -122.083739), yang dapat Anda gunakan untuk menempatkan penanda pada peta atau menentukan posisi peta. Sederhananya, ini adalah proses komputasional mengubah deskripsi alamat fisik menjadi lokasi di permukaan Bumi.

Proses geocoding sering kali melibatkan interpolasi lokasi spasial, seperti jalan atau bidang tanah, dalam cakupan geografis suatu peta. Lokasi yang dihasilkan dikeluarkan sebagai koordinat numerik, cocok untuk digunakan dalam analisis spasial atau visualisasi peta.

Geocoding menggunakan berbagai sumber data untuk mengonversi alamat menjadi lokasi geografis. Sumber utamanya adalah basis data referensi jalan yang berisi nama jalan dan rentang alamat dalam suatu county atau area tertentu. Sumber lain mencakup basis data kode pos, nama kota, dan basis data tempat penting (seperti taman atau tengara).

Geocoding tidak hanya tentang mendapatkan koordinat untuk suatu alamat. Ini juga digunakan dalam analisis spasial, penambangan data, dan pembersihan data. Misalnya, bisnis menggunakan geocoding untuk menganalisis informasi demografis guna mendorong kampanye pemasaran terarah atau mengoptimalkan rute pengantaran. Dalam ranah keselamatan publik, geocoding digunakan untuk memetakan lokasi kejadian darurat agar dapat mengerahkan layanan darurat terdekat dengan cepat.

Dalam konteks data science, geocoding adalah langkah krusial dalam pembuatan visualisasi geospasial dan dapat digunakan dalam berbagai aplikasi, seperti prediksi harga real estat, optimasi rute pengiriman, dan perencanaan respons bencana.

Apa itu Geopy?

Ilustrasi oleh Penulis

Geopy adalah library Python sumber terbuka yang khusus menambahkan lokasi ke data melalui beragam layanan geocoding, seperti Google Maps, Open StreeMap, dan ArcGIS.

Anda mungkin bertanya mengapa tidak langsung menggunakan layanan geocode alih-alih library Python. Keunggulan Geopy adalah Anda dapat memanfaatkan layanan geocoding ini hanya dengan beberapa baris kode. Memang, Geopy telah mengimplementasikan kelas untuk masing-masing layanan tersebut, dan Anda bisa dengan mudah beralih dari satu API layanan ke layanan lainnya.

Contoh Proyek Geocoding Praktis

Dalam artikel ini, kita akan menganalisis dataset Canada Museum dari Kaggle. Dataset ini menyediakan informasi tentang museum yang berlokasi di Kanada. Kumpulan museum ini bisa berguna untuk memprediksi harga akomodasi Airbnb di Toronto; misalnya Anda mungkin memperhatikan bahwa harga sewa suatu listing meningkat semakin dekat lokasinya ke titik-titik menarik, seperti museum, restoran, kafe, dan sebagainya.

Mari kita lihat datasetnya:

import pandas as pd
import geopy

l_cols= ['Name','Street Address','City','State','Zipcode']
df = pd.read_csv('/kaggle/input/canada-museums/museums list CAN.csv', encoding = "ISO-8859-1",usecols=l_cols)
df = df[df.City=='Toronto']
df.head()

dataset

Dari gambaran ini, kita dapat melihat beberapa kolom memuat informasi alamat, seperti nama museum, alamat jalan, kota, provinsi, dan kode pos.

Untuk langkah selanjutnya, kita memerlukan satu kolom unik yang menggabungkan semua informasi dari kolom-kolom tersebut. Bagaimana caranya? Cara paling efisien untuk menggabungkan lebih dari dua kolom adalah menggunakan pandas.series.str.cat(), yang memungkinkan kita menentukan pemisah yang diinginkan antar kolom:

df['Country'] = 'Canada'
l_cols_concat = ['Street Address','City','State','Zipcode','Country']
df['unique_address'] = df['Name'].str.cat(others=df[l_cols_concat], sep=',',na_rep='')
df.head()

dataset with unique address

Kita dapat membuat variabel string ‘address1’ yang memuat alamat unik pada baris pertama:

address1 = df['unique_address'].iloc[0]
print(address1)
# Bizune Event Gallery,452 Richmond St W,Toronto,ON,M5V 1Y1,Canada

Kita akan menggunakannya pada langkah berikutnya untuk mencoba berbagai layanan geocoding pada satu alamat. Setelah jelas bagaimana Geopy mengekstrak lokasi, teknik ini bisa diperluas ke seluruh kolom pada dataframe pandas. Kita akan mencoba penyedia utama berikut:

  • Google Maps
  • OpenStreetMap
  • ArcGIS

Geocoding dengan Google Maps API

Metode paling populer untuk mengonversi alamat menjadi koordinat adalah menggunakan Google Maps API.

Meskipun Google Maps menyediakan layanan berbayar, Anda mendapatkan kredit gratis $200 saat pertama kali membuat akun.

Untuk mendapatkan akses ke layanan, Anda perlu membuat akun baru di Google Maps Platform. Tersedia tutorial yang bagus untuk membantu Anda membuat kunci API.

GM_API_KEY = 'your_api_key'
from geopy.geocoders import GoogleV3
geolocator = GoogleV3(api_key=GM_API_KEY)

GoogleV3 adalah kelas yang diimplementasikan untuk menggunakan Google Maps v3 API. Pertama, kita bisa mencoba mengekstrak lokasi dari satu alamat:

location = geolocator.geocode(address1)
print('Latitude: '+str(location.latitude)+', Longitude: '+str(location.longitude))

image5.png

Setelah itu kita bisa mencoba memperluas operasi ini ke field unique_address yang telah kita buat sebelumnya.

def service_geocode(g_locator, address):
    location = g_locator.geocode(address)
    if location!=None:
      return (location.latitude, location.longitude)
    else:
      return np.NaN

Kita dapat menggunakan apply() untuk menerapkan fungsi tersebut ke semua baris unique_address:

df['LAT_LON'] = df['unique_address'].apply(lambda x:service_geocode(geolocator,x))
df[['unique_address','LAT_LON']].head()

image3.png

Geocoding dengan OpenStreetMap API

Karena OpenStreetMap adalah basis data dan proyek geografis gratis terbesar yang dapat disunting, API-nya tidak dikenai biaya. Untuk melakukan geolokasi satu alamat, Anda hanya perlu memberikan email akun OSM Anda sebagai input ke kelas Nominatim, alih-alih kunci API:

from geopy.geocoders import Nominatim
geolocator = Nominatim(user_agent="your_email")
location = geolocator.geocode(address1)
print(location)
# None

Sayangnya, lokasi yang dikembalikan oleh OpenStreetMap API adalah None karena tidak mengenali alamat tersebut.

Memang, API ini kesulitan menemukan sebagian besar alamat jalan dalam dataset karena tidak memiliki cakupan alamat yang baik di semua area.

Karena itu, kita perlu membuat field lain unique_address_osm dengan informasi yang lebih sedikit:

l_cols_concat = ['City','State','Country']
df['unique_address_osm'] = df['Street Address'].str.cat(others=df[l_cols_concat], sep=',',na_rep='')
address1_osm = df['unique_address_osm'].iloc[0]

Setelah itu, kita teruskan alamat baru dan coba lagi mengekstrak lintang dan bujur dari alamat jalan:

address1_osm = df['unique_address_osm'].iloc[0]
location = geolocator.geocode(address1_osm)
print('Latitude: '+str(location.latitude)+', Longitude: '+str(location.longitude))

image8.png

Seperti sebelumnya, kita menerapkan fungsi service_geocode() ke seluruh kolom unique_address_osm:

df['LAT_LON_osm'] = df['unique_address_osm'].apply(lambda x: service_geocode(geolocator,x))
df[['unique_address_osm','LAT_LON','LAT_LON_osm']].head()

image11.png

Meskipun kita tidak menyertakan nama museum, OpenStreetMap mengembalikan koordinat yang sangat mirip dengan GoogleMapsAPI.

Geocoding dengan ArcGIS API

ArcGIS adalah perangkat lunak yang memungkinkan analisis dan visualisasi data geospasial. ArcGIS juga menyediakan layanan lokasi seperti Google Maps dan OpenStreetMap.

from geopy.geocoders import ArcGIS
geolocator_arcgis = ArcGIS()
location = geolocator_arcgis.geocode(address1)
print('Latitude: '+str(location.latitude)+', Longitude: '+str(location.longitude))

image2.png

Kali ini tidak ada masalah dalam memperoleh sepasang koordinat. Kita bisa melanjutkan dengan memperluas operasi ini ke semua alamat:

df['LAT_LON_arcgis'] = df['unique_address'].apply(lambda x: service_geocode(geolocator_arcgis,x))
df[['unique_address','LAT_LON','LAT_LON_osm','LAT_LON_arcgis']].head()

image6.png

Melihat baris-baris pertama dataset, kita dapat melihat pasangan koordinat yang diperoleh dengan ArcGIS mirip dengan yang diperoleh sebelumnya, hanya ada sedikit perbedaan.

Mengukur jarak antar dua tempat

Fungsionalitas lain dari Geopy adalah memungkinkan kita menghitung jarak antara dua titik. Ini dimungkinkan menggunakan jarak geodesik yang diperoleh dari dua pasangan (lintang, bujur).

from geopy.distance import geodesic
point1 = df.LAT_LON_arcgis.iloc[0]
point2 = df.LAT_LON_arcgis.iloc[1]
distance = geodesic(point1, point2)
print('The distance between {} and {} is {} meters'.format(df.Name.iloc[0],df.Name.iloc[1],distance.meters))

image1.png

Jarak antara dua museum ini kira-kira 2 kilometer.

Pemikiran Akhir

Selesai! Anda telah mempelajari tiga cara berbeda untuk mengonversi alamat menjadi lintang dan bujur menggunakan Geopy. Ini adalah titik awal untuk analisis data geospasial yang lebih kompleks dan lanjutan.

Jika Anda tertarik memulai analisis geospasial tanpa kode, cara terbaik adalah melihat tutorial DataCamp Bekerja dengan Data Geospasial: Panduan Analisis di Power BI.

Untuk membangun visualisasi dan perhitungan yang lebih canggih, Tableau bisa menjadi alat yang tepat bagi Anda. Kursus DataCamp Introduction to Tableau ini akan memungkinkan Anda membuat visualisasi data dinamis dan menyelesaikan berbagai masalah analitis.

Jika Anda penggemar bahasa R, kursus hebat ini akan membantu membuat peta interaktif dengan leaflet. Jika Anda setia pada Python, pertimbangkan untuk mengambil Visualizing geospatial data in Python, yang membantu Anda membuat visualisasi yang menarik menggunakan geopandas dan folium.


Eugenia Anello's photo
Author
Eugenia Anello
LinkedIn

Data Scientist - CRIF

Topik
Python

Pelajari Topik yang Disebutkan dalam Tutorial Ini!

Kursus

Bekerja dengan Data Geospasial di Python

4 jam
18.3K
Kursus ini akan menunjukkan kepada Anda cara mengintegrasikan data spasial ke dalam alur kerja Data Science Python Anda.
Lihat DetailRight Arrow
Mulai Kursus
Lihat SelengkapnyaRight Arrow
Terkait

blogs

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

blogs

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

blogs

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

Lihat SelengkapnyaLihat Selengkapnya