Pendahuluan

Dokumen ini memuat laporan penyelesaian tugas visualisasi data menggunakan paket ggplot2 dan ekosistem tidyverse. Laporan ini mencakup 5 studi kasus visualisasi:

  1. Perbandingan (Comparison): Rata-rata konsumsi bahan bakar dalam kota (city MPG) untuk 10 pabrikan teratas (mpg).
  2. Distribusi (Distribution): Sebaran harga berlian berdasarkan kualitas potongan (cut) menggunakan boxplot (diamonds).
  3. Hubungan (Relationship): Analisis korelasi antara ukuran karat (carat) dan harga (price) pada sampel 1.000 berlian.
  4. Deret Waktu (Time Series): Tren tingkat tabungan pribadi (personal saving rate) sepanjang waktu beserta anotasi titik puncak (economics).
  5. Peningkatan Desain Visualisasi: Studi komparasi antara visualisasi yang buruk (poor visualization) dan hasil perbaikannya (improved design).
library(tidyverse)
library(scales)

Soal No. 1: Perbandingan (Comparison) - Dataset mpg

Tujuan

  1. Menghitung rata-rata efisiensi bahan bakar dalam kota (cty) untuk tiap pabrikan (manufacturer).
  2. Memilih 10 pabrikan teratas (Top 10).
  3. Membuat diagram batang horizontal terurut (ordered bar chart).
  4. Menyimpulkan temuan utama.
# 1. Agregasi rata-rata cty per pabrikan
mean_manufacturer <- mpg |>
  group_by(manufacturer) |>
  summarise(mean_cty = mean(cty))

# 2. Mengambil Top 10 pabrikan dengan nilai tertinggi
top_10_manufacturer <- mean_manufacturer |>
  arrange(desc(mean_cty)) |>
  slice_head(n = 10)

# Menampilkan tabel ringkasan
top_10_manufacturer
# 3. Visualisasi Bar Chart Terurut
ggplot(
  top_10_manufacturer,
  aes(
    x = reorder(manufacturer, mean_cty),
    y = mean_cty
  )
) +
  geom_col(fill = "steelblue") +
  coord_flip() +
  labs(
    title = "Top 10 Manufacturers by Average City MPG",
    x = "Manufacturer",
    y = "Average City MPG"
  ) +
  theme_minimal()
Top 10 Pabrikan Berdasarkan Rata-rata City MPG

Top 10 Pabrikan Berdasarkan Rata-rata City MPG

Interpretasi Soal 1:
Pabrikan dengan rata-rata city MPG tertinggi menempati urutan teratas pada diagram. Hal ini menunjukkan kendaraan dari pabrikan tersebut memiliki efisiensi konsumsi bahan bakar paling hemat untuk penggunaan dalam kota di antara 10 pabrikan teratas.


Soal No. 2: Distribusi (Distribution) - Dataset diamonds

Tujuan

  1. Memilih variabel numerik (price).
  2. Membandingkan sebarannya berdasarkan variabel kategorik (cut).
  3. Mengatur format angka pada sumbu Y menggunakan scales::comma.
  4. Menginterpretasikan temuan.
ggplot(
  diamonds,
  aes(
    x = cut,
    y = price,
    fill = cut
  )
) +
  geom_boxplot() +
  scale_y_continuous(labels = comma) +
  labs(
    title = "Distribution of Diamond Price by Cut",
    x = "Cut",
    y = "Price (USD)"
  ) +
  theme_minimal() +
  theme(legend.position = "none")
Distribusi Harga Berlian Berdasarkan Kualitas Cut

Distribusi Harga Berlian Berdasarkan Kualitas Cut

Interpretasi Soal 2:
Distribusi harga memperlihatkan rentang variasi yang luas pada setiap kategori cut. Semua kategori memiliki nilai pencilan (outliers) yang signifikan pada kisaran harga tinggi (> $10.000). Nilai median harga antar kualitas cut relatif mirip, yang mengindikasikan bahwa harga tidak hanya ditentukan oleh potongan (cut), melainkan sangat dipengaruhi oleh ukuran karat (carat).


Soal No. 3: Hubungan (Relationship) - Sampel Dataset diamonds

Tujuan

  1. Mengambil sampel acak 1.000 baris dengan replikasi terkontrol (set.seed(123)).
  2. Memvisualisasikan hubungan antara berat karat (carat) dan harga (price).
  3. Mengkustomisasi transparansi titik (alpha = 0.6) untuk mengatasi overplotting.
  4. Menginterpretasikan temuan.
# Pengambilan sampel acak
set.seed(123)
diamonds_sample <- diamonds |>
  slice_sample(n = 1000)

# Visualisasi scatter plot
ggplot(
  diamonds_sample,
  aes(
    x = carat,
    y = price,
    color = cut
  )
) +
  geom_point(alpha = 0.6, size = 2) +
  scale_y_continuous(labels = comma) +
  labs(
    title = "Relationship Between Carat and Price",
    x = "Carat",
    y = "Price (USD)",
    color = "Cut Quality"
  ) +
  theme_minimal()
