Lewati ke konten utama

Heatmap Distribusi Bivariat di R

Pelajari cara menampilkan hubungan antara dua fitur secara visual, bagaimana keduanya saling berinteraksi, dan di mana titik data terkonsentrasi.
Diperbarui 28 Sep 2026  · 6 mnt Baca

Jelajahi bersama AI

ChatGPTClaudePerplexity

Sebagai data scientist, Anda akan menganalisis distribusi fitur dalam dataset Anda. Biasanya ini dilakukan dengan histogram; cara ini sangat berguna untuk menunjukkan rentang nilai variabel, penyimpangan, dan di mana nilai-nilai terkonsentrasi.

Tutorial ini menggunakan R. Jika Anda belum familiar dengan R, saya sarankan mengikuti kursus gratis Introduction to R di DataCamp.

Dataset Bike Sharing

Untuk tutorial ini, Anda akan menggunakan Bike Sharing Demand Dataset dari kompetisi Kaggle.

Buka tautan tersebut dan pergi ke tab data, lalu unduh file train.csv.

bike sharing data

Muat dataset ke R.

library(dplyr)
bike<- read.csv("train.csv",
                na.strings = FALSE,
                strip.white = TRUE)
glimpse(bike)

Fitur Dataset

Fitur Deskripsi
datetime tanggal + stempel waktu per jam
season 1 = semi
2 = panas
3 = gugur
4 = dingin
holiday apakah hari tersebut tergolong hari libur
workingday apakah hari tersebut bukan akhir pekan maupun hari libur
weather 1: Cerah, Berawan tipis, Sebagian berawan, Sebagian berawan
2: Kabut + Berawan, Kabut + Berawan pecah, Kabut + Berawan tipis, Kabut
3: Salju ringan, Hujan ringan + Guntur + Awan tersebar, Hujan ringan + Awan tersebar
4: Hujan lebat + Butiran es + Guntur + Kabut, Salju + Kabut
temp suhu dalam Celsius
atemp suhu "terasa" dalam Celsius
humidity kelembapan relatif
windspeed kecepatan angin
casual jumlah penyewaan oleh pengguna tidak terdaftar yang dimulai
registered jumlah penyewaan oleh pengguna terdaftar yang dimulai
count jumlah total penyewaan

Seleksi Fitur

Anda akan menganalisis hubungan antara atemp dan humidity menurut season, jadi pilih fitur-fitur tersebut dari dataset. Ingat untuk memuat paket dplyr.

bike_data<-
  bike %>%  
  dplyr::select(season, atemp, humidity)
head(bike_data)

Histogram

Sekarang Anda siap mulai menganalisis data. Mulailah dengan membuat histogram untuk setiap fitur menurut musim. Anda akan menggunakan pustaka ggplot2, jadi jangan lupa untuk memuatnya.

Histogram Humidity

library(ggplot2)
bike_data %>%
  ggplot( aes(x=humidity) ) +
  geom_histogram(bins=30) +
  facet_wrap(~season,ncol = 2)

histograms

Dari histogram, Anda dapat melihat kelembapan lebih tinggi saat musim dingin (yang memang wajar), tetapi Anda juga mendapatkan gambaran bagaimana distribusinya pada setiap musim.

Sekarang tambahkan kerapatan (density), rug density, dan ubah nama facet agar visualisasinya lebih enak dilihat.

bike_data %>%
  mutate(season_label = case_when(
    season == 1 ~ "Spring",
    season == 2 ~ "Summer",
    season == 3 ~ "fall",
    season == 4 ~ "winter")) %>%
  ggplot( aes(x=humidity) ) +
  geom_histogram(bins=30,aes(y = ..density..)) +
  geom_rug()+
  geom_density()+
  facet_wrap(~season_label,ncol = 2)+
  ggtitle("Histogram of humidity by season")

histogram of humidity by season

Sekarang, ini memberi Anda gambaran lebih baik tentang perilaku kelembapan. Lakukan hal yang sama untuk atemp.

Histogram atemp

Gunakan kembali kode di atas dan ganti variabelnya menjadi atemp,

bike_data %>%
  mutate(season_label = case_when(
    season == 1 ~ "Spring",
    season == 2 ~ "Summer",
    season == 3 ~ "fall",
    season == 4 ~ "winter")) %>%
  ggplot( aes(x=atemp) ) +
  geom_histogram(bins=30,aes(y = ..density..)) +
  geom_rug()+
  geom_density()+
  facet_wrap(~season_label,ncol = 2)+
  ggtitle("Histogram of atemp by season")
Histogram atemp menurut musimhistogram of atemp by season

Baik, sejauh ini semuanya sesuai ekspektasi untuk tiap musim. Pada setiap grafik, Anda memiliki pendekatan terhadap fungsi distribusi probabilitas.

