1 Input Data

Dataset Credit dari buku Introduction to Statistical Learning (ISLR) berisi data tentang penggunaan kartu kredit oleh 400 individu, mencakup informasi seperti pendapatan, batas kredit, skor kredit, jumlah kartu kredit, usia, lama pendidikan, jenis kelamin, status mahasiswa, status pernikahan, etnis, dan saldo terutang. Dataset ini sering digunakan dalam analisis regresi dan klasifikasi untuk memahami faktor-faktor yang mempengaruhi penggunaan kartu kredit.

library(ISLR)
data("Credit")
head(Credit)
##   ID  Income Limit Rating Cards Age Education Gender Student Married Ethnicity
## 1  1  14.891  3606    283     2  34        11   Male      No     Yes Caucasian
## 2  2 106.025  6645    483     3  82        15 Female     Yes     Yes     Asian
## 3  3 104.593  7075    514     4  71        11   Male      No      No     Asian
## 4  4 148.924  9504    681     3  36        11 Female      No      No     Asian
## 5  5  55.882  4897    357     2  68        16   Male      No     Yes Caucasian
## 6  6  80.180  8047    569     4  77        10   Male      No      No Caucasian
##   Balance
## 1     333
## 2     903
## 3     580
## 4     964
## 5     331
## 6    1151
dim(Credit)
## [1] 400  12

2 Histogram

Untuk membuat histogram pada package {islr} menggunakan perintah geom_histogram(). Variable yang digunakan yaitu *Limit* pada data **Credit**.

library(ggplot2)
ggplot(data = Credit, mapping = aes(x = Limit)) + 
  geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Interpretasi : 1. Distribusi Positif Skewed (Right-Skewed) - Histogram menunjukkan bahwa sebagian besar individu memiliki batas kredit di bawah 10.000, tetapi ada beberapa yang memiliki batas kredit jauh lebih tinggi (outlier di ujung kanan). Ini menunjukkan distribusi yang miring ke kanan.

  1. Modus (Nilai yang Paling Sering Muncul)
  1. Sebaran Data
  1. Outlier
ggplot(data = Credit, mapping = aes(x = Limit)) + 
  geom_histogram(bins = 300, color="white")

INTERPRETASI : 1. Distribusi Data - Histogram masih menunjukkan pola right-skewed (miring ke kanan), di mana sebagian besar individu memiliki batas kredit lebih rendah, sementara beberapa individu memiliki batas kredit yang jauh lebih tinggi.

2. Puncak (Modus) yang Lebih Jelas - Dengan jumlah bins yang lebih banyak, kita bisa melihat lebih banyak variasi dalam distribusi. Puncak tertinggi terlihat sekitar 5.000, yang menunjukkan bahwa banyak individu memiliki batas kredit dalam kisaran ini.

3. Variasi yang Lebih Detail - Dibandingkan histogram sebelumnya dengan bins = 30, histogram ini lebih rinci dan menunjukkan fluktuasi kecil dalam frekuensi batas kredit. Namun, jumlah bins yang terlalu banyak bisa membuat data terlihat terlalu berisik dan sulit diinterpretasi.

4. Outlier Tetap Terlihat - Di sisi kanan, masih ada beberapa individu dengan batas kredit sangat tinggi, tetapi jumlahnya kecil, sehingga tetap dianggap outlier.

Kita dapat memberikan pemisah dengan warna putih Anda dapat tambahkan argumen color = "white". Hasilnya sebagai berikut.

library(ggplot2)
ggplot(data = Credit, mapping = aes(x = Limit)) + 
  geom_histogram(bins = 30, color = "white")

Kita dapat mengubah warna batang dengan menggunakan argumen fill, mengubah format penulisan nilai pada sumbu x dan y menggunakan function scale_x_continuous() untuk sumbu x dan scale_y_continuous() untuk sumbu y dan mengubah nama label pada sumbu x dan y dengan fungsi labs. Hasilnya sebagai berikut.

library(scales)
library(ggplot2)
ggplot(data = Credit, mapping = aes(x = Limit)) + 
  geom_histogram(bins = 30, color = "white", fill = "purple") + 
  scale_x_continuous(labels = comma) + 
  scale_y_continuous(labels = comma) + 
  labs(x = "Limit", 
       y = "Frekuensi")

Interpretasi : 1. Distribusi Right-Skewed (Miring ke Kanan) - Sebagian besar individu memiliki batas kredit di bawah 7.500, tetapi ada beberapa individu dengan batas kredit yang jauh lebih tinggi, menyebabkan ekor kanan yang panjang.

2. Puncak Distribusi (Modus Tertinggi) - Puncak tertinggi terjadi di sekitar 5.000, menunjukkan bahwa rentang ini adalah batas kredit yang paling umum dalam dataset.

3. Sebaran Data - Sebagian besar individu memiliki batas kredit antara 1.500 hingga 7.500. Batas kredit di atas 10.000 jarang ditemukan, terlihat dari batang histogram yang semakin kecil di bagian kanan.

4. Frekuensi yang Lebih Jelas Label sumbu “Frekuensi” membantu memahami jumlah individu dalam setiap rentang batas kredit. Frekuensi tertinggi mendekati 40 individu dalam satu bin.

3 Density Plot

Untuk membuat density plot menggunakan ggplot2 kita cukup menggunakan function geom_density()

library(ggplot2)
ggplot(data = Credit, mapping = aes(x = Limit)) + 
  geom_density()

Untuk mengatur warna, transaparansi, format penulisan nilai pada sumbu x dan y, dan labeling sumbu x sama seperti pembuatan Histogram. Hasilnya sebagai berikut.

library(ggplot2)
ggplot(data = Credit, mapping = aes(x = Limit)) + 
  geom_density(fill = "brown1", alpha = 0.7) + 
  scale_x_continuous(labels = comma) + 
  scale_y_continuous(labels = comma) + 
  labs(x = "limit")

Interpretasi :

Kita dapat membandingkan sebaran menggunakan density plot berdasarkan kategori. Misal akan dilihat sebaran data batas kredit *(Credit)* berdasarkan kategori Etnis Individu *(Ethnicity)*. Hasilnya sebagai berikut.

library(ggplot2)
ggplot(data = Credit, mapping = aes(x = Limit, fill = Ethnicity, color = Ethnicity)) + 
  geom_density(alpha = 0.7) + 
  scale_x_continuous(labels = comma) + 
  scale_y_continuous(labels = comma) + 
  labs(x = "limit")

Interpretasi :

1. Distribusi Right-Skewed (Positively Skewed) - Grafik menunjukkan bahwa mayoritas data berada di rentang sekitar 5.000, dengan puncak tertinggi sedikit di atas angka ini. - Distribusi menurun perlahan di sisi kanan, menunjukkan ada beberapa individu dengan batas kredit yang jauh lebih tinggi (di atas 10.000), tetapi jumlahnya lebih sedikit.

2. Puncak Distribusi (Peak Density) - Kepadatan tertinggi terlihat di sekitar 4.500 - 5.500, yang berarti mayoritas individu memiliki batas kredit dalam rentang ini.

3. Ekor Panjang ke Kanan (Long Right Tail) - Setelah mencapai puncak, distribusi menurun tetapi tetap memiliki ekor panjang di sisi kanan, yang menandakan adanya outlier dengan batas kredit tinggi.

Untuk mengurangi kesulitan dalam mengamati visual tersebut maka perlu dipisah per kategori dengan menggunakan visualisasi ridgeline plot atau disebut juga joyplot.

library(ggplot2)
library(ggridges)
ggplot(data = Credit, mapping = aes(x = Limit, y= Ethnicity, fill = Ethnicity)) + 
  geom_density_ridges() + 
  labs(x = "Limit", y = "Gender")
