if (!requireNamespace("hexbin", quietly = TRUE)) install.packages("hexbin")
library(ggplot2)
library(dplyr)
library(scales)
data(diamonds, package = "ggplot2")
Laporan ini menyajikan analisis eksplorasi data berlian (diamonds) yang bertujuan untuk memahami hubungan antara karakteristik fisik berlian (berat, potongan, warna, kejernihan) dengan harganya. Dengan menggunakan visualisasi data yang interaktif dan mudah dicerna, kita akan mengidentifikasi pola-pola utama yang dapat membantu calon pembeli, pelaku industri perhiasan, atau siapa pun yang tertarik dalam menentukan nilai suatu berlian. Analisis ini dilakukan dengan pendekatan yang sederhana namun tetap mendalam, sehingga hasilnya dapat langsung dimanfaatkan tanpa perlu latar belakang statistik yang kuat.
Dataset diamonds (paket ggplot2) berisi data komersial tentang berlian yang sering dipakai sebagai dataset contoh pada analisis statistik dan machine learning. Data ini cocok dipakai untuk menjelaskan hubungan antara karakteristik fisik berlian dan harga.
Sumber: paket ggplot2 (dataset bawaan).
Dataset diamonds merupakan data bawaan dari paket ggplot2 di R. Data ini berisi informasi mengenai 53.940 berlian, mencakup :
| Variabel | Keterangan |
|---|---|
| carat | Berat berlian dalam satuan karat. Semakin besar carat biasanya mempengaruhi harga. |
| cut | Kategori kualitas potongan berlian (Fair, Good, Very Good, Premium, Ideal). Potongan mempengaruhi kilau dan nilai estetika. |
| color | Kode warna berlian (D paling bagus hingga J paling berwarna). |
| clarity | Tingkat kejernihan (inklusi/internal flaws). |
| depth | Persentase kedalaman relatif terhadap ukuran (indikator proporsi potongan). |
| table | Lebar bagian atas berlian (persentase). |
| price | Harga dalam US dollar (variabel target analisis harga). |
| x, y, z | Dimensi fisik berlian: panjang (x), lebar (y), tinggi (z) dalam mm. |
head(diamonds, 10)
## # A tibble: 10 × 10
## carat cut color clarity depth table price x y z
## <dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
## 1 0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43
## 2 0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31
## 3 0.23 Good E VS1 56.9 65 327 4.05 4.07 2.31
## 4 0.29 Premium I VS2 62.4 58 334 4.2 4.23 2.63
## 5 0.31 Good J SI2 63.3 58 335 4.34 4.35 2.75
## 6 0.24 Very Good J VVS2 62.8 57 336 3.94 3.96 2.48
## 7 0.24 Very Good I VVS1 62.3 57 336 3.95 3.98 2.47
## 8 0.26 Very Good H SI1 61.9 55 337 4.07 4.11 2.53
## 9 0.22 Fair E VS2 65.1 61 337 3.87 3.78 2.49
## 10 0.23 Very Good H VS1 59.4 61 338 4 4.05 2.39
Data ini sangat cocok untuk mengeksplorasi hubungan multivariat dan menunjukkan bagaimana visualisasi dapat membantu mengungkap wawasan bisnis.
Sebagai seorang data analyst yang menyajikan untuk pembaca umum, berikut pendekatan yang digunakan:
Bagaimana kepadatan titik data pada kombinasi carat dan
price?
Tujuan: menemukan rentang carat yang paling umum dan hubungannya dengan
rentang harga.
Apakah pola kepadatan berbeda jika kita melihatnya melalui
estimasi kepadatan 2D?
Tujuan: menegaskan area konsentrasi data tanpa menampilkan titik per
titik.
Bagaimana sebaran harga (price) di setiap kategori
cut?
Tujuan: memahami variasi internal (mis. rentang, multimodality) pada
setiap kategori potongan.
Apakah median dan rentang harga berbeda antar kategori
cut?
Tujuan: memberi gambaran ringkas tentang perbedaan sentral dan dispersi
antar kategori.
ggplot(diamonds, aes(carat, price)) +
geom_hex(bins = 50) +
scale_fill_gradient(low = "#BBDFFB", high = "#0B3D91", name = "count") +
labs(
title = "Kepadatan carat vs price (hexbin)",
subtitle = "Area gelap menandakan frekuensi observasi yang tinggi",
x = "Carat",
y = "Price (USD)"
) +
theme_minimal()
hexbin plot antara carat dan harga kembali menegaskan hubungan antara ukuran berlian dan harga, namun dengan tampilan yang lebih sesuai untuk jumlah data yang sangat besar. Setiap sel heksagon mewakili banyaknya berlian pada kombinasi ukuran dan harga tertentu. Dari grafik ini terlihat dengan jelas bahwa konsentrasi terbesar berlian berada pada carat kecil dan harga yang lebih rendah, sementara semakin besar ukuran berlian, jumlah berlian pada area tersebut semakin berkurang. Pola kenaikan harga seiring bertambahnya carat terlihat konsisten dan stabil di seluruh rentang data. Secara keseluruhan, keempat visualisasi ini memperlihatkan bahwa ukuran berlian memiliki hubungan yang kuat dengan harga, sedangkan kualitas potongan lebih berperan dalam membedakan karakter sebaran harga, tetapi tidak secara langsung menentukan apakah sebuah berlian pasti lebih mahal dibandingkan yang lain.
ggplot(diamonds, aes(carat, price)) +
stat_density_2d(aes(fill = after_stat(level)), geom = "polygon", color = NA, bins = 8, alpha = 0.85) +
scale_fill_gradient(low = "#BBDFFB", high = "#0B3D91", name = "density") +
labs(
title = "Estimasi kepadatan 2D carat vs price",
subtitle = "Menunjukkan area-area konsentrasi data",
x = "Carat",
y = "Price (USD)"
) +
theme_minimal()
grafik kepadatan dua dimensi antara carat dan harga memperlihatkan area dengan warna biru yang lebih gelap sebagai wilayah dengan jumlah berlian yang paling banyak. Dari grafik ini terlihat bahwa sebagian besar berlian berada pada ukuran carat yang relatif kecil dengan harga yang juga relatif lebih rendah. Seiring dengan bertambahnya ukuran berlian, harga cenderung meningkat, namun jumlah berlian pada ukuran yang besar menjadi semakin sedikit. Pola ini menunjukkan bahwa berlian berukuran kecil mendominasi data, sementara berlian berukuran besar dan mahal jumlahnya jauh lebih jarang.
ggplot(diamonds, aes(x = cut, y = price)) +
geom_violin(fill = "#BBDFFB", color = "#0B3D91", trim = FALSE) +
labs(
title = "Sebaran harga berdasarkan kualitas potongan (cut)",
x = "Cut",
y = "Price (USD)"
) +
theme_minimal()
violin plot sebaran harga berdasarkan kualitas potongan, memberikan gambaran yang lebih rinci mengenai bagaimana harga tersebar pada setiap kategori cut. Lebar bentuk violin menunjukkan di kisaran harga mana berlian paling banyak ditemukan. Dari grafik ini dapat dilihat bahwa pada seluruh kategori potongan, kepadatan tertinggi berada pada harga rendah hingga menengah. Selain itu, bentuk ekor yang memanjang ke arah harga yang lebih tinggi menunjukkan adanya sebagian kecil berlian dengan harga yang sangat mahal pada setiap kategori cut. Temuan ini menegaskan bahwa meskipun kualitas potongan berbeda-beda, mayoritas berlian tetap terkonsentrasi pada harga yang relatif terjangkau.
ggplot(diamonds, aes(x = cut, y = price, fill = cut)) +
geom_boxplot(alpha = 0.75, outlier.size = 0.6) +
scale_fill_manual(values = c("lightblue","skyblue","steelblue","dodgerblue","darkblue")) +
labs(
title = "Perbandingan median dan rentang harga antar kategori cut",
x = "Cut",
y = "Price (USD)"
) +
theme_minimal() +
theme(legend.position = "none")
boxplot distribusi harga berdasarkan kualitas potongan, menunjukkan bahwa setiap kategori potongan (Fair, Good, Very Good, Premium, dan Ideal) memiliki rentang harga yang sangat lebar. Hal ini berarti bahwa pada satu jenis potongan pun, harga berlian dapat sangat bervariasi, mulai dari harga rendah hingga sangat tinggi. Terlihat pula bahwa potongan dengan kualitas terbaik, yaitu Ideal, tidak selalu memiliki harga yang paling tinggi dibandingkan kategori lainnya. Dengan kata lain, kualitas potongan memang berpengaruh, tetapi bukan satu-satunya faktor yang menentukan mahal atau murahnya sebuah berlian.