Pendahuluan

Analisis ini menggunakan dataset diamonds dari paket ggplot2 dalam R, yang berisi informasi karakteristik 53.940 berlian dengan 10 variabel berbeda, yang meliputi atribut fisik seperti ukuran karat, dimensi (panjang, lebar, tinggi), kejernihan, kedalaman, serta atribut kualitas seperti potongan dan warna.Analisis ini fokus pada dua variabel utama: cut (kualitas potongan) sebagai data kategorik dengan lima tingkatan mulai dari Fair (paling rendah), Good, Very Good, Premium, hingga Ideal (paling tinggi) dan color (warna berlian) sebagai data kategorik dengan skala D hingga J, di mana D merepresentasikan warna terbaik (tanpa warna) dan J merepresentasikan warna dengan intensitas kuning paling terlihat.

Visualisasi ini dilakukan melalui empat jenis grafik yang berbeda: bar chart untuk menampilkan distribusi frekuensi kualitas potongan, grouped bar chart untuk menganalisis hubungan antara warna dan kualitas potongan, proportional bar chart untuk melihat komposisi proporsional warna dalam setiap kategori potongan, dan lollipop chart sebagai visualisasi tambahan untuk membandingkan rata-rata harga berlian berdasarkan kualitas potongannya. Analisis ini bertujuan tidak hanya untuk memenuhi persyaratan akademik, tetapi juga untuk memberikan insight praktis yang dapat diterapkan dalam pasar berlian, pilihan konsumen, dan strategi bisnis.

# Load dataset diamonds dari ggplot2
data("diamonds")

# Tampilkan struktur data
head(diamonds)
## # A tibble: 6 × 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
# Tampilkan nama variabel
print(names(diamonds))
##  [1] "carat"   "cut"     "color"   "clarity" "depth"   "table"   "price"  
##  [8] "x"       "y"       "z"

Visualisasi Bar Chart Frekuensi

# Hitung frekuensi untuk labeling
cut_freq <- diamonds %>%
  count(cut) %>%
  arrange(desc(n))

# Buat bar chart frekuensi
p1 <- ggplot(diamonds, aes(x = factor(cut, levels = c("Fair", "Good", "Very Good", "Premium", "Ideal")))) +
  geom_bar(fill = "#3498db", alpha = 0.85, width = 0.7) +
  # Tambah label jumlah
  geom_text(
    stat = "count",
    aes(label = paste0(comma(after_stat(count)), "\n(", 
                      round(after_stat(count)/nrow(diamonds)*100, 1), "%)")),
    vjust = -0.3,
    size = 4,
    lineheight = 0.8
  ) +
  # Pengaturan label dan tema
  labs(
    title = "DISTRIBUSI KUALITAS POTONGAN BERLIAN",
    subtitle = "Analisis Frekuensi Berdasarkan Tipe Potongan",
    x = "Tipe Kualitas Potongan",
    y = "Jumlah Berlian",
    caption = "Sumber: Dataset diamonds | ggplot2"
  ) +
  scale_y_continuous(
    labels = comma,
    limits = c(0, 25000),
    expand = expansion(mult = c(0, 0.1))
  ) +
  theme_minimal(base_size = 14) +
  theme(
    plot.title = element_text(face = "bold", size = 18, hjust = 0.5, color = "#2c3e50"),
    plot.subtitle = element_text(size = 12, hjust = 0.5, color = "#7f8c8d", margin = margin(b = 15)),
    axis.title = element_text(face = "bold", size = 12),
    axis.text = element_text(size = 11),
    axis.text.x = element_text(angle = 0, hjust = 0.5),
    panel.grid.major = element_line(color = "#ecf0f1", linewidth = 0.5),
    panel.grid.minor = element_blank(),
    plot.caption = element_text(color = "#95a5a6", size = 10, hjust = 1),
    plot.margin = margin(20, 20, 20, 20)
  )

# Tampilkan plot
print(p1)
Interpretasi

Grafik batang pertama ini menunjukkan distribusi jumlah berlian berdasarkan kualitas potongannya. Dapat dilihat bahwa potongan ideal lebih banyak darpada yang lainnya dengan jumlah 21.551 berlian kemudian diikuti oleh potongan premium dengan jumlah 13.791 berlian, potongan very good dengan jumlah 12.082 berlian, potongan good dengan jumlah 4.906 berlian dan potongan Fair menempati posisi paling terakhir dengan jumlah 1.610 berlian. Sebagai konsumen, anda memiliki peluang terbesar menemukan berlian dengan potongan Ideal di pasaran. Sebagai penjual, hal ini menunjukkan bahwa pasar memiliki pengaruh yang kuat terhadap kualitas potongan berlian tinggi.


Visualisasi Grouped Bar Chart

# Persiapan data untuk grouped bar chart
grouped_data <- diamonds %>%
  group_by(cut, color) %>%
  summarise(
    count = n(),
    .groups = 'drop'
  ) %>%
  mutate(
    cut = factor(cut, levels = c("Fair", "Good", "Very Good", "Premium", "Ideal")),
    color_label = factor(color, 
                        levels = c("D", "E", "F", "G", "H", "I", "J"),
                        labels = c("D\n(Terbaik)", "E", "F", "G", "H", "I", "J\n(Terendah)"))
  )

