Email:
RPubs: https://rpubs.com/sianadputrii/


1 Latar Belakang

Andikan Anda adalah seorang Manajer dibidang projek Data Scince, ingin melakukan analisis perilaku pelanggan menggunakan data transaksi perusahaan ritel online di Inggris (yang memperoleh dataset dalam kurung waktu antara 01/12/2010 dan 09/12/2011). Diketahui dari data tersebut banyak pelanggan perusahaan adalah grosir (pemasok). Selain itu, ada beberapa hal penting yang perlu diperhatikan mengenai data tersebut adalah sebagai berikut:

Variabel Deskripsi
invoice_no Nomor invoice terdiri dari 6 digit unik untuk setiap transaksi. Jika diawali dengan huruf C, ini menandakan bahwa transaksi tersebut berstatus Batal
stock_code Kode produk yang unik untuk setiap produk, terdiri dari 5 digit angka yang unik untuk setiap produk (Deskripsi Nama Produk).
quantity Jumlah produk yang dibeli
invoice_date Tanggal dan waktu transaksi
unit_price Harga produk per unit
customer_id ID Pelanggan terdiri dari 5 digit angka yang unik untuk setiap pelanggan.
country Negara pelanggan

Anda dapat mengunduh data yang digunakan dalam kasus ini di Google Classrom atau klik Retail.xlsx dan Retail.rds.

2 Tugas 1

Import kedua data tersebut ke Rstudio Anda sesuai dengan jenis file masing-masing (Proses import mana yang lebih baik menurut Anda?).

#Set Working Directory
#setwd("C:/Users/Siana/Downloads")

Data1 <- readRDS("Retail.rds")
head(Data1, 5)
##   InvoiceNo StockCode                         Description Quantity
## 1    536365    85123A  WHITE HANGING HEART T-LIGHT HOLDER        6
## 2    536365     71053                 WHITE METAL LANTERN        6
## 3    536365    84406B      CREAM CUPID HEARTS COAT HANGER        8
## 4    536365    84029G KNITTED UNION FLAG HOT WATER BOTTLE        6
## 5    536365    84029E      RED WOOLLY HOTTIE WHITE HEART.        6
##           InvoiceDate UnitPrice CustomerID        Country
## 1 2010-12-01 08:26:00      2.55      17850 United Kingdom
## 2 2010-12-01 08:26:00      3.39      17850 United Kingdom
## 3 2010-12-01 08:26:00      2.75      17850 United Kingdom
## 4 2010-12-01 08:26:00      3.39      17850 United Kingdom
## 5 2010-12-01 08:26:00      3.39      17850 United Kingdom
library(readxl)
Data2 <- read_xlsx("Retail.xlsx")
head(Data2, 5)
## # A tibble: 5 x 8
##   InvoiceNo StockCode Description Quantity InvoiceDate         UnitPrice
##   <chr>     <chr>     <chr>          <dbl> <dttm>                  <dbl>
## 1 536365    85123A    WHITE HANG~        6 2010-12-01 08:26:00      2.55
## 2 536365    71053     WHITE META~        6 2010-12-01 08:26:00      3.39
## 3 536365    84406B    CREAM CUPI~        8 2010-12-01 08:26:00      2.75
## 4 536365    84029G    KNITTED UN~        6 2010-12-01 08:26:00      3.39
## 5 536365    84029E    RED WOOLLY~        6 2010-12-01 08:26:00      3.39
## # ... with 2 more variables: CustomerID <dbl>, Country <chr>

Argumen Anda: Menurut saya import yang lebih mudah digunakan adalah format RDS, karena bisa langsung di import tanpa harus menginstall package seperti formal excel. Dan juga menurut saya mengimport file rds lebih cepat dibandingkan file excel. (Di Rstudio saya seperti itu soalnya :D)

3 Tugas 2

Ubah nama variabel data tersebut agar lebih mudah dipelajari oleh pembaca.

names(Data1) <- c("No_Faktur",
                 "Kode_barang",
                 "Detail_Barang",
                 "Total",
                 "Tanggal_Faktur",
                 "Harga",
                 "ID_Pelanggan",
                 "Negara")
head(Data1, 5)
## # A tibble: 5 x 8
##   No_Faktur Kode_barang Detail_Barang Total Tanggal_Faktur      Harga
##   <chr>     <chr>       <chr>         <dbl> <dttm>              <dbl>
## 1 536365    85123A      WHITE HANGIN~     6 2010-12-01 08:26:00  2.55
## 2 536365    71053       WHITE METAL ~     6 2010-12-01 08:26:00  3.39
## 3 536365    84406B      CREAM CUPID ~     8 2010-12-01 08:26:00  2.75
## 4 536365    84029G      KNITTED UNIO~     6 2010-12-01 08:26:00  3.39
## 5 536365    84029E      RED WOOLLY H~     6 2010-12-01 08:26:00  3.39
## # ... with 2 more variables: ID_Pelanggan <dbl>, Negara <chr>

Argumen Anda: Saya mengubah semua nama variabel dari -> menjadi seperti ini :

* InvoiceNo   = No Faktur
* StockCode   = Kode Barang
* Description = Detail Barang
* Quantity    = Total
* InvoiceDate = Tanggal Faktur
* UnitPrice   = Harga
* CustomerID  = ID Pelanggan
* Country     = Negara

4 Tugas 3

Lakukan pemeriksaan struktur data untuk mengubah jenis kumpulan data (jika ada yang perlu diubah).

str(Data1)                            #Mengecek struktur data
## tibble [541,909 x 8] (S3: tbl_df/tbl/data.frame)
##  $ No_Faktur     : chr [1:541909] "536365" "536365" "536365" "536365" ...
##  $ Kode_barang   : chr [1:541909] "85123A" "71053" "84406B" "84029G" ...
##  $ Detail_Barang : chr [1:541909] "WHITE HANGING HEART T-LIGHT HOLDER" "WHITE METAL LANTERN" "CREAM CUPID HEARTS COAT HANGER" "KNITTED UNION FLAG HOT WATER BOTTLE" ...
##  $ Total         : num [1:541909] 6 6 8 6 6 2 6 6 6 32 ...
##  $ Tanggal_Faktur: POSIXct[1:541909], format: "2010-12-01 08:26:00" "2010-12-01 08:26:00" ...
##  $ Harga         : num [1:541909] 2.55 3.39 2.75 3.39 3.39 7.65 4.25 1.85 1.85 1.69 ...
##  $ ID_Pelanggan  : num [1:541909] 17850 17850 17850 17850 17850 ...
##  $ Negara        : chr [1:541909] "United Kingdom" "United Kingdom" "United Kingdom" "United Kingdom" ...
library(magrittr)
data.frame(
  No_Faktur      = Data1$No_Faktur  %>% unique() %>% length(),
  Kode_Barang    = Data1$Kode_barang %>% unique() %>% length(),
  Detail_Barang  = Data1$Detail_Barang %>% unique() %>% length(),
  Negara         = Data1$Negara      %>% unique() %>% length(),
  ID_Pelanggan   = Data1$ID_Pelanggan %>% unique() %>% length())
##   No_Faktur Kode_Barang Detail_Barang Negara ID_Pelanggan
## 1     25900        4070          4212     38         4373
Negara        <- as.factor(Data1$Negara)
Total         <- as.integer(Data1$Total)
ID_Pelanggan  <- as.integer(Data1$`ID Pelanggan`)
## Warning: Unknown or uninitialised column: `ID Pelanggan`.
head(Data1, 5)
## # A tibble: 5 x 8
##   No_Faktur Kode_barang Detail_Barang Total Tanggal_Faktur      Harga
##   <chr>     <chr>       <chr>         <dbl> <dttm>              <dbl>
## 1 536365    85123A      WHITE HANGIN~     6 2010-12-01 08:26:00  2.55
## 2 536365    71053       WHITE METAL ~     6 2010-12-01 08:26:00  3.39
## 3 536365    84406B      CREAM CUPID ~     8 2010-12-01 08:26:00  2.75
## 4 536365    84029G      KNITTED UNIO~     6 2010-12-01 08:26:00  3.39
## 5 536365    84029E      RED WOOLLY H~     6 2010-12-01 08:26:00  3.39
## # ... with 2 more variables: ID_Pelanggan <dbl>, Negara <chr>

Argumen Anda: Dari pengecekan struktur data diatas bisa diketahui variabel Negara merupakan tipe data karakter sehingga dapat diubah menjadi tipe faktor, kemudian ID Pelanggan diubah menjadi tipe karakter, dengan menggunakan fungsi as.factor dan as.integer.

5 Tugas 4

Pembersihan data atau disebut juga data scrubbing adalah proses menganalisis kualitas data dengan cara mengubah. Anda sebagai Manajer juga dapat memperbaiki atau menghapus data tersebut. Beberapa hal yang mungkin dilakukan dalam projek ini adalah:

5.1 Transaksi yang dibatalkan

Cancel_Order <- grep("C", Data1$No_Faktur)
length(Cancel_Order)
## [1] 9288
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
Cancel_Order <- Data1 %>% filter(grepl("C", Data1$No_Faktur)) 
Cancel_Order <- Data1 %>%
        filter(!grepl("C", Data1$No_Faktur))
Cancel_Order
## # A tibble: 532,621 x 8
##    No_Faktur Kode_barang Detail_Barang Total Tanggal_Faktur      Harga
##    <chr>     <chr>       <chr>         <dbl> <dttm>              <dbl>
##  1 536365    85123A      WHITE HANGIN~     6 2010-12-01 08:26:00  2.55
##  2 536365    71053       WHITE METAL ~     6 2010-12-01 08:26:00  3.39
##  3 536365    84406B      CREAM CUPID ~     8 2010-12-01 08:26:00  2.75
##  4 536365    84029G      KNITTED UNIO~     6 2010-12-01 08:26:00  3.39
##  5 536365    84029E      RED WOOLLY H~     6 2010-12-01 08:26:00  3.39
##  6 536365    22752       SET 7 BABUSH~     2 2010-12-01 08:26:00  7.65
##  7 536365    21730       GLASS STAR F~     6 2010-12-01 08:26:00  4.25
##  8 536366    22633       HAND WARMER ~     6 2010-12-01 08:28:00  1.85
##  9 536366    22632       HAND WARMER ~     6 2010-12-01 08:28:00  1.85
## 10 536367    84879       ASSORTED COL~    32 2010-12-01 08:34:00  1.69
## # ... with 532,611 more rows, and 2 more variables: ID_Pelanggan <dbl>,
## #   Negara <chr>

Argumen Anda: Transaksi yang perlu dihapus adalah transaksi yang Nomor Fakturnya dimulai dengan huruf C. Dan ada 9288 transaksi yang perlu kita batalkan/dihapuskan.

5.2 Faktur tidak valid

Invalid_Faktur <- Data1[nchar(Data1$No_Faktur)>6, ]
Invalid_Faktur
## # A tibble: 9,291 x 8
##    No_Faktur Kode_barang Detail_Barang Total Tanggal_Faktur       Harga
##    <chr>     <chr>       <chr>         <dbl> <dttm>               <dbl>
##  1 C536379   D           Discount         -1 2010-12-01 09:41:00 27.5  
##  2 C536383   35004C      SET OF 3 COL~    -1 2010-12-01 09:49:00  4.65 
##  3 C536391   22556       PLASTERS IN ~   -12 2010-12-01 10:24:00  1.65 
##  4 C536391   21984       PACK OF 12 P~   -24 2010-12-01 10:24:00  0.290
##  5 C536391   21983       PACK OF 12 B~   -24 2010-12-01 10:24:00  0.290
##  6 C536391   21980       PACK OF 12 R~   -24 2010-12-01 10:24:00  0.290
##  7 C536391   21484       CHICK GREY H~   -12 2010-12-01 10:24:00  3.45 
##  8 C536391   22557       PLASTERS IN ~   -12 2010-12-01 10:24:00  1.65 
##  9 C536391   22553       PLASTERS IN ~   -24 2010-12-01 10:24:00  1.65 
## 10 C536506   22960       JAM MAKING S~    -6 2010-12-01 12:38:00  4.25 
## # ... with 9,281 more rows, and 2 more variables: ID_Pelanggan <dbl>,
## #   Negara <chr>
Data1 <- Data1[!nchar(Data1$No_Faktur)>6, ]

Argumen Anda: Faktur yang valid adalah faktur yang terdiri dari 6 angka. Diatas menunjukkan faktur yang terdiri lebih dari 6 angka = 3 faktur. Itu merupakan data yang tidak valid dan perlu dihapus.

5.3 Kuantitas tidak valid

library(magrittr)
Invalid_Quantity<- Data1[Data1$Total<=0,]
nrow(Invalid_Quantity)
## [1] 1336
head(Invalid_Quantity, 5)
## # A tibble: 5 x 8
##   No_Faktur Kode_barang Detail_Barang Total Tanggal_Faktur      Harga
##   <chr>     <chr>       <chr>         <dbl> <dttm>              <dbl>
## 1 536589    21777       <NA>            -10 2010-12-01 16:50:00     0
## 2 536764    84952C      <NA>            -38 2010-12-02 14:42:00     0
## 3 536996    22712       <NA>            -20 2010-12-03 15:30:00     0
## 4 536997    22028       <NA>            -20 2010-12-03 15:30:00     0
## 5 536998    85067       <NA>             -6 2010-12-03 15:30:00     0
## # ... with 2 more variables: ID_Pelanggan <dbl>, Negara <chr>
library(magrittr)
Invalid_Quantity <- Data1 %>%
        filter(Data1$Total > 0)
