1 Pendahuluan

Global Superstore adalah sebuah perusahaan di Amerika Serikat yang bergerak di bidang online store, mereka memiliki dataset yang telah dikumpulkan selama 4 tahun, dataset ini berisi tentang data historis tranksaksi pelanggan. Dengan menggunakan dataset tersebut, kita akan melakukan analisa data untuk menjawab berbagai pertanyaan bisnis sebagai berikut:

  1. Golongan pelanggan yang mana yang menghasilkan sales yang paling tinggi?

  2. Di City yang mana yang memiliki pelanggan terbanyak?

  3. Sub-Kategori barang apa yang paling laku berdasarkan sales?

  4. Jumlah pesanan paling banyak terjadi pada hari apa dan bagaimana trendnya?

  5. Perusahaan ingin mengetahui dan berencana untuk memberikan hadiah apresiasi kepada 10 pelanggan yang nilai salesnya paling besar, siapakah pelanggan tersebut?

  6. Bagaimana dengan jumlah tranksaksi setiap bulannya? apakah ada kecenderungan tertentu?

  7. Berapakah rata-rata lama pengiriman barang berdasarkan tiap jenis pengirimannya?

Dan kemudian setelah menjawab pertanyaan tersebut, berikanlah rekomendasi bisnis berdasarkan data yang telah dianalisa.

2 Persiapan Data

2.1 Inspeksi Data

Pertama kita akan melakukan import data.

store <- read.csv("data_input/segment.csv")

Kemudian kita akan melakukan inspeksi cepat terhadap data kita.

head(store, 5)
tail(store, 5)
glimpse(store)
## Rows: 9,800
## Columns: 18
## $ Row.ID        <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 1…
## $ Order.ID      <chr> "CA-2017-152156", "CA-2017-152156", "CA-2017-138688", "U…
## $ Order.Date    <chr> "08/11/2017", "08/11/2017", "12/06/2017", "11/10/2016", …
## $ Ship.Date     <chr> "11/11/2017", "11/11/2017", "16/06/2017", "18/10/2016", …
## $ Ship.Mode     <chr> "Second Class", "Second Class", "Second Class", "Standar…
## $ Customer.ID   <chr> "CG-12520", "CG-12520", "DV-13045", "SO-20335", "SO-2033…
## $ Customer.Name <chr> "Claire Gute", "Claire Gute", "Darrin Van Huff", "Sean O…
## $ Segment       <chr> "Consumer", "Consumer", "Corporate", "Consumer", "Consum…
## $ Country       <chr> "United States", "United States", "United States", "Unit…
## $ City          <chr> "Henderson", "Henderson", "Los Angeles", "Fort Lauderdal…
## $ State         <chr> "Kentucky", "Kentucky", "California", "Florida", "Florid…
## $ Postal.Code   <int> 42420, 42420, 90036, 33311, 33311, 90032, 90032, 90032, …
## $ Region        <chr> "South", "South", "West", "South", "South", "West", "Wes…
## $ 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", "F…
## $ Product.Name  <chr> "Bush Somerset Collection Bookcase", "Hon Deluxe Fabric …
## $ Sales         <dbl> 261.9600, 731.9400, 14.6200, 957.5775, 22.3680, 48.8600,…
colSums(is.na(store)) #na.omit(store)
##        Row.ID      Order.ID    Order.Date     Ship.Date     Ship.Mode 
##             0             0             0             0             0 
##   Customer.ID Customer.Name       Segment       Country          City 
##             0             0             0             0             0 
##         State   Postal.Code        Region    Product.ID      Category 
##             0            11             0             0             0 
##  Sub.Category  Product.Name         Sales 
##             0             0             0

2.2 Pembersihan Data

Melakukan konversi tipe data yang tidak tepat ke tipe data yang tepat.

store <- store %>% 
  mutate(
    Order.Date = dmy(Order.Date),
    Ship.Date = dmy(Ship.Date),
    Ship.Mode = as.factor(Ship.Mode),
    Segment = as.factor(Segment),
    Country = as.factor(Country),
    City = as.factor(City),
    State = as.factor(State),
    Region = as.factor(Region),
    Category = as.factor(Category),
    Sub.Category = as.factor(Sub.Category)
  )
