Lewati ke konten utama

Pengantar Data Geospasial di Python

Dalam tutorial ini, Anda akan menggunakan data geospasial untuk memplot jalur Badai Florence dari 30 Agustus hingga 18 September.
Diperbarui 28 Sep 2026  · 13 mnt Baca

Jelajahi bersama AI

ChatGPTClaudePerplexity

grafik geospasial

Dalam tutorial ini, Anda akan mengenal dua paket yang populer untuk bekerja dengan data geospasial: geopandas dan Shapely. Lalu, Anda akan menerapkan kedua paket ini untuk membaca data geospasial menggunakan Python dan memplot jejak Badai Florence dari 30 Agustus hingga 18 September.

Apa itu Data Geospasial?

Data spasial, data geospasial, data GIS atau geodata, adalah sebutan untuk data numerik yang mengidentifikasi lokasi geografis suatu objek fisik seperti bangunan, jalan, kota kecil, kota besar, negara, dan sebagainya berdasarkan sistem koordinat geografis. Dari data spasial, Anda tidak hanya dapat mengetahui lokasi tetapi juga panjang, ukuran, luas, atau bentuk suatu objek. Contoh jenis data spasial yang bisa Anda peroleh adalah: koordinat suatu objek seperti lintang, bujur, dan elevasi. Sistem Informasi Geografis (GIS) atau aplikasi perangkat lunak khusus lainnya dapat digunakan untuk mengakses, memvisualisasikan, memanipulasi, dan menganalisis data geospasial.

Mengapa Data Geospasial?

Data geospasial memiliki banyak sekali aplikasi dalam kehidupan sehari-hari. Salah satunya adalah aplikasi Peta yang Anda gunakan untuk bernavigasi dari satu lokasi ke lokasi lain. Contoh lain yang mungkin Anda lihat setiap hari adalah di kanal cuaca.

tangkapan layar segmen berita cuaca

Ya, data geospasial digunakan untuk merepresentasikan informasi posisi sesuatu terhadap hal-hal lain di sekitarnya: rumah Anda di peta kota, badai di peta dunia, dan sebagainya. Jadi dalam tutorial ini, Anda akan melihat badai Florence yang destruktif dan melacak lokasinya.

Persyaratan paket

Jangan lompat ke depan. Ini bagian penting. Jika Anda tidak yakin sudah memenuhi persyaratan, silakan periksa lagi. Pertama dan terutama, Anda perlu memasang semua paket di bawah ini.

  • Pandas: menyediakan struktur data dan alat analisis data
  • Numpy: paket fundamental untuk komputasi ilmiah dengan Python
  • SciPy:(diucapkan “Sai Pai”) adalah ekosistem perangkat lunak open-source berbasis Python untuk matematika, sains, dan rekayasa
  • RTree: pembungkus Python ctypes untuk libspatialindex yang menyediakan sejumlah fitur pengindeksan spasial tingkat lanjut
  • GDAL: pustaka penerjemah untuk format data geospasial raster dan vektor
  • Fiona: Fiona membaca dan menulis berkas data spasial
  • Shapely: Objek geometris, predikat, dan operasi
  • GeoPandas: memperluas tipe data yang digunakan oleh pandas untuk memungkinkan operasi spasial pada tipe geometris.
  • PySAL: pustaka fungsi analisis spasial yang ditulis dalam Python untuk mendukung pengembangan aplikasi tingkat tinggi.
  • Matplotlib: pustaka plotting 2D untuk Python
  • Missingno: modul visualisasi data hilang untuk Python

Pasang semua paket mengikuti urutan di atas agar semuanya berfungsi. Beberapa paket merupakan prasyarat bagi yang lain, misalnya: untuk memasang GeoPandas, diperlukan Shapely, dan untuk memasang Shapely; RTree, GDAL, dan Fiona harus sudah terpasang. Cara termudah memasang paket adalah: pip install PACKAGE_NAME

Jika Anda menggunakan Windows dan tidak dapat memasang paket dengan cara tersebut, cek situs web ini untuk mengunduh paket terkait dan lakukan pip install PATH_TO_PACKAGE.

Tentang data

