Package yang digunakan

library(DBI)
library(RSQLite)
library(tidyverse)
library(DT)
library(ggplot2)

Database

Database yang digunakan adalah database chinook yang terdiri dari 13 tabel seperti dapat terlihat pada diagram berikut

Database chinook menggambarkan toko media digital yang didalamnya terdapat informasi mengenai artis, album, media track, invoice penjualan media digital, serta informasi pelanggan. Data tersebut didapatkan dari data asli Apple iTunes Library. Informasi pelanggan dan karyawan menggunakan nama dan alamat fiktif, sedangkan informasi penjualan menggunakan data random selama 4 tahun.

Koneksi ke database

Berikut adalah syntax untuk menyambungkan database chinook dengan R

Chinook <- DBI::dbConnect(RSQLite::SQLite(), "C:/sqlite/db/Chinook.db")

Mengakses database dalam R

Untuk mengakses data dari database, dapat dilakukan dengan 2 cara yaitu :

Mengambil satu tabel secara keseluruhan

Menggunakan fungsi dbReadTable pada package DBI, dengan memasukkan nama koneksi dan nama tabel yang akan diambil. Misal akan diambil tabel genres

tab_genre <- dbReadTable(Chinook, name="genres")

Menggunakan query

Terdapat 2 cara untuk melakukan query SQL dalam R. Misal akan ditampilkan judul lagu dari album dengan albumId=1. Bisa dilakukan dengan 2 cara sebagai berikut :

Cara 1

Menggunakan fungsi dbgetquery() pada package DBI dengan memasukkan nama koneksi dan statement query.

