1 Introduction

Pada Algoritma Trial Class kali ini, kita akan menyelesaikan beberapa pertanyaan bisnis terkait data transaksi suatu perusahaan retail. Selama melakukan analisis, kita akan juga berkenalan dengan basic R programming serta proses data analysis di R mulai dari pembacaan data, eksplorasi data hingga visualisasi menggunakan R. Hasil analisis kemudian dapat di export ke dalam format reporting.

2 Introduction R Studio UI

Sebelum itu mari kita coba berkenalan dengan R Studio UI, dengan melihat gambar di bawah ini.

# Pada R Studio kita juga bisa memasukan gambar dengan menggunakan code di bawah ini
knitr::include_graphics("assets/RStudio_UI.PNG")

Terdapat 4 panel utama yang harus Anda pahami yaitu :

1. Panel Source/Editor : Panel ini merupakan fitur utama dari RStudio, panel ini menampilkan file yang sedang dibuka pada RStudio.

2. Panel Console : Panel ini menampilkan console asli dari R yang digunakan untuk berkomunikasi dengan R session. Terdapat beberapa tab lain seperti Terminal yang dapat digunakan untuk mengakses komputer Anda melalui Command Line Interface (CLI).

3. Panel Environment : Bagian ini menampilkan seluruh object R yang sudah dibuat selama session yang sama. Terdapat tab History yang berfungsi untuk melihat history dari kode yang sudah dijalankan sebelumnya.

4. Panel Files/Plot/Packages/Help :

  • Tab Files : Daftar dari berkas (file) yang berada dalam working directory.
  • Tab Plot : Menampilkan visualisasi yang terbentuk
  • Tab Packages : Berisi daftar packages yang sudah terinstall
  • Tab Help : Menampilkan dokumentasi resmi dari setiap fungsi

3 Introduction to R Markdown

Rmd merupakan sebuah format markdown yang dikembangkan oleh Rstudio yang dapat dimanfaatkan oleh seseorang yang bekerja di bidang data dalam melakukan analisis dan mengtransformasinya menjadi sebuah laporan yang berbentuk HTML, PDF ataupun Word.

Berikut beberapa hal yang akan sering kita gunakan dalam melakukan analisis pada Rmd.

  • Chunk

Bagian abu-abu dari Rmarkdown adalah chunk. Chunk berguna untuk menulis code.

Shortcut: ctrl + alt + i -> untuk membuat chunk baru Shortcut: ctrl+enter -> run untuk 1 baris code ctrl+shift+enter -> run > 1 baris code

# code di sini
4+5
#> [1] 9
10/3
#> [1] 3.333333
nama_saya <- "rany"
# new chunk
  • White Space

Bagian putih dari R Markdown (.Rmd) berguna untuk menulis narasi. Pada bagian ini dapat ditambahkan heading dengan menambahkan hashtag # sebelum kalimat. Narasi yang tidak ditambahkan # sebelum kalimat akan menjadi paragraf biasa.

# -> Heading 1
## -> Heading 2
### -> Heading 3

Sedangkan jika simbol # digunakan di dalam sebuah Chunk, maka akan menjadi sebuah comment.

  • Other Shortcut
knitr::include_graphics("assets/Keyboard_Shortcut.png")

4 Study Case: Retail Performance Analysis

Kita memiliki rekam data transaksi penjualan barang online dari suatu perusahaan retail. Dari rekam data tersebut, kita ingin menganalisis performa penjualan retail dan penarikan insight lain yang dapat bermanfaat untuk menjawab pertanyaan bisnis yang ada.

Business Questions

  • Q1: Bagaimanakah performa penjualan untuk setiap kategori barang yang dijual pada perusahaan retail tersebut?
  • Q2: Bagaimana rekam penggunaan mode pengiriman barang? Mode pengiriman apa yang paling sering digunakan?

Workflow

1️⃣ Library/Packages Preparation 2️⃣ Import Data 3️⃣ Exploratory Data Analysis 4️⃣ Visualize

