## Rows: 620
## Columns: 14
## $ first_name <chr> "Kimberly", "Neel", "Neel", "Chelsea", "Chelsea", "Chelse…
## $ last_name <chr> "Beckstead", "Garvin", "Garvin", "Bouchard", "Bouchard", …
## $ age <dbl> 24, 35, 35, 41, 41, 41, 19, 19, 37, 37, 19, 19, 20, 36, 3…
## $ phone_number <chr> "216-555-2549", "819-555-3189", "819-555-3189", NA, NA, N…
## $ set_id <dbl> 24701, 25626, 24665, 24695, 25626, 24721, 24797, 24701, 2…
## $ number <chr> "76062", "70595", "21031", "31048", "70595", "10831", "75…
## $ theme <chr> "DC Comics Super Heroes", "Ninjago", "Architecture", "Cre…
## $ subtheme <chr> "Mighty Micros", "Rise of the Villains", NA, NA, "Rise of…
## $ year <dbl> 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 201…
## $ name <chr> "Robin vs. Bane", "Ultra Stealth Raider", "Burj Khalifa",…
## $ pieces <dbl> 77, 1093, 333, 368, 1093, 19, 233, 77, 108, NA, 13, 15, 6…
## $ us_price <dbl> 9.99, 119.99, 39.99, 29.99, 119.99, 9.99, 24.99, 9.99, 9.…
## $ image_url <chr> "http://images.brickset.com/sets/images/76062-1.jpg", "ht…
## $ quantity <dbl> 1, 1, 1, 1, 1, 1, 1, 3, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, …
1.1 Tampilkan informasi umum dataset (jumlah data, kolom, tipe data).
1.2 Lakukan pembersihan data sederhana jika diperlukan (null values, duplikat, dll).
Jawaban:
# Load dataset
dimensi <- dim(lego_sales)
jumlah_baris <- dimensi[1]
jumlah_kolom <- dimensi[2]
tipe_data <- sapply(lego_sales, class)
summary(lego_sales) # statistik ringkasan
## first_name last_name age phone_number
## Length:620 Length:620 Min. :16.00 Length:620
## Class :character Class :character 1st Qu.:25.00 Class :character
## Mode :character Mode :character Median :33.00 Mode :character
## Mean :34.36
## 3rd Qu.:41.00
## Max. :68.00
##
## set_id number theme subtheme
## Min. :24548 Length:620 Length:620 Length:620
## 1st Qu.:24725 Class :character Class :character Class :character
## Median :24805 Mode :character Mode :character Mode :character
## Mean :25125
## 3rd Qu.:25640
## Max. :26060
##
## year name pieces us_price
## Min. :2018 Length:620 Min. : 13.0 Min. : 3.99
## 1st Qu.:2018 Class :character 1st Qu.: 70.0 1st Qu.: 9.99
## Median :2018 Mode :character Median : 114.0 Median : 19.99
## Mean :2018 Mean : 254.2 Mean : 29.04
## 3rd Qu.:2018 3rd Qu.: 313.0 3rd Qu.: 29.99
## Max. :2018 Max. :4634.0 Max. :349.99
## NA's :69
## image_url quantity
## Length:620 Min. :1.000
## Class :character 1st Qu.:1.000
## Mode :character Median :1.000
## Mean :1.437
## 3rd Qu.:2.000
## Max. :5.000
##
# Pembersihan dataset
na_total <- colSums(is.na(lego_sales)) # Cek missing values
duplikat_sebelum <- nrow(lego_sales) - nrow(lego_sales %>% distinct())
lego_sales <- lego_sales %>% distinct() # Hapus data duplikat
lego_sales <- lego_sales %>% # Menambahkan kolom data baru (Customer id) untuk no 2 visualisasi 1
mutate(customer_id = paste(first_name, last_name, sep = "_"))
lego_sales <- lego_sales %>% # Menambahkan kolom data baru (Revenue) untuk no 2 visualisasi 5
mutate(revenue = us_price * quantity)
# Tampilkan kesimpulan
list(
Jumlah_Baris = jumlah_baris,
Jumlah_Kolom = jumlah_kolom,
Tipe_Data = tipe_data,
Jumlah_Missing_Values_Per_Kolom = na_total,
Duplikat_Terhapus = duplikat_sebelum
)
## $Jumlah_Baris
## [1] 620
##
## $Jumlah_Kolom
## [1] 14
##
## $Tipe_Data
## first_name last_name age phone_number set_id number
## "character" "character" "numeric" "character" "numeric" "character"
## theme subtheme year name pieces us_price
## "character" "character" "numeric" "character" "numeric" "numeric"
## image_url quantity
## "character" "numeric"
##
## $Jumlah_Missing_Values_Per_Kolom
## first_name last_name age phone_number set_id number
## 0 0 0 92 0 0
## theme subtheme year name pieces us_price
## 0 172 0 0 69 0
## image_url quantity
## 59 0
##
## $Duplikat_Terhapus
## [1] 0
Visualisasi Wajib Buat minimal 5 visualisasi dari kategori berikut:
2.1 10 customer dengan jumlah transaksi terbanyak
2.2 10 tema LEGO Terpopuler Berdasarkan Penjualan
2.3 Sebaran Jumlah Pieces dan Harga
2.4 Komposisi Penjualan Berdasarkan Usia
2.5 Heatmap Korelasi Antar Variabel Numerik
Jawaban:
top_customers <- lego_sales %>%
count(customer_id, sort = TRUE) %>%
slice_max(n, n = 10)
ggplot(top_customers, aes(x = reorder(customer_id, n), y = n)) +
geom_col(fill = "deeppink3") +
coord_flip() +
labs(title = "10 Customer dengan Jumlah Transaksi Terbanyak",
x = "Customer", y = "Jumlah Transaksi") +
theme_minimal()
Visualisasi di atas merupakan diagram batang yang menunjukkan 10 customer dengan jumlah transaksi terbanyak. Sumbu X dalam visualisasi ini adalah jumlah transaksi dan sumbu Y adalah nama customer yang didapat dengan menggunakan fungsi mutate untuk membuat kolom data baru, yaitu customer id. Visualisasi data ini menunjukkan bahwa Jackson_Dominguez adalah customer dengan jumlah transaksi terbanyak (lebih dari 6 kali), disusul oleh customer lainnya seperti Josie_Paley, Tristin_Marcy, dan Sarah_Wagner memiliki jumlah transaksi sebanyak 5 kali dan dapat dilihat sebagian besar customer dalam top 10 ini melakukan transaksi 4-5 kali, sehingga kesimpulan dari visuaisasi data ini adalah meskipun jumlah transaksi tiap customer relatif kecil (maksimal sekitar 6), mereka tetap menjadi pelanggan setia yang melakukan pembelian berulang. Ini menunjukkan kemungkinan adanya pola pembelian reguler oleh customer tertentu.
lego_sales <- lego_sales %>%
mutate(customer_id = paste(first_name, last_name, sep = "_"))
top_customers <- lego_sales %>%
count(customer_id, sort = TRUE) %>%
slice_max(n, n = 10)
ggplot(top_customers, aes(x = reorder(customer_id, n), y = n)) +
geom_col(fill = "deeppink3") +
coord_flip() +
labs(title = "10 Customer dengan Jumlah Transaksi Terbanyak",
x = "Customer", y = "Jumlah Transaksi") +
theme_minimal()
Visualisasi di atas merupakan diagram batang yang menunjukkan 10 tema lego terpopler yang dihitung berdasarkan data penjualan. Sumbu X dalam visualisasi ini adalah jumlah terjual dan sumbu Y adalah tema lego yang dijual. Visualisasi data ini menunjukkan bahwa tema lego yang paling laris adalah tema Star Wars, disusul oleh tema Nexo Knights, Mixels, dan Gear, sehingga kesimpulan dari visuaisasi data ini adalah lego bertema basis cerita atau film yang kuat seperti Star Wars lebih diminati dan banyak dibeli.
ggplot(lego_sales, aes(x = pieces, y = us_price)) +
geom_point(alpha = 0.6, color = "deeppink3") +
geom_smooth(method = "lm", se = FALSE, color = "black", linetype = "dashed") +
labs(title = "Sebaran Jumlah Pieces vs Harga",
x = "Jumlah Pieces", y = "Harga (USD)") +
theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 69 rows containing non-finite outside the scale range
## (`stat_smooth()`).
## Warning: Removed 69 rows containing missing values or values outside the scale range
## (`geom_point()`).
Visualisasi di atas merupakan scatter plot yang menunjukkan hubungan antara jumlah pieces (komponen LEGO) dengan harga dalam USD. Sumbu X adalah jumlah pieces, sedangkan sumbu Y adalah harga (USD). Garis linier hitam untuk menunjukkan tren hubungan antar variabel, sehingga visualisasi ini menunjukkan bahwa secara umum terdapat hubungan positif antara jumlah pieces dan harga—semakin banyak pieces, semakin mahal harga lego set tersebut. Hal ini ditunjukkan oleh garis regresi yang mengarah naik. Namun demikian, terdapat beberapa outlier, seperti produk dengan harga tinggi tapi jumlah pieces tidak terlalu banyak. Selain itu, ada warning bahwa 69 baris data dihapus karena memiliki nilai kosong atau di luar rentang skala.
penjualan_usia <- lego_sales %>%
group_by(age) %>%
summarise(total_quantity = sum(quantity, na.rm = TRUE))
ggplot(penjualan_usia, aes(x = age, y = total_quantity)) +
geom_col(fill = "deeppink3") +
labs(title = "Komposisi Penjualan Berdasarkan Usia Customer",
x = "Usia", y = "Jumlah Terjual") +
theme_minimal()
Visualisasi di atas merupakan diagram batang menggambarkan jumlah produk lego yang terjual berdasarkan usia customer. Sumbu X adalah usia, sedangkan sumbu Y adalah total jumlah terjual. Data ini diperoleh dari agregasi penjualan berdasarkan usia customer. sehingga visualisasi ini menunjukkan bahwa penjualan tertinggi terjadi pada rentang usia 30-an, dengan puncak penjualan di usia sekitar 33 tahun. Usia 20–40 tahun merupakan kelompok usia yang paling banyak melakukan pembelian lego, sedangkan setelah usia 50 tahun terjadi penurunan signifikan. Hal ini menunjukkan bahwa produk lego paling banyak diminati oleh konsumen dewasa muda hingga usia pertengahan.
numerik_data <- lego_sales %>%
select(age, pieces, us_price, quantity, revenue)
cor_matrix <- cor(numerik_data, use = "complete.obs")
cor_df <- as.data.frame(as.table(cor_matrix))
ggplot(cor_df, aes(x = Var1, y = Var2, fill = Freq)) +
geom_tile(color = "white") +
geom_text(aes(label = round(Freq, 2)), color = "white", size = 4) +
scale_fill_gradient(low = "pink", high = "deeppink3") +
labs(title = "Heatmap Korelasi Variabel Numerik", fill = "Korelasi") +
theme_minimal()
Visualisasi di atas merupakan heatmap yang menggambarkan korelasi antar variabel numerik dalam dataset, yaitu age, pieces, us_price, quantity, dan revenue. Warna semakin gelap menunjukkan nilai korelasi yang semakin tinggi, dengan skala dari 0 (tidak berkorelasi) hingga 1 (sangat berkorelasi). Dari heatmap ini terlihat bahwa pieces memiliki korelasi sangat kuat dengan us_price (0.94) dan cukup tinggi dengan revenue (0.83), us_price juga berkorelasi tinggi dengan revenue (0.87), age memiliki korelasi sangat rendah dengan semua variabel lainnya, sehingga visualisasi ini menyimpulkan bahwa jumlah pieces dan harga sangat memengaruhi revenue, sementara usia customer tidak memiliki pengaruh yang signifikan terhadap variabel-variabel numerik lainnya dalam dataset ini.
Tuliskan 3–5 insight menarik dari visualisasi yang dibuat.
Contoh: Apakah tema tertentu mendominasi revenue? Apakah set dengan lebih banyak pieces selalu lebih mahal? Apakah ada preferensi tema LEGO pada kelompok usia tertentu?
Jawaban:
Dari visualisasi 1, terlihat bahwa customer dengan transaksi terbanyak hanya melakukan sekitar 4–6 transaksi. Ini menunjukkan bahwa walaupun frekuensi pembelian per customer tidak tinggi, terdapat kelompok pelanggan setia yang melakukan pembelian berulang. Strategi retensi seperti membership atau program loyalitas bisa sangat efektif untuk kelompok ini.
Berdasarkan visualisasi 2, tema lego Star Wars memiliki volume penjualan tertinggi dibandingkan tema lainnya. Ini menunjukkan bahwa tema yang berasosiasi dengan franchise populer memiliki daya tarik pasar yang lebih kuat, dan dapat dijadikan fokus utama dalam strategi pemasaran atau bundling produk.
Dari visualisasi 3 (scatter plot), terlihat adanya korelasi positif antara jumlah pieces dan harga. Semakin banyak jumlah pieces, semakin tinggi pula harga lego set tersebut. Ini diperkuat oleh garis regresi yang naik dan korelasi 0.94 antara pieces dan us_price pada heatmap. Namun, juga ada outlier—set yang mahal tapi tidak memiliki banyak pieces, mungkin karena nilai koleksi atau lisensi khusus.
Visualisasi 4 menunjukkan bahwa pembelian LEGO tertinggi berasal dari customer berusia 30–40 tahun, dengan puncak di usia 33. Ini menunjukkan bahwa lego tidak hanya disukai anak-anak, tapi juga oleh dewasa muda (kemungkinan kolektor atau pembeli untuk anak mereka). Segmentasi usia ini bisa menjadi target utama dalam kampanye promosi.
Berdasarkan heatmap korelasi (visualisasi 5), revenue sangat berkorelasi dengan us_price (0.87) dan pieces (0.83). Ini menunjukkan bahwa pendapatan tidak hanya tergantung pada banyaknya unit yang terjual, tapi juga pada set lego yang lebih kompleks dan lebih mahal. Produk dengan value tinggi punya kontribusi besar terhadap total pendapatan.