Invalid_Quantity
## # A tibble: 531,282 x 8
##    No_Faktur Kode_barang Detail_Barang Total Tanggal_Faktur      Harga
##    <chr>     <chr>       <chr>         <dbl> <dttm>              <dbl>
##  1 536365    85123A      WHITE HANGIN~     6 2010-12-01 08:26:00  2.55
##  2 536365    71053       WHITE METAL ~     6 2010-12-01 08:26:00  3.39
##  3 536365    84406B      CREAM CUPID ~     8 2010-12-01 08:26:00  2.75
##  4 536365    84029G      KNITTED UNIO~     6 2010-12-01 08:26:00  3.39
##  5 536365    84029E      RED WOOLLY H~     6 2010-12-01 08:26:00  3.39
##  6 536365    22752       SET 7 BABUSH~     2 2010-12-01 08:26:00  7.65
##  7 536365    21730       GLASS STAR F~     6 2010-12-01 08:26:00  4.25
##  8 536366    22633       HAND WARMER ~     6 2010-12-01 08:28:00  1.85
##  9 536366    22632       HAND WARMER ~     6 2010-12-01 08:28:00  1.85
## 10 536367    84879       ASSORTED COL~    32 2010-12-01 08:34:00  1.69
## # ... with 531,272 more rows, and 2 more variables: ID_Pelanggan <dbl>,
## #   Negara <chr>

Argumen Anda: Ada 1336 transaksi yang memiliki total barang dari <=0, yaitu minus. Karena tidak valid, transaksi tersebut kita hapuskan.

5.4 Harga Satuan Tidak Valid

Data1 %>% 
  filter(Harga <= 0) %>% 
  nrow()
## [1] 2515
Invalid_Price <- Data1 %>% 
  filter(Harga > 0)
Invalid_Price
## # A tibble: 530,103 x 8
##    No_Faktur Kode_barang Detail_Barang Total Tanggal_Faktur      Harga
##    <chr>     <chr>       <chr>         <dbl> <dttm>              <dbl>
##  1 536365    85123A      WHITE HANGIN~     6 2010-12-01 08:26:00  2.55
##  2 536365    71053       WHITE METAL ~     6 2010-12-01 08:26:00  3.39
##  3 536365    84406B      CREAM CUPID ~     8 2010-12-01 08:26:00  2.75
##  4 536365    84029G      KNITTED UNIO~     6 2010-12-01 08:26:00  3.39
##  5 536365    84029E      RED WOOLLY H~     6 2010-12-01 08:26:00  3.39
##  6 536365    22752       SET 7 BABUSH~     2 2010-12-01 08:26:00  7.65
##  7 536365    21730       GLASS STAR F~     6 2010-12-01 08:26:00  4.25
##  8 536366    22633       HAND WARMER ~     6 2010-12-01 08:28:00  1.85
##  9 536366    22632       HAND WARMER ~     6 2010-12-01 08:28:00  1.85
## 10 536367    84879       ASSORTED COL~    32 2010-12-01 08:34:00  1.69
## # ... with 530,093 more rows, and 2 more variables: ID_Pelanggan <dbl>,
## #   Negara <chr>

Argumen Anda: Ada 2517 harga satuan barang yang tidak valid, sehingga harus di hapuskan.

5.5 Produk Tidak Valid

Invalid_Produk <- Data1 %>% 
        filter(nchar(Kode_barang) >=5 )

Data1 %>% filter(nchar(Kode_barang) > 6) %>%
         select(Kode_barang, Detail_Barang) %>%
         distinct() %>%
         arrange(Kode_barang)
## # A tibble: 33 x 2
##    Kode_barang  Detail_Barang             
##    <chr>        <chr>                     
##  1 15056bl      EDWARDIAN PARASOL BLACK   
##  2 15056BL      EDWARDIAN PARASOL BLACK   
##  3 79323GR      Unsaleable, destroyed.    
##  4 79323LP      Unsaleable, destroyed.    
##  5 AMAZONFEE    AMAZON FEE                
##  6 BANK CHARGES Bank Charges              
##  7 DCGS0003     BOXED GLASS ASHTRAY       
##  8 DCGS0003     ebay                      
##  9 DCGS0004     HAYNES CAMPER SHOULDER BAG
## 10 DCGS0055     <NA>                      
## # ... with 23 more rows
Invalid_Produk <- Data1 %>%
        filter(!Kode_barang %in% c("AMAZONFEE", "BANK CHARGES", 
                                   "gift_0001_10", "gift_0001_20", 
                                   "gift_0001_30", "gift_0001_40", 
                                   "gift_0001_50", "DCGSSBOY",
                                   "DCGSSGIRL"))
Invalid_Produk
## # A tibble: 532,546 x 8
##    No_Faktur Kode_barang Detail_Barang Total Tanggal_Faktur      Harga
##    <chr>     <chr>       <chr>         <dbl> <dttm>              <dbl>
##  1 536365    85123A      WHITE HANGIN~     6 2010-12-01 08:26:00  2.55
##  2 536365    71053       WHITE METAL ~     6 2010-12-01 08:26:00  3.39
##  3 536365    84406B      CREAM CUPID ~     8 2010-12-01 08:26:00  2.75
##  4 536365    84029G      KNITTED UNIO~     6 2010-12-01 08:26:00  3.39
##  5 536365    84029E      RED WOOLLY H~     6 2010-12-01 08:26:00  3.39
##  6 536365    22752       SET 7 BABUSH~     2 2010-12-01 08:26:00  7.65
##  7 536365    21730       GLASS STAR F~     6 2010-12-01 08:26:00  4.25
##  8 536366    22633       HAND WARMER ~     6 2010-12-01 08:28:00  1.85
##  9 536366    22632       HAND WARMER ~     6 2010-12-01 08:28:00  1.85
## 10 536367    84879       ASSORTED COL~    32 2010-12-01 08:34:00  1.69
## # ... with 532,536 more rows, and 2 more variables: ID_Pelanggan <dbl>,
## #   Negara <chr>

Argumen Anda: Setelah di filter, ternyata ada barang yang dijual diluar kode perusahaan, yaitu :

 * Amazonfee
 * Bank Charges
 * gift_0001_10
 * gift_0001_20
 * gift_0001_30
 * gift_0001_40
 * gift_0001_50
 * DCGSSBOY
 * DCGSSGIRL

Karena tidak valid, maka produk tersebut perlu dihapuskan.

5.6 Deskripsi Ganda & Stok

data.frame(
  Kode_Barang    = Data1$Kode_barang %>% unique() %>% length(),
  Detail_Barang  = Data1$Detail_Barang %>% unique() %>% length(),
  Double_Stock   = Data1 %>%
                        select(Kode_barang, Detail_Barang) %>%
                        distinct() %>%
                        nrow())
##   Kode_Barang Detail_Barang Double_Stock
## 1        4058          4195         5732

Terlihat bahwa jumlah barangnya berbeda, maka ada data yang double.

Kode_Barang <- Data1 %>%
               arrange(desc(Tanggal_Faktur)) %>%
               select(Kode_barang,Detail_Barang)%>%
               distinct()

