Visualisasi Peta Choropleth dengan Folium

Visualisasi Peta Choropleth dengan Folium

Peta choropleth adalah jenis peta tematik yang menggunakan pola warna atau gradasi warna untuk menggambarkan variasi data di wilayah geografis yang berbeda. Pada peta choropleth, wilayah geografis seperti negara, provinsi, atau kota dibagi menjadi beberapa area atau poligon yang mewakili unit analisis.

Peta choropleth biasanya digunakan untuk menggambarkan data kuantitatif seperti populasi, pertumbuhan ekonomi, tingkat pengangguran, dan sebagainya. Setiap wilayah di peta diisi dengan warna atau gradasi warna yang mencerminkan nilai data yang sedang diamati.

Membuat peta choropleth pada python dapat dilakukan menggunakan pustaka folium. Folium merupakan wrapper dari Leaflet, pustaka JavaScript untuk pemetaan interaktif. Leaflet menyediakan banyak fitur dan fungsionalitas untuk membuat peta yang interaktif dan responsif di berbagai platform.

Membuat Peta Choropleth dengan Folium

Pada tutorial ini, kita menggunakan data geoJSON dari github ans-4175/peta-indonesia-geojson. File ini menyimpan informasi batas-batas provinsi di Indonesia (saat tulisan ini dibuat data geografis tersedia untuk 34 provinsi).

Untuk membuat peta, kita gunakan fungsi Map. Terdapat beberapa parameter yang dapat diatur , diantaranya adalah location dan zoom_start. parameter location berisi nilai latitude dan longitude yang menjadi titik pusat saat peta ditampilkan. Nilai yang kita gunakan pada contoh berikut menunjukkan lokasi pertengahan untuk Indonesia. Parameter lainnya, zoom_start menunjukkan seberapa besar peta akan ditampilkan dibandingkan ukuran default.

Selanjutnya kita dapat menambahkan layer dasar pada peta menggunakan fungsi TileLayer. Di sini kita mengunakan "cartodpositron". Nilai default dari TileLayer pada peta adalah "OpenStreetView" dimana peta akan menampilkan informasi sangat detail termasuk jaringan jalan. Adapun "cartodpositron" akan membuat peta dasar dengan warna terang tanpa detail yang tidak kita perlukan sehingga cocok untuk visualisasi choropleth.

Selanjutnya, buat layer Choropleth dengan menentukan parameter geo_data yaitu prov_geojson serta beberapa pengaturan tambahan lainnya.

Hasil kode berikut menampilkan peta wilayah Indonesia dengan batas-batas setiap provinsi.

Python

from folium import Map, TileLayer, Choropleth
from folium.features import GeoJsonTooltip
import requests


# Mengunduh data GeoJSON yang berisi info batas provinsi
url = "https://raw.githubusercontent.com/ans-4175/peta-indonesia-geojson/master/indonesia-prov.geojson"
response = requests.get(url)
prov_geojson = response.json()

# Membuat objek peta Folium dan mengarahkan pada lokasi peta Indonesia
map = Map(location=[-2.5489, 118.0149], zoom_start=5)

# Menambahkan layer dasar peta
TileLayer("cartodbpositron").add_to(map)

# Menambahkan layer batas provinsi di Indonesia
Choropleth(
    geo_data=prov_geojson,
    name="Provinsi",
    fill_opacity=0.8,
    fill_color="red",
    line_opacity=1,
    line_color="#2F2F2F",
    line_weight=0.5,
).add_to(map)

# menyimpan peta dalam format HTML
# map.save("map_1.html")

# Menampilkan peta
map

Output

Untuk melihat hasil dalam format HTML klik di sini

Peta Chorofleth dengan Folium Python

Memahami Objek GeoJSON

Sebelum lebih jauh melanjutkan pembuatan peta choropleth, kita akan melihat lebih dalam konten yang tersimpan pada objek prov_geojson. Penting untuk memahaminya serta akan berkaitan dengan langkah selanjutnya yaitu menampilkan nilai PDB per provinsi.

JSON

Visualisasi Peta Chorofleth dengan Folium
Tampilan pada Firefox (menggunakan JSON Beautifier & Editor)

Setiap objek geoJSON memiliki struktur yang mungkin saja agak berbeda-beda. Objek prov_geojson yang kita gunakan tersusun bebarapa key dengan key utama yaitu features. Key ini berisi nilai list dengan 34 elemen. Contoh pada gambar di atas, elemen pertama dari features, di dalamnya tersusun dari beberapa key lainnya lagi yaitu type, geometry, id, dan properties.

Key geometry berisi informasi poligon/multipoligon dengan berbagai koordinat yang menunjukkan batas-batas provinsi tersebut dan menjadi dasar bagaimana layer choropleth dibentuk. Key properties tersusun dari 4 key yaitu ID, kode, Propinsi dan SUMBER. Data geoJSON pada dasarnya tersusun dalam format dict. Oleh karena itu, kita dapat mengakses nilai-nilai yang diperlukan menggunakan key.

Contohnya, untuk mendapatkan kode dan nama provinsi pada elemen pertama dari features maka dapat dilakukan sebagai berikut:

Python

print(prov_geojson["features"][0]["properties"]["kode"])
# atau
# print(prov_geojson.get("features")[0].get("properties").get("kode"))


print(prov_geojson["features"][0]["properties"]["Propinsi"])
# atau
# print(prov_geojson.get("features")[0].get("properties").get("Propinsi"))

Output

52
NUSATENGGARA BARAT

Karena nilai dari key features berupa list, maka kita dapat melakukan iterasi untuk melihat setiap elemennya dengan cara berikut:

Python

for prov in province_geojson["features"]:
    print(prov["properties"])

Output

{'ID': 2, 'kode': 52, 'Propinsi': 'NUSATENGGARA BARAT', 
 'SUMBER': 'Peta Dasar BAKOSURTANAL Skala 1 : 250.000'}

{'ID': 3, 'kode': 75, 'Propinsi': 'GORONTALO', 
 'SUMBER': 'Peta Dasar BAKOSURTANAL Skala 1 : 250.000'}

{'ID': 4, 'kode': 74, 'Propinsi': 'SULAWESI TENGGARA', 
 'SUMBER': 'Peta Dasar BAKOSURTANAL Skala 1 : 250.000'}

...

Informasi ini penting, karena mungkin kita perlu mengakses data-data ini, khususnya ketika menggabungkan dengan data-data lainnya dari luar geoJSON tersebut.

Menambahkan Data pada Peta

Tujuan pembuatan peta choropleth yaitu menunjukkan perbedaan nilai antara wilayah. Perbedaan ini divisualisasikan dengan perbedaan atau gradasi. Pada contoh berikut kita akan menampilkan data PDB menurut provinsi di Indonesia tahun 2020. Contoh data sudah disiapkan dalam format CSV : pdb_ind_2020.csv.

Python

import pandas as pd

data_pdb = pd.read_csv("pdb_ind_2020.csv")

data_pdb.head()

Output

   Kode        Provinsi  PDB.2020.triliun
0    11            ACEH            166.37
1    12  SUMATERA UTARA            811.19
2    13  SUMATERA BARAT            241.89
3    14            RIAU            727.60
4    15           JAMBI            205.08

Data terdiri dari 3 kolom yaitu Kode, Provinsi dan PDB.2020.triliun. Kolom Kode pada data_pdb berisi info yang sama dengan key kode pada data prov_geojson yaitu menggunakan aturan pengkodean dari BPS. Oleh karena itu kita dapat menghubungkan kedua data sehingga dapat menampilkan informasi nilai PDB untuk masing-masing provinsi yang bersesuaian.

Parameter tambahan yang kita atur yaitu data, columns dan key_on. Parameter data adalah objek data yang akan ditampilkan yaitu data_pdb. Parameter columns adalah kolom-kolom pada objek data_pdb yang menjadi perhatian. Penghubung antara objek prov_geojson dan data_pdb ditentukan pada parameter key_on. Dalam hal ini keduanya memiliki identitas yang sama yaitu Kode pada data_pdb dan feature.properties.kode pada prov_geojson.

Hal lainnya yang dapat disesuaikan adalah fill_color. Terdapat banyak pallete built-in yang dapat digunakan seperti "Y1Gn", "YlOrBr", "YlOrRd", "OrRd", "RdPu", "PuRd", "Greens" dan sebagainya. Jika belum sesuai dapat pula membuat palette kustom.

Python

# # Membuat objek peta Folium
map = Map(location=[-2.5489, 118.0149], zoom_start=5)

# Menambahkan layer dasar peta
TileLayer("cartodbpositron").add_to(map)

# Menambahkan layer batas provinsi di Indonesia
choropleth = Choropleth(
    geo_data=prov_geojson,
    name="Produk Domestik Bruto",
    data=data_pdb,
    columns=["Kode", "PDB.2020.triliun"],
    key_on="feature.properties.kode",
    fill_color="YlGn",
    fill_opacity=0.8,
    line_opacity=1,
    line_weight=0.5,
).add_to(map)

