Email: email-anda@gmail.com
RPubs: https://rpubs.com/akun-rpubs-anda/
library(readxl)
library(dplyr)
library(ggplot2)
library(scales)
library(glue)
library(plotly)
library(lubridate)
library(gridExtra)
library(zoo)
library(treemap)
library(tidyr)
library(tidyverse)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.
Import kedua data tersebut ke Rstudio Anda sesuai dengan jenis file masing-masing (Proses import mana yang lebih baik menurut Anda?).
#working directory
setwd("C:/Users/USER/Documents/SEMESTER 3/ALGORITMA/Uas")
OnlineRetail <- readRDS("Retail.rds")
head(OnlineRetail, 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>
#install.packages("readxl")
library("readxl")
xlsx1 <- read_excel("OnlineRetail.xlsx", sheet=1)
head(xlsx1, 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>
Menurut saya: menggunakan rds lebih mudah karena tidak perlu menginstall package untuk membuka filenya. serta algoritma membuka rds lebih simple.
Ubah nama variabel data tersebut agar lebih mudah dipelajari oleh pembaca.
names(OnlineRetail) <- c("Nomor Invoice",
"Kode barang",
"Deskripsi Barang",
"Jumlah",
"Tanggal Invoice",
"Harga Barang",
"Nomor Pelanggan",
"Negara")
head(OnlineRetail, 5)## # A tibble: 5 x 8
## `Nomor Invoice` `Kode barang` `Deskripsi Bara~ Jumlah `Tanggal Invoice`
## <chr> <chr> <chr> <dbl> <dttm>
## 1 536365 85123A WHITE HANGING H~ 6 2010-12-01 08:26:00
## 2 536365 71053 WHITE METAL LAN~ 6 2010-12-01 08:26:00
## 3 536365 84406B CREAM CUPID HEA~ 8 2010-12-01 08:26:00
## 4 536365 84029G KNITTED UNION F~ 6 2010-12-01 08:26:00
## 5 536365 84029E RED WOOLLY HOTT~ 6 2010-12-01 08:26:00
## # ... with 3 more variables: `Harga Barang` <dbl>, `Nomor Pelanggan` <dbl>,
## # Negara <chr>
Argumen Anda: kita terjemahkan ke dalam bahasa indonesia agar lebih mudah dipelajari dan dipahami oleh pembaca
Lakukan pemeriksaan struktur data untuk mengubah jenis kumpulan data (jika ada yang perlu diubah).
## tibble [541,909 x 8] (S3: tbl_df/tbl/data.frame)
## $ Nomor Invoice : chr [1:541909] "536365" "536365" "536365" "536365" ...
## $ Kode barang : chr [1:541909] "85123A" "71053" "84406B" "84029G" ...
## $ Deskripsi Barang: chr [1:541909] "WHITE HANGING HEART T-LIGHT HOLDER" "WHITE METAL LANTERN" "CREAM CUPID HEARTS COAT HANGER" "KNITTED UNION FLAG HOT WATER BOTTLE" ...
## $ Jumlah : num [1:541909] 6 6 8 6 6 2 6 6 6 32 ...
## $ Tanggal Invoice : POSIXct[1:541909], format: "2010-12-01 08:26:00" "2010-12-01 08:26:00" ...
## $ Harga Barang : num [1:541909] 2.55 3.39 2.75 3.39 3.39 7.65 4.25 1.85 1.85 1.69 ...
## $ Nomor Pelanggan : num [1:541909] 17850 17850 17850 17850 17850 ...
## $ Negara : chr [1:541909] "United Kingdom" "United Kingdom" "United Kingdom" "United Kingdom" ...
data.frame(
invoice_unique = OnlineRetail$`Nomor Invoice` %>% unique() %>% length(),
kode_barang_unique = OnlineRetail$`Kode barang` %>% unique() %>% length(),
deskripsi_unique = OnlineRetail$`Deskripsi Barang` %>% unique() %>% length(),
negara_unique = OnlineRetail$Negara %>% unique() %>% length(),
pelanggan_unique = OnlineRetail$`Nomor Pelanggan` %>% unique() %>% length()
)## invoice_unique kode_barang_unique deskripsi_unique negara_unique
## 1 25900 4070 4212 38
## pelanggan_unique
## 1 4373
Argumen Anda: disini saya merubah jenis kumpulan data Nomor Pelanggan dari Number menjadi karakter karena fungsi dari data Nomor Pelanggan sama dengan Nomor Invoice dimana sama-sama merupakan suatu kode pembelian pelanggan. lalu, ada negara yang berjumlah 38 sehingga dapat kita jadikan variabel kategori dengan menggunakan as.factor
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:
## # A tibble: 1 x 1
## n
## <int>
## 1 9288
Argumen Anda: Terdapat 9288 transaksi yang dibatalkan, dalam mengerjakan data ini kita tidak memerlukan transaksi yang dibtalakan sehingga dapat kita hilangkan . Transaksi yang dibatalkan dapat kita ketahui dengan melihat datanya yaitu pada Nomor Invoice jika terdapat huruf C maka transaski tersebut dibatalkan. saya memutuskan untuk menghapus transaksi-transaksi yang telah dibatalkan dari dalam data.
## # A tibble: 3 x 8
## `Nomor Invoice` `Kode barang` `Deskripsi Bara~ Jumlah `Tanggal Invoice`
## <chr> <chr> <chr> <dbl> <dttm>
## 1 A563185 B Adjust bad debt 1 2011-08-12 14:50:00
## 2 A563186 B Adjust bad debt 1 2011-08-12 14:51:00
## 3 A563187 B Adjust bad debt 1 2011-08-12 14:52:00
## # ... with 3 more variables: `Harga Barang` <dbl>, `Nomor Pelanggan` <dbl>,
## # Negara <fct>
Argumen Anda: untuk invoice yang tidak valid dapat kita ketahui jika karakter dalam datanya lebih dari 6, hal ini tidak kita perlukan didalam data kita sehingga dapat kita hilangkan.
Argumen Anda: Terdapat kuantitas yang negatif atau 0 dimana kuantitas tersebut dianggap tidak valid karena tidak ada transaksi yang negatif atau 0 sehingga diputuskan untuk diperbaiki dengan cara mengahpusnya dari dalam data
Argumen Anda: jika terdapat harga produk yang kurang dari 0 dan sama dengan 0 maka harga produk tersebut tidak valid, jika terjadi hal seperti itu maka kita harus menghapusnya dari data.
produk_valid <- OnlineRetail %>%
mutate (kode_valid = as.numeric (substr(`Kode barang`, 1, 5))) %>%
select( kode_valid, `Kode barang`, `Deskripsi Barang`) %>%
distinct()## Warning: Problem with `mutate()` input `kode_valid`.
## i NAs introduced by coercion
## i Input `kode_valid` is `as.numeric(substr(`Kode barang`, 1, 5))`.
## Warning in mask$eval_all_mutate(dots[[i]]): NAs introduced by coercion
## # A tibble: 4,157 x 3
## kode_valid `Kode barang` `Deskripsi Barang`
## <dbl> <chr> <chr>
## 1 85123 85123A WHITE HANGING HEART T-LIGHT HOLDER
## 2 71053 71053 WHITE METAL LANTERN
## 3 84406 84406B CREAM CUPID HEARTS COAT HANGER
## 4 84029 84029G KNITTED UNION FLAG HOT WATER BOTTLE
## 5 84029 84029E RED WOOLLY HOTTIE WHITE HEART.
## 6 22752 22752 SET 7 BABUSHKA NESTING BOXES
## 7 21730 21730 GLASS STAR FROSTED T-LIGHT HOLDER
## 8 22633 22633 HAND WARMER UNION JACK
## 9 22632 22632 HAND WARMER RED POLKA DOT
## 10 84879 84879 ASSORTED COLOUR BIRD ORNAMENT
## # ... with 4,147 more rows
produk_invalid <- produk_valid[is.na(produk_valid$kode_valid), ]%>% .$`Deskripsi Barang`
produk_invalid## [1] "POSTAGE" "CARRIAGE"
## [3] "DOTCOM POSTAGE" "Manual"
## [5] "Bank Charges" "AMAZON FEE"
## [7] "SUNJAR LED NIGHT NIGHT LIGHT" "BOXED GLASS ASHTRAY"
## [9] "Dotcomgiftshop Gift Voucher £40.00" "CAMOUFLAGE DOG COLLAR"
## [11] "Manual" "Dotcomgiftshop Gift Voucher £50.00"
## [13] "Dotcomgiftshop Gift Voucher £30.00" "Dotcomgiftshop Gift Voucher £20.00"
## [15] "OOH LA LA DOGS COLLAR" "BOYS PARTY BAG"
## [17] "GIRLS PARTY BAG" "Dotcomgiftshop Gift Voucher £10.00"
## [19] "SAMPLES" "PADS TO MATCH ALL CUSHIONS"
## [21] "HAYNES CAMPER SHOULDER BAG"
OnlineRetail <- OnlineRetail %>%
filter(!`Deskripsi Barang`%in% produk_invalid)
produk_invalid <- c( "check", "check?", "?", "??", "damaged", "found",
"adjustment", "Amazon", "AMAZON", "amazon adjust",
"Amazon Adjustment", "amazon sales", "Found", "FOUND",
"found box", "Found by jackie ","Found in w/hse","dotcom",
"dotcom adjust", "allocate stock for dotcom orders ta", "FBA",
"Dotcomgiftshop Gift Voucher £100.00", "on cargo order",
"wrongly sold (22719) barcode", "wrongly marked 23343",
"dotcomstock", "rcvd be air temp fix for dotcom sit",
"Manual", "John Lewis", "had been put aside",
"for online retail orders", "taig adjust", "amazon",
"incorrectly credited C550456 see 47", "returned",
"wrongly coded 20713", "came coded as 20713",
"add stock to allocate online orders", "Adjust bad debt",
"alan hodge cant mamage this section", "website fixed",
"did a credit and did not tick ret", "michel oops",
"incorrectly credited C550456 see 47", "mailout", "test",
"Sale error", "Lighthouse Trading zero invc incorr", "SAMPLES",
"Marked as 23343", "wrongly coded 23343","Adjustment",
"rcvd be air temp fix for dotcom sit", "Had been put aside.", "Damaged",
"thrown away", "Unsaleable, destroyed", "wrongly coded-23343", "wet/rusty",
"lost in space", "damages", "damages/display", "taig adjust no stock",
"WET/MOULDY", "damages?", "wet", "sold as set on dotcom", "wet rusty",
"wrongly marked", "???", "broken", "Sold as 1 on dotcom")
OnlineRetail <- OnlineRetail %>%
filter(!`Deskripsi Barang`%in% produk_invalid)Argumen Anda: Setelah kita lakukan analisa terhadap banyaknya produk yang tidak valid, kita mendapati bahwa dari semua data hanya ada 1 produk yang tidak valid dan merupakan voucher yang dapat kita hapuskan dari dalam data.
#1 Cek keunikan pada data
library(dplyr)
data_frame(
stok_kode_unik = OnlineRetail$`Kode barang` %>% unique() %>% length(),
Deskripsi_unik = OnlineRetail$`Deskripsi Barang` %>% unique() %>% length(),
deskripsi_barang_unik = OnlineRetail %>% select(`Kode barang`,`Deskripsi Barang`) %>% 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 3
## stok_kode_unik Deskripsi_unik deskripsi_barang_unik
## <int> <int> <int>
## 1 3899 3993 4135
Datanya terlihat berbeda-beda mengartikan bahwa terjadi duplikasi dalam data.
#2
Data_Produk <- OnlineRetail %>%
arrange(desc(`Tanggal Invoice`)) %>%
select(`Kode barang`,`Deskripsi Barang`) %>%
distinct()
Data_Produk %>%
group_by(`Kode barang`) %>%
summarise(Jumlah_Deskripsi=n()) %>%
ungroup() %>%
filter(Jumlah_Deskripsi>1)## `summarise()` ungrouping output (override with `.groups` argument)
## # A tibble: 217 x 2
## `Kode barang` Jumlah_Deskripsi
## <chr> <int>
## 1 16156L 2
## 2 17107D 3
## 3 20622 2
## 4 20725 2
## 5 20914 2
## 6 21109 2
## 7 21112 2
## 8 21175 2
## 9 21232 2
## 10 21243 2
## # ... with 207 more rows
Terdapat 212 stock_code yang memiliki lebih dari 1 deskripsi. Untuk case ini, kita perlu menyesuaikan deskripsi dari setiap produk dengan menggunakan deksripsi pada transaksi terakhir dari setiap produk. Mari kita bersihkan
#3
Data_Produk <- Data_Produk%>%
group_by(`Kode barang`)%>%
slice(1)
OnlineRetail <-OnlineRetail %>%
left_join(Data_Produk, by="Kode barang") %>%
mutate(`Deskripsi Barang` = ifelse(is.na(`Deskripsi Barang.y`),`Deskripsi Barang.x`,`Deskripsi Barang.y`)) %>%
select(-c(`Deskripsi Barang.y`,`Deskripsi Barang.x`))
data_frame(
stok_kode_unik = OnlineRetail$`Kode barang` %>% unique() %>% length(),
Deskripsi_unik = OnlineRetail$`Deskripsi Barang` %>% unique() %>% length(),
deskripsi_barang_unik = OnlineRetail %>% select(`Kode barang`,`Deskripsi Barang`) %>% distinct() %>% nrow()
)## # A tibble: 1 x 3
## stok_kode_unik Deskripsi_unik deskripsi_barang_unik
## <int> <int> <int>
## 1 3899 3764 3899
Data_deskripsi <- OnlineRetail %>%
arrange(desc(`Tanggal Invoice`)) %>%
select(`Kode barang`,`Deskripsi Barang`) %>%
distinct()
Data_deskripsi <- Data_deskripsi %>%
group_by(`Deskripsi Barang`) %>%
slice(1)
OnlineRetail <-OnlineRetail %>%
left_join(Data_deskripsi, by="Deskripsi Barang") %>%
mutate(`Kode barang` = ifelse(is.na(`Kode barang.y`),`Kode Barang.x`,`Kode barang.y`)) %>%
select(-c(`Kode barang.y`,`Kode barang.x`))
data_frame(
stok_kode_unik = OnlineRetail$`Kode barang` %>% unique() %>% length(),
Deskripsi_unik = OnlineRetail$`Deskripsi Barang` %>% unique() %>% length(),
deskripsi_barang_unik = OnlineRetail %>% select(`Kode barang`,`Deskripsi Barang`) %>% distinct() %>% nrow()
)## # A tibble: 1 x 3
## stok_kode_unik Deskripsi_unik deskripsi_barang_unik
## <int> <int> <int>
## 1 3764 3764 3764
Argumen Anda: Data setiap produk yang kita miliki telah bersifat unik dan tidak ada deskripsi ganda.
data_frame(
pelanggan_unik = OnlineRetail %>% select(`Nomor Pelanggan`) %>% distinct() %>% nrow(),
pelanggan_negara_unik = OnlineRetail %>% select(`Nomor Pelanggan`, `Negara`) %>% distinct() %>% nrow()
)## # A tibble: 1 x 2
## pelanggan_unik pelanggan_negara_unik
## <int> <int>
## 1 4335 4351
Data_negara <- OnlineRetail %>%
arrange(desc(`Tanggal Invoice`,`Nomor Pelanggan`)) %>%
select(`Nomor Pelanggan`, Negara) %>%
group_by(`Nomor Pelanggan`) %>%
slice(1)
OnlineRetail <- OnlineRetail %>% select(-Negara) %>%
left_join(Data_negara, by = c("Nomor Pelanggan"))
data_frame(
customer_unik = OnlineRetail %>% select(`Nomor Pelanggan`) %>% distinct() %>% nrow(),
customer_country_unik = OnlineRetail %>% select(`Nomor Pelanggan`, Negara) %>% distinct() %>% nrow()
)## # A tibble: 1 x 2
## customer_unik customer_country_unik
## <int> <int>
## 1 4335 4335
Argumen Anda: kita dapat mengatasi status yang tidak valid ini dengan cara menghapus baris yang terkandung alphabet atau hanya menghapus alphabetnya
library(lubridate)
OnlineRetail <- OnlineRetail %>% filter(ymd(as.Date(OnlineRetail$`Tanggal Invoice`)) < ymd("2011-12-1"))
tail(OnlineRetail, 10)## # A tibble: 10 x 8
## `Nomor Invoice` Jumlah `Tanggal Invoice` `Harga Barang` `Nomor Pelangga~
## <chr> <dbl> <dttm> <dbl> <dbl>
## 1 579885 2 2011-11-30 17:37:00 4.95 15444
## 2 579885 12 2011-11-30 17:37:00 0.38 15444
## 3 579885 6 2011-11-30 17:37:00 1.45 15444
## 4 579885 1 2011-11-30 17:37:00 4.15 15444
## 5 579885 2 2011-11-30 17:37:00 3.75 15444
## 6 579885 4 2011-11-30 17:37:00 1.25 15444
## 7 579885 2 2011-11-30 17:37:00 5.95 15444
## 8 579885 6 2011-11-30 17:37:00 2.08 15444
## 9 579885 1 2011-11-30 17:37:00 7.95 15444
## 10 579885 1 2011-11-30 17:37:00 5.95 15444
## # ... with 3 more variables: `Deskripsi Barang` <chr>, `Kode barang` <chr>,
## # Negara <fct>
Argumen Anda: terdapat data yang tidak lengkap pada bulan desember 2011, jadi diputuskan untuk dilakukan pemutusan berkala dimana datanya hanya sampai November 2011
Argumen Anda: untuk data yang memiliki duplikat akan dihilangkan dan mempertahankan baris pertama sebelum terdapat duplikat.
Argumen Anda: Kita buat variabel baru untuk fitur ektrasi dimana merupakan total nilai transaksi
## Nomor Invoice Jumlah Tanggal Invoice Harga Barang
## 0 0 0 0
## Nomor Pelanggan Deskripsi Barang Kode barang Negara
## 123530 0 0 0
## Transaksi
## 0
Argumen Anda: kita mengetahui jika terdapat NA pada Deskripsi Barang dan Nomor Pelanggan, dan diputuskan untuk kita hilangkan data yang terdapat NA.dapat kita lihat bahwa sudah tidak terdapat data yang NA
Simpan data yang sudah Anda bersihkan ke dalam folder dalam format .json atau .xml atau .rds.
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:
Gunakan Bar-Chart untuk memperlihatkan berapa banyak pelanggan yang melakukan transaksi setiap bulan?
OnlineRetail$Month <- factor(format(OnlineRetail$`Tanggal Invoice`,
"%b %Y"),
levels=paste(month.abb, rep(2010:2011, each=12)))
OnlineRetail$Date <- format(OnlineRetail$`Tanggal Invoice`,
"%Y-%m-%d")
Pelanggan <- OnlineRetail %>% count(Month, `Nomor Pelanggan`) %>%
select(-n) %>%
group_by(Month) %>%
summarise(n = n())
library(ggplot2)
library(scales)
ggplot(Pelanggan, aes(x = Month,
y= n)) +
geom_text(aes(label = n),
vjust = -0.35) +
geom_bar(fill = "salmon1",
color = "black",
stat = "identity")+
theme_minimal() +
labs(x = "Bulan",
title = "Jumlah Pelanggan per Bulan")+
theme(axis.text.x = element_text(angle = 55, hjust = 1))Argumen Anda: dari Bar-Chart kita bisa lihat bahwa pada bulan November 2011 jumlah Pelanggan mencapai paling tinggi dari bulan-bulan sebelumnya
Gunakan interaktif Line-Chart untuk memperlihatkan bagaimana pertumbuhan pelanggan baru setiap bulan?
library(dplyr)
Pertumbuhan_pelanggan <- Online_Retail %>%
group_by(`Nomor Pelanggan`) %>%
summarise(urutan_1 = min(`Tanggal Invoice`)) %>%
ungroup() %>%
mutate( yearmonth = format(urutan_1, format="%Y-%m-1"),
yearmonth = ymd(yearmonth),
ym = as.yearmon(urutan_1)) %>%
group_by(ym, yearmonth) %>%
summarise(total_pelanggan_baru = n()) %>%
mutate (normalisasi = (total_pelanggan_baru-min(total_pelanggan_baru))/(max(total_pelanggan_baru)-min(total_pelanggan_baru)),
detail = glue("Total Pelanggan baru adalah {total_pelanggan_baru}"))
min <- Pertumbuhan_pelanggan %>% arrange(total_pelanggan_baru) %>% head(1)
max <- Pertumbuhan_pelanggan %>% arrange(total_pelanggan_baru) %>% tail(1)
plot_pelanggan <- ggplot(Pertumbuhan_pelanggan,
aes(x=ym,
y=total_pelanggan_baru))+
geom_line()+
geom_point(size=3, aes(text=detail))+
geom_point(data=max, aes(x=ym, y = total_pelanggan_baru, text=detail), colour="salmon1", size=3)+
geom_point(data=min, aes(x=ym, y = total_pelanggan_baru, text=detail), colour="salmon1", size=3)+
labs(x = "Bulan",
y = "Pelanggan baru",
title = "Pertumbuhan Pelanggan baru setiap Bulan")
theme(axis.text.y = element_blank())## List of 1
## $ axis.text.y: list()
## ..- attr(*, "class")= chr [1:2] "element_blank" "element"
## - attr(*, "class")= chr [1:2] "theme" "gg"
## - attr(*, "complete")= logi FALSE
## - attr(*, "validate")= logi TRUE
Argumen Anda: kita bisa melihat jika grafiknya semakin menurun pada agustus 2011 sebanyak 169 customer. sedanngkan mempunyai peningkatan pada desember 2010 sebanyak 884.
Gunakan Radar-charts untuk menganalisis Waktu pemesanan yang terbaru dalam (bulanan, harian, dan per-jam)
library(RColorBrewer)
# bulanan
pemesanan_bulan <- Online_Retail %>% select(`Tanggal Invoice`, `Nomor Invoice`) %>%
distinct() %>%
mutate(bulan = month(`Tanggal Invoice`),
hari = day(`Tanggal Invoice`)) %>%
group_by(bulan,hari) %>%
summarise(total = n()) %>%
ungroup() %>%
group_by(hari) %>%
summarise(rataan_transaksi_bulanan = as.integer(median(total)))
radar_1 <-pemesanan_bulan %>%
ggplot(aes(x=as.factor(hari), y=rataan_transaksi_bulanan)) +
geom_bar(stat="identity", aes(fill=rataan_transaksi_bulanan),show.legend = FALSE)+
labs(title = "Pemesanan Bulanan",
x = "Tanggal",
y = NULL)+
theme_minimal()+
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"))+
scale_fill_gradient(low = "salmon", high = "salmon4")+
coord_polar()
# Harian
pemesanan_mingguan <- Online_Retail %>% select(`Nomor Invoice`
,`Tanggal Invoice`) %>%
distinct() %>%
mutate(bulan = month(`Tanggal Invoice`),
pekan = wday(`Tanggal Invoice`,week_start = getOption("lubridate.week.start", 1))) %>%
group_by(bulan,pekan) %>%
summarise(total = n()) %>%
ungroup() %>%
group_by(pekan) %>%
summarise(Rataan_mingguan = as.integer(median(total)))
radar_2 <-pemesanan_mingguan <- pemesanan_mingguan%>%
ggplot(aes(pekan,Rataan_mingguan))+
geom_bar(width=1, stat="identity", show.legend = FALSE, aes(fill=Rataan_mingguan))+
labs(
title = "pelanggan perhari",
x = "hari",
y = NULL)+
scale_x_continuous(breaks = c(1,2,3,4,5,6,7),
labels = c("Senin", "Selasa", "Rabu", "Kamis", "Jumat", "sabtu", "Minggu"))+
theme_minimal()+
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"))+
scale_fill_gradient(low = "salmon", high = "salmon4")+
coord_polar()
coord_polar() -> polar2
#Jam
Pesanan_jam <-Online_Retail %>% select(`Nomor Invoice`,`Tanggal Invoice`) %>%
distinct() %>%
mutate(hari = day(`Tanggal Invoice`),
jam = hour(`Tanggal Invoice`)) %>%
group_by(hari,jam) %>%
summarise(total = n()) %>%
ungroup() %>%
group_by(jam) %>%
summarise(rataan_jam = as.integer(median(total)))
skala_waktu = data_frame(jam = c(0:23))
radar_3 <- data_frame(jam = c(0:23)) %>%
left_join(
Pesanan_jam ,by=c("jam")) %>%
mutate(jam = as.factor(jam)) %>%
ggplot(aes(x=jam, y=rataan_jam))+
geom_bar(stat="identity",show.legend = FALSE, aes(fill=rataan_jam))+
labs(title = "pemesanan jam",
x = "Jam Hari",
y = NULL)+
theme_minimal()+
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"))+
scale_fill_gradient(low = "salmon", high = "salmon4")+
coord_polar()
grid.arrange(radar_1,radar_2,radar_3, ncol = 3)Argumen Anda: dari radar yang telah kita buat memperlihatkan bahwa semakin gelap warna dalam radar menunjukkan bahwa customer paling banyak untuk bulanan paling banyak pada tanggal 5, 14, dan 30, dalam 1 minggu transaksi paling banyak pada Kamis. Lalu untuk jamnya, paling banyak pada jam 12 siang.
Gunakan interaktif Bar-Chart untuk memperlihatkan berapa frekuensi transaksi setiap bulan?
transaksi_bulan <- OnlineRetail%>%select( `Nomor Invoice`, Month)%>%
distinct()%>%
group_by(Month)%>%
summarise(n=n())%>%
mutate(detail = glue("Bulan : {Month}
Total Transaksi: {n}"))
BarChart1 <- ggplot(transaksi_bulan,
aes(x = Month,
y = n))+
geom_bar(aes(fill = Month,
text = detail),
stat = "identity",
show.legend = FALSE,
palette = "Accent") +
theme_get() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
labs(x = "Bulan",
title = "Transaksi Tiap Bulan",
y = NULL)
ggplotly(BarChart1,tooltip = "text")Argumen Anda: Frekuensi transaksi paling banyak terjadi pada bulan november 2011 yaitu 2642 transaksi
Gunakan interaktif Bar-Chart yang horizontal untuk memperlihatkan 10 teratas dari produk terpopuler berdasarkan frekuensi transaksinya!
BarChart2 <-Online_Retail%>%
group_by(`Deskripsi Barang`, `Kode barang` )%>%
summarise(n=n()) %>%
arrange(desc(n))%>%
head(10) %>%
mutate(Barang = as.factor(`Deskripsi Barang`))%>%
ggplot(aes(x = reorder(Barang,n),
y = n)) +
geom_bar(aes( fill = Barang,
text = n),
stat = "identity",
palette = "Accent")+
labs( title = "10 Produk terpopuler berdasarkan frekuensi transaksi",
x = NULL,
y = NULL)+
coord_flip()+
theme_minimal()
ggplotly(BarChart2)Argumen Anda: kita dapati 10 produk terpopuler berdasarkan frekuensi transaksi yang palig banyak adalah CREAM HANGIG HEART T-LIGHT HOLDER yaitu 1976
Gunakan interaktif Bar-Chart yang horizontal untuk memperlihatkan 10 produk paling populer berdasarkan jumlah pesanan!
BarChart3 <-Online_Retail%>%
group_by(`Deskripsi Barang` )%>%
summarise(q=sum(Jumlah)) %>%
arrange(desc(q))%>%
head(10) %>%
mutate(Barang = as.factor(`Deskripsi Barang`))%>%
ggplot(aes(x = reorder(Barang,q),
y = q)) +
geom_bar(fill = rainbow(10),
color = "black",
stat = "identity")+
labs( title = "10 Produk Terpopuler Berdasarkan Kuantitas")+
ylab("Frekuensi") +
xlab(NULL) +
coord_flip()+
theme_minimal()
ggplotly(BarChart3)Argumen Anda: kita telah mendapati dari grafik yang dibuat 10 produk paling populer berdasarkan jumlah pesanan dapat dilihat bahwapaling tinggi adalah MEDIUM CERAMIC TOP STORAGE JAR sebanyak 777729
Gunakan interaktif Bar-Chart yang horizontal untuk memperlihatkan 10 produk paling populer menurut total pelanggan!
BarChart4 <-Online_Retail%>%
select(`Nomor Pelanggan`, `Kode barang`, `Deskripsi Barang`)%>%
distinct%>%
group_by(`Deskripsi Barang`, `Kode barang` )%>%
summarise(Pelanggan=n()) %>%
ungroup()%>%
arrange(desc(Pelanggan))%>%
head(10) %>%
mutate(Barang = as.factor(`Deskripsi Barang`))%>%
ggplot(aes(x = reorder(Barang,Pelanggan),
y = Pelanggan)) +
geom_bar( fill = rainbow(10),
color = "black",stat = "identity",
show.legend = F)+
labs( title = "10 Produk Terpopuler Berdasarkan Total Pelanggan")+
ylab("jumlah") +
xlab(NULL) +
coord_flip()+
theme_minimal()
ggplotly(BarChart4)Argumen Anda: Dari grafik yang kita dapati dari grafik adalah 10 Produk Terpopuler Berdasarkan Total Pelanggan yang paling banyak adalah REGENCY CAKESTAND 3 TIER sebanyak 873
Gunakan interaktif Bar-Chart yang horizontal untuk memperlihatkan 10 produk paling populer berdasarkan Nilai Mata uang!
BarChart5 <- Online_Retail %>%
group_by(`Kode barang`, `Deskripsi Barang`) %>%
summarise(n=sum(Transaksi))%>%
ungroup()%>%
arrange(desc(n))%>%
head(10)%>%
mutate(Barang = as.factor(`Deskripsi Barang`)) %>%
ggplot(aes(x = reorder(Barang, n),
y = n))+
geom_bar(fill = rainbow(10),
color = "black",
stat="identity")+
labs(title = "Top 10 Produk berdasarkan nilai mata uang",
x = NULL,
y = NULL)+
coord_flip()+
scale_y_continuous(label = scales::format_format(big.mark = ".",
decimal.mark = ",",
scientific = F))
ggplotly(BarChart5)Argumen Anda: grafik yang telah kita buat menunjukkan 10 produk populer berdasarkan nilai mata uang yang paling banyak adalah REGENCY CAKESTAND 3 TIER
##6.9 apakah penjualan berdasarkan Nilai Mata Uang Meningkat-Menurun Lakukan Analisa dengan menggunakan Time Series apakah penjualan berdasarkan Nilai Mata Uang Meningkat-Menurun?
Transaksi1 <- Online_Retail %>%
group_by(`Deskripsi Barang`, Transaksi)%>%
summarise(order = min(`Tanggal Invoice`))%>%
ungroup() %>%
mutate(ym = as.yearmon(order))%>%
group_by(ym)%>%
summarise( Total = sum(Transaksi))%>%
mutate(Penjelasan = glue("Bulan : {ym}
Nilai : {Total}")) %>%
ggplot(aes(x = ym,
y = Total,
group = 1 )) +
geom_line(aes(text = Penjelasan),
color = "#00FF00")+
theme_minimal()+
labs(x = "Month",
y = "Pelanggan",
title = "Penjualan Barang") +
scale_y_continuous(label = scales::format_format(big.mark = ".",
decimal.mark = ",",
scientific = F))
ggplotly(Transaksi1, tooltip = "text")Argumen Anda: Berdasarkan data yang kita dapatkan, time seriesnya turun drastis pada bulan januari hingga maret 2011 namun setelah itu dia naik lagi hingga oktober 2011.
Berikan pandangan dan pendapat terkait kasus yang sudah anda kerjakan diatas (Apa yang akan anda lakukan sebagai Manager mengenai kasus tersebeut untuk mengembangkan bisnis perbelanjaan online tersebut berdasarkan analisa yang anda temukan!).
Argumen Anda: Berdasarkan data yang kita dapatkan diatas, bahwa masih banyak data yang harus diperbaiki dan dihapus karena ada yang merupakan data duplikat dan tidak valid. pada grafik total transaksi kita dapat melihat bahwa terjadi penurunan drastis dan termasuk data yang kurang stabil yang mengartikan kita perlu melakukan tindakan terhadapat minat customer dalam produk kita seperti perlu ditingkatkan penjualan pada jam 12 karena penjualan perusahaan tinggi pada jam 12 hari kamis atau pada akhir bulan diberikan semacam diskon atau promo akhir bulan untuk menarik pelanggan lebih banyak lagi. dilihat dari grafik tree map, kita dapat menargetkan pelanggan kita yaitu ke Unite Kingdom karena customer kita paling banyak dari sana.