Kode        <- Kode_Barang %>%
               group_by(Kode_barang)%>%
               slice(1)

Data        <- Data1 %>%
               select(-Detail_Barang) %>%
               left_join(Kode, by="Kode_barang")
data.frame(
  Kode_Barang = Data1$Kode_barang %>% unique() %>% length(),
  Detail_Barang = Data1$Detail_Barang %>% unique() %>% length(),
  Double_Stock = Data1 %>% 
    select(Kode_barang, Detail_Barang) %>% 
    distinct() %>% 
    nrow())
##   Kode_Barang Detail_Barang Double_Stock
## 1        4058          4195         5732
Nama_Barang <- Data1 %>%
               arrange(desc(Tanggal_Faktur)) %>%
               select(Kode_barang, Detail_Barang) %>%
               distinct()

Nama        <- Nama_Barang %>%
               group_by(Detail_Barang) %>%
               slice(1)

Data        <- Data1 %>% 
               select(-Kode_barang) %>%
               left_join(Nama, by="Detail_Barang")
data.frame(
  Kode_Barang   = Data1$Kode_barang %>% unique() %>% length(),
  Detail_Barang = Data1$Detail_Barang %>% unique() %>% length(),
  Double_Stock  = Data1 %>% 
    select(Kode_barang, Detail_Barang) %>% 
    distinct() %>% 
    nrow())
##   Kode_Barang Detail_Barang Double_Stock
## 1        4058          4195         5732

Argumen Anda: Setiap barang, memiliki kodenya tersendiri dan seharusnya tidak ada double kode atau kode ganda. setelah di check terlihat bahwa ada beberapa barang yang kodenya sama jadi harus dibersihkan/dihapuskan.

5.7 Status Tidak Valid

Country <- Data1 %>% 
  arrange(desc(Tanggal_Faktur, ID_Pelanggan)) %>% 
  select(ID_Pelanggan, Negara) %>% 
  group_by(ID_Pelanggan) %>% 
  slice(1)

Data <- Data1 %>% 
  select(-Negara) %>%
  left_join(Country, by = "ID_Pelanggan")

data_frame(
  ID_Pelanggan = Data %>% 
    select(ID_Pelanggan) %>% 
    distinct() %>% 
    nrow(),
  Negara = Data %>% 
    select(ID_Pelanggan,Negara) %>% 
    distinct() %>% 
    nrow())
## Warning: `data_frame()` is deprecated as of tibble 1.1.0.
## Please use `tibble()` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_warnings()` to see where this warning was generated.
## # A tibble: 1 x 2
##   ID_Pelanggan Negara
##          <int>  <int>
## 1         4340   4340

Argumen Anda: Setiap pelanggan cukup memiliki 1 kewarganegaraan saja, jika lebih dari 1 negara maka itu tidak valid dan perlu dihapuskan.

5.8 Cut-off Tanggal Pengamatan

library(lubridate)
## 
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union
Data <- Data1 %>% filter(ymd(as.Date(Data1$Tanggal_Faktur)) 
                         < ymd("2011-12-1"))
Data
## # A tibble: 507,453 x 8
##    No_Faktur Kode_barang Detail_Barang Total Tanggal_Faktur      Harga
##    <chr>     <chr>       <chr>         <dbl> <dttm>              <dbl>
##  1 536365    85123A      WHITE HANGIN~     6 2010-12-01 08:26:00  2.55
##  2 536365    71053       WHITE METAL ~     6 2010-12-01 08:26:00  3.39
##  3 536365    84406B      CREAM CUPID ~     8 2010-12-01 08:26:00  2.75
##  4 536365    84029G      KNITTED UNIO~     6 2010-12-01 08:26:00  3.39
##  5 536365    84029E      RED WOOLLY H~     6 2010-12-01 08:26:00  3.39
##  6 536365    22752       SET 7 BABUSH~     2 2010-12-01 08:26:00  7.65
##  7 536365    21730       GLASS STAR F~     6 2010-12-01 08:26:00  4.25
##  8 536366    22633       HAND WARMER ~     6 2010-12-01 08:28:00  1.85
##  9 536366    22632       HAND WARMER ~     6 2010-12-01 08:28:00  1.85
## 10 536367    84879       ASSORTED COL~    32 2010-12-01 08:34:00  1.69
## # ... with 507,443 more rows, and 2 more variables: ID_Pelanggan <dbl>,
## #   Negara <chr>

Argumen Anda: Karena data pada bulan Desember 2011 adalah tidak lengkap, maka data tersebut kita hapus dan transaksi yang digunakan adalah transaksi dari Desember 2010 - November 2011 atau data lengkap selama 1 tahun.

5.9 Data Duplikat

data.frame(
  Total_Data = Data1 %>% nrow(),
  Data_Double = Data1 %>% distinct() %>% nrow())
##   Total_Data Data_Double
## 1     532618      527387
Data <- Data1 %>% distinct()
Data
## # A tibble: 527,387 x 8
##    No_Faktur Kode_barang Detail_Barang Total Tanggal_Faktur      Harga
##    <chr>     <chr>       <chr>         <dbl> <dttm>              <dbl>
##  1 536365    85123A      WHITE HANGIN~     6 2010-12-01 08:26:00  2.55
##  2 536365    71053       WHITE METAL ~     6 2010-12-01 08:26:00  3.39
##  3 536365    84406B      CREAM CUPID ~     8 2010-12-01 08:26:00  2.75
##  4 536365    84029G      KNITTED UNIO~     6 2010-12-01 08:26:00  3.39
##  5 536365    84029E      RED WOOLLY H~     6 2010-12-01 08:26:00  3.39
##  6 536365    22752       SET 7 BABUSH~     2 2010-12-01 08:26:00  7.65
##  7 536365    21730       GLASS STAR F~     6 2010-12-01 08:26:00  4.25
##  8 536366    22633       HAND WARMER ~     6 2010-12-01 08:28:00  1.85
##  9 536366    22632       HAND WARMER ~     6 2010-12-01 08:28:00  1.85
## 10 536367    84879       ASSORTED COL~    32 2010-12-01 08:34:00  1.69
## # ... with 527,377 more rows, and 2 more variables: ID_Pelanggan <dbl>,
## #   Negara <chr>

Argumen Anda: Dari 541,909 Data sudah dihapuskan data yang double sehingga menjadi 536,639 Data.

5.10 Fitur Ekstraksi

Data <- Data1 %>% 
        mutate(Total_Bayar = Total * Harga) %>% 
        select(No_Faktur, Tanggal_Faktur, ID_Pelanggan, Negara, 
               Kode_barang, Detail_Barang, Total, Harga, 
               Total_Bayar)