# menyimpan peta dalam format HTML
# map.save("map_2.html")

# Menampilkan peta interaktif
map

Output

Untuk melihat dalam format HTML klik di sini

Peta Chorofleth dengan Folium Python

Menambah Informasi pada Tooltip

Peta choropleth sebelumnya dapat menampilkan perbedaan nilai PDB antar provinsi di Indonesia. Namun kita belum bisa melihat nilai PDB setiap provinsi. Kita dapat menambah informasi tersebut melalui tooltip. Tooltip merupakan tampilan yang tampil ketika kita menyorot area tertentu (popup) pada peta.

Kita akan menambahkan tooltip untuk menampilkan nama provinsi serta nilai PDB dari provinsi tersebut setiap kali menyorot area suatu provinsi. Penambahan tooltip ini dapat dilakukan melalui fungsi GeoJsonTooltip. Fungsi GeoJsonTooltip hanya mengakses kolom-kolom pada objek geoJSON saja yaitu prov_geojson. Sementara itu, data PDB yang ingin ditampilkan berada pada objek data_pdb dan tidak dikenali oleh fungsi ini. Untuk mengatasinya kita perlu menambahkan informasi nilai PDB ke dalam objek prov_geojson.

Agar memperjelas langkah-langkah yang dilakukan, dapat kita buat dalam bentuk fungsi. Fungsi akan menerima argumen berupa kode provinsi, berdasarkan kode tersebut, dicari indeks kode yang sesuai pada data_pdb. Setelah indeks di peroleh, ambil nilai kolom PDB.2020.triliun dari data pada posisi indeks tersebut.

Selanjutnya lakukan iterasi pada data prov_geojson. Pada setiap iterasi tambahkan informasi nilai pdb di dalam key pdb. Nilai kita ambil menggunakan fungsi yang dibuat sebelumnya. Untuk lebih memperjelas tampilan, kita dapat memformat data atau memberi tambahan teks tertentu.

Setelah objek prov_geojson memiliki informasi data pdb, kita dapat membuat tooltip menggunakan fungsi . Pada fungsi GeoJsonTooltip. Parameter fields diisi dengan info apa saja yang akan dimunculkan pada tooltip. Kita juga dapat memberi nama alias untuk setiap info tersebut melalui parameter aliases. Jika diperlukan kita dapat menambahkan styling menggunakan format CSS.

Python

import locale

# Mengatur locale ke bahasa Indonesia (format angka)
locale.setlocale(locale.LC_ALL, "id_ID.UTF-8")

# Fungsi untuk mengambil nilai PDB menurut kode provinsi
def pdb_by_kode(kode_prov) -> int:
    idx = data_pdb[data_pdb["Kode"] == kode_prov].first_valid_index()
    return data_pdb.loc[idx, "PDB.2020.triliun"]


# menambahkan data pdb (yang sudah di format)
# ke dalam objek geoJSON
for prov in prov_geojson["features"]:
    prov_kode = prov["properties"]["kode"]
    formatted_text = "{:n}".format(pdb_by_kode(prov_kode))
    prov["properties"]["pdb"] = f"Rp{formatted_text} Triliun"


# Membuat objek peta Folium
map = Map(
    location=[-2.5489, 118.0149], zoom_start=5, title="PDB Indonesia Tahun 2020"
)

# Menambahkan layer dasar peta
TileLayer("cartodbpositron").add_to(map)

# Menambahkan layer batas provinsi di Indonesia
choropleth = Choropleth(
    geo_data=prov_geojson,
    name="Produk Domestik Bruto",
    data=data_pdb,
    columns=["Kode", "PDB.2020.triliun"],
    key_on="feature.properties.kode",
    fill_color="PuRd",
    fill_opacity=0.8,
    line_opacity=1,
    line_weight=0.5,
).add_to(map)

# Menambahkan Tooltip pada peta
tooltip = GeoJsonTooltip(
    fields=["Propinsi", "pdb"],
    aliases=["Provinsi :", "PDB 2020 :"],
    style=(
        """background-color: #fdfdfd; 
        color: #2f2f2f; 
        font-family: arial;
        font-size: 12px; 
        padding: 10px;"""
    ),
)

choropleth.geojson.add_child(tooltip)

# menyimpan peta dalam format HTML
#map.save("map_3.html")

# Menampilkan peta interaktif
map

Output

Untuk melihat dalam format HTML klik di sini

Peta Chorofleth dengan Folium Python

Selamat mencoba!

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *

Daftar Isi