# run code dibawah jika belum menginstall package dplyr
# install.packages("dplyr")
library(dplyr) # package untuk data wrangling
Di Trial class ini Kita akan menyelesaikan beberapa business case sambil belajar menggunakan dplyr
untuk wrangling data di R. Retail
adalah data penjualan barang online secara retail. Data tersebut mengandung data pemesanan barang sesuai tanggal pemesanan, id customer, id pemesanan, tanggal pengiriman, barang yang dipesan, jumlah barang, kategori barang, cara pengiriman, profid yang dihasilkan, dll.
Terdapat beragam file yang bisa dibaca di R. Contohnya untuk membaca file csv adalah sebagai berikut:
<- read.csv("data_input/retail.csv")
retail head(retail)
Sebelum mengolah data, kita perlu tau tentang data kita. Fungsi yang umum digunakan untuk melihat struktur dan rangkuman data adalah glimpse()
dan summary()
Melihat struktur data
glimpse(retail)
#> Rows: 9,994
#> Columns: 15
#> $ Row.ID <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17~
#> $ Order.ID <chr> "CA-2016-152156", "CA-2016-152156", "CA-2016-138688", "US~
#> $ Order.Date <chr> "11/8/16", "11/8/16", "6/12/16", "10/11/15", "10/11/15", ~
#> $ Ship.Date <chr> "11/11/16", "11/11/16", "6/16/16", "10/18/15", "10/18/15"~
#> $ Ship.Mode <chr> "Second Class", "Second Class", "Second Class", "Standard~
#> $ Customer.ID <chr> "CG-12520", "CG-12520", "DV-13045", "SO-20335", "SO-20335~
#> $ Segment <chr> "Consumer", "Consumer", "Corporate", "Consumer", "Consume~
#> $ Product.ID <chr> "FUR-BO-10001798", "FUR-CH-10000454", "OFF-LA-10000240", ~
#> $ Category <chr> "Furniture", "Furniture", "Office Supplies", "Furniture",~
#> $ Sub.Category <chr> "Bookcases", "Chairs", "Labels", "Tables", "Storage", "Fu~
#> $ Product.Name <chr> "Bush Somerset Collection Bookcase", "Hon Deluxe Fabric U~
#> $ Sales <dbl> 261.9600, 731.9400, 14.6200, 957.5775, 22.3680, 48.8600, ~
#> $ Quantity <int> 2, 3, 2, 5, 2, 7, 4, 6, 3, 5, 9, 4, 3, 3, 5, 3, 6, 2, 2, ~
#> $ Discount <dbl> 0.00, 0.00, 0.00, 0.45, 0.20, 0.00, 0.00, 0.20, 0.20, 0.0~
#> $ Profit <dbl> 41.9136, 219.5820, 6.8714, -383.0310, 2.5164, 14.1694, 1.~
Melihat rangkuman deskriptif data
summary(retail)
#> Row.ID Order.ID Order.Date Ship.Date
#> Min. : 1 Length:9994 Length:9994 Length:9994
#> 1st Qu.:2499 Class :character Class :character Class :character
#> Median :4998 Mode :character Mode :character Mode :character
#> Mean :4998
#> 3rd Qu.:7496
#> Max. :9994
#> Ship.Mode Customer.ID Segment Product.ID
#> Length:9994 Length:9994 Length:9994 Length:9994
#> Class :character Class :character Class :character Class :character
#> Mode :character Mode :character Mode :character Mode :character
#>
#>
#>
#> Category Sub.Category Product.Name Sales
#> Length:9994 Length:9994 Length:9994 Min. : 0.444
#> Class :character Class :character Class :character 1st Qu.: 17.280
#> Mode :character Mode :character Mode :character Median : 54.490
#> Mean : 229.858
#> 3rd Qu.: 209.940
#> Max. :22638.480
#> Quantity Discount Profit
#> Min. : 1.00 Min. :0.0000 Min. :-6599.978
#> 1st Qu.: 2.00 1st Qu.:0.0000 1st Qu.: 1.729
#> Median : 3.00 Median :0.2000 Median : 8.666
#> Mean : 3.79 Mean :0.1562 Mean : 28.657
#> 3rd Qu.: 5.00 3rd Qu.:0.2000 3rd Qu.: 29.364
#> Max. :14.00 Max. :0.8000 Max. : 8399.976
Data wrangling adalah tahap mengolah data untuk mendapatkan insight sesuai yang diinginkan. Dari data retail diatas, kita akan berusaha untuk menjawab pertanyaan bisnis berikut:
Pada Trial Class ini kita akan fokus pada 3 pertanyaan tersebut, namun anda juga diperbolehkan untuk menambahkan pertanyaan lain sebagai sarana latihan
Dengan menggunakan dplyr
, kita dapat menjawab pertanyaan bisnis pertama, Bagaimana perbedaan proporsi jenis pengiriman barang? mode pengiriman apa yang paling sering digunakan?
%>%
retail group_by(Ship.Mode) %>%
summarise(jumlah = n()) %>%
mutate(proporsi = jumlah/sum(jumlah)) %>%
arrange(-proporsi)
Dari tabel diatas kita ketahui bahwa penggunaan jenis pengiriman yang paling sering digunakan adalah Standard Class dengan proporsi 59.7% dari seluruh jenis pengiriman
Berikutnya mari kita coba buat code untuk menjawab pertanyaan bisnis kedua, Pada Category dan Segment apa terdapat rata-rata profit tertinggi dan terendah?
# your code here
%>%
retail group_by(Segment,Category) %>%
summarise(mean_profit = mean(Profit)) %>%
arrange(-mean_profit)
Dari tabel diatas diketahui bahwa Segment “Home Office” dari category “Technology” menghasilkan rata-rata profit tertinggi, sedangkan Segment “Consumer” dari category “Furniture” menghasilkan rata-rata profit terendah.
DIVE DEEPER
Silahkan dicoba untuk menjawab pertanyaan bisnis ketiga Siapa customer (Customer.ID) yang membuat profit paling besar untuk masing-masing Segment?
# your code here
%>%
retail group_by(Customer.ID,Segment) %>%
summarise(max_profit = max(Profit)) %>%
arrange(-max_profit)
Bonus Challenge
Kita ingin melihat perubahan penjualan dari tahun ke tahun. Hitung jumlah dan rata-rata penjualan (sales) setiap tahunnya (Order.Date) lalu hitung juga kenaikan atau penurunannya dalam bentuk persen. Tahun apa terjadi penurunan terbesar dari kedua rata-rata dan jumlah penjualan?
# your code here
library(lubridate)
%>%
retail mutate(year = year(mdy(Order.Date))) %>%
group_by(year) %>%
summarise(mean_sales = mean(Sales),
sum_sales = sum(Sales)) %>%
ungroup() %>%
mutate(mean_sales_growth = (mean_sales-lag(mean_sales))/lag(mean_sales)*100,
sum_sales_growth = (sum_sales-lag(sum_sales))/lag(sum_sales)*100)
Explolatory Data Analysis adalah tahapan eksplorasi data untuk mendapatkan pola-pola tertentu dan membantu kita memahami data sebelum melakukan analisa lanjutan seperti membuat model machine learning. Salah satu kegiatan dalam EDA adalah pembuatan visualisasi dari data. Sebelumnya di business case pertama, kita sudah melakukan tabulasi untuk melihat jumlah data untuk setiap Ship.Mode
Sekarang kita akan melakukan yang sama namun membuat dalam bentuk visualisasi
plot(x=as.factor(retail$Ship.Mode))
ggplot2
Base plot yang kita lakukan sebelumnya amat berguna untuk melakukan eksplorasi data di awal dimana codingannya cukup sederhana. Ia dapat menyampaikan informasi mengenai data (distribusi/pola data) dan hubungan antar data secara cepat.
Namun untuk membuat plot yang cantik, kita biasanya harus menggunakan package lain yang menyediakan fitur-fitur visualisasi yang sangat custom seperti ggplot2
. Grammar of Graphics atau ggplot2
adalah salah satu package visualisasi di R yang sagat powerfull dan mempunyai banyak fitur dan ekstensi. Kita akan belajar visualisasi menggunakan ggplot2
dengan detail di DV specialization. Berikut pembuatan ulang plot diatas menggunakan ggplot2
library(ggplot2)
library(scales)
%>%
retail group_by(Ship.Mode) %>%
summarise(jumlah = n()) %>%
ggplot(aes(x = reorder(Ship.Mode,jumlah), y = jumlah)) +
geom_col(aes(fill = jumlah)) +
geom_text(aes(label = jumlah),color = "white",nudge_y = -200) +
scale_fill_gradient(low = "#0f0f0f" , high = "#b50505") +
scale_y_continuous(labels = comma) +
labs(title = "Jumlah Observasi untuk Setiap Tipe Pengiriman",
subtitle = "Data Penjualan Retail 2014-2015",
x = "Ship Mode", y = "Frekuensi",
fill = "Jumlah Observasi") +
theme_minimal()
Dari hasil pengolahan data, kita berhasil menjawab ketiga pertanyaan bisnis yang diangkat, yaitu: