VISUALISASI DATA KONTINU (UNIVARIATE DAN BIVARIATE) MENGGUNAKAN DATASET DIAMONDS
TUJUAN
Melanjutkan pembahasan sebelumnya mengenai visualisasi data kategorik dan diskrit, pada bagian ini kita akan berfokus pada visualisasi data kontinu, baik secara univariate maupun bivariate. Data kontinu merupakan data numerik yang dapat mengambil nilai dalam rentang tertentu, seperti berat, harga, atau ukuran fisik. Melalui visualisasi data kontinu, kita tidak hanya dapat memahami bagaimana suatu nilai tersebar dan mendeteksi kemungkinan adanya outlier, tetapi juga dapat mengeksplorasi hubungan antar dua variabel numerik untuk melihat pola keterkaitan di antara keduanya.
Sebagai studi kasus, analisis ini menggunakan
dataset diamonds yang tersedia dalam package ggplot2 di R.
Dataset ini terdiri dari 53.940 observasi dengan beberapa
variabel numerik seperti carat, price, depth,
table, serta dimensi fisik (x, y, z). Pada tahap
univariate, analisis difokuskan pada distribusi masing-masing
variabel numerik, seperti bagaimana berat dan harga berlian tersebar.
Selanjutnya, pada tahap bivariate, analisis diarahkan untuk
melihat hubungan antar variabel numerik, misalnya keterkaitan antara
carat dan price, untuk mengidentifikasikan pola atau
kecenderungan tertentu dalam data.
PANGGIL DATA
## tibble [53,940 × 10] (S3: tbl_df/tbl/data.frame)
## $ carat : num [1:53940] 0.23 0.21 0.23 0.29 0.31 0.24 0.24 0.26 0.22 0.23 ...
## $ cut : Ord.factor w/ 5 levels "Fair"<"Good"<..: 5 4 2 4 2 3 3 3 1 3 ...
## $ color : Ord.factor w/ 7 levels "D"<"E"<"F"<"G"<..: 2 2 2 6 7 7 6 5 2 5 ...
## $ clarity: Ord.factor w/ 8 levels "I1"<"SI2"<"SI1"<..: 2 3 5 4 2 6 7 3 4 5 ...
## $ depth : num [1:53940] 61.5 59.8 56.9 62.4 63.3 62.8 62.3 61.9 65.1 59.4 ...
## $ table : num [1:53940] 55 61 65 58 58 57 57 55 61 61 ...
## $ price : int [1:53940] 326 326 327 334 335 336 336 337 337 338 ...
## $ x : num [1:53940] 3.95 3.89 4.05 4.2 4.34 3.94 3.95 4.07 3.87 4 ...
## $ y : num [1:53940] 3.98 3.84 4.07 4.23 4.35 3.96 3.98 4.11 3.78 4.05 ...
## $ z : num [1:53940] 2.43 2.31 2.31 2.63 2.75 2.48 2.47 2.53 2.49 2.39 ...
Dataset diamonds terdiri dari 10 variabel yang terbagi menjadi dua jenis, yaitu variabel numerik dan variabel kategorik. Terdapat 7 variabel numerik, yaitu carat yang menunjukkan berat berlian, depth yang merepresentasikan persentase kedalaman, table yang menggambarkan lebar bagian atas berlian, price sebagai harga jual, serta dimensi fisik berlian yang diukur melalui x (panjang), y (lebar), dan z (kedalaman) dalam satuan milimeter. Variabel-variabel ini bersifat kuantitatif sehingga dapat dianalisis menggunakan ukuran statistik seperti mean, median, varians, maupun distribusinya untuk memahami pola penyebaran data.
Selain itu, dataset ini juga memiliki 3 variabel kategorik, yaitu cut yang menunjukkan tingkat kualitas potongan (dari Fair hingga Ideal), color yang merepresentasikan tingkat warna (J sampai D), serta clarity yang menggambarkan tingkat kejernihan berlian (I1 sampai IF). Ketiga variabel ini bersifat kategorik karena merepresentasikan kelas atau tingkat kualitas, bukan nilai numerik yang menunjukkan besaran.
VISUALISASI DATA KONTINU (UNIVARIATE)
Visualisasi data kontinu (univariate) adalah teknik untuk
menggambarkan distribusi dan karakteristik dari satu variabel numerik.
Beberapa jenis visualisasi yang umum digunakan untuk data kontinu
meliputi histogram, density plot,
boxplot, violin plot, dan
scatter plot. Setiap jenis visualisasi memiliki kelebihan
dan kegunaan tertentu dalam membantu kita memahami data. Berikut adalah
penjelasan singkat tentang beberapa jenis visualisasi data kontinu
(univariate):
HISTOGRAM
Histogram adalah grafik yang digunakan untuk menunjukkan distribusi data kontinu dengan membagi data ke dalam beberapa interval (bin). Pada histogram dengan density, tinggi batang tidak lagi merepresentasikan jumlah (frekuensi) pengamatan secara langsung, melainkan kepadatan probabilitas. Artinya, luas total area histogram akan bernilai 1, sehingga grafik lebih menekankan pada bentuk distribusi dibandingkan jumlah absolut data di setiap interval. Pendekatan ini memudahkan kita untuk melihat pola sebaran data, tingkat kemencengan (skewness), serta kemungkinan adanya outlier secara lebih proporsional. Berikut adalah contoh kode untuk membuat histogram density dari variabel carat:
Perhitungan interval kelas, frekuensi, kepadatan (density), dan rata-rata (mean) pada variabel carat
gg <- ggplot(diamonds, aes(x = carat)) +
geom_histogram(aes(y = ..density..), bins = 30)
hist_data <- ggplot_build(gg)$data[[1]]
hist_table <- hist_data %>%
select(
xmin,
xmax,
count,
density
)
hist_table## xmin xmax count density
## 1 0.1170690 0.2829310 1469 0.1641964545
## 2 0.2829310 0.4487931 15710 1.7559743366
## 3 0.4487931 0.6146552 7473 0.8352893837
## 4 0.6146552 0.7805172 6320 0.7064136096
## 5 0.7805172 0.9463793 3627 0.4054054054
## 6 0.9463793 1.1122414 8157 0.9117430085
## 7 1.1122414 1.2781034 3784 0.4229539713
## 8 1.2781034 1.4439655 1093 0.1221693157
## 9 1.4439655 1.6098276 3059 0.3419176000
## 10 1.6098276 1.7756897 926 0.1035030067
## 11 1.7756897 1.9415517 149 0.0166543715
## 12 1.9415517 2.1074138 1424 0.1591666108
## 13 2.1074138 2.2732759 411 0.0459392395
## 14 2.2732759 2.4391379 169 0.0188898576
## 15 2.4391379 2.6050000 102 0.0114009791
## 16 2.6050000 2.7708621 25 0.0027943576
## 17 2.7708621 2.9367241 2 0.0002235486
## 18 2.9367241 3.1025862 26 0.0029061319
## 19 3.1025862 3.2684483 3 0.0003353229
## 20 3.2684483 3.4343103 1 0.0001117743
## 21 3.4343103 3.6001724 2 0.0002235486
## 22 3.6001724 3.7660345 2 0.0002235486
## 23 3.7660345 3.9318966 0 0.0000000000
## 24 3.9318966 4.0977586 3 0.0003353229
## 25 4.0977586 4.2636207 1 0.0001117743
## 26 4.2636207 4.4294828 0 0.0000000000
## 27 4.4294828 4.5953448 1 0.0001117743
## 28 4.5953448 4.7612069 0 0.0000000000
## 29 4.7612069 4.9270690 0 0.0000000000
## 30 4.9270690 5.0929310 1 0.0001117743
## [1] 0.7979397
ggplot(diamonds, aes(x = carat)) +
geom_histogram(aes(y = ..density..),
bins = 30,
fill = "pink",
color = "black",
alpha = 0.6) +
geom_vline(aes(xintercept = mean(carat)),
color = "black",
linetype = "dashed",
size = 1) +
scale_x_continuous(
breaks = seq(0, 6, by = 0.2)
) +
scale_y_continuous(
breaks = seq(0, 2.5, by = 0.2)
) +
coord_cartesian(xlim = c(0, 5.5), ylim = c(0, 2.0)) +
labs(
title = "Histogram Density dari Variabel Carat",
caption = "Sumber: Dataset Diamonds",
x = "Carat",
y = "Density"
) +
theme_minimal() +
theme(
plot.title = element_text(
hjust = 0.5,
face = "bold",
size = 16,
margin = margin(b = 15)
),
plot.caption = element_text(
hjust = 1,
size = 9,
margin = margin(t = 10)
),
axis.title.x = element_text(
margin = margin(t = 12),
size = 12
),
axis.title.y = element_text(
margin = margin(r = 12),
size = 12
)
)Visualisasi ini menunjukkan distribusi berat berlian (carat) dalam dataset diamonds. Sumbu X merepresentasikan berat berlian dalam satuan karat, sedangkan sumbu Y menunjukkan density atau tingkat kepadatan distribusi berat dalam setiap kelompok interval.
Berdasarkan histogram, mayoritas berlian memiliki berat di bawah 1 carat. Hal ini ditunjukkan oleh tingginya batang histogram pada rentang tersebut, yang berarti jumlah berlian berukuran kecil jauh lebih banyak dibandingkan berlian berukuran besar.
Seiring meningkatnya nilai carat, frekuensi berlian cenderung menurun. Berlian dengan berat di atas 2 atau 3 carat jumlahnya jauh lebih sedikit. Pola ini menunjukkan bahwa distribusi carat bersifat miring ke kanan (right-skewed), dimana sebagian besar data terkonsentrasi pada nilai kecil, sementara terdapat sedikit berlian dengan berat sangat besar yang membentuk ekor di sisi kanan grafik.
Garis putus-putus pada histogram menunjukkan nilai rata-rata (mean) berat berlian. Posisi mean yang sedikit bergeser ke kanan dari puncak distribusi mengindikasikan bahwa adanya beberapa berlian berukuran besar memengaruhi nilai rata-rata sehingga menjadi lebih tinggi.
Secara keseluruhan, visualisasi ini memperlihatkan bahwa dalam dataset diamonds, berlian dengan ukuran kecil hingga menengah lebih mendominasi dibandingkan berlian berukuran besar. Pola distribusi ini mencerminkan bahwa berlian berukuran besar relatif lebih jarang ditemukan, sehingga sebagian besar observasi terkonsentrasi pada berat yang lebih rendah.
DENSITY PLOT
Density plot adalah grafik yang menunjukkan estimasi kepadatan probabilitas dari data kontinu. Density plot menggunakan kurva untuk menggambarkan distribusi data, dan dapat memberikan gambaran yang lebih halus dibandingkan histogram. Berikut adalah contoh kode untuk membuat density plot dari variabel price:
Perhitungan interval kelas, frekuensi, kepadatan (density), dan rata-rata (mean) pada variabel price
breaks_price <- seq(0, 20000, by = 2000)
h <- hist(diamonds$price,
breaks = breaks_price,
plot = FALSE)
n <- length(diamonds$price)
class_width <- diff(h$breaks)[1]
hist_table <- data.frame(
interval = paste0(h$breaks[-length(h$breaks)],
" - ",
h$breaks[-1]),
frequency = h$counts,
density = h$counts / (n * class_width)
)
hist_table## interval frequency density
## 1 0 - 2000 24207 2.243882e-04
## 2 2000 - 4000 10354 9.597701e-05
## 3 4000 - 6000 7828 7.256211e-05
## 4 6000 - 8000 3946 3.657768e-05
## 5 8000 - 10000 2383 2.208936e-05
## 6 10000 - 12000 1759 1.630515e-05
## 7 12000 - 14000 1304 1.208750e-05
## 8 14000 - 16000 1017 9.427141e-06
## 9 16000 - 18000 830 7.693734e-06
## 10 18000 - 20000 312 2.892102e-06
## [1] 3932.8
ggplot(diamonds, aes(x = price)) +
geom_density(
fill = "#A8D8EA",
color = "black",
alpha = 0.6,
size = 1
) +
geom_vline(
xintercept = mean(diamonds$price),
color = "black",
linetype = "dashed",
size = 1
) +
scale_x_continuous(
breaks = seq(0, 20000, by = 2000)
) +
scale_y_continuous(
labels = label_scientific()
) +
coord_cartesian(
xlim = c(0, 20000)
) +
labs(
title = "Density Plot dari Variabel Price",
caption = "Sumber: Dataset Diamonds",
x = "Price",
y = "Density"
) +
theme_minimal() +
theme(
plot.title = element_text(
hjust = 0.5,
face = "bold",
size = 16,
margin = margin(b = 15)
),
plot.caption = element_text(
hjust = 1,
size = 9,
margin = margin(t = 10)
),
axis.title.x = element_text(
margin = margin(t = 12),
size = 12
),
axis.title.y = element_text(
margin = margin(r = 12),
size = 12
)
)Visualisasi ini menunjukkan distribusi harga berlian (price) dalam dataset diamonds. Sumbu X merepresentasikan harga berlian, sedangkan sumbu Y menunjukkan density atau kepadatan probabilitas.
Dari grafik terlihat bahwa kurva memiliki puncak tertinggi pada kisaran harga rendah, sekitar 500 hingga 2.000. Hal ini menunjukkan bahwa sebagian besar berlian dalam dataset memiliki harga relatif rendah hingga menengah.
Seiring meningkatnya harga, kurva semakin menurun dan membentuk ekor panjang ke arah kanan. Pola ini menunjukkan bahwa distribusi harga bersifat miring ke kanan (positively skewed), artinya hanya sebagian kecil berlian yang memiliki harga sangat tinggi, namun nilainya cukup ekstrem sehingga memperpanjang ekor distribusi.
Garis vertikal putus-putus yang menunjukkan nilai rata-rata (mean) berada di sebelah kanan puncak kurva. Ini mengindikasikan bahwa rata-rata harga lebih tinggi dibandingkan nilai yang paling sering muncul (modus), karena dipengaruhi oleh beberapa berlian dengan harga sangat tinggi.
BOXPLOT
Boxplot adalah grafik yang menunjukkan distribusi data berdasarkan lima angka ringkasan: minimum, kuartil pertama (Q1), median, kuartil ketiga (Q3), dan maksimum. Boxplot juga dapat membantu mengidentifikasi outlier dalam data. Berikut adalah contoh kode untuk membuat boxplot dari variabel carat dan variabel price:
Perhitungan nilai tengah (median) pada variabel carat
## [1] 0.7
ggplot(diamonds, aes(y = carat)) +
geom_boxplot(
fill = "pink",
color = "black",
alpha = 0.7
) +
scale_y_continuous(
breaks = seq(0, 6, by = 0.5)
) +
coord_cartesian(
ylim = c(0, 6)
) +
labs(
title = "Boxplot Variabel Carat",
caption = "Sumber: Dataset Diamonds",
y = "Carat"
) +
theme_minimal() +
theme(
plot.title = element_text(
hjust = 0.5,
face = "bold",
size = 16,
margin = margin(b = 15)
),
plot.caption = element_text(
hjust = 1,
size = 9,
margin = margin(t = 10)
),
axis.title.y = element_text(
margin = margin(r = 12),
size = 12
),
axis.title.x = element_blank()
)Visualisasi boxplot ini menunjukkan distribusi berat berlian (carat) dalam dataset diamonds. Garis di tengah kotak menunjukkan nilai tengah (median) pada carat. Terlihat bahwa median berada di kisaran 0.7 carat, yang berarti setengah dari berlian dalam dataset memiliki berat di bawah nilai tersebut dan setengah lainnya di atasnya.
Box merepresentasikan 50% data tengah (IQR). Dari grafik terlihat bahwa sebagian besar berlian berada pada kisaran sekitar 0.4 hingga 1.0 carat. Ini menunjukkan bahwa berlian dengan ukuran kecil hingga sedang lebih dominan dalam dataset.
Bagian ekor menunjukkan rentang data utama dan titik-titik di atasnya merupakan outlier. Boxplot menunjukkan adanya sejumlah outlier pada rentang carat yang tinggi, khususnya di atas 2 hingga sekitar 5 carat. Ini menunjukkan bahwa berlian berukuran besar memang ada, tetapi jumlahnya relatif sedikit dibandingkan berlian berukuran kecil dan menengah.
Secara keseluruhan, distribusi carat cenderung miring ke kanan (positively skewed), karena terdapat banyak nilai ekstrem di sisi kanan. Artinya, sebagian besar berlian memiliki berat kecil, sementara berlian dengan berat besar jumlahnya jauh lebih sedikit.
Perhitungan nilai tengah (median) pada variabel price
## [1] 2401
ggplot(diamonds, aes(y = price)) +
geom_boxplot(
fill = "lightblue",
color = "black",
alpha = 0.7
) +
scale_y_continuous(
breaks = seq(0, 20000, by = 2000)
) +
coord_cartesian(
ylim = c(0, 20000)
) +
labs(
title = "Boxplot Variabel Price",
caption = "Sumber: Dataset Diamonds ",
y = "Price"
) +
theme_minimal() +
theme(
plot.title = element_text(
hjust = 0.5,
face = "bold",
size = 16,
margin = margin(b = 15)
),
plot.caption = element_text(
hjust = 1,
size = 9,
margin = margin(t = 10)
),
axis.title.y = element_text(
margin = margin(r = 12),
size = 12
),
axis.title.x = element_blank()
)Visualisasi boxplot ini menunjukkan distribusi harga (price) berlian dalam dataset. Garis tebal di tengah kotak menunjukkan median harga, yang berada di kisaran sekitar 2.400–2.500 USD. Artinya, setengah dari berlian dalam dataset memiliki harga di bawah nilai tersebut dan setengah lainnya di atasnya.
Box merepresentasikan 50% data tengah (IQR). Dari grafik terlihat bahwa sebagian besar harga berlian berada pada kisaran sekitar 1.000 hingga 5.000 USD. Ini menunjukkan bahwa mayoritas berlian dalam dataset memiliki harga menengah, bukan harga yang sangat murah maupun sangat mahal.
Bagian garis memanjang ke atas (whisker) dan titik-titik di atasnya menunjukkan adanya outlier, yaitu berlian dengan harga yang jauh lebih tinggi dibandingkan mayoritas data. Terlihat cukup banyak outlier di atas 12.000 USD, bahkan mendekati 20.000 USD. Ini berarti memang ada berlian yang sangat mahal, tetapi jumlahnya relatif sedikit.
Secara keseluruhan, distribusi harga tampak miring ke kanan (positively skewed). Artinya, sebagian besar berlian memiliki harga relatif lebih rendah hingga menengah, sementara hanya sebagian kecil yang memiliki harga sangat tinggi sehingga menarik rata-rata ke arah kanan.
KESIMPULAN
Secara umum, hasil eksplorasi univariat pada variabel carat dan price dalam dataset diamonds menunjukkan bahwa kedua variabel tidak berdistribusi normal dan sama-sama menceng ke kanan (right-skewed), dengan tingkat kemencengan yang lebih kuat pada variabel price. Sebagian besar berlian memiliki berat di bawah 1 carat dan harga pada rentang rendah hingga menengah, sementara hanya sebagian kecil observasi yang memiliki ukuran dan harga sangat tinggi. Keberadaan nilai-nilai ekstrem ini tampak sebagai outlier pada boxplot, terutama pada harga di atas kisaran tinggi, dan berkontribusi terhadap meningkatnya nilai rata-rata dibandingkan median. Meskipun outlier tersebut masih masuk akal secara konteks industri (berlian besar dan mahal memang ada, hanya jarang), namun secara statistik hal ini menyebabkan variabilitas yang tinggi dan potensi pelanggaran asumsi normalitas serta homogenitas varians apabila data digunakan langsung dalam analisis parametrik. Oleh karena itu, transformasi log atau metode estimasi yang tahan terhadap outlier sangat direkomendasikan agar model analisis yang dibangun menjadi lebih stabil, akurat, dan tidak bias terhadap nilai ekstrem.
VISUALISASI DATA KONTINU (BIVARIATE)
Setelah memahami pola distribusi satu variabel, analisis dapat dilanjutkan ke tahap berikutnya, yaitu visualisasi bivariate. Visualisasi bivariate digunakan untuk melihat hubungan antara dua variabel, misalnya bagaimana harga berlian (price) berkaitan dengan faktor lain seperti berat berlian (carat), kualitas potongan (cut), warna (color), maupun tingkat kejernihan (clarity). Pendekatan ini memungkinkan analis tidak hanya memahami bagaimana masing-masing variabel tersebar, tetapi juga mulai mengeksplorasi faktor-faktor yang berasosiasi dengan perubahan harga berlian.
Dengan demikian, visualisasi univariate memberikan pemahaman
awal mengenai karakteristik dan variasi setiap variabel, sedangkan
visualisasi bivariate membantu menggali hubungan antarvariabel
yang dapat menjelaskan pola kualitas dan pembentukan harga berlian
secara lebih mendalam. Berikut adalah beberapa jenis visualisasi
bivariate yang digunakan untuk menganalisis hubungan antara
price dengan variabel lain, serta keterkaitan antar
karakteristik dalam dataset diamonds.
HEXBIN PLOT
Hexbin plot bivariate digunakan untuk melihat pola hubungan antara dua variabel numerik sekaligus, terutama ketika jumlah data cukup besar dan titik-titik pada scatter plot berpotensi saling menumpuk. Dalam konteks ini, hexbin plot membantu memvisualisasikan kepadatan data melalui bentuk heksagon, sehingga area dengan konsentrasi pengamatan yang tinggi dapat terlihat lebih jelas. Berikut adalah contoh kode untuk membuat hexbin plot antara carat dan price:
ggplot(diamonds, aes(x = carat, y = price)) +
geom_hex(color = NA) +
scale_fill_gradient(
low = "lightgreen",
high = "yellow"
) +
scale_x_continuous(
breaks = seq(0, max(diamonds$carat), by = 0.5)
) +
scale_y_continuous(
breaks = seq(0, max(diamonds$price), by = 3000),
labels = comma
) +
labs(
title = "Hexbin Plot Hubungan Carat dan Price",
x = "Carat",
y = "Price",
fill = "Frekuensi",
caption = "Sumber: Dataset Diamonds"
) +
theme_minimal() +
theme(
plot.title = element_text(
hjust = 0.5,
face = "bold",
size = 16
),
plot.caption = element_text(
hjust = 1,
size = 10,
face = "italic"
)
)Dari hexbin plot yang ditampilkan, terlihat adanya hubungan positif antara berat berlian (carat) dan harga (price). Pola grafik menunjukkan kecenderungan meningkat dari kiri bawah ke kanan atas, yang berarti semakin besar nilai carat, maka harga berlian cenderung semakin tinggi.
Warna kuning yang lebih terang menunjukkan kepadatan data yang lebih tinggi, dan terlihat bahwa sebagian besar berlian berada pada kisaran carat kecil hingga sedang (sekitar 0.2 – 1.0 carat) dengan harga di bawah 6.000. Hal ini menunjukkan bahwa mayoritas data dalam dataset merupakan berlian berukuran relatif kecil dengan harga yang lebih terjangkau.
Selain itu, pada nilai carat yang lebih besar, harga terlihat semakin bervariasi. Penyebaran harga yang lebih luas pada carat di atas 2.5 menunjukkan bahwa meskipun berat memiliki pengaruh kuat terhadap harga, terdapat faktor lain yang turut menentukan nilai jual berlian. Dengan demikian, sebagai analis data dapat disimpulkan bahwa carat merupakan variabel yang memiliki hubungan kuat dan signifikan terhadap price, namun bukan satu-satunya faktor yang memengaruhi pembentukan harga berlian.
JITTER PLOT
Jitter plot bivariate digunakan untuk melihat hubungan antara variabel kategorik dan variabel numerik, terutama ketika terdapat banyak data yang memiliki nilai serupa sehingga titik-titik pada grafik berpotensi saling bertumpuk. Teknik jitter bekerja dengan menambahkan sedikit pergeseran acak pada posisi titik, sehingga distribusi data dapat terlihat lebih jelas tanpa mengubah nilai aslinya. Berikut adalah contoh kode untuk membuat jitter plot antara kualitas potongan berlian (cut) dan harga (price):
ggplot(diamonds, aes(x = cut, y = price)) +
geom_jitter(
color = "#1B5E20",
width = 0.25,
alpha = 0.6,
size = 1.2
) +
scale_y_continuous(
limits = c(0, 21000),
breaks = seq(0, 21000, by = 3000),
labels = comma
) +
labs(
title = "Jitter Plot Hubungan Cut dan Price",
x = "Cut",
y = "Price",
caption = "Urutan Kualitas Cut: Fair = terendah → Ideal = tertinggi\nSumber: Dataset Diamonds"
) +
theme_minimal() +
theme(
plot.title = element_text(
hjust = 0.5,
face = "bold",
size = 16
),
axis.title.x = element_text(margin = margin(t = 15)),
axis.title.y = element_text(margin = margin(r = 15)),
plot.caption = element_text(
hjust = 1,
size = 10,
face = "italic"
)
)Dari hasil visualisasi jitter plot di atas, terlihat hubungan antara kualitas potongan berlian (cut) dan harga (price). Secara umum, semakin baik kualitas potongan, maka rentang harga cenderung semakin tinggi.
Kategori Fair lebih banyak berada pada harga yang relatif rendah, sedangkan kategori Premium dan Ideal menunjukkan penyebaran harga yang lebih luas hingga mencapai nilai yang lebih tinggi. Hal ini menunjukkan bahwa kualitas potongan memiliki pengaruh terhadap harga berlian.
Sebagai seorang data analis, saya melihat bahwa meskipun terdapat kecenderungan harga meningkat seiring kualitas potongan yang lebih baik, pola kenaikannya tidak sepenuhnya linier atau drastis. Pada setiap kategori cut masih terdapat variasi harga yang cukup besar. Artinya, berlian dengan kualitas potongan yang sama bisa memiliki harga yang berbeda-beda. Hal ini mengindikasikan bahwa selain cut, terdapat faktor lain yang turut memengaruhi harga, seperti berat (carat), warna, dan kejernihan berlian. Dengan demikian, dapat disimpulkan bahwa kualitas potongan berkontribusi dalam menentukan harga, namun bukan satu-satunya faktor penentu.
BOXPLOT BIVARIATE
Boxplot bivariate digunakan untuk membandingkan distribusi variabel numerik (carat) berdasarkan kategori dari variabel lain, seperti warna (color). Berikut adalah contoh kode untuk membuat boxplot bivariate antara carat dan color:
ggplot(diamonds, aes(x = color, y = carat)) +
geom_boxplot(
fill = "#2C7FB8",
alpha = 0.8
) +
scale_x_discrete(limits = c("J","I","H","G","F","E","D")) +
labs(
title = "Boxplot Distribusi Carat Berdasarkan Color",
x = "Color",
y = "Carat",
caption = "Urutan Kualitas Color: J = terendah → D = tertinggi\nSumber: Dataset Diamonds"
) +
theme_minimal() +
theme(
plot.title = element_text(
hjust = 0.5,
face = "bold",
size = 16
),
axis.title.x = element_text(margin = margin(t = 15)),
axis.title.y = element_text(margin = margin(r = 15)),
plot.caption = element_text(
hjust = 1,
size = 10,
face = "italic"
)
)Boxplot ini memperlihatkan distribusi berat berlian (carat) pada setiap kategori warna (color), dari kualitas terendah (J) hingga tertinggi (D). Terlihat bahwa warna dengan kualitas lebih rendah seperti J dan I memiliki median carat yang cenderung lebih tinggi dibandingkan warna dengan kualitas lebih tinggi seperti E dan D. Artinya, dalam dataset ini berlian dengan warna kurang baik justru relatif lebih besar ukurannya.
Penyebaran data pada warna rendah juga tampak lebih lebar, serta terdapat outlier di hampir semua kategori, yang menunjukkan adanya beberapa berlian berukuran sangat besar. Secara umum, pola ini mengindikasikan kecenderungan hubungan terbalik antara kualitas warna dan berat berlian. Semakin rendah kualitas warna, median carat cenderung lebih tinggi. Dari sudut pandang analisis data, temuan ini menarik karena menunjukkan bahwa karakteristik kualitas tidak selalu bergerak searah, dan berlian yang lebih besar tidak selalu memiliki kualitas warna yang lebih tinggi.
STACKED BAR
Stacked bar chart bivariate digunakan untuk melihat komposisi dua variabel kategorik dalam satu tampilan yang sama. Visualisasi ini membantu kita memahami bagaimana distribusi suatu kategori terbagi ke dalam kategori lainnya, sekaligus tetap mempertahankan informasi jumlah totalnya. Berikut adalah contoh kode untuk membuat stacked bar antara cut dan color:
gradasi_cut <- colorRampPalette(
c("#FDE725", "#35B779", "#2C7FB8"))(5)
ggplot(diamonds, aes(x = color, fill = cut)) +
geom_bar() +
scale_x_discrete(limits = c("J","I","H","G","F","E","D")) +
scale_fill_manual(
values = c(
"Fair" = gradasi_cut[1],
"Good" = gradasi_cut[2],
"Very Good" = gradasi_cut[3],
"Premium" = gradasi_cut[4],
"Ideal" = gradasi_cut[5]
),
name = "Cut"
) +
scale_y_continuous(
labels = scales::comma,
expand = expansion(mult = c(0, 0.05))
) +
labs(
title = "Stacked Bar Hubungan Cut dan Color",
x = "Color",
y = "Frekuensi",
caption = "Urutan Kualitas Cut: Fair = terendah → Ideal = tertinggi\nUrutan Kualitas Color: J = terendah → D = tertinggi\nSumber: Dataset Diamonds"
) +
theme_minimal() +
theme(
plot.title = element_text(
hjust = 0.5,
face = "bold",
size = 14,
margin = margin(b = 20)
),
axis.text.x = element_text(angle = 30, hjust = 1),
legend.position = "right"
)Visualisasi ini menunjukkan hubungan antara kategori color (warna) dan cut (potongan) dalam dataset diamonds. Cut merepresentasikan kualitas potongan berlian, dengan kualitas terendah yaitu Fair dan kualitas tertinggi yaitu Ideal. Sedangkan untuk kategori color, warna J merupakan kualitas warna paling rendah dan warna D merupakan kualitas warna paling tinggi.
Jika ditinjau dari kategori cut, hampir seluruh warna didominasi oleh potongan Ideal, diikuti oleh Premium dan Very Good. Kategori cut terendah seperti Fair memiliki frekuensi paling kecil di semua warna. Pola ini menunjukkan bahwa sebagian besar berlian dalam dataset memiliki kualitas potongan yang relatif tinggi, terlepas dari tingkat warnanya.
Secara keseluruhan, visualisasi ini memperlihatkan bahwa dalam dataset diamonds, kualitas potongan tinggi (Ideal dan Premium) mendominasi hampir semua kategori warna. Selain itu, warna menengah seperti G, F, dan E memiliki jumlah observasi yang lebih besar dibandingkan warna ekstrem (J maupun D), sehingga distribusi total berlian lebih banyak terkonsentrasi pada warna menengah dengan kualitas potongan yang baik.
KESIMPULAN
Secara keseluruhan, dari semua grafik yang ditampilkan dapat disimpulkan bahwa berat berlian (carat) adalah faktor yang paling berpengaruh terhadap harga. Semakin besar ukuran berlian, maka harganya cenderung semakin mahal. Namun, harga tidak hanya ditentukan oleh berat saja. Kualitas potongan (cut) juga ikut memengaruhi harga. Berlian dengan potongan yang lebih baik seperti Ideal dan Premium umumnya memiliki harga yang lebih tinggi, meskipun dalam setiap kategori potongan masih ada perbedaan harga karena faktor lain.
Selain itu, ditemukan hal yang menarik pada warna (color). Dalam dataset ini, berlian dengan warna yang kualitasnya lebih rendah justru cenderung memiliki ukuran yang lebih besar dibandingkan warna dengan kualitas tinggi. Artinya, berlian yang besar belum tentu memiliki warna terbaik. Secara umum, sebagian besar berlian dalam data berukuran kecil hingga sedang, dengan potongan yang sudah tergolong baik dan warna pada tingkat menengah.
Jadi, dapat disimpulkan bahwa harga berlian ditentukan oleh beberapa faktor sekaligus. Berat berlian menjadi faktor utama, tetapi kualitas potongan dan warna juga ikut berperan dalam menentukan mahal atau tidaknya sebuah berlian.