glimpse(store)
## Rows: 9,800
## Columns: 18
## $ Row.ID        <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 1…
## $ Order.ID      <chr> "CA-2017-152156", "CA-2017-152156", "CA-2017-138688", "U…
## $ Order.Date    <date> 2017-11-08, 2017-11-08, 2017-06-12, 2016-10-11, 2016-10…
## $ Ship.Date     <date> 2017-11-11, 2017-11-11, 2017-06-16, 2016-10-18, 2016-10…
## $ Ship.Mode     <fct> Second Class, Second Class, Second Class, Standard Class…
## $ Customer.ID   <chr> "CG-12520", "CG-12520", "DV-13045", "SO-20335", "SO-2033…
## $ Customer.Name <chr> "Claire Gute", "Claire Gute", "Darrin Van Huff", "Sean O…
## $ Segment       <fct> Consumer, Consumer, Corporate, Consumer, Consumer, Consu…
## $ Country       <fct> United States, United States, United States, United Stat…
## $ City          <fct> Henderson, Henderson, Los Angeles, Fort Lauderdale, Fort…
## $ State         <fct> Kentucky, Kentucky, California, Florida, Florida, Califo…
## $ Postal.Code   <int> 42420, 42420, 90036, 33311, 33311, 90032, 90032, 90032, …
## $ Region        <fct> South, South, West, South, South, West, West, West, West…
## $ Product.ID    <chr> "FUR-BO-10001798", "FUR-CH-10000454", "OFF-LA-10000240",…
## $ Category      <fct> Furniture, Furniture, Office Supplies, Furniture, Office…
## $ Sub.Category  <fct> Bookcases, Chairs, Labels, Tables, Storage, Furnishings,…
## $ Product.Name  <chr> "Bush Somerset Collection Bookcase", "Hon Deluxe Fabric …
## $ Sales         <dbl> 261.9600, 731.9400, 14.6200, 957.5775, 22.3680, 48.8600,…

3 Penjelasan Data Secara Ringkas