Hubungan Antara Carat dan Price pada Sampel 1.000 Berlian

Hubungan Antara Carat dan Price pada Sampel 1.000 Berlian

Interpretasi Soal 3:
Terdapat korelasi positif non-linier yang sangat kuat antara ukuran karat dan harga berlian. Semakin besar nilai karat, harga berlian meningkat secara eksponensial. Pada tingkat karat yang sama, variasi harga dipengaruhi oleh kualitas cut, warna, dan kejernihan (clarity).


Soal No. 4: Deret Waktu (Time Series) - Dataset economics

Tujuan

  1. Memvisualisasikan perubahan tingkat tabungan pribadi (psavert) terhadap waktu (date).
  2. Mengidentifikasi dan menambahkan anotasi khusus pada titik nilai tertinggi (peak value).
  3. Menginterpretasikan temuan tren.
# Mencari baris dengan nilai psavert maksimum
peak <- economics |>
  filter(psavert == max(psavert))

# Visualisasi deret waktu dengan anotasi titik puncak
ggplot(
  economics,
  aes(
    x = date,
    y = psavert
  )
) +
  geom_line(color = "steelblue", linewidth = 1) +
  geom_point(
    data = peak,
    color = "red",
    size = 3
  ) +
  geom_text(
    data = peak,
    aes(label = paste0("Puncak: ", round(psavert, 1), "%")),
    vjust = -1,
    color = "red",
    fontface = "bold"
  ) +
  labs(
    title = "Personal Saving Rate Over Time",
    subtitle = "Titik merah menandai tingkat tabungan tertinggi dalam sejarah pengamatan",
    x = "Tahun",
    y = "Saving Rate (%)"
  ) +
  theme_minimal()
Tren Tingkat Tabungan Pribadi AS Sepanjang Waktu

Tren Tingkat Tabungan Pribadi AS Sepanjang Waktu

Interpretasi Soal 4:
Tingkat tabungan pribadi di AS menunjukkan tren penurunan jangka panjang dari era 1970-an hingga awal 2000-an. Titik merah dengan jelas menandai tingkat tabungan tertinggi sepanjang sejarah dataset (mencapai 17.3% pada pertengahan 1975).


Soal No. 5: Peningkatan Desain Visualisasi (Redesign)

Visualisasi Sebelum Perbaikan (Poor Visualization)

Visualisasi awal memiliki sejumlah kelemahan desain: - Ukuran titik terlalu besar (size = 4) dan warna merah pekat tanpa transparansi (severe overplotting). - Tidak memiliki judul informatif atau subjudul konteks. - Label sumbu menggunakan nama variabel teknis mentah (carat, price). - Menggunakan tema default abu-abu yang mengalihkan perhatian.

ggplot(
  diamonds_sample,
  aes(carat, price)
) +
  geom_point(
    color = "red",
    size = 4
  )
Desain Awal (Kualitas Visual Rendah)

Desain Awal (Kualitas Visual Rendah)

Visualisasi Sesudah Perbaikan (Improved Visualization)

Perbaikan yang diterapkan: 1. Hierarki Teks: Menambahkan judul deskriptif yang menyatakan temuan utama (takeaway title). 2. Konteks Data: Menambahkan subjudul penjelas ukuran sampel. 3. Label Sumbu Informatif: Mengubah label menjadi satuan yang jelas (Carat dan Price (USD)). 4. Dimensi Tambahan: Memberikan pemetaan warna berdasarkan kualitas cut. 5. Mengurangi Overplotting: Memperkecil ukuran titik (size = 2) dan menambahkan transparansi (alpha = 0.6). 6. Kebersihan Visual: Menggunakan theme_minimal() untuk memaksimalkan data-ink ratio.

ggplot(
  diamonds_sample,
  aes(
    x = carat,
    y = price,
    color = cut
  )
) +
  geom_point(
    alpha = 0.6,
    size = 2
  ) +
  scale_y_continuous(labels = comma) +
  labs(
    title = "Diamond Price Increases with Carat",
    subtitle = "Sample of 1,000 Diamonds from ggplot2 diamonds dataset",
    x = "Carat (Weight)",
    y = "Price (USD)",
    color = "Cut Quality"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(face = "bold", size = 14),
    plot.subtitle = element_text(color = "grey30", size = 11),
    legend.position = "right"
  )
Desain Akhir Setelah Peningkatan Estetika dan Kejelasan Informasi

Desain Akhir Setelah Peningkatan Estetika dan Kejelasan Informasi


Ringkasan Perbaikan Desain

Aspek Desain Sebelum (Poor) Sesudah (Improved)
Titik Data Terlalu besar (size=4), solid Proporsional (size=2), transparan (alpha=0.6)
Pembeda Kategori Monokrom merah monoton Pewarnaan berdasarkan peubah cut
Sumbu & Format Format numerik polos (price) Format mata uang ribuan berpemisah koma ($)
Tipografi & Judul Kosong Judul temuan (action title) + subjudul konteks
Tema Kanvas Default abu-abu Tema minimalis bersih (theme_minimal)