4.1 Library/Packages Preparation

Library/Package adalah sekumpulan fungsi yang digunakan untuk pengolahan data tertentu. Untuk menggunakan fungsi-fungsi pada suatu package, harus dilakukan installasi package ke komputer terlebih dahulu.

Untuk menginstall packages, klik tab panel Packages pada bagian kanan bawah RStudio, kemudian klik tombol install. Masukan list package berikut ke dalam kolom package yang ingin diinstall (ragam package yang digunakan pada Trial Class). Untuk mendapatkan illustrasi yang lebih jelas bisa melihat gambar di bawah ini.

knitr::include_graphics("assets/packages_installation.PNG")

Nantinya setelah klik tombol install akan muncul sebuah pop-up baru. Dari pop-up tersebut, kita dapat mengisi library apa saja yang ingin kita isntall pada bagian Packages. Untuk mendapatkan illustrasi yang lebih jelas bisa melihat gambar di bawah ini.

knitr::include_graphics("assets/packages_installation2.PNG")

Berikut adalah library yang akan kita gunakan dalam melakukan analisis.

  • dplyr: Library ini diperuntukkan untuk membantu kita dalam melakukan analisis.
  • ggplot2: Library ini diperuntukkan untuk membantu kita dalam melakukan visualisasi statis.
  • scales: Library ini diperuntukkan untuk membantu kita dalam mempercantik visualisasi statis.
  • plotly: Library ini diperuntukkan untuk membantu kita dalam melakukan visualisasi interaktif.
  • glue: Library ini diperuntukkan untuk membantu kita dalam mempercantik visualisasi interaktif.

Setelah berhasil melakukan installasi ke-5 library yang kita butuhkan, kita harus memanggil library tersebut terlebih dahulu. Untuk memanggil library tersebu kita akan menggunakan fungsi library().

# Aktivasi library
library(dplyr) 
library(ggplot2)
library(scales)
library(plotly)
library(glue) 

Additional Info: Berikut adalah contoh dari Library/Package merupakan sekumpulan fungsi yang digunakan untuk pengolahan data tertentu.

4.2 Import Data

Tahapan selanjutnya yang akan kita lakukan adalah melakukan pemanggilan data yang akan diolah. Data yang akan kita panggil disini adalah data yang sudah tersimpan dalam sebuah folder data_input dengan nama retail.RDS. Dalam melakukan import data, kita akan mencoba menggunakan fungsi baru, yaitu readRDS().

Syntax fungsi tersebut: readRDS("nama_folder/nama_file")

retail <- readRDS("data_input/retail.RDS")

Kita menyimpan data tersebut ke dalam sebuah object bernama retail menggunakan tanda assignment (<-). Objek akan disimpan dalam environment R dan dapat diolah lebih lanjut.

Agar kita dapat melihat isi data tersebut kita dapat memanggil object retail, dimana kita menyimpan data yang sudah kita baca.

retail

Deskripsi kolom:

  • Row.ID = Nomer baris
  • Order.ID = Unique ID pemesanan
  • Order.Date = Tanggal pemesanan
  • Ship.Date = Tanggal pengiriman barang
  • Ship.Mode = Jenis pengiriman yang dipilih customer
  • Customer.ID = Unique ID customer
  • Segment = Segmentasi/kategori custoemr
  • Product.ID = Unique ID barang
  • Category = Kateogri barang
  • Sub.Category = Sub Kategori barang
  • Product.Name = Nama produk barang
  • Sales = Total sales dari barang yang dibeli oleh customer
  • Quantity = Total barang yang dibeli oleh customer
  • Discount = Total diskon yang diberikan kepada customer
  • Profit = Total keuntungan yang didapatkan oleh perusahaan

Additional Info:

Kita dapat membaca berbagai macam tipe file data di R, berikut adalah beberapa contoh file yang dapat kita baca di R.

  • .Rds: File dalam format R.
  • .csv: File dalam format csv(comma seperated value).
  • .xlsx: File dalam formal excel.

