1 Prerequisite: Library

# run code dibawah jika belum menginstall package dplyr
# install.packages("dplyr")
library(dplyr) # package untuk data wrangling

2 Retail Business case

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.

2.1 import data

Terdapat beragam file yang bisa dibaca di R. Contohnya untuk membaca file csv adalah sebagai berikut:

retail <- read.csv("data_input/retail.csv")
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

2.2 Data Wrangling

Data wrangling adalah tahap mengolah data untuk mendapatkan insight sesuai yang diinginkan. Dari data retail diatas, kita akan berusaha untuk menjawab pertanyaan bisnis berikut:

  1. Bagaimana perbedaan proporsi jenis pengiriman barang? mode pengiriman apa yang paling sering digunakan?
  2. Pada Category dan Segment apa terdapat rata-rata profit tertinggi dan terendah?
  3. Siapa customer (Customer.ID) yang membuat profit paling besar untuk masing-masing Segment?

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)

3 Explolatory Data Analysis (EDA)

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))

3.1 Extra: Visualisasi di R menggunakan 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()

4 Conclusion

Dari hasil pengolahan data, kita berhasil menjawab ketiga pertanyaan bisnis yang diangkat, yaitu:

  1. Bagaimana perbedaan proporsi jenis pengiriman barang? mode pengiriman apa yang paling sering digunakan?
  • Standard Class dengan proporsi 59.7% dari seluruh jenis pengiriman
  1. Pada Category dan Segment apa terdapat rata-rata profit tertinggi dan terendah?
  • Home Office dari category Technology menghasilkan rata-rata profit tertinggi, sedangkan Segment Consumer dari category Furniture menghasilkan rata-rata profit terendah.
  1. Siapa customer (Customer.ID) yang membuat profit paling besar untuk masing-masing Segment?
  • Segment Consumer: RB-19360
  • Segment Corporate: TC-20980
  • Segment Home Office: TA-21385