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
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.
geom_histogram() menggunakan 30 bins
(batang). Selanjutnya mengganti nilai bins tersebut dengan menambahkan
argumen bins = 50. Hasilnya sebagai berikut.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.
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.
Untuk membuat boxplot di ggplot2 kita dapat gunakan
function geom_boxplot()
library(ggplot2)
ggplot(data = Credit, mapping = aes(x = Limit)) +
geom_boxplot()
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")
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.
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).
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.
Plot ini digunakan untuk melihat trend data berdasarkan perubahan waktu. Artinya pada Line Chart cocok untuk data-data deret waktu.
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 ...
library(ggplot2)
ggplot(data = jual2, aes(x=Tanggal,y=`Jumlah Order`)) +
geom_line() +
labs(x="tanggal",x="Jumlah Order Produck Cetakan")
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.
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.