Seperti yang mungkin Anda ketahui, badai Florence yang mengerikan baru saja melintasi sebagian Pantai Timur Amerika Serikat, meninggalkan perkiraan kerusakan sebesar 17 miliar USD. Tutorial ini akan membantu Anda mengetahui dari mana asalnya, kapan dan di mana ia menguat, serta memahami lebih jauh bencana alam ini dan menganalisisnya di Python. Ada banyak situs web yang menyediakan informasi tentang badai ini. Misalnya, situs web ini menyediakan data untuk beberapa badai dan topan di Amerika Serikat dari 1902 hingga 2018, jadi ada banyak sekali data yang bisa Anda gunakan nanti. Untuk tutorial ini, Anda hanya akan menggunakan data Badai Florence

Anda juga akan menggunakan data geospasial peta AS dari internet. Postingan blog oleh Eric Celeste memiliki berbagai berkas data batas untuk county dan state di AS. Data yang digunakan dalam tutorial ini adalah berkas GeoJSON US States, 5m.

 # Load all importance packages
import geopandas
import numpy as np
import pandas as pd
from shapely.geometry import Point

import missingno as msn

import seaborn as sns
import matplotlib.pyplot as plt

% matplotlib inline

Pertama, mari lihat geospatial dataframe pertama: US States Geodata

# Getting to know GEOJSON file:
country = geopandas.read_file("data/gz_2010_us_040_00_5m.json")
country.head()
dataframe geospasial

Dengan memeriksa tipe dataframe yang baru saja Anda muat, Anda dapat melihat bahwa ini adalah Geo Data Frame, yang memiliki semua karakteristik reguler dari Pandas DataFrame.

type(country)
geopandas.geodataframe.GeoDataFrame

Memeriksa tipe data kolom yang berisi koordinat: ini adalah GeoSeries.

type(country.geometry)
geopandas.geoseries.GeoSeries

Setiap nilai dalam GeoSeries adalah Objek Shapely. Bisa berupa:

  • Point
  • Line
  • Polygon
  • MultiPolygon

Setiap objek dapat digunakan untuk jenis objek fisik yang berbeda, seperti: Point untuk bangunan, Line untuk jalan, Polygon untuk kota, dan MultiPolygon untuk negara dengan banyak kota di dalamnya. Untuk informasi lebih lanjut tentang tiap objek Geometrik, baca artikel ini: https://shapely.readthedocs.io/en/stable/manual.html#geometric-objects

type(country.geometry[0])
shapely.geometry.multipolygon.MultiPolygon

Mirip dengan Pandas DataFrame, GeoDataFrame juga memiliki atribut plot, yang memanfaatkan karakter geometrinya dalam dataframe untuk memplot peta:

country.plot()
<matplotlib.axes._subplots.AxesSubplot at 0x1cfe68c1358>
atribut plot

Seperti yang Anda lihat, peta AS relatif kecil dibandingkan dengan bingkai. Ini karena informasinya mencakup Alaska, Hawaii, dan Puerto Riko, yang tersebar. Untuk tujuan tutorial ini, Anda dapat mengecualikan Alaska dan Hawaii karena badai tidak mendekati kedua negara bagian tersebut. Anda juga dapat menambahkan ukuran figur dan warna untuk menyesuaikan plot Anda sendiri:

# Exclude Alaska and Hawaii for now
country[country['NAME'].isin(['Alaska','Hawaii']) == False].plot(figsize=(30,20), color='#3B3C6E');
peta as

Tidak terlalu sulit, bukan! Sekarang Anda sudah memiliki peta AS, mari muat data badai:

florence = pd.read_csv('data/florence.csv')
florence.head()
data badai

Analisis Data Eksploratif

Ini selalu hal pertama yang Anda lakukan saat memuat dataset apa pun:

  • Memeriksa informasi, tipe data
  • Adanya nilai hilang
  • Data statistik
florence.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 105 entries, 0 to 104
Data columns (total 11 columns):
AdvisoryNumber    105 non-null object
Date              105 non-null object
Lat               105 non-null float64
Long              105 non-null float64
Wind              105 non-null int64
Pres              105 non-null int64
Movement          105 non-null object
Type              105 non-null object
Name              105 non-null object
Received          105 non-null object
Forecaster        104 non-null object
dtypes: float64(2), int64(2), object(7)
memory usage: 9.1+ KB

Memeriksa nilai hilang menggunakan paket missingno. Ini paket yang berguna dengan visualisasi untuk menunjukkan data hilang. Seperti yang Anda lihat di bawah, hanya ada satu nilai hilang di kolom "Forecaster" yang tidak Anda perlukan untuk tutorial ini. Jadi Anda dapat mengabaikannya untuk saat ini.

