Email: jirene113@gmail.com
RPubs: https://rpubs.com/irenegani/
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("D:\\FILE IRENE\\SEMESTER 3\\Algoritma&Struktur Data (Pak Bakti)\\UAS")
Retail <- readRDS("Retail.rds")
head(Retail, 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("Retail.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: Menurut saya, dalam segi mengimport data keduanya sama mudahnya. Namun kalau diharuskan memilih, maka saya akan memilih menggunakan file rds, karena file excelnya sendiri pun tidak bisa dibuka melalui aplikasi Excel saya dikarenakan Microsoft saya sering error dan fungsinya sendiri sudah ada di R jadi tidak perlu install packages lagi.
Ubah nama variabel data tersebut agar lebih mudah dipelajari oleh pembaca.
names(Retail) <- c("Nomor Invoice",
"Kode barang",
"Deskripsi Barang",
"Jumlah",
"Tanggal Invoice",
"Harga Barang",
"Nomor Pelanggan",
"Negara")
head(Retail, 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: Mengganti nama Variabel agar lebih mudah dibaca oleh pembaca sangat diperlukan, karena tidak semua orang memahami bahasa pemrogaman. Pemilihan bahasa disini bisa disesuaikan dengan kalangan pembacanya itu sendiri.
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 = Retail$`Nomor Invoice` %>% unique() %>% length(),
kode_barang_unique = Retail$`Kode barang` %>% unique() %>% length(),
deskripsi_unique = Retail$`Deskripsi Barang` %>% unique() %>% length(),
negara_unique = Retail$Negara %>% unique() %>% length(),
pelanggan_unique = Retail$`Nomor Pelanggan` %>% unique() %>% length()
)
## invoice_unique kode_barang_unique deskripsi_unique negara_unique
## 1 25900 4070 4212 38
## pelanggan_unique
## 1 4373
Argumen Anda: Dengan menggunakan fungsi glimpse(), kita akan mendapatkan struktur data yang kita miliki dan menggunakan fungsi unique() untuk melihat berada banyak data yang beda dalam struktur data tersebut.Dikarenakan hanya ada 38 data pada negara/Country, maka kita dapat mengubah tipe datanya menjadi faktor dikarenakan data tersebut bisa dijadikan sebagai variabel kategori.
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: Sesuai dengan deskripsi variabel yaitu “C”, maka setiap data yang memiliki huruf depan C akan diidentifikasi sebagai Cancel. Setelah itu data yang tidak digunakan saya exclude.
## # 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: sesuai dengan deskripsi diatas yaitu Nomor invoice terdiri dari 6 digit unik untuk setiap transaksi, maka untuk transaksi yang terdiri lebih dari 6 digit akan dianggap tidak valid dan dapat di exclude.
Argumen Anda: Disini terdapat 1336 data yang memiliki Quantity sebanyak <=0, karena itu data ini kita anggap tidak valid. Kita bisa membuang data yang tidak valid ini.
Argumen Anda: Disini saya menganggap bahwa harga satuan di bawah 0 atau sama dengan 0 adalah tidak valid. Kemudian saya membuang daya tidak valid tersebut.
produk_valid <- Retail %>%
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"
Retail <- Retail %>%
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")
Retail <- Retail %>%
filter(!`Deskripsi Barang`%in% produk_invalid)
Argumen Anda: Seperti tertulis pada kolom deskripsi bahwa stock code terdiri dari 5 digit angka, maka dari itu disini saya menggunakan substring 5 digit pertama dari stock code dan kemudian saya convert ke tipe data numerik. Data yang betuliskan NA adalah data yang tidak valid.
#1 Cek keunikan pada data
library(dplyr)
data_frame(
stok_kode_unik = Retail$`Kode barang` %>% unique() %>% length(),
Deskripsi_unik = Retail$`Deskripsi Barang` %>% unique() %>% length(),
deskripsi_barang_unik = Retail %>% 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 <- Retail %>%
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 deskripsi pada transaksi terakhir dari setiap produk. Mari kita bersihkan
#3
Data_Produk <- Data_Produk%>%
group_by(`Kode barang`)%>%
slice(1)
Retail <-Retail %>%
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 = Retail$`Kode barang` %>% unique() %>% length(),
Deskripsi_unik = Retail$`Deskripsi Barang` %>% unique() %>% length(),
deskripsi_barang_unik = Retail %>% 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 <- Retail %>%
arrange(desc(`Tanggal Invoice`)) %>%
select(`Kode barang`,`Deskripsi Barang`) %>%
distinct()
Data_deskripsi <- Data_deskripsi %>%
group_by(`Deskripsi Barang`) %>%
slice(1)
Retail <-Retail %>%
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 = Retail$`Kode barang` %>% unique() %>% length(),
Deskripsi_unik = Retail$`Deskripsi Barang` %>% unique() %>% length(),
deskripsi_barang_unik = Retail %>% 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: Seluruh data sudah bersifat unik karena jumlah datanya sudah sama rata dimana itu artinya data yang kita miliki sudah tidak ada yang double.
data_frame(
pelanggan_unik = Retail %>% select(`Nomor Pelanggan`) %>% distinct() %>% nrow(),
pelanggan_negara_unik = Retail %>% select(`Nomor Pelanggan`, `Negara`) %>% distinct() %>% nrow()
)
## # A tibble: 1 x 2
## pelanggan_unik pelanggan_negara_unik
## <int> <int>
## 1 4335 4351
Data_negara <- Retail %>%
arrange(desc(`Tanggal Invoice`,`Nomor Pelanggan`)) %>%
select(`Nomor Pelanggan`, Negara) %>%
group_by(`Nomor Pelanggan`) %>%
slice(1)
Retail <- Retail %>% select(-Negara) %>%
left_join(Data_negara, by = c("Nomor Pelanggan"))
data_frame(
customer_unik = Retail %>% select(`Nomor Pelanggan`) %>% distinct() %>% nrow(),
customer_country_unik = Retail %>% select(`Nomor Pelanggan`, Negara) %>% distinct() %>% nrow()
)
## # A tibble: 1 x 2
## customer_unik customer_country_unik
## <int> <int>
## 1 4335 4335
Argumen Anda: Data di atas menunjukan bahwa ada customer yang memiliki 2 negara. Untuk case ini, kita bisa berasumsi bahwa customer tersebut pindah lokasi tempat tinggal, sehingga kita bisa menyesuaikan negara customer berdasarkan negara terakhir ia melakukan transaksi. Maka dari itu kita harus membersihkannya.
library(lubridate)
Retail <- Retail %>% filter(ymd(as.Date(Retail$`Tanggal Invoice`)) < ymd("2011-12-1"))
tail(Retail, 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: Data transaksi yang kita miliki dari 2010-12-01 sampai dengan 2011-12-09. Berhubung kita tidak memiliki data transaksi lengkap pada Desember 2011, maka saya memutuskan untuk take out data Desember 2011 dari analisa ini, sehingga kita memiliki transaksi full 1 tahun dari Desember 2010 sampai november 2011.
Argumen Anda: Data diatas masih ada yang duplikat, jadi harus kita bersihkan.
Argumen Anda: Kita buat variabel baru untuk fitur ektrasi dimana merupakan total nilai transaksi. Fitur ekstraksi dilakukan untuk mempermudah proses analisis selanjutnya.
## 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?
Retail$Month <- factor(format(Retail$`Tanggal Invoice`,
"%b %Y"),
levels=paste(month.abb, rep(2010:2011, each=12)))
Retail$Date <- format(Retail$`Tanggal Invoice`,
"%Y-%m-%d")
Pelanggan <- Retail %>% 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 <- Retail2 %>%
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 <- Retail2 %>% 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 <- Retail2 %>% 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 <-Retail2 %>% 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 <- Retail%>%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 <-Retail2%>%
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 <-Retail2%>%
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 <-Retail2%>%
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 <- Retail2 %>%
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, produk 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 <- Retail2 %>%
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: Terkait kasus diatas, banyak sekali data yang duplikat dimana data tersebut harus diperbaiki atau bahkan dibuang. Disini juga dapat kita lihat bahwa transaksi tertinggi jatuh pada bulan November 2011, namun pada bulan November tidak ada peningkatan pelanggan baru. Jadi, dapat kita asumsikan kalau pelanggan pada bulan November 2011 adalah orang yang sama atau dengan kata lain bukan pelanggan baru dan pelanggan sebagian besar berasal dari United Kingdom.