# Buat grouped bar chart
p2 <- ggplot(grouped_data, aes(x = cut, y = count, fill = color_label)) +
  geom_bar(stat = "identity", position = position_dodge(width = 0.8), width = 0.7) +
  # Tambah nilai di atas batang
  geom_text(
    aes(label = ifelse(count > 800, comma(count), "")),
    position = position_dodge(width = 0.8),
    vjust = -0.5,
    size = 3.2,
    fontface = "bold"
  ) +
  # Pengaturan visual
  labs(
    title = "DISTRIBUSI WARNA BERLIAN DENGAN KUALITAS POTONGAN",
    subtitle = "Grouped Bar Chart - Analisis Dua Variabel Kategorik",
    x = "Kualitas Potongan",
    y = "Jumlah Berlian",
    fill = "Warna Berlian",
    caption = "Catatan: Hanya menampilkan label untuk kategori dengan >800 berlian
    Sumber: Dataset diamonds | ggplot2"
  ) +
  scale_fill_brewer(palette = "Set3") +
  scale_y_continuous(
    labels = comma,
    limits = c(0, 6500),
    expand = expansion(mult = c(0, 0.1))
  ) +
  theme_minimal(base_size = 14) +
  theme(
    plot.title = element_text(face = "bold", size = 18, hjust = 0.5, color = "#2c3e50"),
    plot.subtitle = element_text(size = 12, hjust = 0.5, color = "#7f8c8d"),
    legend.title = element_text(face = "bold", size = 12),
    legend.text = element_text(size = 10),
    axis.title = element_text(face = "bold", size = 12),
    axis.text = element_text(size = 11),
    panel.grid.major = element_line(color = "#ecf0f1"),
    panel.grid.minor = element_blank(),
    plot.caption = element_text(color = "#95a5a6", size = 9),
    legend.position = "right"
  )

# Tampilkan plot
print(p2)
Interpretasi

Grafik kedua ini menunjukkan bagaimana warna berlian terdistribusi di setiap tingkat kualitas potongan dimana warna G merupakan yang paling populer diantara semua kategori, terutama untuk potongan Ideal dan Premium. Warna E juga sangat dominan hingga hampir menyamai G di beberapa kategori. Warna J yang merupakan terendah lebih banyak ditemukan pada potongan Fair dan Good tetapi jarang pada Ideal. Warna D memiliki distribusi yang lebih merata di semua kategori potongan. Dapat disimpulkan bahwa ada hubungan antara kualitas potongan dan warna berlian. Warna menengah (G dan E) paling sering dipadukan dengan potongan berkualitas tinggi, sehingga membentuk kombinasi yang paling banyak tersedia dipasar.


Visualisasi Proportional Bar Chart

# Hitung proporsi
prop_data <- diamonds %>%
  group_by(cut, color) %>%
  summarise(count = n(), .groups = 'drop') %>%
  group_by(cut) %>%
  mutate(
    prop = count / sum(count),
    percentage = paste0(round(prop * 100, 1), "%"),
    color = factor(color, levels = c("D", "E", "F", "G", "H", "I", "J"))
  ) %>%
  ungroup() %>%
  mutate(cut = factor(cut, levels = c("Fair", "Good", "Very Good", "Premium", "Ideal")))

# Buat proportional bar chart
p3 <- ggplot(prop_data, aes(x = cut, y = prop, fill = color)) +
  geom_bar(stat = "identity", position = "fill", width = 0.8) +
  # Tambah label persentase untuk proporsi >5%
  geom_text(
    aes(label = ifelse(prop > 0.05, percentage, "")),
    position = position_fill(vjust = 0.5),
    size = 3.2,
    color = "white",
    fontface = "bold"
  ) +
  # Pengaturan visual
  labs(
    title = "KOMPOSISI WARNA DALAM SETIAP KATEGORI POTONGAN",
    subtitle = "Proportional Bar Chart (100% Stacked)",
    x = "Kualitas Potongan",
    y = "Persentase (%)",
    fill = "Warna Berlian",
    caption = "Catatan:Hanya menampilkan label untuk proporsi >5%
    Sumber: Dataset diamonds | ggplot2"
  ) +
  scale_fill_manual(
    values = c("#e74c3c", "#3498db", "#2ecc71", "#f1c40f", "#9b59b6", "#1abc9c", "#e67e22"),
    labels = c("D (Terbaik)", "E", "F", "G", "H", "I", "J (Terendah)")
  ) +
  scale_y_continuous(
    labels = percent_format(),
    breaks = seq(0, 1, by = 0.2)
  ) +
  theme_minimal(base_size = 14) +
  theme(
    plot.title = element_text(face = "bold", size = 18, hjust = 0.5, color = "#2c3e50"),
    plot.subtitle = element_text(size = 12, hjust = 0.5, color = "#7f8c8d"),
    legend.title = element_text(face = "bold", size = 12),
    legend.text = element_text(size = 10),
    axis.title = element_text(face = "bold", size = 12),
    axis.text = element_text(size = 11),
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    plot.caption = element_text(color = "#95a5a6", size = 9)
  )