## Picking joint bandwidth of 713

Interpretasi : - Caucasian cenderung memiliki batas kredit yang lebih tinggi. - African American memiliki batas kredit yang lebih rendah dibandingkan kelompok lain. - Asian memiliki distribusi yang lebih luas, dengan sebagian besar individu memiliki credit limit di kisaran menengah.

4 Boxplot

Untuk membuat boxplot di ggplot2 kita dapat gunakan function geom_boxplot()

library(ggplot2)
ggplot(data = Credit, mapping = aes(x = Limit)) + 
  geom_boxplot()

5 Boxplot Vertikal

Membuat boxplot secara vertikal menggunakan perintah coord_flip(). Hasilnya sebagai berikut.

library(ggplot2)
ggplot(data = Credit, mapping = aes(x = Limit)) + 
  geom_boxplot()+
  coord_flip()

Interpretasi : - Ada outlier signifikan di batas kredit yang tinggi (>10.000). - Distribusi credit limit menunjukkan kecenderungan right-skewed (lebih banyak data di batas kredit rendah). - Sebagian besar data berada di antara IQR (sekitar 25% - 75%), dengan rentang batas kredit antara ± 3.000 hingga 7.000.

kita dapat membuat boxplot dari data numerik dan membandingkan sebarannya berdasarkan kategori. Misalnya kita ingin membandingkan sebaran harga berlian *(Limit)* berdasarkan tingkat warna(Gender)`. Hasilnya sebagai berikut.

library(ggplot2)
ggplot(data = Credit, mapping = aes(x = Limit, y = Gender)) + 
  geom_boxplot(color="skyblue")

Selanjutnya memberi warna berbeda untuk setiap box berdasarkan kategorinya. Kita dapat menambahkan argumen fill dengan nilai berupa nama variabel dari kategori yang ingin kita gunkan untuk perbandingan boxplot. Misalnya kita ingin membandingkan sebaran dari variabel Batas Kredit *(Limit)* berdasarkan Etnis Individu *(Ethnicity)* menggunakan boxplot dan menyesuaikan etnis tersebut berdasarkan kategori dari Jenis Kelamin Individu *Gender*. Hasilnya sebagai berikut.

library(ggplot2)
ggplot(data = Credit, mapping = aes(x = Rating, y = Gender, fill = Gender)) + 
  geom_boxplot()

Untuk menghilangkan legend dari color kita dapat tambahkan theme(legend.position = “none”).Hasilnya sebagai berikut.

library(ggplot2)
ggplot(data = Credit, mapping = aes(x = Rating, y = Gender, fill = Gender)) + 
  geom_boxplot() + 
  theme(legend.position = "none")

6 Violin Plot

Plot ini dibentuk dengan menggabungkan antara Density Plot dengan boxplot. Hasilnya sebagai berikut.

library(ggplot2)
ggplot(data = Credit, mapping = aes(x = Limit,y="all")) +
  geom_violin(fill="cadetblue1",alpha=0.5) +
  geom_boxplot(fill="deeppink2",width=0.5)

Interpretasi : - Sebagian besar individu memiliki credit limit rendah hingga menengah, dengan beberapa kasus batas kredit yang sangat tinggi (outlier). - Violin plot memberikan gambaran distribusi lebih detail dibandingkan boxplot saja, terutama dalam menggambarkan kepadatan data. - Bentuk distribusi menunjukkan bahwa batas kredit mungkin tidak terdistribusi normal, dan lebih condong ke kanan.

7 QQ-Plot

Plot ini berguna untuk memeriksa apakah sebaran data (sebaran empirik) memiliki bentuk yang sama dengan sebaran tertentu yang dispesifikan (sebaran hipotetik). Misalnya kita ingin melihat pola sebaran harga berlian *(Limit).* apakah menyebar normal atau tidak.

library(ggplot2)
ggplot(data = Credit, aes(sample = Limit)) +
  stat_qq(col="magenta", cex=0.9) +
  stat_qq_line(col="darkblue", lwd=1)

Interpretasi : - Sumbu X: Kuantil dari distribusi normal standar (theoretical quantiles). - Sumbu Y: Kuantil dari data credit limit yang diamati (sample quantiles). - Titik-titik magenta: Mewakili data sampel dibandingkan dengan distribusi normal. - Garis biru tua: Garis referensi normalitas (jika data normal, titik-titik akan mengikuti garis berwarna biru tua).

8 Scatter plot

Untuk membuat scatter plot menggunakan ggplot2 kita dapat menggunakan geom_point(). Misalnya kita ingin melihat pola sebaran antara carat dan price.

library(ggplot2)
ggplot(data = Credit, mapping = aes(x = Rating, y = Limit)) + 
  geom_point()

Kita juga dapat memberikan warna untuk setiap titik. Misalnya warna masing-masing titik menyesuaikan dengan kategori pada variabel cut.

library(ggplot2)
ggplot(data = Credit, mapping = aes(x = Rating, y = Limit, color = Ethnicity)) + 
  geom_point()

Interpretasi : - Terdapat hubungan linear kuat antara Rating dan Limit, karena titik-titik membentuk pola lurus. - Semakin tinggi Rating, semakin tinggi Credit Limit yang diberikan. - Pola seragam untuk semua etnis → Tidak ada perbedaan mencolok antara kelompok etnis dalam hubungan ini.

9 Line chart

Plot ini digunakan untuk melihat trend data berdasarkan perubahan waktu. Artinya pada Line Chart cocok untuk data-data deret waktu.

9.1 Input Data

Data yang digunakan yaitu data rata-rata jumlah order dari penjualan produck cetakan. Data bersumber dari **Kaggle**

library(readxl)
jual2 <- read_xlsx("C:/Users/Zahra Mahendra Putri/Documents/STATISTIKA UNTIRTA/MATA KULIAH/SEMESTER 4/Eksplorasi Dan Visualisasi Data/penjualan1.xlsx")
jual2
## # A tibble: 1,076 × 5
##    Tanggal             `Jenis Produk`   `Jumlah Order` Harga   Total
##    <dttm>              <chr>                     <dbl> <dbl>   <dbl>
##  1 2022-08-05 00:00:00 Foodpak260                 1000  1800 1800000
##  2 2022-08-05 00:00:00 FoodpakMatte245            1000  1900 1900000
##  3 2022-08-05 00:00:00 CraftLaminasi290           5000   750 3750000
##  4 2022-08-05 00:00:00 CraftLaminasi290           1000  1200 1200000
##  5 2022-08-07 00:00:00 Dupleks310                 1000  1550 1550000
##  6 2022-08-08 00:00:00 Dupleks310                  500  1900  950000
##  7 2022-08-08 00:00:00 Ivory270                   1000  1700 1700000
##  8 2022-08-09 00:00:00 Kinstruk130                1000  1000 1000000
##  9 2022-08-09 00:00:00 HVS                        1500   850 1275000
## 10 2022-08-09 00:00:00 Dupleks350                  500  1800  900000
## # ℹ 1,066 more rows
jual2$Tanggal <- as.Date(jual2$Tanggal)  
head(jual2)
## # A tibble: 6 × 5
##   Tanggal    `Jenis Produk`   `Jumlah Order` Harga   Total
##   <date>     <chr>                     <dbl> <dbl>   <dbl>
## 1 2022-08-05 Foodpak260                 1000  1800 1800000
## 2 2022-08-05 FoodpakMatte245            1000  1900 1900000
## 3 2022-08-05 CraftLaminasi290           5000   750 3750000
## 4 2022-08-05 CraftLaminasi290           1000  1200 1200000
## 5 2022-08-07 Dupleks310                 1000  1550 1550000
## 6 2022-08-08 Dupleks310                  500  1900  950000
str(jual2)
## tibble [1,076 × 5] (S3: tbl_df/tbl/data.frame)
##  $ Tanggal     : Date[1:1076], format: "2022-08-05" "2022-08-05" ...
##  $ Jenis Produk: chr [1:1076] "Foodpak260" "FoodpakMatte245" "CraftLaminasi290" "CraftLaminasi290" ...
##  $ Jumlah Order: num [1:1076] 1000 1000 5000 1000 1000 500 1000 1000 1500 500 ...
##  $ Harga       : num [1:1076] 1800 1900 750 1200 1550 1900 1700 1000 850 1800 ...
##  $ Total       : num [1:1076] 1800000 1900000 3750000 1200000 1550000 ...

9.2 Line chart Dasar

library(ggplot2)
ggplot(data = jual2, aes(x=Tanggal,y=`Jumlah Order`)) +
  geom_line() +
  labs(x="tanggal",x="Jumlah Order Produck Cetakan") 

9.3 Area Plot

Untuk menambah estetika dapat dilakukan dengan mengarsir daerah di bawah plot deret waktu. Plot seperti ini disebut Area Plot. Hasilnya sebagai berikut.

library(ggplot2)
ggplot(data = jual2, aes(x=Tanggal,y=`Jumlah Order`)) +
  geom_line(lwd=1.2, col="darkgreen") +
  geom_area(fill="deeppink2", alpha=0.4)

  labs(x="Tanggal", x="Jumlah Order")
## $x
## [1] "Tanggal"
## 
## attr(,"class")
## [1] "labels"

Interpretasi : - Fluktuasi signifikan: Ada lonjakan besar pada beberapa titik, terutama sekitar April 2023 yang mencapai lebih dari 40.000 order dalam satu hari. - Pola tidak konsisten: Tidak ada pola yang tampak jelas dalam periode tertentu (misalnya, bulanan atau musiman). Pola tidak konsisten dikarenakan adanya lonjakan pada grafik yang disebabkan oleh promosi besar, event khusus, atau anomali data. - Sebagian besar data berada di bawah 10.000 order, tetapi ada lonjakan tinggi yang tidak merata.

9.4 Multiple Line Chart

Pada plot ini dapat digunakan untuk membandingkan trend data deret waktu pada beberapa wilayah/kelompok.

library(ggplot2)
ggplot(data = jual2, aes(x=Tanggal)) +
  geom_line(aes(y=Harga), lwd=0.9, col="cornflowerblue") +
  geom_line(aes(y=Total), lwd=0.9, col="brown2") +
  labs(x="Tanggal", y="Harga") 

Interpretasi - Fluktuasi tinggi: Harga atau total nilai transaksi bervariasi setiap harinya. - Lonjakan ekstrem sekitar April 2023: Terjadi peningkatan harga atau total yang sangat signifikan di periode ini. - Kenaikan dan penurunan yang cepat: Tidak ada pola yang benar-benar stabil.

Untuk menambahkan nama kelompok digunakan perintah berikut.

library(ggplot2)
ggplot(data = jual2, aes(x=Tanggal)) +
  geom_line(aes(y=Harga), lwd=0.9, col="blue") +
  geom_line(aes(y=Total), lwd=0.9, col="red") +
  xlim(min(jual2$Tanggal),max(jual2$Tanggal)+100) +
  geom_text(x=max(jual2$Tanggal),y=tail(jual2$Harga,1)+30,
            label="High", size = 5,
            color="blue", hjust=-0.1) +
    geom_text(x=max(jual2$Tanggal),y=tail(jual2$Total,1)+30,
            label="Low", size = 5,
            color="red", hjust=-1.4) +
  labs(x="tanggal", y="Harga") 

Interpretasi : - Total penjualan sangat fluktuatif dengan lonjakan tinggi di beberapa titik. - Harga relatif stabil dan tetap rendah, menunjukkan bahwa penjualan mungkin lebih dipengaruhi oleh faktor lain, seperti permintaan musiman atau promosi.