summary(store)
##      Row.ID       Order.ID           Order.Date           Ship.Date         
##  Min.   :   1   Length:9800        Min.   :2015-01-03   Min.   :2015-01-07  
##  1st Qu.:2451   Class :character   1st Qu.:2016-05-24   1st Qu.:2016-05-27  
##  Median :4900   Mode  :character   Median :2017-06-26   Median :2017-06-29  
##  Mean   :4900                      Mean   :2017-05-01   Mean   :2017-05-05  
##  3rd Qu.:7350                      3rd Qu.:2018-05-15   3rd Qu.:2018-05-19  
##  Max.   :9800                      Max.   :2018-12-30   Max.   :2019-01-05  
##                                                                             
##           Ship.Mode    Customer.ID        Customer.Name             Segment    
##  First Class   :1501   Length:9800        Length:9800        Consumer   :5101  
##  Same Day      : 538   Class :character   Class :character   Corporate  :2953  
##  Second Class  :1902   Mode  :character   Mode  :character   Home Office:1746  
##  Standard Class:5859                                                           
##                                                                                
##                                                                                
##                                                                                
##           Country                City               State       Postal.Code   
##  United States:9800   New York City: 891   California  :1946   Min.   : 1040  
##                       Los Angeles  : 728   New York    :1097   1st Qu.:23223  
##                       Philadelphia : 532   Texas       : 973   Median :58103  
##                       San Francisco: 500   Pennsylvania: 582   Mean   :55273  
##                       Seattle      : 426   Washington  : 504   3rd Qu.:90008  
##                       Houston      : 374   Illinois    : 483   Max.   :99301  
##                       (Other)      :6349   (Other)     :4215   NA's   :11     
##      Region      Product.ID                   Category         Sub.Category 
##  Central:2277   Length:9800        Furniture      :2078   Binders    :1492  
##  East   :2785   Class :character   Office Supplies:5909   Paper      :1338  
##  South  :1598   Mode  :character   Technology     :1813   Furnishings: 931  
##  West   :3140                                             Phones     : 876  
##                                                           Storage    : 832  
##                                                           Art        : 785  
##                                                           (Other)    :3546  
##  Product.Name           Sales          
##  Length:9800        Min.   :    0.444  
##  Class :character   1st Qu.:   17.248  
##  Mode  :character   Median :   54.490  
##                     Mean   :  230.769  
##                     3rd Qu.:  210.605  
##                     Max.   :22638.480  
## 
glimpse(store)
## Rows: 9,800
## Columns: 18
## $ Row.ID        <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 1…
## $ Order.ID      <chr> "CA-2017-152156", "CA-2017-152156", "CA-2017-138688", "U…
## $ Order.Date    <date> 2017-11-08, 2017-11-08, 2017-06-12, 2016-10-11, 2016-10…
## $ Ship.Date     <date> 2017-11-11, 2017-11-11, 2017-06-16, 2016-10-18, 2016-10…
## $ Ship.Mode     <fct> Second Class, Second Class, Second Class, Standard Class…
## $ Customer.ID   <chr> "CG-12520", "CG-12520", "DV-13045", "SO-20335", "SO-2033…
## $ Customer.Name <chr> "Claire Gute", "Claire Gute", "Darrin Van Huff", "Sean O…
## $ Segment       <fct> Consumer, Consumer, Corporate, Consumer, Consumer, Consu…
## $ Country       <fct> United States, United States, United States, United Stat…
## $ City          <fct> Henderson, Henderson, Los Angeles, Fort Lauderdale, Fort…
## $ State         <fct> Kentucky, Kentucky, California, Florida, Florida, Califo…
## $ Postal.Code   <int> 42420, 42420, 90036, 33311, 33311, 90032, 90032, 90032, …
## $ Region        <fct> South, South, West, South, South, West, West, West, West…
## $ Product.ID    <chr> "FUR-BO-10001798", "FUR-CH-10000454", "OFF-LA-10000240",…
## $ Category      <fct> Furniture, Furniture, Office Supplies, Furniture, Office…
## $ Sub.Category  <fct> Bookcases, Chairs, Labels, Tables, Storage, Furnishings,…
## $ Product.Name  <chr> "Bush Somerset Collection Bookcase", "Hon Deluxe Fabric …
## $ Sales         <dbl> 261.9600, 731.9400, 14.6200, 957.5775, 22.3680, 48.8600,…
  1. Row.ID, menunjukan id baris data.
  2. Order.ID, menunjukan ID dari tranksaksi.
  3. Order.Date, menunjukan kapan pemesanan dibuat.
  4. Ship.Date, menunjukan bahwa kapan pesanan tiba di alamat tujuan.
  5. Ship.Mode, menunjukan jenis pengiriman yang digunakan, Mayoritas ship mode yang digunakan adalah Standard Class.
  6. Customer.ID, menunjukan id dari customer yang melakukan tranksaksi.
  7. Customer.Name, menunjukan nama dari pelanggan.
  8. Segment, menunjukan golongan customer pelanggan, segment paling dominan adalah segment Customer.
  9. Country, menunjukan negara pelanggan, semua country pelanggan adalah United States.
  10. City, menunjukan kota pelanggan.
  11. State, menunjukan wilayah bagian dari kota pelanggan, state didominasi oleh California.
  12. Postal.Code, menunjukan kode pos dari pelanggan.
  13. Region, menunjukan area pelanggan, region paling banyak adalah West.
  14. Product.ID, menunjukan id dari barang atau komoditas yang dijual.
  15. Category, menunjukan kategori dari barang atau komoditas yang dijual.
  16. Sub.Category, menunjukan sub-kategori dari barang atau komoditas yang dijual, category yang tranksaksinya paling banyak adalah Office Supplies.
  17. Product.Name, menunjukan nama barang atau komoditas yang dijual.
  18. Sales, menunjukan besaran total tranksaksi dalam mata uang, USD.

4 Transformasi dan Manipulasi Data

4.1 Question 1

Golongan pelanggan yang mana yang menghasilkan rata-rata sales yang paling tinggi?

store_cat_sales <- store %>% 
  group_by(Segment) %>% 
  summarise(avg_sales = sum(Sales)) %>%
  ungroup() %>% 
  mutate(label2 = glue("Average Sales: {comma(avg_sales)}"))

plot1 <- ggplot(data = store_cat_sales, mapping = aes(x = Segment, y = avg_sales, text = label2))+
  geom_col(aes(fill = Segment))+
  labs(title = "Rata-rata Sales Berdasarkan Golongan Pelanggan",
       x = "Golongan Pelanggan",
       y = NULL)
ggplotly(plot1, tooltip = "label2")

Jawaban: Golongan Consumer adalah golongan pelanggan yang memberikan sales paling tinggi.

4.2 Question 2

Di City yang mana yang memiliki pelanggan terbanyak?

store_most_city <- store[match(unique(store$Customer.ID), store$Customer.ID),]
store_most_city <- store_most_city %>% 
  group_by(City) %>% 
  summarise(cust_count= n()) %>%
  ungroup() %>% 
  arrange(-cust_count) %>% 
  head(10) %>% 
  mutate(label3 = glue("City: {City}
                       Jumlah Pelanggan: {cust_count}"))

plot2 <- ggplot(data = store_most_city, mapping = aes(x = cust_count, y = reorder(City, cust_count), text = label3))+
  geom_col(aes(fill = cust_count))+
  labs(title = "Jumlah Pelanggan Berdasarkan Kota",
       x = "Jumlah Pelanggan",
       y = NULL,
       fill = "Jumlah Pelanggan")+
  scale_fill_gradient(low = "gray", high = "deepskyblue2")
ggplotly(plot2, tooltip = "label3")

Jawaban: Pelanggan paling banyak berasal dari kota Newyork City.

4.3 Question 3

Sub-Kategori barang apa yang paling laku berdasarkan sales?

store_most_cat <- store %>% 
  group_by(Sub.Category) %>% 
  summarise(Terjual = sum(Sales)) %>%
  arrange(-Terjual) %>% 
  ungroup %>% 
  head(10) %>% 
  mutate(label4 = glue("Sub-Kategori: {Sub.Category}
                       Sales: {comma(Terjual)}"))

plot3 <- ggplot(data = store_most_cat, mapping = aes(x = Terjual, y = reorder(Sub.Category, Terjual), text = label4))+
  geom_col(aes(fill = Terjual))+
  labs(title = "Jumlah Sales Berdasarkan Sub-Kategori",
       x = "Jumlah Sales",
       y = NULL,
       fill = "Jumlah Sales")+
  scale_fill_gradient(low = "gray", high = "deepskyblue2")+
  scale_x_continuous(labels = label_comma())
ggplotly(plot3, tooltip = "label4")

Jawaban: Sub-Kategori yang paling laku berdasarkan jumlah sales adalah Phones, Diikuti oleh Chairs dengan perbedaan yang cukup tipis.

4.4 Question 4

Jumlah pesanan paling banyak terjadi pada hari apa dan bagaimana trendnya?

store_days <- store %>% 
  mutate(
    day = wday(Order.Date, label=T, abbr = F),
    day = as.factor(day)) %>% 
  group_by(day) %>% 
  summarise(order_count = n()) %>% 
  mutate(label5 = glue("Day: {day}
                  Jumlah pesanan: {order_count}"))
  
plot4 <- ggplot(store_days, mapping = aes(x = day, y = order_count, group = 1))+
  geom_line(col = "deepskyblue2")+
  geom_point(aes(text = label5), col="black") +
  scale_y_continuous(labels = comma)+
  labs(title = "Jumlah Pesanan Berdasarkan Hari",
       x = "Hari",
       y = "Jumlah Pesanan",
       fill = "Jumlah Sales")
## Warning in geom_point(aes(text = label5), col = "black"): Ignoring unknown
## aesthetics: text
ggplotly(plot4, tooltip = "label5")

Jawaban: Jumlah pesanan mencapai titik tertinggi pada hari selasa, dan akan menurun drastis menjelang hari kamis, dan akan naik lagi menjelang sabtu.

4.5 Question 5

Perusahaan ingin mengetahui dan berencana untuk memberikan hadiah apresiasi kepada 10 pelanggan yang nilai salesnya paling besar, siapakah pelanggan tersebut?

Jawaban: Berikut adalah 10 pelanggan yang memiliki nilai sales paling besar.

store_top10_cust <- store %>% 
  group_by(Customer.ID) %>% 
  summarise(sum_sales = sum(Sales)) %>% 
  ungroup() %>% 
  arrange(-sum_sales) %>% 
  head(10)
store_top10_cust <- distinct(inner_join(store, store_top10_cust, by= "Customer.ID"), Customer.ID, .keep_all = T) 
store_top10_cust <- store_top10_cust %>% 
  select(Customer.Name, Segment, City, sum_sales) %>% 
  arrange(-sum_sales)
store_top10_cust

4.6 Question 6

Bagaimana dengan jumlah tranksaksi setiap bulannya? apakah ada kecenderungan tertentu?

store_month <- store %>% 
  mutate(
    month = month(Order.Date, label = T, abbr = T)
  ) %>% 
  group_by(month) %>% 
  summarise(Jumlah_Tranksaksi = n()) %>% 
  ungroup() %>% 
  mutate(
    label6 = glue("Month: {month}
                  Jumlah Tranksaksi: {Jumlah_Tranksaksi}")
  )

plot6 <- ggplot(store_month, mapping = aes(x = month, y = Jumlah_Tranksaksi, group = 1))+
  geom_line(col = "deepskyblue2")+
  geom_point(aes(text = label6), col="black") +
  scale_y_continuous(labels = comma)+
  labs(title="Jumlah Tranksaksi Berdasarkan Bulan",
       x = "Bulan",
       y = "Jumlah Tranksaksi",
       fill = "Jumlah Tranksaksi")
## Warning in geom_point(aes(text = label6), col = "black"): Ignoring unknown
## aesthetics: text
ggplotly(plot6, tooltip = "label6")

Jawaban: Jumlah tranksaksi cenderung mengalami penurunan drastis setiap menjelang tahun baru, dan berada di titik terendahnya di bulan februari, dan cenderung mengalami penurunan juga setiap menjelang bulan oktober, bulan november cenderung memiliki jumlah tranksaksi yang lebih banyak daripada biasanya.

4.7 Question 7

Berapakah rata-rata lama pengiriman barang berdasarkan tiap jenis pengirimannya?

store_shipduration <- store %>% 
  mutate(
    ship.duration = difftime(Ship.Date, Order.Date, units = "days")
  ) %>% 
  group_by(Ship.Mode) %>% 
  summarise(avr_duration = as.numeric(round(mean(ship.duration),2))) %>% 
  ungroup() %>% 
  mutate(
    label7 = glue("Ship Mode: {Ship.Mode}
                  Rata-rata Durasi:{avr_duration}")
  )


plot7 <- ggplot(store_shipduration, mapping = aes(x = avr_duration, y = reorder(Ship.Mode, avr_duration), text = label7))+
  geom_col(aes(fill = avr_duration))+
  labs(title = "Rata-rata Durasi Pengiriman Berdasarkan Jenis Pengiriman",
       x = "Rata-Rata Hari",
       y = NULL,
       fill = "Rata-rata Hari")+
  scale_fill_gradient(low = "gray", high = "deepskyblue2")
ggplotly(plot7, tooltip = "label7")

Jawaban: Yang paling cepat adalah yang jenis Same Day, dan yang paling lambat adalah yang jenis Standard Class yakni 5.01 hari, disusul oleh Second Class 3.25 hari, dan First Class 2.18 hari.

5 Kesimpulan dan Rekomendasi Bisnis

##Kesimpulan

  1. Jenis pengiriman (Ship.Mode) yang paling sering digunakan adalah jenis Standard Class, kemungkinan besar disebabkan oleh faktor biaya yang lebih murah.

  2. Segmentasi pelanggan didominasi oleh kalangan Consumer sekaligus menjadikan kalangan Consumer sebagai kalangan yang memiliki nilai sales paling tinggi di antara kalangan yang lainnya.

  3. Pelanggan sebagian besar (top 4) berasal dari kota Newyork City, Los Angeles, Philadelphia, dan San Fransisco.

  4. Barang yang memiliki nilai sales terbesar adalah Phone, dan Chairs, meski begitu barang yang paling sering laku adalah Binders, dan Paper.

  5. Jumlah pesanan akan cenderung menurun setiap menjelang hari Kamis.

  6. Jumlah tranksaksi cenderung mengalami penurunan drastis setiap menjelang tahun baru, dan berada di titik terendahnya di bulan februari, dan cenderung mengalami penurunan juga setiap menjelang bulan oktober, bulan november cenderung memiliki jumlah tranksaksi yang lebih banyak daripada biasanya.

5.1 Rekomendasi Bisnis

  1. Kampanye & Event di Awal Tahun, Jumlah tranksaksi di setiap awal tahun selalu cenderung jauh lebih sedikit dibanding bulan-bulan yang lainnya, sebaiknya mempertimbangkan untuk mengadakan event atau promo seperti gratis ongkir, atau cashback di bulan Januari dan Februari yang cenderung sepi tranksaksinya.

  2. Event Hari Kamis, Jumlah tranksaksi cenderung menurun drastis setiap menjelang hari kamis, pengadaan promo sebaiknya dilakukan di hari kamis untuk menstabilkan jumlah tranksaksi di hari tersebut, agar kegiatan operasional bisa lebih stabil.

  3. Produk Unggulan dan Bundling, berfokus pada barang yang paling sering laku, yaitu binder, paper, phones, dan chairs, dan padukan barang yang paling sering terjual dengan barang yang lebih jarang terjual dengan menjualnya dengan harga promo dalam bentuk bundle/paket.