Data
## # A tibble: 532,618 x 9
##    No_Faktur Tanggal_Faktur      ID_Pelanggan Negara Kode_barang Detail_Barang
##    <chr>     <dttm>                     <dbl> <chr>  <chr>       <chr>        
##  1 536365    2010-12-01 08:26:00        17850 Unite~ 85123A      WHITE HANGIN~
##  2 536365    2010-12-01 08:26:00        17850 Unite~ 71053       WHITE METAL ~
##  3 536365    2010-12-01 08:26:00        17850 Unite~ 84406B      CREAM CUPID ~
##  4 536365    2010-12-01 08:26:00        17850 Unite~ 84029G      KNITTED UNIO~
##  5 536365    2010-12-01 08:26:00        17850 Unite~ 84029E      RED WOOLLY H~
##  6 536365    2010-12-01 08:26:00        17850 Unite~ 22752       SET 7 BABUSH~
##  7 536365    2010-12-01 08:26:00        17850 Unite~ 21730       GLASS STAR F~
##  8 536366    2010-12-01 08:28:00        17850 Unite~ 22633       HAND WARMER ~
##  9 536366    2010-12-01 08:28:00        17850 Unite~ 22632       HAND WARMER ~
## 10 536367    2010-12-01 08:34:00        13047 Unite~ 84879       ASSORTED COL~
## # ... with 532,608 more rows, and 3 more variables: Total <dbl>, Harga <dbl>,
## #   Total_Bayar <dbl>

Argumen Anda: Fitur Ekstraksi digunakan untuk menambah variabel baru, contohnya yang kita buat Total_Bayar, dihitung hari hasil \(Total Barang*Harga\).

5.11 Nilai yang hilang

colSums(is.na(Data1))
##      No_Faktur    Kode_barang  Detail_Barang          Total Tanggal_Faktur 
##              0              0           1454              0              0 
##          Harga   ID_Pelanggan         Negara 
##              0         134694              0
Data <- na.omit(Data1)
Data
## # A tibble: 397,924 x 8
##    No_Faktur Kode_barang Detail_Barang Total Tanggal_Faktur      Harga
##    <chr>     <chr>       <chr>         <dbl> <dttm>              <dbl>
##  1 536365    85123A      WHITE HANGIN~     6 2010-12-01 08:26:00  2.55
##  2 536365    71053       WHITE METAL ~     6 2010-12-01 08:26:00  3.39
##  3 536365    84406B      CREAM CUPID ~     8 2010-12-01 08:26:00  2.75
##  4 536365    84029G      KNITTED UNIO~     6 2010-12-01 08:26:00  3.39
##  5 536365    84029E      RED WOOLLY H~     6 2010-12-01 08:26:00  3.39
##  6 536365    22752       SET 7 BABUSH~     2 2010-12-01 08:26:00  7.65
##  7 536365    21730       GLASS STAR F~     6 2010-12-01 08:26:00  4.25
##  8 536366    22633       HAND WARMER ~     6 2010-12-01 08:28:00  1.85
##  9 536366    22632       HAND WARMER ~     6 2010-12-01 08:28:00  1.85
## 10 536367    84879       ASSORTED COL~    32 2010-12-01 08:34:00  1.69
## # ... with 397,914 more rows, and 2 more variables: ID_Pelanggan <dbl>,
## #   Negara <chr>

Argumen Anda: Mencari data yang hilang menggunakan is.na function, karena ID Pelanggan dengan nomor 135080 tidak valid, data tersebut dihapuskan.

6 Tugas 5

Simpan data yang sudah Anda bersihkan ke dalam folder dalam format .json atau .xml atau .rds.

saveRDS(Data1, "FixDataRetail.rds")

7 Tugas 6

Import data yang sudah anda simpan pada Tugas 5, silahkan pilih salah satau jenis file saja. Kemudian, lakukan Analisis Data Eksplorasi dengan menggunakan Visualisasi yang telah Anda pelajari untuk menjawab setiap pertanyaan berikut:

DATA <- readRDS("FixDataRetail.rds")
head(DATA, 5)
## # A tibble: 5 x 8
##   No_Faktur Kode_barang Detail_Barang Total Tanggal_Faktur      Harga
##   <chr>     <chr>       <chr>         <dbl> <dttm>              <dbl>
## 1 536365    85123A      WHITE HANGIN~     6 2010-12-01 08:26:00  2.55
## 2 536365    71053       WHITE METAL ~     6 2010-12-01 08:26:00  3.39
## 3 536365    84406B      CREAM CUPID ~     8 2010-12-01 08:26:00  2.75
## 4 536365    84029G      KNITTED UNIO~     6 2010-12-01 08:26:00  3.39
## 5 536365    84029E      RED WOOLLY H~     6 2010-12-01 08:26:00  3.39
## # ... with 2 more variables: ID_Pelanggan <dbl>, Negara <chr>

• Gunakan Bar-Chart untuk memperlihatkan berapa banyak pelanggan yang melakukan transaksi setiap bulan?

library(ggplot2)
library(zoo)
## Warning: package 'zoo' was built under R version 4.0.3
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
library(scales)

Monthly_Cust <- DATA %>%
                        select(Tanggal_Faktur, ID_Pelanggan) %>%
                        mutate(Date = format(Tanggal_Faktur, format = "%y-%b-1"),
                               Date = ymd(Date))  %>%
                        select(ID_Pelanggan, Date) %>%
                        distinct() %>%
                        group_by(Date) %>%
                        summarise(Total_Cust = n()) %>%
                        ungroup()
## `summarise()` ungrouping output (override with `.groups` argument)
Monthly_Cust
## # A tibble: 13 x 2
##    Date       Total_Cust
##    <date>          <int>
##  1 2010-12-01        886
##  2 2011-01-01        742
##  3 2011-02-01        759
##  4 2011-03-01        975
##  5 2011-04-01        857
##  6 2011-05-01       1057
##  7 2011-06-01        992
##  8 2011-07-01        950
##  9 2011-08-01        936
## 10 2011-09-01       1267
## 11 2011-10-01       1365
## 12 2011-11-01       1666
## 13 2011-12-01        616
library(ggplot2)                                  
library(scales)

ggplot(Monthly_Cust,
       aes(x = Date, y = Total_Cust)) +
  geom_bar(fill = rainbow(13), 
           color="black", 
           stat= "identity",
           width = 14) +
  theme_minimal() +
  geom_text(aes(label = Total_Cust),
            vjust = -0.35) +
  labs( x = "Month",
        y = "Customer",
        title = "Total Customer Monthly") + 
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  scale_x_date(breaks = date_breaks('1 month'),
               labels = date_format("%b %y"))

Argumen Anda: Jumlah pelanggan terbanyak terdapat pada bulan November 2011 dengan jumlag pelanggan mencapai 1712 customer.

• Gunakan interaktif Line-Chart untuk memperlihatkan bagaimana pertumbuhan pelanggan baru setiap bulan?