# Tampilkan plot
print(p3)
Interpretasi

Grafik ketiga ini menunjukkan komposisi warna dalam setiap kategori potongan dalam bentuk persentase dimana potongan Ideal dengan warna G (22.7%) dan E (18.1%) lebih mendominasi dan menguasai 38.4% pasar kategori ini. Potongan Premium memiliki distribusi yang lebih merata, dengan G (21.2%), E (16.9%) dan F (16.9%) yang seimbang. Pada potongan Fair warna J mendapatkan bagian tertinggi diantara semua kategori. Selain itu, warna D justru paling banyak di potongan Good (13.5%) dan bukan di Ideal. Dapat disimpulkan bahwa setiap kategori potongan memiliki ciri khas komposisi warnanya sendiri, hal ini membantu konsumen memahami apa yang biasanya tersedia untuk setiap tingkat kualitas.


Visualisasi Lollipop Chart

# Hitung rata-rata harga per kategori cut
price_summary <- diamonds %>%
  group_by(cut) %>%
  summarise(
    avg_price = mean(price),
    count = n(),
    .groups = 'drop'
  ) %>%
  mutate(
    cut = factor(cut, levels = c("Fair", "Good", "Very Good", "Premium", "Ideal")),
    label_price = dollar(avg_price, accuracy = 1)
  )

# Buat lollipop chart
p4 <- ggplot(price_summary, aes(x = cut, y = avg_price)) +
  geom_segment(aes(x = cut, xend = cut, y = 0, yend = avg_price), 
               color = "#7f8c8d", linewidth = 0.8) +
  geom_point(aes(size = count), color = "#e74c3c", fill = "#f1c40f", 
             alpha = 0.8, shape = 21, stroke = 1.5) +
  # Tambah label harga
  geom_text(aes(label = label_price), 
            vjust = -1.5, size = 4, fontface = "bold", color = "#2c3e50") +
  # Tambah label jumlah
  geom_text(aes(label = paste0("n=", comma(count))), 
            vjust = 2.5, size = 3.5, color = "#7f8c8d") +
  # Pengaturan visual
  labs(
    title = "PERBANDINGAN RATA-RATA HARGA BERLIAN PER KUALITAS POTONGAN",
    subtitle = "Lollipop Chart - Ukuran titik menunjukkan jumlah sampel",
    x = "Kualitas Potongan",
    y = "Rata-rata Harga (USD)",
    size = "Jumlah Berlian",
    caption = "Sumber: Dataset diamonds | ggplot2"
  ) +
  scale_y_continuous(
    labels = dollar_format(),
    limits = c(0, 5000),
    expand = expansion(mult = c(0, 0.1))
  ) +
  scale_size_continuous(range = c(8, 15)) +
  theme_minimal(base_size = 14) +
  theme(
    plot.title = element_text(face = "bold", size = 16, hjust = 0.5, color = "#2c3e50"),
    plot.subtitle = element_text(size = 12, hjust = 0.5, color = "#7f8c8d"),
    axis.title = element_text(face = "bold", size = 12),
    axis.text = element_text(size = 11),
    panel.grid.major.x = element_blank(),
    panel.grid.minor = element_blank(),
    legend.position = "none"
  )

# Tampilkan plot
print(p4)
Interpretasi

Grafik ketiga ini memperlihatkan pola harga yang menarik dimana potongan Premium memiliki harga rata-rata tertinggi diikuti oleh Fair meskipun merupakan kualitas terendah, sementara potongan Ideal justru memiliki harga terendah. hal ini menunjukkan bahwa dalam industri berlian,harga yang lebih mahal tidak berarti kualitas potongannya lebih bagus begitupun sebaliknya dan kemungkinan variabel lain seperti ukuran karat atau kejernihan mungkin berpengaruh terhadap harga.


Kesimpulan

Berdasarkan analisis visualisasi data diskrit dan kategorik pada dataset diamonds diketahui bahwa Berlian dengan potongan Ideal menguasai pasar (39.9% dari total keseluruhan pasar), warna G dan E paling sering dipadukan dengan potongan berkualitas tinggi, setiap kategori potongan memiliki ciri khas komposisi warna yang berbeda, selain itu ditemukan juga bahwa potongan berlian Fair memiliki rata-rata tertingi meskipun kualitasnya termasuk yang terendah.

Untuk Konsumen, potongan berlian Ideal memiliki peluang terbesar untuk ditemukan dengan warna G dan E adalah pilihan paling umum dipasar dan harga yang lebih mahal tidak berarti kualitas potongannya lebih bagus begitupun sebaliknya. Untuk penjual, bisa lebih fokus untuk meningkatkan stok potongan Ideal dengan warna G dan E, meskipun potongan Fair jarang dibeli, tetapi harganya lebih premium dan bisa dipertimbangkan untuk menyediakan stoknya, selain itu penjual juga bisa lebih menyesuaikan kombinasi warna berlian sesuai dengan pola pasar dan permintaan yang paling banyak ditanyakan konsumen.