# Notice you can always adjust the color of the visualization
msn.bar(florence, color='darkolivegreen');
diagram batang

Lihat beberapa informasi statistik; beberapa bisa sangat berguna seperti kecepatan angin rata-rata, kecepatan angin maksimum dan minimum dari badai ini, dan sebagainya.

# Statistical information
florence.describe()
  Lat Long Wind Pres
count 105.000000 105.000000 105.000000 105.000000
mean 25.931429 56.938095 74.428571 981.571429
std 7.975917 20.878865 36.560765 22.780667
min 12.900000 18.400000 25.000000 939.000000
25% 18.900000 41.000000 40.000000 956.000000
50% 25.100000 60.000000 70.000000 989.000000
75% 33.600000 76.400000 105.000000 1002.000000
max 42.600000 82.900000 140.000000 1008.000000

Untuk sebagian besar data, Anda perlu membersihkan dan mengambil hanya yang Anda butuhkan untuk dikerjakan. Di sini, Anda hanya memerlukan waktu, koordinat: lintang dan bujur, kecepatan angin, tekanan, dan Nama. Movement dan Type bersifat opsional, tetapi sisanya bisa dihapus.

# dropping all unused features:
florence = florence.drop(['AdvisoryNumber', 'Forecaster', 'Received'], axis=1)
florence.head()
dataframe 1

Biasanya, jika Anda memplot data itu sendiri, tidak perlu memberi perhatian ekstra pada koordinat. Namun, jika Anda ingin tampilannya mirip dengan peta, penting untuk memeriksa bujur dan lintang. Di sini bujur berada di barat, Anda perlu menambahkan tanda "-" di depan angkanya agar data terplot dengan benar:

# Add "-" in front of the number to correctly plot the data:
florence['Long'] = 0 - florence['Long']
florence.head()
dataframe 2

Lalu Anda dapat mengombinasikan Lintang dan Bujur untuk membuat koordinat badai, yang selanjutnya akan diubah menjadi GeoPoint untuk tujuan visualisasi.

# Combining Lattitude and Longitude to create hurricane coordinates:
florence['coordinates'] = florence[['Long', 'Lat']].values.tolist()
florence.head()
dataframe 3
# Change the coordinates to a geoPoint
florence['coordinates'] = florence['coordinates'].apply(Point)
florence.head()
dataframe 4

Memeriksa tipe dataframe florence dan kolom coordinates dari data florence. Ini adalah pandas DataFrame dan pandas Series.

type(florence)
pandas.core.frame.DataFrame
type(florence['coordinates'])
pandas.core.series.Series

Setelah mengonversi data menjadi data geospasial, kita akan memeriksa kembali tipe dataframe florence dan kolom coordinates dari data Florence. Sekarang menjadi Geo DataFrame dan GeoSeries.

# Convert the count df to geodf
florence = geopandas.GeoDataFrame(florence, geometry='coordinates')
florence.head()
dataframe 5
type(florence)
geopandas.geodataframe.GeoDataFrame
type(florence['coordinates'])
geopandas.geoseries.GeoSeries

Perhatikan bahwa meskipun sekarang menjadi Geo DataFrame dan Geo Series, ia tetap berperilaku seperti DataFrame dan Series biasa. Artinya Anda masih dapat melakukan penyaringan, groupby untuk dataframe atau mengekstrak nilai min, maks, atau rata-rata dari kolom.

# Filtering from before the hurricane was named.
florence[florence['Name']=='Six']
dataframe 6
# Groupping by name to see how many names it has in the data set:
florence.groupby('Name').Type.count()
Name
FLORENCE     6
Florence    85
SIX          4
Six         10
Name: Type, dtype: int64

Mencari kecepatan angin rata-rata dari badai Florence:

print("Mean wind speed of Hurricane Florence is {} mph and it can go up to {} mph maximum".format(round(florence.Wind.mean(),4),
                                                                                         florence.Wind.max()))
Mean wind speed of Hurricane Florence is 74.4286 mph and it can go up to 140 mph maximum

