1 Latar Belakang

Berlian adalah salah satu komoditas dengan harga paling bervariasi di pasaran. Dua berlian yang tampak mirip bisa memiliki harga yang sangat jauh berbeda. Pertanyaannya: faktor apa yang paling memengaruhi harganya?

Untuk menjawab pertanyaan itu, laporan ini menggunakan dataset diamonds yang berisi data dari 53.940 berlian dengan berbagai ukuran, kualitas, dan harga. Analisis ini berfokus pada hubungan antar dua variabel numerik (bivariat kontinu) misalnya apakah berlian yang lebih berat selalu lebih mahal, atau apakah kedalaman berlian berpengaruh terhadap harganya.


2 Persiapan Data

library(ggplot2)
library(dplyr)
library(scales)
library(tidyr)
library(hexbin)

data("diamonds")

Dataset ini memiliki 53.940 baris data. Variabel yang dianalisis:

Variabel Keterangan
carat Berat berlian (karat)
price Harga dalam USD
depth Persentase kedalaman terhadap diameter
table Lebar bagian atas berlian (%)
x, y, z Dimensi panjang, lebar, tinggi (mm)
head(diamonds, 10)

3 Visualisasi Data

3.1 Scatter Plot — Berat vs. Harga

set.seed(42)
diamonds_sample <- diamonds %>% sample_n(3000)

ggplot(diamonds_sample, aes(x = carat, y = price)) +
  geom_point(alpha = 0.35, color = "#2196F3", size = 1.5) +
  scale_y_continuous(labels = dollar_format(prefix = "$")) +
  labs(
    title    = "Berlian Lebih Berat = Harga Lebih Tinggi?",
    subtitle = "Scatter plot dari 3.000 sampel berlian",
    x        = "Berat (Carat)",
    y        = "Harga (USD)",
    caption  = "Sumber: Dataset diamonds | ggplot2"
  ) +
  theme_minimal(base_size = 13) +
  theme(
    plot.title    = element_text(face = "bold", size = 15),
    plot.subtitle = element_text(color = "gray50"),
    panel.grid.minor = element_blank()
  )
Gambar 1: Scatter plot berat berlian (carat) vs. harga. Setiap titik mewakili satu berlian.

Gambar 1: Scatter plot berat berlian (carat) vs. harga. Setiap titik mewakili satu berlian.

Dari grafik ini, pola yang muncul cukup jelas: berlian dengan berat lebih tinggi umumnya dijual dengan harga lebih mahal. Tapi ada hal menarik — di kisaran 1 karat ke atas, titik-titik mulai menyebar ke mana-mana. Ini artinya berat saja tidak cukup untuk menjelaskan harga; ada faktor lain yang ikut bermain. Beberapa titik di bagian atas grafik juga bisa dianggap sebagai outlier berlian yang harganya jauh di atas rata-rata kelompoknya.


3.2 Scatter Plot + Garis Tren — Depth vs. Harga

ggplot(diamonds_sample, aes(x = depth, y = price)) +
  geom_point(alpha = 0.25, color = "#9C27B0", size = 1.4) +
  geom_smooth(method = "lm", se = TRUE, color = "#4A148C",
              linewidth = 1, fill = "#CE93D8", alpha = 0.25) +
  scale_y_continuous(labels = dollar_format(prefix = "$")) +
  scale_x_continuous(limits = c(55, 70)) +
  labs(
    title    = "Apakah Kedalaman Berlian Memengaruhi Harganya?",
    subtitle = "Garis tren membantu melihat arah hubungan secara keseluruhan",
    x        = "Kedalaman (Depth %)",
    y        = "Harga (USD)",
    caption  = "Sumber: Dataset diamonds | ggplot2"
  ) +
  theme_minimal(base_size = 13) +
  theme(
    plot.title    = element_text(face = "bold", size = 15),
    plot.subtitle = element_text(color = "gray50"),
    panel.grid.minor = element_blank()
  )
Gambar 2: Hubungan persentase kedalaman (depth) dan harga berlian, dilengkapi garis tren.

Gambar 2: Hubungan persentase kedalaman (depth) dan harga berlian, dilengkapi garis tren.

Garis tren pada grafik ini hampir mendatar : artinya, kedalaman berlian (depth) tidak terlalu memengaruhi harganya. Titik-titik data menyebar merata di semua nilai kedalaman tanpa pola naik atau turun yang jelas. Ini adalah temuan yang sedikit mengejutkan: banyak orang mungkin mengira berlian yang lebih “dalam” pasti lebih bernilai, tapi datanya menunjukkan hal yang berbeda. Area bayangan di sekitar garis tren menunjukkan tingkat ketidakpastian estimasi tersebut.


3.3 2D Density Plot — Carat vs. Harga

ggplot(diamonds_sample, aes(x = carat, y = price)) +
  geom_density_2d_filled(alpha = 0.85, contour_var = "ndensity") +
  geom_density_2d(color = "white", linewidth = 0.3, alpha = 0.5) +
  scale_y_continuous(labels = dollar_format(prefix = "$")) +
  scale_fill_brewer(palette = "YlOrRd", direction = 1) +
  labs(
    title    = "Di Mana Berlian Paling Banyak Terkumpul?",
    subtitle = "Warna lebih gelap/merah = lebih banyak berlian di area tersebut",
    x        = "Berat (Carat)",
    y        = "Harga (USD)",
    fill     = "Kepadatan",
    caption  = "Sumber: Dataset diamonds | ggplot2"
  ) +
  theme_minimal(base_size = 13) +
  theme(
    plot.title    = element_text(face = "bold", size = 15),
    plot.subtitle = element_text(color = "gray50"),
    panel.grid.minor = element_blank()
  )