library(glue)
## 
## Attaching package: 'glue'
## The following object is masked from 'package:dplyr':
## 
##     collapse
library(plotly)
## Warning: package 'plotly' was built under R version 4.0.3
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
New_Cust <- DATA %>%
                   group_by(ID_Pelanggan) %>%
                   summarise(Start = min(Tanggal_Faktur)) %>%
                   ungroup() %>%
                  mutate(ym = format(Start, format = "%y-%m-1"),
                         ym = ymd(ym)) %>%
                   group_by(ym) %>%
                   summarise(Customer = n()) %>%
                   ungroup() %>%
                  mutate(popup = glue("Bulan : {ym}
                                       Customer : {Customer}"))
## `summarise()` ungrouping output (override with `.groups` argument)
## `summarise()` ungrouping output (override with `.groups` argument)
Graphs <- New_Cust %>%
  ggplot(aes(x = ym,
             y = Customer))+
  geom_line(size = 1, colour="black") +
  geom_point(size = 2.5, aes(text = popup), colour = "white")+
  labs( title = "New Customer Monthly",
        x = "Month",
        y = "Customer")+
  scale_x_date(breaks = date_breaks(width = "1 month"),
               labels = date_format("%b %y"))
## Warning: Ignoring unknown aesthetics: text
ggplotly(Graphs, tooltip="text") %>%
           config(displayModeBar =  T, scrollzoom = F)
## Warning: 'config' objects don't have these attributes: 'scrollzoom'
## Valid attributes include:
## 'staticPlot', 'plotlyServerURL', 'editable', 'edits', 'autosizable', 'responsive', 'fillFrame', 'frameMargins', 'scrollZoom', 'doubleClick', 'doubleClickDelay', 'showAxisDragHandles', 'showAxisRangeEntryBoxes', 'showTips', 'showLink', 'linkText', 'sendData', 'showSources', 'displayModeBar', 'showSendToCloud', 'showEditInChartStudio', 'modeBarButtonsToRemove', 'modeBarButtonsToAdd', 'modeBarButtons', 'toImageButtonOptions', 'displaylogo', 'watermark', 'plotGlPixelRatio', 'setBackground', 'topojsonURL', 'mapboxAccessToken', 'logging', 'notifyOnLogging', 'queueLength', 'globalTransforms', 'locale', 'locales'

Argumen Anda: Dari grafik jumlah pelanggan setiap bulan, diketahui jumlah pelanggan terendah berada dibulan Agustus 2011 = 167 Customer. Jumlah pelanggan tertinggi berada dibulan Desember 2010 = 949 Customer.

• Gunakan Radar-charts untuk menganalisis Waktu pemesanan yang terbaru dalam (bulanan, harian, dan per-jam)

# Monthly
Monthly <- DATA %>% select(Tanggal_Faktur, No_Faktur) %>% 
  distinct() %>%
  mutate(Month = month(Tanggal_Faktur),
         Day = day(Tanggal_Faktur)) %>% 
  group_by(Month, Day) %>% 
  summarise(Total = n()) %>% 
  ungroup() %>% 
  group_by(Day) %>% 
  summarise(Monthly_Avg = as.integer(median(Total))) %>% 
  ungroup() %>% 
  mutate(popup = glue("Date : {Day}
                       Total Transaction: {Monthly_Avg}")) 
## `summarise()` regrouping output by 'Month' (override with `.groups` argument)
## `summarise()` ungrouping output (override with `.groups` argument)
Monthly %>% 
  ggplot(aes(x=as.factor(Day), y = Monthly_Avg)) +
  geom_bar(stat="identity", aes(fill = Monthly_Avg),
           show.legend = FALSE)+
  labs(title = "Monthly Transaction",
    x = "Date", 
    y = NULL)+
  theme_minimal()+
  scale_fill_gradient(low = "#FFF8DC", high="#00008B")+
  theme(axis.title = element_blank(),
        legend.position = "none",
        plot.title = element_text(hjust = 0.5,size=12, face="bold"),
        plot.subtitle = element_text(hjust = 0.5,size=10),
        axis.text.y = element_blank(),
        axis.text.x=element_text(size=11, face="bold"))+
  coord_polar() -> Month

# Daily
Daily <- DATA %>% select(No_Faktur, Tanggal_Faktur) %>% 
  distinct() %>% 
  mutate(Month = month(Tanggal_Faktur),
         Day = wday(Tanggal_Faktur, week_start = getOption("lubridate.week.start", 1))) %>% 
  group_by(Month, Day) %>% 
  summarise(Total = n()) %>% 
  ungroup() %>% 
  group_by(Day) %>% 
  summarise(Daily_Avg = as.integer(median(Total))) %>% 
  ungroup() %>% 
  mutate(popup = glue("Day : {Day}
                     Total Transaction: {Daily_Avg}")) 
## `summarise()` regrouping output by 'Month' (override with `.groups` argument)
## `summarise()` ungrouping output (override with `.groups` argument)
Daily %>% 
    ggplot(aes(Day, Daily_Avg))+
    geom_bar(width = 1, stat="identity", show.legend = FALSE, aes(fill = Daily_Avg))+
    labs(
      title = "Daily Transaction",
      x = "Day", 
      y = NULL)+
    scale_x_continuous(breaks = c(1,2,3,4,5,6,7),
                       labels = c("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"))+
    theme_minimal()+
    scale_fill_gradient(low = "#adff2f", high="#006400")+
    theme(axis.title = element_blank(),
          legend.position = "none",
          plot.title = element_text(hjust = 0.5,size=12, face="bold"),
          plot.subtitle = element_text(hjust = 0.5,size=10),
          axis.text.y = element_blank(),
          axis.text.x=element_text(size=11, face="bold"))+
    coord_polar() -> Day

#Hour
 
Hours <- DATA %>% select(Tanggal_Faktur, No_Faktur) %>% 
  distinct() %>%
  mutate(Day = day(Tanggal_Faktur),
         Hour = hour(Tanggal_Faktur)) %>% 
  group_by(Day, Hour) %>% 
  summarise(Total = n()) %>% 
  ungroup() %>% 
  group_by(Hour) %>% 
  summarise(Hours_Avg = as.integer(median(Total))) %>% 
  ungroup() %>% 
  mutate(popup = glue("Hour of Day : {Hour}
                       Total Transaction: {Hours_Avg}")) 
## `summarise()` regrouping output by 'Day' (override with `.groups` argument)
## `summarise()` ungrouping output (override with `.groups` argument)
Range = data_frame(Hour = c(0:23))

data_frame(Hour = c(0:23)) %>% 
  left_join(Hours, by="Hour") %>%
  mutate(Hour = as.factor(Hour)) %>% 
  ggplot(aes(x = Hour, y = Hours_Avg))+
  geom_bar(stat="identity",show.legend = FALSE, aes(fill = Hours_Avg))+
  labs(title = "Transaction by Hours",
    x = "Hour", 
    y = NULL)+
  theme_minimal()+
  scale_fill_gradient(low = "#FFFF00", high="#FF4500")+
  theme(axis.title = element_blank(),
        legend.position = "none",
        plot.title = element_text(hjust = 0.5,size=12, face="bold"),
        plot.subtitle = element_text(hjust = 0.5,size=10),
        axis.text.y = element_blank(),
        axis.text.x=element_text(size=11, face="bold"))+
  coord_polar() -> Hour

gridExtra::grid.arrange(Month, Day, Hour, ncol = 3)
## Warning: Removed 9 rows containing missing values (position_stack).

Argumen Anda: Dari grafik diatas, semakin banyak transaksi yang terjadi, semakin gelap warna grafik potongannya. Untuk transaksi bulanan, Transaksi terjadi paling banyak di tanggal 28. Sedangkan untuk transaksi harian, paling banyak terjadi di hari Kamis. Dan untuk per-jam nya, transaksi terjadi paling banyak di jam 12 siang.

• Gunakan interaktif Bar-Chart untuk memperlihatkan berapa frekuensi transaksi setiap bulan?

Monthly <- DATA %>%
  select(Tanggal_Faktur, No_Faktur) %>% 
      distinct() %>% 
      mutate(ym = format(Tanggal_Faktur, format = "%y - %m - 1"),
             ym = ymd(ym)) %>% 
      group_by(ym) %>% 
      summarise(Total = n()) %>% 
      ungroup()
## `summarise()` ungrouping output (override with `.groups` argument)
Frequency <- plot_ly(Monthly, 
                x = ~ym, 
                y = ~Total, 
                type = 'bar',
                marker = list(color = rainbow(12),
                         line = list(color = "yellow",
                                     width = 1.5)))

Frequency <- Frequency %>% layout(title = "Monthly Frequency",
                xaxis = list(title = "Month",
                             type = "Date",
                             tickformat = "%b %y"),
                yaxis = list(title = "Total Transaction"))

Frequency
## Warning: `arrange_()` is deprecated as of dplyr 0.7.0.
## Please use `arrange()` instead.
## See vignette('programming') for more help
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_warnings()` to see where this warning was generated.

Argumen Anda: Total frekuensi transaksi yang tertinggi berada dibulan November 2011 = 3465 Transaksi.

• Gunakan interaktif Bar-Chart yang horizontal untuk memperlihatkan 10 teratas dari produk terpopuler berdasarkan frekuensi transaksinya!

library(magrittr)
Most_Frequency <- DATA %>% 
                  group_by(Kode_barang, Detail_Barang) %>% 
                  summarise(Freq = n()) %>% 
                  ungroup() %>% 
                  arrange(desc(Freq)) %>%
                  head(10) %>%
                  mutate(Name = as.factor(Detail_Barang),
                         Name = reorder(Name, Freq)) %>% 
                  ggplot(aes(x = Name, 
                             y = Freq))+
                  geom_bar(stat = "identity", 
                           aes(fill= Name, text= Freq), 
                           show.legend = FALSE)+
                  labs(title = "Most Popular Product",
                       x=NULL,
                       y=NULL) +
                  coord_flip()
## `summarise()` regrouping output by 'Kode_barang' (override with `.groups` argument)
## Warning: Ignoring unknown aesthetics: text
ggplotly(Most_Frequency, tooltip="text") %>% 
  layout(showlegend=FALSE) %>% 
  config(displayModeBar = T, scrollzoom = T)
## Warning: 'config' objects don't have these attributes: 'scrollzoom'
## Valid attributes include:
## 'staticPlot', 'plotlyServerURL', 'editable', 'edits', 'autosizable', 'responsive', 'fillFrame', 'frameMargins', 'scrollZoom', 'doubleClick', 'doubleClickDelay', 'showAxisDragHandles', 'showAxisRangeEntryBoxes', 'showTips', 'showLink', 'linkText', 'sendData', 'showSources', 'displayModeBar', 'showSendToCloud', 'showEditInChartStudio', 'modeBarButtonsToRemove', 'modeBarButtonsToAdd', 'modeBarButtons', 'toImageButtonOptions', 'displaylogo', 'watermark', 'plotGlPixelRatio', 'setBackground', 'topojsonURL', 'mapboxAccessToken', 'logging', 'notifyOnLogging', 'queueLength', 'globalTransforms', 'locale', 'locales'

Argumen Anda: 10 Produk Terpopuler diatas dengan urutan pertama dipegang oleh Cream Hanging Heart T-Light Holder sebanyak 2313 Produk.

• Gunakan interaktif Bar-Chart yang horizontal untuk memperlihatkan 10 produk paling populer berdasarkan jumlah pesanan!

The_Most <- DATA %>% 
                    group_by(Kode_barang, Detail_Barang) %>% 
                    summarise(TotalQ = sum(Total)) %>% 
                    ungroup() %>% 
                    arrange(desc(TotalQ)) %>% 
                    head(10) %>%
                    mutate(Name = as.factor(Detail_Barang),
                           Name = reorder(Name, TotalQ))
## `summarise()` regrouping output by 'Kode_barang' (override with `.groups` argument)
Most_Quantity <- plot_ly(The_Most, 
                x = ~TotalQ, 
                y = ~Name, 
                type = 'bar',
                marker = list(color = rainbow(12),
                         line = list(color = "white",
                                     width = 1.5)),
                orientation = "h")

Most_Quantity <- Most_Quantity %>% 
  layout(title = "The Most Populer Product Quantity",
                xaxis = list(title = ""),
                yaxis = list(title = ""))
Most_Quantity

Argumen Anda: Grafik diatas menunjukkan 10 total produk terpopuler yang dijual selama 1 tahun (Desember 2010 - November 2011).

• Gunakan interaktif Bar-Chart yang horizontal untuk memperlihatkan 10 produk paling populer menurut total pelanggan!

Most_Customers <- DATA %>%
  select(ID_Pelanggan, Kode_barang, Detail_Barang) %>% 
  distinct() %>% 
  group_by(Kode_barang, Detail_Barang) %>% 
  summarise(TotalCust = n()) %>% 
  ungroup() %>% 
  arrange(desc(TotalCust)) %>% 
  head(10) %>% 
  mutate(Desc = as.factor(Detail_Barang),
         Desc = reorder(Desc, TotalCust)) %>% 

ggplot(aes(x = Desc, y = TotalCust))+
  geom_bar(stat="identity", aes(fill = Desc, 
                                text = TotalCust), 
           show.legend = FALSE)+
  labs(title="The Most Product by Customer",
        x=NULL,
        y=NULL)+
  coord_flip()
## `summarise()` regrouping output by 'Kode_barang' (override with `.groups` argument)
## Warning: Ignoring unknown aesthetics: text
ggplotly(Most_Customers, tooltip = "text") %>% 
  layout(showlegend=FALSE) %>% 
   config(displayModeBar = T, scrollzoom = F)
## Warning: 'config' objects don't have these attributes: 'scrollzoom'
## Valid attributes include:
## 'staticPlot', 'plotlyServerURL', 'editable', 'edits', 'autosizable', 'responsive', 'fillFrame', 'frameMargins', 'scrollZoom', 'doubleClick', 'doubleClickDelay', 'showAxisDragHandles', 'showAxisRangeEntryBoxes', 'showTips', 'showLink', 'linkText', 'sendData', 'showSources', 'displayModeBar', 'showSendToCloud', 'showEditInChartStudio', 'modeBarButtonsToRemove', 'modeBarButtonsToAdd', 'modeBarButtons', 'toImageButtonOptions', 'displaylogo', 'watermark', 'plotGlPixelRatio', 'setBackground', 'topojsonURL', 'mapboxAccessToken', 'logging', 'notifyOnLogging', 'queueLength', 'globalTransforms', 'locale', 'locales'

Argumen Anda: Grafik diatas menunjukkan bahwa produk yang paling disukai pelanggan adalah Regency Cakestand 3 Tier dengan total 888 Produk.

• Gunakan interaktif Bar-Chart yang horizontal untuk memperlihatkan 10 produk paling populer berdasarkan Nilai Mata uang!

TheMostPrice <- DATA %>% 
                  group_by(Kode_barang, Detail_Barang) %>% 
                  summarise(TotalP = sum(Harga)) %>% 
                  ungroup() %>% 
                  arrange(desc(TotalP)) %>% 
                  head(10) %>%
                  mutate(Name = as.factor(Detail_Barang),
                         Name = reorder(Name, TotalP))
## `summarise()` regrouping output by 'Kode_barang' (override with `.groups` argument)
Most_Price <- plot_ly(TheMostPrice, 
                      x = ~TotalP,
                      y = ~Name, 
                      type = 'bar',
                marker = list(color = rainbow(12),
                         line = list(color = "black",
                                     width = 1.5)),
                orientation="h")
Most_Price <- Most_Price %>% layout(title = "The Most Product by Price",
                xaxis = list(title = ""),
                yaxis = list(title = ""))
Most_Price

Argumen Anda: Dari grafik diatas product terpopuler berdasarkan harga yang paling tertinggi adalah Amazon Fee.

• Lakukan Analisa dengan menggunakan Time Series apakah penjualan berdasarkan Nilai Mata Uang Meningkat-Menurun?

Monthly_Income <- DATA %>%
                    group_by(Detail_Barang, Harga) %>%
                    summarise(Start = min(Tanggal_Faktur)) %>%
                    ungroup() %>%
                    mutate(ym = format(Start, format = "%y-%m-1"),
                           ym = ymd(ym)) %>%
                    group_by(ym) %>%
                    summarise(Income = sum(Harga)) %>%
                    ungroup() %>%
                      mutate(popup = glue("Month : {ym}
                                           Income : {Income}"))
## `summarise()` regrouping output by 'Detail_Barang' (override with `.groups` argument)
## `summarise()` ungrouping output (override with `.groups` argument)
Graphs <- Monthly_Income %>%
  ggplot(aes(x = ym,
             y = Income,
             group = 1)) +
  geom_line(size = 1, colour = "black") +
  labs( title = "Monthly Income",
        x = "Month",
        y = "Income")+
  scale_x_date(breaks = date_breaks(width = "1 month"),
               labels = date_format("%b %y")) +
  scale_y_continuous(label = scales::format_format(big.mark = ",",
                     decimal.mark = ".",
                     scientific = F))

Daily_Income <- DATA %>%
                   group_by(Detail_Barang, Harga) %>%
                   summarise(Start = min(Tanggal_Faktur)) %>%
                   ungroup() %>%
                   mutate(ym = format(Start, format = "%y-%m-%d"),
                          ym = ymd(ym)) %>%
                   group_by(ym) %>%
                   summarise(Income = sum(Harga)) %>%
                   ungroup() %>%
                  mutate(popup = glue("Month : {ym}
                                       Income : {Income}"))
## `summarise()` regrouping output by 'Detail_Barang' (override with `.groups` argument)
## `summarise()` ungrouping output (override with `.groups` argument)
Graphs2 <- Daily_Income %>%
  ggplot(aes(x = ym,
             y = Income,
             group = 1)) +
  geom_line(size = 1, colour = "red") +
  labs(title = "Daily & Monthly Income",
        x = "Month",
        y = "Income")+
  scale_x_date(breaks = date_breaks(width = "1 month"),
               labels = date_format("%b %y")) +
  scale_y_continuous(label = scales::format_format(big.mark = ",",
                     decimal.mark = ".",
                     scientific = F))

hasil <- gridExtra::grid.arrange(Graphs, Graphs2, ncol = 1)

Argumen Anda: Time-Series diatas memperlihatkan perubahan pendapatan yang dihasilkan perusahaan selama 1 tahun. Dapat dilihat bahwa grafik pendapatannya naik - turun. Dan memiliki pendapatan tertinggi pada bulan Juni 2011.

• Gunakan Tree-Map untuk memvisualisasikan sebagian besar Konsumen menurut Negara?

library(ggplot2)                                     
library(treemapify)                                  
## Warning: package 'treemapify' was built under R version 4.0.3
library(scales)

Graphs <- DATA %>%
  select(ID_Pelanggan, Negara) %>% 
  distinct() %>%
  group_by(Negara) %>%
  summarise(Customer = n())
## `summarise()` ungrouping output (override with `.groups` argument)
Graphs %>%
  ggplot(aes(fill = Negara,
             area = Customer,
            label = Negara))+
  geom_treemap() + 
  geom_treemap_text(colour="black",
                    place = "centre")+
  labs(title = "The Customer Citizen")

Argumen Anda: Sebagian besar pelanggan berasal dari negara United Kingdom.

Graphs2 <- DATA %>%
  select(Harga, Negara) %>% 
  distinct() %>%
  group_by(Negara) %>%
  summarise(Transaction = n())
## `summarise()` ungrouping output (override with `.groups` argument)
Graphs2 %>%
  ggplot(aes(fill  = Negara,
             area  = Transaction,
             label = Negara))+
  geom_treemap() + 
  geom_treemap_text(colour="black",
                    place = "centre")+
  labs(title = "Transaction by Country")

Argumen Anda: Sebagian transaksi yang dilakukan berasal dari customer United Kingdom.

8 Tugas 7

Berikan pandangan dan pendapat terkait kasus yang sudah anda kerjakan diatas (Apa yang akan anda lakukan sebagai Manager mengenai kasus tersebut untuk mengembangkan bisnis perbelanjaan online tersebut berdasarkan analisa yang anda temukan!).

Argumen Anda: Dari kasus diatas, masih banyak data yang tidak valid dan data ganda atau duplikat data, yang perlu diperbaiki. Tindakan yang harus dilakukan adalah lebih teliti dalam menginput data, sekaligus lebih meningkatkan promosi sehingga Income yang didapat lebih besar dan berusaha agar tidak menurun. Sebagian customer berasal dari United Kingdom, oleh karena itu harus meningkatkan pemasaran di negara lain. Mengeluarkan metode promosi yang menarik, dan meningkatkan pelayanan kepada pelanggan.