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 invoicesSelanjutnya 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.GenreIdgenre <- 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
genreplotGenre 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.