Namun, dari grafik-grafik ini sulit memvisualisasikan bagaimana kedua fitur saling berinteraksi. Kesulitan pertama yang Anda hadapi adalah histogram Anda harus 3D karena Anda mencoba mencari fungsi distribusi untuk dua fitur.

Memasang Distribusi Bivariat pada Data Anda

Tujuannya adalah memvisualisasikan distribusi bivariat. Untuk melakukannya, Anda terlebih dahulu perlu memasang distribusi bivariat ke data. Ini akan dilakukan menggunakan pustaka MASS dan fungsi kde2d. Fungsi kde2d akan mengestimasi distribusi bivariat dengan mengasumsikan kenormalan untuk variabel acak. Masukan ke fungsi ini adalah sebagai berikut,

input deskripsi
x data koordinat x
y data koordinat y
n jumlah titik grid untuk tiap sumbu
lims batas untuk x dan y

Sekarang terapkan pada dataset dengan memfilter untuk musim panas,

library(MASS)
bike_data_summer <- bike_data %>% filter(season==1)
bike_density <- kde2d(bike_data_summer$atemp,bike_data_summer$humidity, n=1000)

Catatan: Saat memuat pustaka MASS terdapat fungsi select, yang akan bentrok dengan fungsi select dari dplyr. Untuk mengatasinya, saat menggunakan select dari dplyr Anda perlu menambahkan awalan dplyr:: seperti dplyr::select() agar berfungsi dengan benar.

Sekarang lihat kelas dan struktur dari bike_density

class(bike_density)
str(bike_density)

Objek ini adalah list dengan 3 nilai x, y, dan z. Dua yang pertama berisi nilai fitur dan yang ketiga adalah matriks dengan nilai pdf. Lihat kerapatannya menggunakan fungsi contour,

contour(bike_density)
text(12.2,92,"1",cex=1.5)
points(12.2,89,col="red",pch=18)
text(10.4,47,"2",cex=1.5)
points(10.4,43,col="red",pch=18)
text(21,45,"3",cex=1.5)
points(21,40,col="red",pch=18)
text(21.6,82,"4",cex=1.5)
points(21.6,78,col="red",pch=18)

chart

Dari sini Anda dapat mengidentifikasi beberapa titik akumulasi, yang dapat dipahami sebagai nilai paling sering untuk kombinasi kedua fitur. Nilai untuk setiap titik dirangkum pada tabel berikut,

titik atemp (°C) humidity (%)
1 12.2 89
2 10.4 43
3 21 43
4 21.6 78

Heatmap

Untuk membuat heatmap, pertama-tama Anda perlu menentukan skala warna yang ingin digunakan. Anda bisa melakukannya dengan fungsi colorRampPalette

hm_col_scale<-colorRampPalette(c("black","blue","green","orange","red"))(1000)

hm_col_scale adalah sebuah vektor dari hitam ke merah menggunakan kode RGB dalam 1000 langkah.

Sekarang plot heat map Anda menggunakan fungsi image, fungsi ini digunakan untuk memplot matriks.

image(bike_density$z,  
      col = hm_col_scale,
      zlim=c(min(bike_density$z), max(bike_density$z)))
text(0.31,0.46,"Most Frequent",col="blue",cex=0.8)
points(0.31,0.45,col="blue",pch=18)

heatmap

Seperti yang terlihat, ini memuat lebih banyak informasi dibanding plot kontur karena warna sekarang menunjukkan seberapa tinggi titik akumulasi tersebut. Anda dapat melihat bahwa nilai paling sering untuk humidity dan atemp selama musim semi berada di sekitar titik (10.4, 43)

Kesimpulan

Sekarang Anda tahu cara membuat heat map, giliran Anda untuk membuatnya sendiri. Mulailah dengan melihat musim lainnya dan hubungannya dengan variabel lain.

Pikirkan bagaimana Anda dapat menggunakan ini untuk mendapatkan wawasan tentang berapa banyak sepeda yang harus Anda sediakan untuk berbagai nilai variabel, dengan mempertimbangkan bahwa titik yang paling sering memiliki probabilitas lebih tinggi.

Jika Anda ingin mempelajari lebih lanjut tentang membuat visualisasi data dengan ggplot, pastikan untuk melihat kursus Data Visualization with ggplot2 kami.

Topik
R
Data Science
Visualisasi Data

Pelajari lebih lanjut tentang R

{count, plural, one {Kursus} other {Kursus}}

Pengantar R

{hours} jam
3.1M
Kuasai dasar analisis data di R, termasuk vectors, lists, dan data frames, lalu praktikkan R dengan data sets nyata.
Lihat DetailRight Arrow
Mulai Kursus
Lihat SelengkapnyaRight Arrow
Terkait

{count, plural, one {blog} other {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

{count, plural, one {blog} other {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

{count, plural, one {blog} other {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

{count, plural, one {blog} other {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