Jadi kecepatan angin rata-rata badai Florence adalah 74,43 mil per jam (119,78 km per jam) dan maksimumnya 140 mil per jam (225,308 km per jam). Untuk membayangkan betapa menakutkannya kecepatan angin ini, situs web Skala Angin Beaufort, yang dikembangkan oleh Angkatan Laut Kerajaan Inggris, menunjukkan tampilan efek angin di air dan di darat. Dengan kecepatan 48 hingga 55 mil per jam, angin sudah dapat mematahkan dan mencabut pohon, serta menyebabkan "kerusakan struktural yang cukup besar".

badai

Anda tidak ingin berada di sana pada saat itu.

Visualisasi

Serupa dengan pandas DataFrame, GeoDataFrame juga memiliki atribut .plot. Namun, atribut ini memanfaatkan koordinat di dalam GeoDataFrame untuk memetakkannya. Mari kita lihat:

florence.plot(figsize=(20,10));
geodataframe

Apa yang terjadi? Yang Anda lihat hanyalah sekumpulan titik tanpa navigasi. Apakah ada yang salah?
Tidak, semuanya baik-baik saja. Karena dataframe ini hanya memiliki informasi koordinat (lokasi) badai Florence pada setiap titik waktu, kita hanya bisa memplot posisinya pada peta kosong.

Jadi, langkah berikutnya adalah memplot posisi badai pada peta AS untuk melihat di mana ia menghantam dan seberapa kuat saat itu. Untuk melakukannya, Anda akan menggunakan koordinat peta AS (data yang kita muat di awal) sebagai dasar dan memplot posisi badai Florence di atasnya.

 # Plotting to see the hurricane overlay the US map:
fig, ax = plt.subplots(1, figsize=(30,20))
base = country[country['NAME'].isin(['Alaska','Hawaii']) == False].plot(ax=ax, color='#3B3C6E')

# plotting the hurricane position on top with red color to stand out:
florence.plot(ax=base, color='darkred', marker="*", markersize=10);
plot badai florence di peta as

Terlihat bagus! Sekarang, kita akan menyelesaikannya dengan lebih banyak detail seperti:

  • Menambahkan judul
  • Mewarnai posisi badai berdasarkan kecepatan angin untuk melihat seberapa kuat badai saat menghantam tiap kota.
  • Menghapus sumbu
  • Menambahkan legenda
  • Menyimpan hasil ke berkas gambar untuk digunakan nanti
 fig, ax = plt.subplots(1, figsize=(20,20))
base = country[country['NAME'].isin(['Alaska','Hawaii']) == False].plot(ax=ax, color='#3B3C6E')
florence.plot(ax=base, column='Wind', marker="<", markersize=10, cmap='cool', label="Wind speed(mph)")
_ = ax.axis('off')
plt.legend()
ax.set_title("Hurricane Florence in US Map", fontsize=25)
plt.savefig('Hurricane_footage.png',bbox_inches='tight');
badai florence di peta as

Jadi badai berada pada titik terkuat ketika masih di lepas pantai dekat pesisir timur. Saat mendekati daratan, badai mulai kehilangan kekuatannya, tetapi pada kecepatan angin kisaran 60 hingga 77 mil per jam, dampaknya tetap bisa sangat buruk.

Kesimpulan

Pekerjaan yang bagus! Anda telah mempelajari beberapa langkah yang diperlukan untuk bekerja dengan data geospasial di Python. Anda juga belajar cara memplot data geospasial dan menyesuaikan bentuk, warna, dan overlay plot untuk menceritakan sebuah kisah. Jika Anda ingin melatih keterampilan, ada banyak data geospasial yang tersedia online untuk Anda coba. Salah satunya adalah situs cuaca yang saya cantumkan di atas.

Untuk referensi, silakan lihat buku: “Python Geospatial Development Essentials” oleh Karim Bahgat (2015) untuk panduan yang lebih mendalam.

Jika Anda ingin menghubungi saya, Anda dapat mengirim email ke dqvu.ubc@gmail.com atau terhubung melalui LinkedIn. Selamat belajar dan tetap jaga keselamatan!

Jika Anda ingin mempelajari lebih lanjut tentang data geospasial di Python, ikuti kursus Visualizing Geospatial Data in Python dari DataCamp.

Di bawah ini adalah data yang digunakan dalam tutorial ini:

Topik
Python
Visualisasi Data
Analisis Data

Pelajari lebih lanjut tentang Python

Kursus

Pengantar Python

4 jam
7M
Kuasai dasar-dasar analisis data dengan Python dalam 4 jam. Kursus online ini memperkenalkan antarmuka Python dan pustaka populer.
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