1.Andi Nurmanda Kurniati M. (H081231007)
2.Alya Fadhilah Noh (H081231040)
3.Sofita Febriandani Khairunnisa (H081231045)
4.Nur Zahwa Syahruddin (H081231046)
5.Ahmad Ghulam Ghazi (H081231054)
Dosen Pengampun : Edy Saputra Rusdy, S.Si., M.Si.
Program Studi
Ilmu Aktuaria
Fakultas Matematika dan Ilmu Pengetahuan Alam
Universitas Hasanuddin
2024
Library-library yang akan digunakan pada Laporan Ini meliputi :
library(readxl)
library(readr)
library(tidyr)
library(ggplot2)
library(skimr)
library(visdat)
library(devtools)
library(ggcorrplot)
library(corrplot)
library(EnvStats)
library(dlookr)
library(DataExplorer)
library(reshape)
library(psych)
library(scales)
library(vcd)
library(hrbrthemes)
library(dplyr)
library(ggpol)
Dalam analisis ini, kami menggunakan dataset bernama “bike_buyers”, yang berisi informasi mengenai pelanggan dari berbagai wilayah geografis, yaitu Eropa, Pasifik, dan Amerika Utara. Dataset ini memiliki 6 kolom utama: ID, Gender, Income, Region, Age, dan Purchased_Bike. Kolom terakhir mencatat apakah pelanggan membeli sepeda atau tidak.
Tujuan utama dari analisis ini adalah memahami faktor-faktor yang memengaruhi keputusan pembelian sepeda, seperti usia, pendapatan, dan lokasi geografis. Selain itu, kami juga ingin mengeksplorasi pola pembelian di antara kelompok-kelompok tertentu, misalnya berdasarkan jenis kelamin atau wilayah. Kami berharap hasil analisis ini dapat memberikan wawasan berharga untuk perencanaan pemasaran di masa depan.
Pengumpulan Data Dataset yang digunakan dalam penelitian ini diambil dari sumber terpercaya dan memenuhi kriteria minimal 1000 sampel dengan adanya nilai yang hilang (missing values). Dataset ini mencakup [jelaskan variabel yang ada pada dataset secara umum, seperti kategori, jumlah, atau jenis data, misalnya demografis, kesehatan, atau keuangan].
Pra-pemrosesan Data Pra-pemrosesan data adalah tahap penting untuk memastikan kualitas data sebelum dilakukan analisis lebih lanjut. Pra-pemrosesan data dilakukan melalui beberapa langkah berikut:
summary() dan visualisasi seperti
heatmap dari library ggplot2 atau naniar untuk
mengetahui pola nilai yang hilang.mean() atau median(), atau menggunakan library
seperti mice. Contoh implementasi:scale() untuk meningkatkan konsistensi
dan mengoptimalkan algoritma pembelajaran yang digunakan.boxplot.stats() atau Z-score.caTools.summary() dan sd().geom_histogram dari ggplot2) atau boxplot
(geom_boxplot).geom_point) atau analisis korelasi
dengan fungsi cor().- Analisis Multivariat: Mengkaji
interaksi lebih dari dua variabel untuk pola kompleks, seperti PCA atau
pairplot (GGally).Penerapan Algoritma Pembelajaran Salah satu tipe pembelajaran
diterapkan pada data setelah melalui proses pra-pemrosesan dan EDA.
Algoritma yang digunakan adalah [contoh: regresi linear menggunakan
fungsi lm()]
Evaluasi dan Interpretasi Hasil Hasil analisis model dibandingkan dengan ekspektasi dan tujuan penelitian. Evaluasi ini mencakup:
bike_buyers <- read_excel("C:/Users/Lenovo/Downloads/bike_buyers.xlsx")
bike_buyers
Langkah pertama dalam proses analisis adalah mengimpor dataset ke
RStusio. Kami menggunakan library readxl untuk membaca file
Excel “bike_buyers.xlsx”. File ini berisi 1000 baris data pelanggan yang
akan dianalisis. Setelah data diimpor, kami memverifikasi apakah data
terbaca dengan benar menggunakan fungsi-fungsi seperti
head(), tail(), dan str(). Proses
ini penting untuk memastikan dataset sesuai dengan format yang
diharapkan, sehingga dapat digunakan langsung dalam analisis tanpa
adanya kesalahan format atau struktur.
skim(bike_buyers)
| Name | bike_buyers |
| Number of rows | 1000 |
| Number of columns | 6 |
| _______________________ | |
| Column type frequency: | |
| character | 3 |
| numeric | 3 |
| ________________________ | |
| Group variables | None |
Variable type: character
| skim_variable | n_missing | complete_rate | min | max | empty | n_unique | whitespace |
|---|---|---|---|---|---|---|---|
| Gender | 0 | 1 | 4 | 6 | 0 | 2 | 0 |
| Region | 0 | 1 | 6 | 13 | 0 | 3 | 0 |
| Purchased_Bike | 0 | 1 | 2 | 3 | 0 | 2 | 0 |
Variable type: numeric
| skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
|---|---|---|---|---|---|---|---|---|---|---|
| ID | 0 | 1.00 | 19965.99 | 5347.33 | 11000 | 15290.75 | 19744 | 24470.75 | 29447 | ▇▇▇▇▇ |
| Income | 12 | 0.99 | 56214.57 | 31012.02 | 10000 | 30000.00 | 60000 | 70000.00 | 170000 | ▇▆▃▁▁ |
| Age | 13 | 0.99 | 44.15 | 11.33 | 25 | 35.00 | 43 | 52.00 | 89 | ▆▇▅▁▁ |
str(bike_buyers)
## tibble [1,000 × 6] (S3: tbl_df/tbl/data.frame)
## $ ID : num [1:1000] 12496 24107 14177 24381 25597 ...
## $ Gender : chr [1:1000] "Female" "Male" "Male" "Female" ...
## $ Income : num [1:1000] 40000 30000 80000 70000 30000 10000 160000 40000 20000 NA ...
## $ Region : chr [1:1000] "Europe" "Europe" "Europe" "Pacific" ...
## $ Age : num [1:1000] 42 43 60 41 36 50 33 43 58 NA ...
## $ Purchased_Bike: chr [1:1000] "No" "No" "No" "Yes" ...
Langkah ini dilakukan untuk memverifikasi jenis data pada setiap
kolom dalam dataset. Dengan menggunakan fungsi skim() dan
str(), kami memeriksa apakah kolom-kolom seperti Income dan
Age bertipe numerik, sedangkan Gender dan Region bertipe karakter.
Verifikasi ini penting karena tipe data yang salah dapat menyebabkan
error saat analisis statistik atau visualisasi. Misalnya, jika kolom
Income terbaca sebagai karakter, harus diubah menjadi numerik sebelum
analisis lebih lanjut.
dim(bike_buyers)
## [1] 1000 6
Dataset ini terdiri dari 1000 baris (observasi) dan 6 kolom (variabel). Informasi ini memberikan gambaran awal tentang ukuran dataset. Jumlah baris menunjukkan banyaknya pelanggan yang dianalisis, sedangkan jumlah kolom menunjukkan atribut yang tersedia untuk eksplorasi.
head(bike_buyers)
tail(bike_buyers)
Kami menggunakan fungsi head() dan tail()
untuk melihat data di baris awal dan akhir dataset. Hal ini membantu
memverifikasi apakah data terbaca dengan benar dan mengidentifikasi
potensi anomali, seperti nilai yang tidak sesuai atau data kosong pada
bagian tertentu.
summary(bike_buyers)
## ID Gender Income Region
## Min. :11000 Length:1000 Min. : 10000 Length:1000
## 1st Qu.:15291 Class :character 1st Qu.: 30000 Class :character
## Median :19744 Mode :character Median : 60000 Mode :character
## Mean :19966 Mean : 56215
## 3rd Qu.:24471 3rd Qu.: 70000
## Max. :29447 Max. :170000
## NA's :12
## Age Purchased_Bike
## Min. :25.00 Length:1000
## 1st Qu.:35.00 Class :character
## Median :43.00 Mode :character
## Mean :44.15
## 3rd Qu.:52.00
## Max. :89.00
## NA's :13
Berikut ini ringkasan-ringkasan data pembelian sepeda
diagnose_numeric(bike_buyers)
diagnose_outlier(bike_buyers)
Berdasarkan hasil diagnosa data untuk variabel numerik dan outlier pada dataset bike_buyers, terdapat tiga variabel yang dianalisis: ID, Income, dan Age. Variabel ID tidak memiliki nilai nol, minus, maupun outlier, dengan nilai minimum 11.000, kuartil pertama (Q1) sebesar 15.290,75, median 19.744, rata-rata 19.965,992, dan nilai maksimum 29.447. Sementara itu, variabel Income memiliki 10 outlier dengan nilai minimum 10.000 dan maksimum 170.000, di mana rata-rata pendapatan mencapai 56.214,57490 dan median sebesar 60.000. Setelah outlier dihilangkan, rata-rata pendapatan turun menjadi 55.163,60. Kuartil pertama (Q1) untuk Income adalah 30.000, sedangkan kuartil ketiga (Q3) sebesar 70.000. Variabel Age memiliki 4 outlier dengan nilai minimum 25 dan maksimum 89, rata-rata keseluruhan 44,15, median 43, serta Q1 dan Q3 masing-masing sebesar 35 dan 52. Rata-rata nilai outlier untuk Age adalah 81,25, dan jika outlier dihilangkan, rata-rata usia menjadi 43,99. Dari analisis ini, dapat disimpulkan bahwa variabel Income dan Age memiliki outlier yang signifikan, yang dapat memengaruhi distribusi data dan hasil analisis statistik. Oleh karena itu, diperlukan penanganan outlier lebih lanjut, seperti transformasi data, pembatasan nilai ekstrem, atau penghapusan outlier, agar analisis dapat memberikan hasil yang lebih akurat.
summary(is.na(bike_buyers))
## ID Gender Income Region
## Mode :logical Mode :logical Mode :logical Mode :logical
## FALSE:1000 FALSE:1000 FALSE:988 FALSE:1000
## TRUE :12
## Age Purchased_Bike
## Mode :logical Mode :logical
## FALSE:987 FALSE:1000
## TRUE :13
as.data.frame(colSums(is.na(bike_buyers)))
Kami memeriksa missing value menggunakan fungsi is.na()
dan menghitung jumlahnya pada setiap kolom dengan
colSums(). Berdasarkan hasil, kolom Income memiliki 12
nilai kosong, dan kolom Age memiliki 13 nilai kosong. Missing value
harus ditangani dengan hati-hati karena dapat menyebabkan bias atau
error dalam analisis statistik.
vis_miss(bike_buyers)
plot_na_intersect(bike_buyers)
Keterangan : Data yang kosong ditandai garis berwarna hitam
Keterangan : Amati bagian Missing Variables dan Missing Observation Kami
menggunakan library visdat untuk memvisualisasikan missing
value. Visualisasi ini mempermudah identifikasi pola kekosongan, seperti
apakah nilai kosong terdistribusi secara acak atau terkonsentrasi di
kolom tertentu. Misalnya, data kosong pada kolom Income mungkin
menunjukkan pelanggan yang tidak ingin mengungkapkan pendapatan
mereka.
bike_buyers$Income[is.na(bike_buyers$Income)] <- ceiling(mean(bike_buyers$Income, na.rm = TRUE))
bike_buyers$Age[is.na(bike_buyers$Age)] <- ceiling(mean(bike_buyers$Age, na.rm = TRUE))
Untuk mengisi nilai kosong pada kolom numerik, kami menggunakan rata-rata kolom tersebut. Misalnya, nilai kosong pada Income diganti dengan rata-rata pendapatan semua pelanggan. Hal ini dilakukan untuk mempertahankan ukuran sampel tanpa menghilangkan baris data yang ada.
vis_miss(bike_buyers)
bike_buyers
Bagian ini bertujuan untuk mengecek kembali apakah missing value pada dataset bike_buyers sudah terisi dengan baik. Visualisasi menggunakan fungsi vis_miss menunjukkan bahwa tidak ada nilai kosong pada kolom ID, Gender, Income, Region, Age, dan Purchased_Bike karena semua data terlihat terisi penuh (100%). Tabel data yang ditampilkan juga menunjukkan bahwa setiap baris memiliki nilai lengkap untuk setiap variabel, seperti ID yang unik, jenis kelamin (Gender), pendapatan (Income), wilayah (Region), usia (Age), dan status pembelian sepeda (Purchased_Bike). Dengan hasil ini, dapat disimpulkan bahwa proses penanganan missing value telah berhasil dilakukan, dan data siap untuk analisis lebih lanjut tanpa adanya kekosongan nilai yang dapat mengganggu hasil analisis.
# Boxplot ID
boxplot(bike_buyers$ID,
ylab = "ID",
main = "Boxplot dari ID")
boxplot(bike_buyers$ID, plot=FALSE)$out
## numeric(0)
# Boxplot Income
boxplot(bike_buyers$Income,
ylab = "Income",
main = "Boxplot dari Income")
boxplot(bike_buyers$Income, plot=FALSE)$out
## [1] 160000 170000 170000 150000 160000 150000 160000 150000 170000 150000
# Boxplot Age
boxplot(bike_buyers$Age,
ylab = "Age",
main = "Boxplot dari Age")
boxplot(bike_buyers$Age, plot=FALSE)$out
## [1] 78 89 80 78
Keterangan : Jika terdapat titik-titik diluar boxplot, itu namanya outlier Dilakukan analisis awal untuk mendeteksi keberadaan outlier dalam dataset menggunakan boxplot. Hasil visualisasi menunjukkan bahwa kolom ID tidak memiliki outlier, sedangkan kolom Income dan Age memiliki sejumlah titik di luar “whisker” boxplot, yang menandakan adanya nilai-nilai ekstrem (outlier) pada kedua kolom tersebut. Oleh karena itu, langkah selanjutnya adalah menangani outlier pada kolom Income dan Age.
Q1_Income <- quantile(bike_buyers$Income, .25)
Q3_Income <- quantile(bike_buyers$Income, .75)
IQR_Income <- IQR(bike_buyers$Income)
Q1_Age <- quantile(bike_buyers$Age, .25)
Q3_Age <- quantile(bike_buyers$Age, .75)
IQR_Age <- IQR(bike_buyers$Age)
Dihitung nilai kuartil pertama (Q1), kuartil ketiga (Q3), dan interquartile range (IQR) untuk kolom Income dan Age. Nilai IQR digunakan untuk menentukan batas bawah dan batas atas outlier. Untuk kolom Income, Q1 adalah 15.500, Q3 adalah 38.000, dan IQR adalah 22.500, dengan batas atas outlier sebesar 71.750. Sementara itu, untuk kolom Age, Q1 adalah 31, Q3 adalah 50, dan IQR adalah 19, dengan batas atas outlier sebesar 78,5.
bike_buyers_no_outliers <- subset(bike_buyers, bike_buyers$Income> (Q1_Income - 1.5*IQR_Income) & bike_buyers$Income< (Q3_Income + 1.5*IQR_Income))
bike_buyers_no_outliers2 <- subset(bike_buyers, bike_buyers$Age> (Q1_Age - 1.5*IQR_Age) & bike_buyers$Age< (Q3_Age + 1.5*IQR_Age))
Outlier dihapus menggunakan metode Interquartile Range (IQR). Nilai di luar rentang Q1 - 1.5IQR dan Q3 + 1.5IQR dianggap sebagai outlier dan dikeluarkan dari dataset. Penghapusan ini dilakukan untuk memastikan hasil analisis lebih akurat dan representatif.
boxplot(bike_buyers_no_outliers$Income,
ylab = "Income",
main = "Boxplot of Income")
boxplot(bike_buyers_no_outliers2$Age,
ylab = "Age",
main = "Boxplot of Age")
bike_buyers
Dilakukan pengecekan ulang terhadap kolom Income dan Age menggunakan boxplot setelah proses penghapusan outlier. Boxplot baru dibuat untuk kedua kolom tersebut guna memastikan bahwa outlier telah berhasil dihapus. Hasil visualisasi menunjukkan bahwa pada kolom Income dan Age tidak lagi ditemukan titik-titik di luar “whisker”, yang menandakan bahwa semua outlier telah berhasil dihilangkan. Distribusi data terlihat lebih rapi dan normal tanpa adanya nilai-nilai ekstrem yang dapat mempengaruhi analisis lebih lanjut. Dengan demikian, proses penghapusan outlier dinyatakan berhasil, dan data kini siap untuk digunakan dalam proses analisis selanjutnya.
bike_buyers2 <- bike_buyers %>% select_if(is.numeric)
Filterisasi dilakukan untuk mengambil kolom yang hanya bertipe
numerik dari dataset bike_buyers menggunakan fungsi
select_if(is.numeric) dari paket dplyr. Fungsi ini secara
otomatis memilih kolom-kolom yang memiliki tipe data numerik, sehingga
data yang dihasilkan, disimpan dalam variabel bike_buyers2,
siap digunakan untuk analisis lebih lanjut.
corbike <- cor(bike_buyers2, use='complete.obs')
print(corbike)
## ID Income Age
## ID 1.00000000 -0.07315431 -0.05525375
## Income -0.07315431 1.00000000 0.17108001
## Age -0.05525375 0.17108001 1.00000000
corrplot(corbike,
order = "hclust", # Mengurutkan berdasarkan hierarchical clustering
tl.col = "black",
tl.srt=90,
main = "Korelasi Dataset Pembelian Sepeda",
method = "number") # Bentuk visualisasi berupa angka
Dilakukan perhitungan korelasi antar kolom numerik dalam dataset
hasil filterisasi menggunakan fungsi cor() dengan parameter
use = "complete.obs", yang memastikan hanya baris tanpa
nilai hilang (NA) yang digunakan dalam perhitungan. Matriks korelasi
yang dihasilkan menunjukkan hubungan linear antar kolom, di mana nilai
positif menandakan korelasi searah dan nilai negatif menandakan korelasi
berlawanan arah. Untuk mempermudah interpretasi, hasil korelasi
divisualisasikan menggunakan fungsi corrplot() dari paket
corrplot. Visualisasi ini menampilkan korelasi dalam bentuk heatmap,
dengan angka korelasi ditampilkan langsung pada setiap sel matriks.
Variabel-variabel diurutkan berdasarkan metode hierarchical clustering
agar pola hubungan antar variabel lebih terlihat jelas. Warna pada
heatmap menunjukkan intensitas korelasi, dengan gradasi biru untuk
korelasi positif dan gradasi merah untuk korelasi negatif.
normality(bike_buyers)
bike_buyers %>%
plot_normality(Income)
bike_buyers %>%
plot_normality(Age)
bike_buyers %>%
plot_normality(ID)
Normalisasi data dilakukan untuk memastikan distribusi variabel numerik dalam dataset mendekati distribusi normal, yang penting untuk analisis statistik. Distribusi data sebelum normalisasi divisualisasikan menggunakan histogram dan QQ-plot, di mana variabel Income menunjukkan distribusi tidak simetris (skewed) dengan penyimpangan signifikan pada QQ-plot, variabel Age terlihat mendekati normal meskipun memiliki sedikit penyimpangan pada titik ekstrem, dan variabel ID cenderung seragam serta jauh dari distribusi normal. Setelah dilakukan normalisasi menggunakan metode transformasi tertentu, hasilnya divisualisasikan kembali, dan terlihat perbaikan signifikan pada ketiga variabel tersebut. Histogram untuk Income, Age, dan ID menjadi lebih simetris, sementara QQ-plot menunjukkan titik-titik data lebih mendekati garis diagonal, menandakan distribusi data semakin mendekati normal. Selain itu, terdapat keterangan p-value pada hasil analisis yang digunakan sebagai indikator untuk menguji normalitas data. Jika p-value lebih kecil dari tingkat signifikansi (misalnya 0.05), maka data dianggap tidak berdistribusi normal, dan normalisasi diperlukan. Dengan demikian, proses normalisasi ini berhasil meningkatkan kualitas distribusi data, memenuhi asumsi normalitas, dan mempersiapkan data untuk analisis statistik lebih lanjut.
pairs.panels(bike_buyers,
method = "pearson", # correlation method
hist.col = "#00AFBB",
density = TRUE, # show density plots
ellipses = TRUE) # show correlation ellipses
Bagian ini menampilkan kumpulan korelasi antar variabel dalam dataset
bike_buyers menggunakan fungsi pairs.panels()
dari paket psych di R. Metode korelasi yang digunakan
adalah Pearson, yang mengukur hubungan linear antar variabel numerik.
Visualisasi ini terdiri dari tiga elemen utama: scatter plot, histogram,
dan korelasi numerik. Scatter plot (di bawah diagonal) menunjukkan
sebaran hubungan antara pasangan variabel, di mana elips merah
menggambarkan kekuatan dan arah korelasi; elips yang tipis dan miring
menunjukkan korelasi yang lebih kuat, sementara elips mendekati
lingkaran menunjukkan korelasi yang lemah. Diagonal utama menampilkan
histogram distribusi masing-masing variabel, memberikan gambaran tentang
bentuk distribusi datanya. Sementara itu, di atas diagonal, terdapat
nilai korelasi numerik antara pasangan variabel. Misalnya, korelasi
antara Income dan Purchased_Bike bernilai 0.17, menunjukkan korelasi
positif yang lemah, sedangkan antara Age dan Purchased_Bike memiliki
korelasi -0.11, menunjukkan korelasi negatif yang lemah. Dengan
demikian, visualisasi ini memberikan gambaran lengkap tentang hubungan
linear antar variabel serta pola distribusi masing-masing variabel dalam
dataset, yang berguna untuk analisis eksplorasi lebih lanjut.
# Gender
ggplot(bike_buyers,
aes(x=Gender,
y=after_stat(count)/sum(after_stat(count))))+
geom_bar(fill=c("Pink", "Blue"),color="azure4")+
theme_minimal()+
labs(x="Gender",
y="Persentase",
title = "Pembelian Sepeda pada Gender")+
scale_y_continuous(labels=scales::percent)
# Region
ggplot(bike_buyers,
aes(x=Region,
y=after_stat(count)/sum(after_stat(count))))+
geom_bar(fill=c("Blue", "Purple", "Light Blue"),color="azure4")+
theme_minimal()+
labs(x="Age",
y="Persentase",
title = "Pembelian Sepeda pada Region")+
scale_y_continuous(labels=scales::percent)
#Purchased Bike
ggplot(bike_buyers,
aes(x=Purchased_Bike,
y=after_stat(count)/sum(after_stat(count))))+
geom_bar(fill=c("Red","Light Green"),color="azure4")+
theme_minimal()+
labs(x="Age",
y="Persentase",
title = "Pembelian Sepeda pada Purchased Bike")+
scale_y_continuous(labels=scales::percent)
Diagram pertama (Gender) memperlihatkan perbandingan jumlah data
berdasarkan gender, dengan batang merah muda mewakili kategori Female
dan batang biru tua mewakili kategori Male. Dari diagram ini, terlihat
bahwa jumlah individu dalam kategori Male lebih besar dibandingkan
Female. Diagram kedua (Region) membandingkan jumlah data berdasarkan
wilayah dengan tiga kategori: Europe (biru), North America (ungu), dan
Pacific (biru muda). Visualisasi ini menunjukkan bahwa wilayah North
America memiliki jumlah data tertinggi, diikuti oleh Europe, sementara
Pacific memiliki jumlah terendah. Diagram ketiga (Purchased Bike)
menggambarkan perbandingan individu yang membeli sepeda (Purchased
Bike), di mana kategori Yes diwakili oleh batang merah dan No oleh
batang hijau. Diagram ini menunjukkan bahwa jumlah individu yang membeli
sepeda (Yes) hampir sama dengan yang tidak membeli sepeda (No), dengan
perbedaan yang sangat kecil. Fungsi ggplot() digunakan
untuk mendefinisikan data dan estetika plot, seperti sumbu X dan Y.
Selanjutnya, geom_bar() menggambarkan diagram batang,
dengan stat = "identity" memastikan bahwa nilai pada sumbu
Y berasal dari data yang diberikan, bukan perhitungan frekuensi. Untuk
menciptakan tampilan yang lebih bersih, theme_minimal()
menghilangkan elemen-elemen latar belakang yang tidak perlu, seperti
garis grid, sehingga plot menjadi lebih fokus dan estetis. Fungsi
labs() memungkinkan penambahan label deskriptif, seperti
judul plot dan label sumbu X dan Y. Sementara itu,
scale_y_continuous() digunakan untuk mengatur skala pada
sumbu Y, seperti mengubah format angka atau menambahkan pemisah ribuan.
Kombinasi fungsi-fungsi ini menghasilkan diagram batang yang jelas,
informatif, dan menarik secara visual.
# Gender
plotdataGender <- bike_buyers %>%
count(Gender) %>%
arrange(desc(Gender)) %>%
mutate(prop=round(n*100/sum(n), 1),
lab.ypos=cumsum(prop)-0.5*prop)
mycols <- c("Pink", "Blue")
ggplot(plotdataGender, aes(x="",y=prop,fill = Gender))+
geom_bar(width=1, stat="identity", color="white")+
coord_polar("y", start=0)+
geom_text(aes(y=lab.ypos, label = prop), color="white")+
scale_fill_manual(values=mycols)+
theme_void()+
labs(title="Pembelihan Sepeda pada Gender")
# Region
plotdataRegion <- bike_buyers %>%
count(Region) %>%
arrange(desc(Region)) %>%
mutate(prop=round(n*100/sum(n), 1),
lab.ypos=cumsum(prop)-0.5*prop)
mycols <- c("Blue", "Purple", "Light Blue")
ggplot(plotdataRegion, aes(x="",y=prop,fill = Region))+
geom_bar(width=1, stat="identity", color="white")+
coord_polar("y", start=0)+
geom_text(aes(y=lab.ypos, label = prop), color="white")+
scale_fill_manual(values=mycols)+
theme_void()+
labs(title="Pembelihan Sepeda pada Region")
# Purchased Bike
plotdataPurchasedBike <- bike_buyers %>%
count(Purchased_Bike) %>%
arrange(desc(Purchased_Bike)) %>%
mutate(prop=round(n*100/sum(n), 1),
lab.ypos=cumsum(prop)-0.5*prop)
mycols <- c("Red","Light Green")
ggplot(plotdataPurchasedBike, aes(x="",y=prop,fill = Purchased_Bike))+
geom_bar(width=1, stat="identity", color="white")+
coord_polar("y", start=0)+
geom_text(aes(y=lab.ypos, label = prop), color="white")+
scale_fill_manual(values=mycols)+
theme_void()+
labs(title="Pembelihan Sepeda pada Purchased Bike")
Ketiga diagram pai ini memanfaatkan beberapa fungsi R untuk
memanipulasi dan memvisualisasikan data. Fungsi count()
digunakan untuk menghitung frekuensi setiap kategori, sementara
arrange() mengurutkan data berdasarkan jumlah atau urutan
tertentu. Fungsi pie() kemudian digunakan untuk
menghasilkan visualisasi distribusi kategori dalam bentuk diagram pai.
Dengan menggunakan mutate(), kita dapat menambahkan kolom
baru, seperti kategori usia atau status pembelian sepeda, yang berguna
untuk analisis lebih lanjut meskipun tidak digunakan secara eksplisit
dalam diagram pai yang ditampilkan. Fungsi ggplot()
digunakan untuk membuat plot dasar, dan geom_bar()
digabungkan dengan coord_polar() untuk mengubah diagram
batang menjadi diagram pai. geom_text() memungkinkan
penambahan label, seperti persentase atau nilai kategori, pada setiap
segmen diagram pai. Fungsi scale_fill() memberi kontrol
terhadap warna segmen berdasarkan kategori, sementara
theme_void() menciptakan tampilan minimalis dengan
menghilangkan elemen latar belakang yang tidak diperlukan. Secara
keseluruhan, kombinasi fungsi-fungsi ini membantu menghasilkan
visualisasi yang jelas, informatif, dan estetis, memudahkan interpretasi
data.
# Age
ggplot(bike_buyers, aes(x=Age))+
geom_histogram(fill="cornflowerblue",
color="white", binwidth = 4)+
theme_minimal()+
labs(title="Pembelian Sepeda pada Age",
y = "Jumlah Pelanggan",
x = "Age")
# Income
ggplot(bike_buyers, aes(x=Income))+
geom_histogram(fill="cornflowerblue",
color="white", bins=15)+
theme_minimal()+
labs(title="Pembelian Sepeda pada Income",
y = "Jumlah Pelanggan",
x = "Income")
Kode ggplot2 untuk membuat dua histogram yang menggambarkan
distribusi variabel Age dan Income dalam dataset
bike_buyers. Perintah geom_histogram()
digunakan dengan parameter fill="cornflowerblue" untuk
memberi warna biru pada histogram dan color="white" untuk
warna batasnya. Fungsi theme_minimal() diterapkan pada
kedua histogram untuk memberikan tampilan minimalis dengan latar yang
bersih, sehingga mempermudah pembacaan grafik. Selain itu, fungsi
labs() digunakan untuk memberikan judul dan label sumbu X
serta Y, di mana histogram pertama memiliki label “Usia Pelanggan” pada
sumbu X, sedangkan histogram kedua menggunakan label “Pendapatan
Pelanggan”. Histogram pertama menunjukkan distribusi usia pelanggan
dengan puncaknya berada di rentang usia sekitar 30-40 tahun, sedangkan
histogram kedua menggambarkan distribusi pendapatan pelanggan dengan
frekuensi tertinggi pada pendapatan di bawah 50.000, sementara
pendapatan yang lebih tinggi memiliki frekuensi yang jauh lebih kecil.
Secara keseluruhan, kedua histogram dengan tema minimalis dan label yang
jelas memberikan gambaran visual yang informatif tentang sebaran data
Age dan Income, yang berguna untuk memahami pola atau tren dalam data
pelanggan.
# Age
ggplot(bike_buyers, aes(x = Age))+
geom_density(fill = "Dark Blue")+
theme_minimal()+
labs(title = "Densitas Pembelian Sepeda pada Age")
#Income
ggplot(bike_buyers, aes(x = Income))+
geom_density(fill = "Dark Blue")+
theme_minimal()+
labs(title = "Densitas Pembelian Sepeda pada Income")
Kode ggplot2 dalam RStudio untuk membuat plot densitas yang
menggambarkan distribusi variabel Age dan Income dalam dataset
bike_buyers. Fungsi geom_density() digunakan
untuk menggambarkan distribusi kepadatan data dalam bentuk kurva dengan
parameter fill="dark blue" yang memberikan warna biru tua
pada area di bawah kurva, sementara theme_minimal()
memberikan tampilan minimalis yang lebih bersih. Fungsi
labs() digunakan untuk memberi judul dan label sumbu X, di
mana plot pertama berjudul “Kepadatan Pembelian Sepeda pada Age”
menunjukkan kepadatan tertinggi pada usia sekitar 30-40 tahun, yang
menandakan kelompok usia tersebut mendominasi data. Pada plot kedua yang
berjudul “Kepadatan Pembelian Sepeda pada Income”, distribusi kepadatan
menunjukkan dua puncak (bimodal), yang menandakan pelanggan terbagi
dalam dua kelompok pendapatan dengan kepadatan tertinggi pada pendapatan
rendah hingga menengah. Secara keseluruhan, kedua plot densitas ini
memberikan visualisasi yang halus dan informatif tentang distribusi Age
dan Income, sehingga mempermudah analisis pola kepadatan pelanggan dalam
dataset.
# Age
ggplot(bike_buyers, aes(x = Age))+
geom_density(fill = "light blue",
bw = 1)+
theme_minimal()+
labs(title = "Densitas Pembelian Sepeda pada Age",
subtitle = "Bandwidth = 1")
# Income
ggplot(bike_buyers, aes(x = Income))+
geom_density(fill = "light blue",
bw = 1)+
theme_minimal()+
labs(title = "Densitas Pembelian Sepeda pada Income",
subtitle = "Bandwidth = 1")
Pada kode yang diberikan, bandwidth merupakan parameter yang mengatur tingkat penghalusan dalam perhitungan kurva densitas. Bandwidth mempengaruhi seberapa halus atau terperinci kurva yang dihasilkan saat menggambarkan distribusi data. Semakin kecil nilai bandwidth, semakin detail dan tajam kurva densitas yang dihasilkan, karena kurva ini lebih dipengaruhi oleh data lokal yang lebih sempit. Sebaliknya, semakin besar nilai bandwidth, kurva menjadi lebih halus karena data yang lebih luas digunakan untuk menghitung kepadatan, sehingga fluktuasi atau variasi kecil dalam data menjadi kurang terlihat. Dengan bandwidth = 1, yang digunakan dalam kode ini, kurva densitas memiliki keseimbangan antara detail dan kehalusan, memungkinkan gambaran yang cukup jelas tentang distribusi data tanpa terlalu banyak variasi yang membingungkan. Dalam contoh ini, kurva Age menunjukkan distribusi usia pelanggan yang cukup terkonsentrasi, sementara kurva Income menampilkan distribusi yang lebih variatif, keduanya dengan pengaruh bandwidth yang membuat kurva tampak cukup halus namun tetap mempertahankan detail distribusi data yang ada. Parameter bandwidth ini memungkinkan visualisasi yang lebih intuitif dalam memahami pola distribusi data tanpa kehilangan informasi penting.
# Menghubungkan Jenis Kelamin dan Region
ggplot(bike_buyers,
aes(x = Gender,
fill = Region))+
geom_bar(position = "fill")+
theme_minimal()+
labs(y = "Proportion")
# Menghubungkan Region dan Jenis Kelamin
ggplot(bike_buyers,
aes(x = Region,
fill = Gender))+
geom_bar(position = "fill")+
theme_minimal()+
labs(y = "Proportion")
# Menghubungkan Keputusan Membeli dan Region
ggplot(bike_buyers,
aes(x = Purchased_Bike,
fill = Region))+
geom_bar(position = "fill")+
theme_minimal()+
labs(y = "Proportion")
# Menghubungkan Region dan Keputusan Membeli
ggplot(bike_buyers,
aes(x = Region,
fill = Purchased_Bike))+
geom_bar(position = "fill")+
theme_minimal()+
labs(y = "Proportion")
# Menghubungkan Keputusan Membeli dan Jenis Kelamin
ggplot(bike_buyers,
aes(x = Purchased_Bike,
fill = Gender))+
geom_bar(position = "fill")+
theme_minimal()+
labs(y = "Proportion")
# Menghubungkan Jenis Kelamin dan Keputusan Membeli
ggplot(bike_buyers,
aes(x = Gender,
fill = Purchased_Bike))+
geom_bar(position = "fill")+
theme_minimal()+
labs(y = "Proportion")
Analisis hubungan antara variabel kategorik menggunakan diagram batang bertumpuk menunjukkan bahwa wilayah Pasifik memiliki proporsi pembeli sepeda tertinggi dibandingkan Eropa dan Amerika Utara. Selain itu, pria sedikit lebih dominan dalam keputusan membeli sepeda dibandingkan wanita. Dipaparkan juga tentang hubungan antara Region dan Gender, hubungan antara Keputusan Membeli dan Region, hubungan antara Region dan Keputusan Membeli, hubungan antara Keputusan Membeli dan Gender, dan hubungan antara Gender dan Keputusan Membeli.
# Menghubungkan Jenis Kelamin dan Region
plotdata <- bike_buyers %>%
group_by(Gender, Region) %>%
dplyr::summarize(n = n()) %>%
mutate(pct = n/sum(n),
lbl = scales::percent(pct))
## `summarise()` has grouped output by 'Gender'. You can override using the
## `.groups` argument.
ggplot(plotdata,
aes(x = factor(Gender),
y = pct,
fill = factor(Region)))+
geom_bar(stat = "identity",
position = "fill")+
scale_y_continuous(breaks = seq(0, 1, .2),
label = percent)+
geom_text(aes(label = lbl),
size = 8,
position = position_stack(vjust = 0.5))+
scale_fill_brewer(palette = "Set2")+
theme_minimal()+
labs(y = "Percent",
fill = "Region",
x = "Gender",
title = "Pembelian Sepeda pada Hubungan Gender dan Region")
# Menghubungkan Region dan Jenis Kelamin
plotdata <- bike_buyers %>%
group_by(Region, Gender) %>%
dplyr::summarize(n = n()) %>%
mutate(pct = n/sum(n),
lbl = scales::percent(pct))
## `summarise()` has grouped output by 'Region'. You can override using the
## `.groups` argument.
ggplot(plotdata,
aes(x = factor(Region),
y = pct,
fill = factor(Gender)))+
geom_bar(stat = "identity",
position = "fill")+
scale_y_continuous(breaks = seq(0, 1, .2),
label = percent)+
geom_text(aes(label = lbl),
size = 8,
position = position_stack(vjust = 0.5))+
scale_fill_brewer(palette = "Set2")+
theme_minimal()+
labs(y = "Percent",
fill = "Gender",
x = "Region",
title = "Pembelian Sepeda pada Hubungan Gender dan Region")
# Menghubungan Keputusan Membeli dan Region
plotdata <- bike_buyers %>%
group_by(Purchased_Bike, Region) %>%
dplyr::summarize(n = n()) %>%
mutate(pct = n/sum(n),
lbl = scales::percent(pct))
## `summarise()` has grouped output by 'Purchased_Bike'. You can override using
## the `.groups` argument.
ggplot(plotdata,
aes(x = factor(Purchased_Bike),
y = pct,
fill = factor(Region)))+
geom_bar(stat = "identity",
position = "fill")+
scale_y_continuous(breaks = seq(0, 1, .2),
label = percent)+
geom_text(aes(label = lbl),
size = 8,
position = position_stack(vjust = 0.5))+
scale_fill_brewer(palette = "Set2")+
theme_minimal()+
labs(y = "Percent",
fill = "Region",
x = "Purchased Bike",
title = "Pembelian Sepeda pada Hubungan Gender dan Region")
# Menghubungkan Region dan Keputusan Membeli
plotdata <- bike_buyers %>%
group_by(Region, Purchased_Bike) %>%
dplyr::summarize(n = n()) %>%
mutate(pct = n/sum(n),
lbl = scales::percent(pct))
## `summarise()` has grouped output by 'Region'. You can override using the
## `.groups` argument.
ggplot(plotdata,
aes(x = factor(Region),
y = pct,
fill = factor(Purchased_Bike)))+
geom_bar(stat = "identity",
position = "fill")+
scale_y_continuous(breaks = seq(0, 1, .2),
label = percent)+
geom_text(aes(label = lbl),
size = 8,
position = position_stack(vjust = 0.5))+
scale_fill_brewer(palette = "Set2")+
theme_minimal()+
labs(y = "Percent",
fill = "Purchased Bike",
x = "Region",
title = "Pembelian Sepeda pada Hubungan Gender dan Region")
# Menghubungkan Keputusan Membeli dan Jenis Kelamin
plotdata <- bike_buyers %>%
group_by(Purchased_Bike, Gender) %>%
dplyr::summarize(n = n()) %>%
mutate(pct = n/sum(n),
lbl = scales::percent(pct))
## `summarise()` has grouped output by 'Purchased_Bike'. You can override using
## the `.groups` argument.
ggplot(plotdata,
aes(x = factor(Purchased_Bike),
y = pct,
fill = factor(Gender)))+
geom_bar(stat = "identity",
position = "fill")+
scale_y_continuous(breaks = seq(0, 1, .2),
label = percent)+
geom_text(aes(label = lbl),
size = 8,
position = position_stack(vjust = 0.5))+
scale_fill_brewer(palette = "Set2")+
theme_minimal()+
labs(y = "Percent",
fill = "Gender",
x = "Purchased Bike",
title = "Pembelian Sepeda pada Hubungan Gender dan Region")
# Menghubungkan Jenis Kelamin dan Keputusan Membeli
plotdata <- bike_buyers %>%
group_by(Gender, Purchased_Bike) %>%
dplyr::summarize(n = n()) %>%
mutate(pct = n/sum(n),
lbl = scales::percent(pct))
## `summarise()` has grouped output by 'Gender'. You can override using the
## `.groups` argument.
ggplot(plotdata,
aes(x = factor(Gender),
y = pct,
fill = factor(Purchased_Bike)))+
geom_bar(stat = "identity",
position = "fill")+
scale_y_continuous(breaks = seq(0, 1, .2),
label = percent)+
geom_text(aes(label = lbl),
size = 8,
position = position_stack(vjust = 0.5))+
scale_fill_brewer(palette = "Set2")+
theme_minimal()+
labs(y = "Percent",
fill = "Purchased Bike",
x = "Gender",
title = "Pembelian Sepeda pada Hubungan Gender dan Region")
Diagram batang tersegementasi digunakan untuk menganalisis hubungan variabel seperti Gender dan Region. Hasilnya menunjukkan bahwa proporsi pembelian sepeda cukup merata antara pria dan wanita di wilayah Pasifik, sedangkan di wilayah Eropa dan Amerika Utara, dominan pria sedikit lebih terlihat.
# Menghubungkan Jenis Kelamin dan Region
ggplot(bike_buyers, aes(x = Gender, fill = Region))+
theme_minimal()+
geom_bar(position = position_dodge(preserve = "single"))
# Menghubungkan Region dan Jenis Kelamin
ggplot(bike_buyers, aes(x = Region, fill = Gender))+
theme_minimal()+
geom_bar(position = position_dodge(preserve = "single"))
# Menghubungkan Keputusan Membeli dan Region
ggplot(bike_buyers, aes(x = Purchased_Bike, fill = Region))+
theme_minimal()+
geom_bar(position = position_dodge(preserve = "single"))
# Menghubungkan Region dan Keputusan Membeli
ggplot(bike_buyers, aes(x = Region, fill = Purchased_Bike))+
theme_minimal()+
geom_bar(position = position_dodge(preserve = "single"))
# Menghubungkan Keputusan Membeli dan Jenis Kelamin
ggplot(bike_buyers, aes(x = Purchased_Bike, fill = Gender))+
theme_minimal()+
geom_bar(position = position_dodge(preserve = "single"))
# Menghubungkan Jenis Kelamin dan Keputusan Membeli
ggplot(bike_buyers, aes(x = Gender, fill = Purchased_Bike))+
theme_minimal()+
geom_bar(position = position_dodge(preserve = "single"))
Diagram batang yang dikelompokkan memberikan pandangan terperinci tentang hubungan antara Gender, Region, dan Purchased_Bike. Hasilnya menunjukkan variasi kecil dalam keputusan membeli sepeda berdasarkan jenis kelamin dan wilayah.
tbl <- xtabs(~Purchased_Bike + Gender + Region, bike_buyers)
ftable(tbl)
## Region Europe North America Pacific
## Purchased_Bike Gender
## No Female 83 131 39
## Male 69 157 40
## Yes Female 81 112 49
## Male 67 108 64
mosaic(tbl, main = "Pembelian Sepeda")
mosaic(tbl,
shade = TRUE,
legend = TRUE,
labeling_args = list(set_varnames = c(Region = "Region",
Purchased_Bike = "Purchased Bike",
Gender = "Gender")),
set_labels = list(Purchased_Bike = c("No", "Yes"),
Gender = c("Male", "Female"),
Region = c("Europe", "Pacific", "North America")),
main = "Pembelian Sepeda")
Plot mosaik memberikan gambaran hubungan ketergantungan antara Gender, Region, dan Purchased_Bike. Wilayah Pasifik kembali menonjol dengan proporsi pembelian sepeda yang lebih tinggi dibandingkan wilayah lain.
# Age dengan Income
ggplot(bike_buyers,
aes(x = Age,
y = Income))+
geom_point(color = "cornflowerblue")+
geom_smooth(method = "lm",
formula = y ~ poly(x, 2),
color = "brown1")+
theme_minimal()+
labs(x = "Age",
y = "",
title = "Age vs Income",
subtitle = "Pembelian Sepeda")
ggplot(bike_buyers,
aes(x = Income,
y = Age))+
geom_point(color = "cornflowerblue")+
geom_smooth(method = "lm",
formula = y ~ poly(x, 2),
color = "brown1")+
theme_minimal()+
labs(x = "Income",
y = "",
title = "Income vs Age",
subtitle = "Pembelian Sepeda")
Pada plot sebaran dengan garis dalam variabel kontinu dengan kontinu, terdapat hubungan antara Age (usia) dan Income (pendapatan) dieksplorasi melalui scatter plot yang dilengkapi dengan garis regresi polinomial. Visualisasi ini bertujuan untuk mengidentifikasi pola hubungan antara dua variabel numerik tersebut, seperti apakah hubungan bersifat linear, melengkung, atau tidak signifikan. Scatter plot menunjukkan titik data individual di mana pada grafik pertama sumbu-X merepresentasikan usia dan pada grafik kedua sumbu-X merepresentasikan pendapatan.
# Diagram Batang
plotdata <- bike_buyers %>%
group_by(Region) %>%
dplyr::summarize(mean_income = mean(Income))
mycols <- c("Blue", "Purple", "Light Blue")
ggplot(plotdata,
aes(x = factor(Region,
labels = c("Europe", "North America", "Pacific")),
y = mean_income))+
geom_bar(stat = "identity",
fill = mycols)+
geom_text(aes(label = dollar(mean_income)),
vjust = -0.25)+
scale_y_continuous(breaks = seq(0, 180000, 20000),
label = dollar)+
theme_minimal()+
labs(title = "Rata-rata Penghasilan Berdasarkan Region",
subtitle = "Pembelian Sepeda",
x = "",
y = "")
# Plot Densitas Kernel
ggplot(bike_buyers,
aes(x = Income,
fill = Region))+
geom_density(alpha = 0.4)+
theme_minimal()
labs(title = "Distribusi Penghasilan Berdasarkan Region")
## $title
## [1] "Distribusi Penghasilan Berdasarkan Region"
##
## attr(,"class")
## [1] "labels"
# Gabungan Plot Strip dan Boxplot
ggplot(bike_buyers,
aes(x = factor(Region,
labels = c("Europe", "North America", "Pacific")),
y = Income,
fill = Region))+
geom_boxjitter(color = "black",
jitter.color = "darkgrey",
errorbar.draw = TRUE)+
scale_y_continuous(label = dollar)+
labs(title = "Distribusi Penghasilan Berdasarkan Region",
subtitle = "Pembelian Sepeda",
x = "",
y = "")+
theme_minimal()+
theme(legend.position = "none")
## Warning: Using the `size` aesthetic in this geom was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` in the `default_aes` field and elsewhere instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Warning: Using the `size` aesthetic with geom_segment was deprecated in ggplot2 3.4.0.
## ℹ Please use the `linewidth` aesthetic instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Warning: Using the `size` aesthetic with geom_crossbar was deprecated in ggplot2 3.4.0.
## ℹ Please use the `linewidth` aesthetic instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
Untuk variabel kategorikal dengan Kontinu terutama pada Income berdasarkan Region menjelaskan bagaimana rata-rata pendapatan (Income) bervariasi di setiap wilayah (Region) menggunakan tiga jenis visualisasi, yaitu Diagram batang, Plot densitas kernel, dan gabungan plot strip dan Boxplot. Dimana, Diagram batang menampilkan rata-rata pendapatan per wilayah, dengan tinggi batang merepresentasikan perbedaan signifikan, seperti pendapatan rata-rata lebih tinggi di North America dibandingkan wilayah lain. Untuk plot densitas kernel menunjukkan distribusi pendapatan di tiap wilayah, memberikan gambaran sebaran data, seperti apakah pendapatan berpengaruh pada rentang tertentu atau tersebar luas. Adapun untuk gabungan plot strip dan boxplot melengkapi analisis ini dengan menampilkan data individual (strip plot) bersama ringkasan statistik seperti median dan kuartil (boxplot), sehingga mempermudah identifikasi variasi data dan outlier. Analisis ini membantu memahami perbedaan pendapatan antar wilayah, memberikan wawasan strategis untuk segmentasi pasar dan pengambilan keputusan bisnis.
# Diagram Batang
plotdata <- bike_buyers %>%
group_by(Gender) %>%
dplyr::summarize(mean_income = mean(Income))
mycols <- c("Light Pink", "Blue")
ggplot(plotdata,
aes(x = factor(Gender,
labels = c("Female", "Male")),
y = mean_income))+
geom_bar(stat = "identity",
fill = mycols)+
geom_text(aes(label = dollar(mean_income)),
vjust = -0.25)+
scale_y_continuous(breaks = seq(0, 180000, 20000),
label = dollar)+
theme_minimal()+
labs(title = "Rata-rata Income Berdasarkan Gender",
subtitle = "Pembelian Sepeda",
x = "",
y = "")
# Plot Densitas Kernel
ggplot(bike_buyers,
aes(x = Income,
fill = Gender))+
geom_density(alpha = 0.4)+
theme_minimal()
labs(title = "Distribusi Income Berdasarkan Gender")
## $title
## [1] "Distribusi Income Berdasarkan Gender"
##
## attr(,"class")
## [1] "labels"
# Gabungan Plot Strip dan Boxplot
ggplot(bike_buyers,
aes(x = factor(Gender,
labels = c("Female", "Male")),
y = Income,
fill = Gender))+
geom_boxjitter(color = "black",
jitter.color = "darkgrey",
errorbar.draw = TRUE)+
scale_y_continuous(label = dollar)+
labs(title = "Distribusi Penghasilan Berdasarkan Gender",
subtitle = "Pembelian Sepeda",
x = "",
y = "")+
theme_minimal()+
theme(legend.position = "none")
Pada Income berdasarkan Gender menjelaskan perbedaan rata-rata pendapatan antara jenis kelamin (Gender) menggunakan tiga visualisasi utama. Pertama, diagram batang menampilkan rata-rata pendapatan pelanggan laki-laki dan perempuan, di mana tinggi batang menunjukkan bahwa laki-laki cenderung memiliki rata-rata pendapatan lebih tinggi dibandingkan perempuan. Nilai rata-rata ini juga terdapat di atas batang untuk memudahkan interpretasi. Lalu pada plot densitas kernel digunakan untuk menunjukkan distribusi pendapatan masing-masing gender. Visualisasi ini memperlihatkan apakah pendapatan perempuan lebih terkonsentrasi pada rentang tertentu, sementara laki-laki mungkin memiliki distribusi yang lebih lebar atau seragam. Terakhir, gabungan plot strip dan boxplot memberikan gambaran yang lebih granular, dengan strip plot menampilkan data individual, memungkinkan identifikasi outlier, sementara boxplot memberikan ringkasan statistik seperti median, kuartil, dan variasi data. Analisis ini mengungkapkan pola penting dalam distribusi pendapatan antara gender, membantu menyusun strategi yang lebih inklusif atau spesifik berdasarkan perbedaan pendapatan tersebut.
# Diagram Batang
plotdata <- bike_buyers %>%
group_by(Purchased_Bike) %>%
dplyr::summarize(mean_income = mean(Income))
mycols <- c("Red", "Green")
ggplot(plotdata,
aes(x = factor(Purchased_Bike,
labels = c("No", "Yes")),
y = mean_income))+
geom_bar(stat = "identity",
fill = mycols)+
geom_text(aes(label = dollar(mean_income)),
vjust = -0.25)+
scale_y_continuous(breaks = seq(0, 180000, 20000),
label = dollar)+
theme_minimal()+
labs(title = "Rata-rata Income Berdasarkan Purchased Bike",
subtitle = "Pembelian Sepeda",
x = "",
y = "")
# Plot Densitas Kernel
ggplot(bike_buyers,
aes(x = Income,
fill = Purchased_Bike))+
geom_density(alpha = 0.4)+
theme_minimal()
labs(title = "Distribusi Income Berdasarkan Purchased Bike")
## $title
## [1] "Distribusi Income Berdasarkan Purchased Bike"
##
## attr(,"class")
## [1] "labels"
# Gabungan Plot Strip dan Boxplot
ggplot(bike_buyers,
aes(x = factor(Purchased_Bike,
labels = c("No", "Yes")),
y = Income,
fill = Purchased_Bike))+
geom_boxjitter(color = "black",
jitter.color = "darkgrey",
errorbar.draw = TRUE)+
scale_y_continuous(label = dollar)+
labs(title = "Distribusi Penghasilan Berdasarkan Purchased Bike",
subtitle = "Pembelian Sepeda",
x = "",
y = "")+
theme_minimal()+
theme(legend.position = "none")
Pada Income berdasarkan Keputusan Membeli bertujuan untuk membandingkan rata-rata pendapatan antara pelanggan yang membeli sepeda (Purchased Bike = Yes) dan yang tidak membeli sepeda (Purchased Bike = No). Visualisasi pertama yang digunakan adalah diagram batang, yang menunjukkan rata-rata pendapatan untuk masing-masing kelompok keputusan pembelian. Dimana dapat dilihat bahwa batang kelompok yang membeli sepeda biasanya memiliki tinggi yang berbeda dibandingkan dengan kelompok yang tidak membeli sepeda, dengan label rata-rata pendapatan di atas masing-masing batang. Lalu, plot densitas kernel digunakan untuk menggambarkan distribusi pendapatan di kedua kelompok. Dengan menggunakan warna berbeda, dapat tergambarkan apakah distribusi pendapatan lebih terpusat atau lebih tersebar pada salah satu kelompok. Adapun untuk gabungan plot strip dan boxplot memberikan wawasan lebih mendalam. Strip plot menunjukkan data individual dan boxplot menyajikan statistik ringkasan seperti median dan kuartil. Gabungan ini membantu mengidentifikasi apakah ada perbedaan signifikan dalam distribusi pendapatan antara mereka yang membeli sepeda dan yang tidak.
# Diagram Batang
plotdata <- bike_buyers %>%
group_by(Region) %>%
dplyr::summarize(mean_age = mean(Age))
mycols <- c("Blue", "Purple", "Light Blue")
ggplot(plotdata,
aes(x = factor(Region,
labels = c("Europe", "North America", "Pacific")),
y = mean_age))+
geom_bar(stat = "identity",
fill = mycols)+
geom_text(aes(label = number(mean_age)),
vjust = -0.25)+
scale_y_continuous(breaks = seq(0, 100, 5),
label = number)+
theme_minimal()+
labs(title = "Rata-rata Age Berdasarkan Region",
subtitle = "Pembelian Sepeda",
x = "",
y = "")
# Plot Densitas Kernel
ggplot(bike_buyers,
aes(x = Age,
fill = Region))+
geom_density(alpha = 0.4)+
theme_minimal()
labs(title = "Distribusi Age Berdasarkan Region")
## $title
## [1] "Distribusi Age Berdasarkan Region"
##
## attr(,"class")
## [1] "labels"
# Gabungan Plot Strip dan Boxplot
ggplot(bike_buyers,
aes(x = factor(Region,
labels = c("Europe", "North America", "Pacific")),
y = Age,
fill = Region))+
geom_boxjitter(color = "black",
jitter.color = "darkgrey",
errorbar.draw = TRUE)+
scale_y_continuous(label = dollar)+
labs(title = "Distribusi Age Berdasarkan Region",
subtitle = "Pembelian Sepeda",
x = "",
y = "")+
theme_minimal()+
theme(legend.position = "none")
Analisis usia (age) berdasarkan Region membandingkan rata-rata usia pelanggan di berbagai wilayah (Region). Visualisasi pertama menggunakan diagram batang, yang menunjukkan rata-rata usia pelanggan untuk setiap wilayah, dengan tinggi batang mewakili perbedaan usia rata-rata antara Europe, North America, dan Pacific. Plot densitas kernel digunakan untuk menggambarkan distribusi usia di masing-masing wilayah, memperlihatkan apakah usia pelanggan terkonsentrasi dalam rentang tertentu atau tersebar lebih luas. Adapun, gabungan plot strip dan boxplot menampilkan data individual dan ringkasan statistik seperti median dan kuartil untuk mengidentifikasi variasi usia dalam setiap wilayah.
# Diagram Batang
plotdata <- bike_buyers %>%
group_by(Gender) %>%
dplyr::summarize(mean_age = mean(Age))
mycols <- c("Light Pink", "Blue")
ggplot(plotdata,
aes(x = factor(Gender,
labels = c("Female", "Male")),
y = mean_age))+
geom_bar(stat = "identity",
fill = mycols)+
geom_text(aes(label = number(mean_age)),
vjust = -0.25)+
scale_y_continuous(breaks = seq(0, 100, 5),
label = number)+
theme_minimal()+
labs(title = "Rata-rata Age Berdasarkan Gender",
subtitle = "Pembelian Sepeda",
x = "",
y = "")
# Plot Densitas Kernel
ggplot(bike_buyers,
aes(x = Age,
fill = Gender))+
geom_density(alpha = 0.4)+
theme_minimal()
labs(title = "Distribusi Age Berdasarkan Gender")
## $title
## [1] "Distribusi Age Berdasarkan Gender"
##
## attr(,"class")
## [1] "labels"
# Gabungan Plot Strip dan Boxplot
ggplot(bike_buyers,
aes(x = factor(Gender,
labels = c("Female", "Male")),
y = Age,
fill = Gender))+
geom_boxjitter(color = "black",
jitter.color = "darkgrey",
errorbar.draw = TRUE)+
scale_y_continuous(label = dollar)+
labs(title = "Distribusi Age Berdasarkan Gender",
subtitle = "Pembelian Sepeda",
x = "",
y = "")+
theme_minimal()+
theme(legend.position = "none")
Pada analisis usia (age) berdasarkan jenis kelamin (Gender), digunakan diagram batang untuk membandingkan rata-rata usia antara pria dan wanita. Grafik ini memungkinkan kita untuk melihat apakah ada perbedaan signifikan dalam usia rata-rata antara kedua kelompok. Misalnya, mungkin ditemukan bahwa pria memiliki rata-rata usia yang lebih tinggi atau lebih rendah dibandingkan wanita. Untuk plot densitas kernel, digunakan untuk menggambarkan distribusi usia masing-masing jenis kelamin, serta menunjukkan apakah usia pria dan wanita tersebar dengan cara yang mirip atau berbeda. Adapun untuk Gabungan plot strip dan boxplot kemudian kita gunakan untuk melihat data individual dan memberikan gambaran statistik lebih rinci, seperti median dan kuartil, untuk mengevaluasi variasi usia dalam setiap kelompok gender.
# Diagram Batang
plotdata <- bike_buyers %>%
group_by(Purchased_Bike) %>%
dplyr::summarize(mean_age = mean(Age))
mycols <- c("Red", "Green")
ggplot(plotdata,
aes(x = factor(Purchased_Bike,
labels = c("No", "Yes")),
y = mean_age))+
geom_bar(stat = "identity",
fill = mycols)+
geom_text(aes(label = number(mean_age)),
vjust = -0.25)+
scale_y_continuous(breaks = seq(0, 100, 5),
label = number)+
theme_minimal()+
labs(title = "Rata-rata Age Berdasarkan Purchased Bike",
subtitle = "Pembelian Sepeda",
x = "",
y = "")
# Plot Densitas Kernel
ggplot(bike_buyers,
aes(x = Age,
fill = Purchased_Bike))+
geom_density(alpha = 0.4)+
theme_minimal()
labs(title = "Distribusi Age Berdasarkan Purchased Bike")
## $title
## [1] "Distribusi Age Berdasarkan Purchased Bike"
##
## attr(,"class")
## [1] "labels"
# Gabungan Plot Strip dan Boxplot
ggplot(bike_buyers,
aes(x = factor(Purchased_Bike,
labels = c("No", "Yes")),
y = Age,
fill = Purchased_Bike))+
geom_boxjitter(color = "black",
jitter.color = "darkgrey",
errorbar.draw = TRUE)+
scale_y_continuous(label = dollar)+
labs(title = "Distribusi Age Berdasarkan Purchased Bike",
subtitle = "Pembelian Sepeda",
x = "",
y = "")+
theme_minimal()+
theme(legend.position = "none")
Pada analisis usia (age) berdasarkan keputusan pembelian sepeda (Purchased Bike), digunakan diagram batang untuk membandingkan rata-rata usia antara pelanggan yang membeli sepeda dan yang tidak membeli sepeda. Grafik ini membantu mengetahui apakah ada perbedaan usia rata-rata di antara kedua kelompok ini. Selanjutnya, plot densitas kernel digunakan untuk melihat sebaran usia di kedua kelompok. Kita dapat mengidentifikasi apakah usia pembeli sepeda lebih terkonsentrasi pada rentang usia tertentu dibandingkan dengan yang tidak membeli. Adapun, Gabungan plot strip dan boxplot memberikan gambaran lebih rinci dengan menunjukkan data individual dan ringkasan statistik seperti median dan kuartil, yang membantu mengidentifikasi pola dan perbedaan signifikan dalam usia antara pembeli dan non-pembeli sepeda.
ggplot(bike_buyers, aes(x = Age,
y = Income,
color = Gender))+
geom_point(size = 6, alpha = .6)+
geom_smooth(se = FALSE,
method = "lm",
formula = y~poly(x,2),
size = 1.5)+
labs(title = "Income berdasarkan Age dan Gender")+
scale_y_continuous(label = scales::dollar)+
scale_color_brewer(palette = "Set1")+
theme_minimal()
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
Scatterplot menunjukkan bahwa pendapatan cenderung meningkat dengan bertambahnya usia, terutama pada kelompok pria. Kelompok wanita memiliki distribusi pendapatan yang lebih merata.
ggplot(bike_buyers, aes(x = Age,
y = Income,
color = Region))+
geom_point(size = 6, alpha = .6)+
geom_smooth(se = FALSE,
method = "lm",
formula = y~poly(x,2),
size = 1.5)+
labs(title = "Income berdasarkan Age dan Region")+
scale_y_continuous(label = scales::number)+
scale_color_brewer(palette = "Set1")+
theme_minimal()
Pelanggan dari wilayah Pasifik memiliki tren peningkatan pendapatan dengan usia yang lebih jelas dibandingkan wilayah lainnya. Hal ini menunjukkan perbedaan demografi ekonomi di setiap wilayah.
ggplot(bike_buyers, aes(x = Age,
y = Income,
color = Purchased_Bike))+
geom_point(size = 6, alpha = .6)+
geom_smooth(se = FALSE,
method = "lm",
formula = y~poly(x,2),
size = 1.5)+
labs(title = "Income berdasarkan Age dan Purchased Bike")+
scale_y_continuous(label = scales::number)+
scale_color_brewer(palette = "Set1")+
theme_minimal()
Pelanggan yang membeli sepeda cenderung memiliki pendapatan lebih tinggi pada berbagai rentang usia dibandingkan mereka yang tidak membeli. Hal ini mengindikasikan hubungan yang kuat antara pendapatan dan keputusan membeli sepeda.
# Histogram Income berdasarkan Gender dan Region
ggplot(bike_buyers, aes(x = Income / 1000))+
geom_histogram(color = "white",
fill = "cornflowerblue")+
facet_grid(Gender ~ Region)+
theme_minimal()+
labs(title = "Histogram Income berdasarkan Gender dan Region",
x = "Income ($1000)")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
# Histogram Income berdasarkan Gender dan Purchased Bike
ggplot(bike_buyers, aes(x = Income / 1000))+
geom_histogram(color = "white",
fill = "cornflowerblue")+
facet_grid(Purchased_Bike ~ Region)+
theme_minimal()+
labs(title = "Histogram Income berdasarkan Gender dan Purchased Bike",
x = "Income ($1000)")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Faceting pada pendapatan menunjukkan perbedaan distribusi berdasarkan kombinasi Gender dan Region. Wilayah Pasifik menunjukkan distribusi pendapatan yang lebih bervariasi dibandingkan wilayah lain.
ggplot(bike_buyers, aes(x = Age))+
geom_histogram(color = "white",
fill = "cornflowerblue")+
facet_grid(Gender ~ Region)+
theme_minimal()+
labs(title = "Histogram Income berdasarkan Gender dan Region",
x = "Age")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
ggplot(bike_buyers, aes(x = Age))+
geom_histogram(color = "white",
fill = "cornflowerblue")+
facet_grid(Purchased_Bike ~ Region)+
theme_minimal()+
labs(title = "Histogram Income berdasarkan Gender dan Purchased Bike",
x = "Age")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Faceting pada usia menunjukkan bahwa pelanggan wanita di wilayah Pasifik cenderung lebih muda dibandingkan dengan wilayah lain. Perbedaan ini terlihat jelas pada distribusi histogram.
Wilayah Pasifik memiliki proporsi pembelian sepeda tertinggi, terutama pada kelompok usia muda. Pendapatan memiliki pengaruh signifikan terhadap keputusan membeli sepeda, dengan pendapatan lebih tinggi mendorong pembelian. Analisis multivariat menunjukkan interaksi yang kompleks antara usia, wilayah, gender, dan keputusan pembelian.
EDA & PreProcessing | https://rpubs.com/Kurniawans/855458 Algoritma & Struktur Data | https://rpubs.com/sausanramadhani/sdatugas07