Selain membaca data yang sudah tersimpan dalam komputer kita, R Studio juga dapat kita sambungkan ke database untuk mengambil data-data yang tersimpan pada database tersebut.

4.3 Exploratory Data Analysis

Exploratory Data Analysis bertujuan untuk mendapatkan insight dari data sesuai pertanyaan bisnis yang diajukan. Dari data retail, kita akan coba menjawab pertanyaan bisnis berikut:

Q1: Bagaimanakah performa penjualan (Sales) untuk setiap category (Category) barang yang dijual pada perusahaan retail tersebut?

Berikut adalah beberapa fungsi dari library dplyr yang akan kita gunakan untuk menjawab pertanyaan bisnis tersebut.

  • group_by(): Fungsi ini dapat kita manfaatkan untuk mengelompokkan setiap segment barang pada data kita.
  • summarise(): Fungsi ini dapat kita manfaatkan untuk melakukan perhitungan matematis, untuk melakukan penjumlahan hasil penjualan untuk setiap segment barang yang dimiliki.
  • arrange(desc()): Fungsi ini dapat kita manfaatkan untuk mengurutkan nilai yang ada

Additional Notes: Simbol %>% adalah simbol yang dapat kita manfaatkan untuk menyambung setiap fungsi yang kita gunakan. -> Simbol piping

retail %>% 
  group_by(Category) %>% # Kita isi dengan nama kolom yang datanya ingin kita kelompokan 
  summarise(Total = sum(Sales)) %>% # Kita isi dengan rumus matematikan yang kita inginkan 
  arrange(desc(Total)) # Jika ingin mengurutkan secara ascending, kita bisa tambahkan dengan desc(berdasarkan_value apa)

Dari hasil yang kita dapatkan apakah ada insight yang dapat kita dapatkan?

  • Sales category Technology paling besar -> menghasilkan sales terbesar sebesar 836154.0

Q2: Bagaimana rekam penggunaan mode pengiriman barang (Ship.Mode)? Mode pengiriman apa yang paling sering digunakan?

  • group_by(): Fungsi ini dapat kita manfaatkan untuk mengelompokkan setiap mode pengiriman barang pada data kita.
  • summarise(): Fungsi ini dapat kita manfaatkan untuk melakukan perhitungan matematis, untuk menghitung frekuensi pengiriman apa yang sering digunakan.
  • arrange(desc()): Fungsi ini dapat kita manfaatkan untuk mengurutkan nilai yang ada
retail %>% 
  group_by(Ship.Mode) %>% # Kita isi dengan nama kolom yang datanya ingin kita kelompokan 
  summarise(Freq = n()) %>% # Kita isi dengan rumus matematikan yang kita inginkan 
  arrange(desc(Freq)) # Jika ingin mengurutkan secara ascending, kita bisa tambahkan dengan desc(berdasarkan_value apa)

Dari hasil yang kita dapatkan apakah ada insight yang dapat kita dapatkan?

  • Dari data retail, dihasilkan bahwa mode pengiriman terbanyak adalah mode Standard Class

4.4 Visualize

Eksplorasi data telah mampu menjawab pertanyaan business yang diajukan. Namun alangkah lebih baik bila hasil agregasi data dapat divisualisasikan sehingga audiens lebih tertarik dan mudah menangkap informasi yang ingin disampaikan.

Pada bahasa pemograman R, terdapat 2 jenis visualisasi yang dapat kita gunakan, yaitu: Visualisasi Base dan Visualisasi Grammar of Graphic

  • Visualisasi Base

Jenis visualisasi ini biasanya digunakan untuk keperluan pribadi saja karena tampilannya cenderung sederhana dan code nya pun singkat. Untuk membuat visualisasi tersebut, fungsi yang akan kita gunakan adalah plot().

Berikut contoh Visualisasi Base untuk kasus bisnis yang pertama.

plot(retail$Ship.Mode)

  • Visualisasi Grammar of Graphic