Gambar 3: 2D density plot yang menunjukkan area dengan konsentrasi data berlian paling tinggi.

Gambar 3: 2D density plot yang menunjukkan area dengan konsentrasi data berlian paling tinggi.

Berbeda dari scatter plot biasa yang menampilkan setiap titik satu per satu, density plot ini menunjukkan di mana data paling banyak berkumpul. Warna merah dan oranye tua menandai area dengan kepadatan berlian tertinggi. Terlihat jelas bahwa sebagian besar berlian dalam dataset ini berbobot di bawah 1 karat dengan harga di bawah $5.000 inilah segmen pasar yang paling umum. Semakin ke kanan dan ke atas, data semakin jarang, menandakan bahwa berlian besar dengan harga tinggi memang lebih langka.


3.4 Hexbin Plot — Carat vs. Harga

ggplot(diamonds, aes(x = carat, y = price)) +
  geom_hex(bins = 50) +
  scale_y_continuous(labels = dollar_format(prefix = "$")) +
  scale_fill_gradient(
    low  = "#E3F2FD",
    high = "#0D47A1",
    name = "Jumlah\nBerlian",
    labels = comma
  ) +
  labs(
    title    = "Peta Kepadatan Berlian: Berat vs. Harga",
    subtitle = "Setiap heksagon mewakili sekelompok berlian — semakin gelap, semakin banyak",
    x        = "Berat (Carat)",
    y        = "Harga (USD)",
    caption  = "Sumber: Dataset diamonds (53.940 data) | ggplot2"
  ) +
  theme_minimal(base_size = 13) +
  theme(
    plot.title    = element_text(face = "bold", size = 15),
    plot.subtitle = element_text(color = "gray50"),
    panel.grid.minor = element_blank()
  )
Gambar 4: Hexbin plot sebagai alternatif scatter plot untuk data berjumlah besar.

Gambar 4: Hexbin plot sebagai alternatif scatter plot untuk data berjumlah besar.

Ketika data sangat banyak seperti ini (53.940 titik), scatter plot biasa akan terlihat penuh dan susah dibaca. Hexbin plot memecahkan masalah itu dengan cara mengelompokkan titik-titik yang berdekatan ke dalam satu heksagon. Semakin gelap warna heksagon, semakin banyak berlian yang masuk ke dalam kelompok itu. Hasilnya jauh lebih mudah dibaca: mayoritas berlian berkerumun di kiri bawah grafik (berat rendah, harga rendah), sementara kombinasi berat tinggi + harga tinggi hanya dimiliki segelintir berlian.


3.5 2D Bin Plot — Table vs. Harga

ggplot(diamonds, aes(x = table, y = price)) +
  geom_bin_2d(bins = 40) +
  scale_y_continuous(labels = dollar_format(prefix = "$")) +
  scale_x_continuous(limits = c(50, 70)) +
  scale_fill_gradient(
    low  = "#F3E5F5",
    high = "#6A1B9A",
    name = "Jumlah\nBerlian",
    labels = comma
  ) +
  labs(
    title    = "Lebar Bagian Atas Berlian vs. Harga",
    subtitle = "Kotak lebih gelap = lebih banyak berlian di kombinasi nilai tersebut",
    x        = "Table (%)",
    y        = "Harga (USD)",
    caption  = "Sumber: Dataset diamonds (53.940 data) | ggplot2"
  ) +
  theme_minimal(base_size = 13) +
  theme(
    plot.title    = element_text(face = "bold", size = 15),
    plot.subtitle = element_text(color = "gray50"),
    panel.grid.minor = element_blank()
  )
Gambar 5: 2D bin plot yang menampilkan hubungan antara persentase table dan harga berlian.

Gambar 5: 2D bin plot yang menampilkan hubungan antara persentase table dan harga berlian.

2D bin plot mirip dengan hexbin, bedanya kotak yang digunakan berbentuk persegi, bukan heksagon. Dari grafik ini terlihat bahwa sebagian besar berlian memiliki nilai table antara 54–62% dengan harga di bawah $5.000. Tidak ada pola diagonal yang jelas, yang menandakan bahwa ukuran table saja tidak cukup untuk memprediksi harga berlian. Ini konsisten dengan temuan di visualisasi sebelumnya tentang depth.


4 Kesimpulan

Setelah melihat kelima visualisasi di atas, ada beberapa hal yang bisa ditarik sebagai kesimpulan:

  1. Berat (carat) adalah faktor terkuat yang berhubungan dengan harga berlian. Pola ini terlihat jelas di scatter plot maupun hexbin plot.

  2. Sebagian besar berlian berukuran kecil dan murah ini terlihat dari density plot dan hexbin yang menunjukkan kepadatan data di pojok kiri bawah. Berlian mahal dan besar adalah minoritas.

  3. Kedalaman (depth) dan lebar atas (table) tidak banyak memengaruhi harga secara langsung. Garis tren pada scatter plot depth vs. harga hampir datar, dan bin plot table vs. harga pun tidak menunjukkan pola yang kuat.

  4. Data berlian sangat padat di rentang tertentu, sehingga visualisasi seperti hexbin dan 2D bin jauh lebih informatif dibanding scatter plot biasa untuk dataset sebesar ini.