query <- dbGetQuery(Chinook, sql
            ("SELECT Name
              FROM Tracks
              WHERE AlbumId=1"))

Cara 2

Dengan menambahkan argument pada code chunk, yaitu connection untuk menuliskan koneksi database, engine diisi dengan sql, dan output.var diisi dengan nama dataframe yang diingin dimana hasil query akan disimpan.

Berikut adalah hasil yang ditampilkan dari kedua code diatas

Data Mining

Data Mining adalah proses yang menggunakan teknik statistika, matematika, kecerdasan buatan, atau machine learning untuk mengekstraksi dan mengidentifikasi informasi yang bermanfaat pada basis data. Data mining melakukan analisis pada database untuk menemukan pola atau hubungan serta meringkas data sehingga dapat dimengerti dan bermanfaat untuk pemilik data.

Hal ini bermula dari masalah ledakan data, dimana tersedia banyak sekali data pada database namun tidak bermakna apa-apa atau tidak dapat menghasilkan informasi (pengetahuan). Hal inilah yang dapat diatasi oleh data mining dan data warehousing dengan mengekstraksi pengetahuan dan informasi yang menarik dari basis data seperti klasifikasi, association rule, sequential pattern, dll.

Data Mining dengan SQL dan R

Pada dasarnya, query dapat dilakukan dengan menggunakan SQL. Namun, semakin berkembangnya teknologi, kebutuhan data tidak terhenti pada proses query yang menghasilkan suatu tabel saja. Setelah query, data akan lebih bermakna jika dilakukan berbagai analisis terhadap data. Hal onilah yang tidak didukung oleh SQL, sehingga dapat digunakan R, python, SAS, dan lainnya untuk melakukan analisis data hasil query database.

Pada R, proses ini dapat dilakukan dengan package dplyr. Berikut adalah beberapa perintah dplyr yang disandingkan dengan query pada SQL

dplyr SQL Fungsi
select() SELECT Seleksi kolom
filter() WHERE Seleksi baris
group_by() GROUP_BY Pengelompokkan data
summarise() - Merangkum data
arrange() ORDER_BY Mengurutkan data
mutate() AS Membuat kolom baru
join() JOIN Menggabungkan data

Analisis Sederhana Database Chinook

Selanjutnya, dari database chinook akan diambil beberapa data untuk dilakukan analisis sehingga data tersebut dapat memberikan informasi bagi pengguna.

Hal pertama yang harus dilakukan adalah dengan mengambil data dari database dengan cara yang sudah dipaparkan sebelumnya. Hasil query tersebut adalah suatu dataframe di R. Data yang sudah merupakan suatu dataframe dapat di manipulasi dan diolah dalam r dengan menggunakan package apapun.

Berikut akan diambil data pada tabel customers, invoices, genres, dan tracks dalam database chinook untuk kemudian dilakukan manipulasi dan analisis data sederhana dengan menggunakan package dplyr (yang terdapat dalam tidyverse) dan divisualisasikan dengan ggplot2.

Jumlah Pelanggan berdasarkan Negara

Akan diambil tabel customers dalam database chinook dan dijadikan dataframe dengan nama pelanggan

pelanggan <- dbReadTable(Chinook, name="customers")

Selanjutnya akan dilihat jumlah pelanggan per negara

pelanggan_negara <- pelanggan %>%
  group_by(Country) %>% summarise(Jml_Pelanggan = n())%>%
  rename(Negara=Country)

Berikut adalah statistik deskriptif dasar dari data pelanggan per negara

p <- pelanggan_negara$Jml_Pelanggan

MAX <- max(p)
MIN <- min(p)
RataRata <- mean(p)

Dan berikut adalah visualisasi pelanggan per negara yang digambarkan dengan lolipop chart

ggplot(pelanggan_negara, aes(x = reorder(Negara,-Jml_Pelanggan), 
                             y = Jml_Pelanggan)) +
      geom_segment(aes(x = reorder(Negara,-Jml_Pelanggan), 
                       xend = reorder(Negara,-Jml_Pelanggan), 
                       y = 0,yend = 14), color="gray", lwd=1.5) + 
               
      geom_point(size = 3, pch = 23, bg = "chocolate2", 
                 col = "chocolate2") +
      coord_flip()+
      xlab("Negara") +
      ylab("Jumlah Pelanggan")+
      theme_minimal()

Terlihat bahwa pelanggan iTunes terbanyak ada di negara USA dengan 13 pelanggan dan rata-rata pelanggan tiap negara adalah sebanyak 2 pelanggan.

Transaksi Pembelian Berdasarkan Negara

Jika sebelumnya diambil satu tabel keseluruhan dari database chinook, kali ini akan diambil hanya beberapa variabel dari tabel invoices

SELECT BillingCountry, Total
FROM   invoices

Selanjutnya akan dilihat transaksi pembelian berdasarkan negara

transaksi_negara <- penjualan %>%
  group_by(BillingCountry) %>% summarise(Penjualan = sum(Total))%>%
  rename(Negara=BillingCountry)

Berikut adalah statistik deskriptif dasar dari transaksi per negara

p <- transaksi_negara$Penjualan

MAX <- max(p)
MIN <- min(p)
RataRata <- mean(p)

Transaksi pembelian negara-negara konsumen iTunes dapat dilihat pada barplot berikut

ggplot(transaksi_negara, aes(x=Negara,y=Penjualan,
                             fill=Penjualan))+
      geom_bar(stat = "identity", width = 0.5, 
               show.legend = FALSE)+
      labs(x="Negara", y="Penjualan") +
      ggtitle("Total Penjualan per Negara") +
      theme_minimal()+theme(axis.text.x = element_text
                            (angle = 90))+
      theme(plot.title = element_text(hjust = 0.5))

Terlihat bahwa rata-rata tiap negara melakukan transaksi pembelian media digital di iTunes library sebesar 97.025 USD. Pembelian terbesar dilakukan oleh negara USA sebesar 523.06 USD dan pembelian terkecil sebesar 37.62 yaitu pada negara Argentina, Australia, Belgia, Denmark, Italia, Polandia, dan Spanyol.

Jumlah Lagu berdasarkan Genre

Selanjutnya akan diambil beberapa variabel dari 2 tabel yaitu tabel genres dan tracks

SELECT T.TrackId, T.Name AS JudulLagu, G.Name AS Genre
FROM   genres AS G, tracks AS T
WHERE G.GenreId = T.GenreId
genre <- genre %>% 
  group_by(Genre) %>% summarise(Jumlah_Lagu = n())

Berikut adalah genre dengan jumlah lagu paling banyak dan paling sedikit

genre_max <- genre %>% slice_max(Jumlah_Lagu)
genre_min <- genre %>% slice_min(Jumlah_Lagu)

Berikut adalah plot genre dan jumlah lagu yang memiliki genre tersebut

library(plotly)
genreplot <- plot_ly(genre, x = ~Genre, y = ~Jumlah_Lagu,
                      text = ~Jumlah_Lagu, size = ~Jumlah_Lagu,
                      color = ~Jumlah_Lagu, sizes = c(10, 50),
                      marker =
                        list(opacity = 0.7,
                             sizemode = "diameter"))
genreplot <- genreplot%>%layout
genreplot

Genre lagu yang paling banyak ada di iTunes adalah Rock dengan total 1.297 lagu, disusul dengan genre Latin, Metal, dan Alternative & Punk. Sedangkan, genre lagu paling sedikit yang dimiliki oleh iTunes adalah genre Opera.