Sedangkan ketika kita ingin membuat plot yang apik (ready-to-publish), kita umumnya menggunakan package tambahan yang menyediakan fitur-fitur visualisasi yang lebih menarik seperti ggplot2. ggplot2 atau Grammar of Graphics adalah salah satu package visualisasi di R yang sagat powerful dan mempunyai banyak fitur dan ekstensi. Visualisasi data secara detail akan banyak dibahas pada spesialisasi Data Visualization di Algoritma Academy.

Berikut adalah contoh Visualisasi Grammar of Graphics untuk kasus bisnis yang kedua.

retail %>% 
  group_by(Ship.Mode) %>% 
  summarise(Freq = n()) %>% 
  arrange(desc(Freq)) %>% 
  ggplot(mapping = aes(x = reorder(Ship.Mode,Freq), y = Freq)) +
  geom_col(mapping = aes(fill = Ship.Mode)) +
  labs(title = "Jumlah Pelanggan Berdasarkan Tipe Pengiriman",
       x = "Tipe Pengiriman",
       y = "Total Pelanggan") +
  theme_minimal()

Berikut adalah catatan tentang fungsi-fungsi yang digunakan di atas:

  • ggplot(mapping = aes(x = , y = )) : buat kanvas plot dimana sumbu x adalah Ship.Mode dan sumbu y adalah kolom Freq.
    • reorder digunakan apabila ingin melakukan pengurutan dari value terkecil
  • geom_col(aes(fill = Ship.Mode)) : buat bar plot dan warnai fill (area) bar nya berdasarkan Segment.
  • labs(): mengatur komponen text pada plot
    title: judul plot
    x = judul sumbu x
    y = judul sumbu y
  • theme_minimal() : Memberikan pre-built theme dari ggplot2

Untuk lebih memahaminya, mari kita coba breakdown satu persatu proses pembuatan Visualisasi Grammar of Graphics.

Step 1: Dari hasil persiapan data yang sudah kita miliki mari kita tambahkan fungsi ggplot().

Parameter pada fungsi ggplot(),

  • mapping = parameter ini akan di isi dengan Aesthetic / aes(), aes() adalah fungsi yang bisa diisi dengan elemen-elemen yang penting dalam grafik, meliputi sumbu x, sumbu y.

ctrl+shift+m -> membuat piping

retail %>% 
  group_by(Ship.Mode) %>% 
  summarise(Freq = n()) %>% 
  arrange(desc(Freq)) %>%
  ggplot(mapping = aes(x = Ship.Mode, y = Freq))

Step 2: Menambahkan jenis visualisasi yang ingin kita gunakan, dalam kasus ini kita akan menambahkan fungsi geom_col() untuk membuat bar plot.

Parameter pada fungsi geom_col()

  • mapping = sama dengan fungsi ggplot(), parameter mapping di sini juga akan kita tambahkan fungsi aes(). Fungsi aes() di sini akan kita isi dengan parameter fill = untuk memberikan warna pada setiap bar plot kita.

Additional Notes: Simbol + adalah simbol yang dapat kita manfaatkan untuk menyambung setiap fungsi visualisasi yang kita gunakan.

retail %>% 
  group_by(Ship.Mode) %>% 
  summarise(Freq = n()) %>% 
  arrange(desc(Freq)) %>%
  ggplot(mapping = aes(x = Ship.Mode, y = Freq)) +
  geom_col(mapping = aes(fill = Ship.Mode))

Step 3: Tahapan selanjutnya yang akan kita lakukan di sini adalah memperjelas semua informasi pada plot yang kita buat dengan menambahkan fungsi labs().

Parameter pada fungsi labs()

  • title = Untuk menambahkanjudul plot
  • x = Untuk mengubah judul sumbu x
  • y = Untuk mengubah judul sumbu y
retail %>% 
  group_by(Ship.Mode) %>% 
  summarise(Freq = n()) %>% 
  arrange(desc(Freq)) %>%
  ggplot(mapping = aes(x = reorder(Ship.Mode, Freq), y = Freq)) +
  geom_col(mapping = aes(fill = Ship.Mode)) +
  labs(title = "Jumlah Pelanggan berdasarkan Mode Pengiriman",
       x = "Mode Pengiriman",
       y = "Jumlah Pelanggan")

retail %>% 
  group_by(Ship.Mode) %>% 
  summarise(Freq = n()) %>% 
  arrange(desc(Freq)) %>%
  ggplot(mapping = aes(x = reorder(Ship.Mode, desc(Freq)), y = Freq)) +
  geom_col(mapping = aes(fill = Ship.Mode)) +
  labs(title = "Jumlah Pelanggan berdasarkan Mode Pengiriman",
       x = "Mode Pengiriman",
       y = "Jumlah Pelanggan")

Step 4: Tahapan terakhir yang akan kita lakukan adalah memberikan pre-built theme yang sudah disediakan dari library(ggplot2). Berikut adalah beberapa pre-built theme yang dapat kita gunakan: theme_minimal(), theme_bw() dan theme_classic().

retail %>% 
  group_by(Ship.Mode) %>% 
  summarise(Freq = n()) %>% 
  arrange(desc(Freq)) %>%
  ggplot(mapping = aes(x = reorder(Ship.Mode, Freq), y = Freq)) +
  geom_col(mapping = aes(fill = Ship.Mode)) +
  labs(title = "Jumlah Pelanggan berdasarkan Mode Pengiriman",
       x = "Mode Pengiriman",
       y = "Jumlah Pelanggan") +
  theme_minimal()

5 Bonus - Interactive Ploting

Dalam mengtransformasi visualisasi statis menjadi visualisasi interaktif terdapat 2 hal yang dapat kita tambahkan. Hal yang pertama kali kita perlu tambahkan adalah parameter text = pada fungsi ggplot(). Parameter tersebut berguna untuk memunculkan text yang ingin kita tampilkan. Text yang ingin kita munculkan bisa kita tambakan dengan menggunakan fungsi glue().

plot_statis <- retail %>% 
  group_by(Ship.Mode) %>% 
  summarise(Freq = n()) %>% 
  arrange(desc(Freq)) %>% 
  ggplot(mapping = aes(x = reorder(Ship.Mode, Freq), 
                       y = Freq, 
                       text = glue("{Ship.Mode} 
                                     Shipment: {comma(Freq)}"))) + # Parameter text dan fungsi glue ditambahkan pada bagian ini
  geom_col(mapping = aes(fill = Ship.Mode)) +
  labs(title = "Jumlah Pelanggan Berdasarkan Tipe Pengiriman",
       x = "Tipe Pengiriman",
       y = "Total Pelanggan") +
  theme_minimal()+
  theme(legend.position = "none")

Setelah menambahkan text apa yang ingin kita munculkan pada visualisasi interaktif, kita akan memasukan hasil visualisasi statisnya ke sebuah fungsi yang bernama ggploty(). Pada fungsi tersebut nantinya kita bisa isi dengan tambahan parameter yaitu tooltip =. Parameter tersebut berguna untuk memunculkan text yang sudah kita persiapkan di parameter text = pada fungsi ggplot().

ggplotly(plot_statis, tooltip = "text")

6 Bonus - Laporan R Markdown

File yang kita gunakan selama trial class ini juga dapat kita ubah menjadi sebuah laporan dengan format PDF, HTML ataupun Word.

Untuk melakukan transformasi R Markdown menjadi format yang kita ingingkan, kita bisa mengklik tombol knit dan memilih format file yang di-inginkan. Untuk ilustrasi yang lebih jelas, bisa melihat gambar di bawah ini.

Knit atau proses tranformasi file R Markdown menjadi format yang kita inginkan akan berdasarkan opsi YAML. YAML itu sendiri merupakan parameter yang akan mengatur hasil transformasi. Untuk detail mengenai pengaturan YAML, kami sudah menyediakan penjelasan secara terpisah pada file reporting-in-r.Rmd.

  • Format HTML

  • Format PDF

  • Format Word