LAPORAN CASE METHOD 1

Analisis Database Sakila - Sistem Informasi Manajemen

Disusun oleh: Selsa Gilar Yona | NIM: M0725099

Pendahuluan

Laporan ini disusun untuk memenuhi tugas Case Method (CM) 1 pada mata kuliah Sistem Informasi Manajemen. Fokus utama laporan ini adalah mengeksplorasi dataset Sakila (database penyewaan film) untuk mengetahui performa pendapatan berdasarkan kategori film.

# Library yang diperlukan
library(DBI)
library(odbc) 
library(ggplot2)
library(dplyr)
library(knitr)

Koneksi Data

Data diimpor langsung dari database MySQL Sakila.

con <- dbConnect(odbc(),
                Driver = "MySQL ODBC 8.0 ANSI Driver",
                Server = "127.0.0.1",
                UID = "root",
                PWD = "glaryona8181",
                Port = 3306,
                database = "sakila"
                   )

Mengambil Data (Insight)

Insight yang diambil adalah Performa Pendapatan per Kategori Film untuk melihat kategori mana yang paling menguntungkan.

query <- "
SELECT 
    c.name AS Kategori,
    SUM(p.amount) AS Total_Revenue,
    COUNT(r.rental_id) AS Total_Rentals,
    AVG(p.amount) AS Avg_Ticket_Price
FROM category c
JOIN film_category fc ON c.category_id = fc.category_id
JOIN inventory i ON fc.film_id = i.film_id
JOIN rental r ON i.inventory_id = r.inventory_id
JOIN payment p ON r.rental_id = p.rental_id
GROUP BY c.name
ORDER BY Total_Revenue DESC"

data <- dbGetQuery(con, query)
data
##       Kategori Total_Revenue Total_Rentals Avg_Ticket_Price
## 1       Sports       5314.21          1179         4.507388
## 2       Sci-Fi       4756.98          1101         4.320599
## 3    Animation       4656.30          1166         3.993396
## 4        Drama       4587.39          1060         4.327726
## 5       Comedy       4383.58           941         4.658427
## 6       Action       4375.85          1112         3.935117
## 7          New       4351.62           940         4.629383
## 8        Games       4281.33           969         4.418297
## 9      Foreign       4270.67          1033         4.134240
## 10      Family       4226.07          1096         3.855903
## 11 Documentary       4217.52          1050         4.016686
## 12      Horror       3722.54           846         4.400165
## 13    Children       3655.55           945         3.868307
## 14    Classics       3639.59           939         3.876028
## 15      Travel       3549.64           837         4.240908
## 16       Music       3417.72           830         4.117735

Eksplorasi & Analisis Data

Rata-rata pendapatan per transaksi:

Analisis ini menggunakan persamaan matematis untuk menghitung rata-rata pendapatan

\[ \bar{x} = \frac{\sum_{i=1}^{n} Revenue_i}{n} \]

Akumulasi Pendapatan

Analisis ini menggunakan perhitungan matematis untuk total pendapatan:

\[Total\ Revenue = \sum_{i=1}^{n} Amount_i\]

Summary Data

summary(data)
##    Kategori         Total_Revenue  Total_Rentals  Avg_Ticket_Price
##  Length:16          Min.   :3418   Min.   : 830   Min.   :3.856   
##  Class :character   1st Qu.:3706   1st Qu.: 940   1st Qu.:3.979   
##  Mode  :character   Median :4276   Median : 969   Median :4.188   
##                     Mean   :4213   Mean   :1002   Mean   :4.206   
##                     3rd Qu.:4435   3rd Qu.:1096   3rd Qu.:4.405   
##                     Max.   :5314   Max.   :1179   Max.   :4.658

Tabel Performa Kategori

Berikut adalah 10 kategori teratas berdasarkan total pendapatan.

kable(head(data, 10), 
      caption = "Tabel 1: Top 10 Kategori Film Terlaris",
      col.names = c("Kategori", "Total Pendapatan ($)", "Total Penyewaan", "Rata-rata Harga"),
      align = "c")
Tabel 1: Top 10 Kategori Film Terlaris
Kategori Total Pendapatan ($) Total Penyewaan Rata-rata Harga
Sports 5314.21 1179 4.507388
Sci-Fi 4756.98 1101 4.320599
Animation 4656.30 1166 3.993396
Drama 4587.39 1060 4.327726
Comedy 4383.58 941 4.658427
Action 4375.85 1112 3.935117
New 4351.62 940 4.629383
Games 4281.33 969 4.418297
Foreign 4270.67 1033 4.134240
Family 4226.07 1096 3.855903

Visualisasi Data

Hubungan Volume Penyewaan vs Pendapatan

Visualisasi berikut menggambarkan hubungan antara jumlah penyewaan dan total pendapatan yang dihasilkan.

ggplot(data, aes(x = Total_Rentals, y = Total_Revenue, color = Avg_Ticket_Price)) +
  geom_point(size = 4, alpha = 0.7) +
  geom_smooth(method = "lm", color = "red", linetype = "dashed", se = FALSE, formula = y ~ x) +
  scale_color_gradient(low = "#3498db", high = "#e74c3c") +
  labs(title = "Hubungan Volume Penyewaan vs Pendapatan",
       subtitle = "Warna menunjukkan rata-rata harga tiket",
       x = "Jumlah Penyewaan (Rentals)",
       y = "Total Pendapatan (Revenue)",
       color = "Rata-rata Harga Tiket") +  
  theme_minimal()

Berdasarkan grafik, garis merah menunjukkan tren positif yang kuat. Kategori dengan titik merah menunjukkan harga rata-rata penyewaan yang lebih tinggi, yang memberikan kontribusi signifikan meskipun volumenya tidak selalu yang tertinggi.

Kontribusi Pendapatan per Kategori

data <- data %>%
  mutate(Share = (Total_Revenue /sum(Total_Revenue)) * 100)

ggplot(data, aes(x = "", y = Share, fill = Kategori)) + 
  geom_bar(stat = "identity", width = 1, color = "white") + 
  coord_polar("y", start = 0) +
  scale_fill_manual(values = colorRampPalette(c("#D4E6F1", "#1A5276"))(nrow(data))) + 
  theme_void() +
  labs(title = "Kontribusi Pendapatan per Kategori",
       subtitle = "Persentase setiap kategori terhadap total pendapatan",
       fill = "Kategori Film") +
  theme(
    legend.position = "right", 
    legend.title = element_text(face = "bold"),
    plot.title = element_text(hjust = 0.5, face = "bold"),
    plot.subtitle = element_text(hjust = 0.5)
  ) +
  geom_text(aes(label = paste0(round(Share, 1), "%")), 
            position = position_stack(vjust = 0.5), 
            color = "black", size = 3)

Berdasarkan pie chart, kontribusi setiap kategori secara visual, terlihat bahwa setiap potongan memiliki ukuran yang hampir sama besarnya. Hal ini menunjukkan bahwa bisnis Sakila tidak bergantung pada satu kategori tunggal saja, melainkan memiliki portofolio pendapatan yang sangat terdiversifikasi di berbagai genre film.

Kategori Sports merupakan pemegang pangsa pasar terbesar dengan kontribusi 7,9%. Diikuti oleh kategori Sci-Fi (7,1%) dan Animation (6,9%). Ketiga kategori ini secara kolektif menyumbang hampir 22% dari total pendapatan, yang menandakan bahwa genre-genre ini adalah penggerak utama (revenue driver) bagi perusahaan.

Tren Volume Penyewaan Bulanan

tren_data <- dbGetQuery(con, "
  SELECT 
    DATE_FORMAT(rental_date, '%M') AS Bulan, 
    COUNT(rental_id) AS Jumlah_Rental
  FROM rental
  WHERE rental_date BETWEEN '2005-05-01' AND '2005-08-31'
  GROUP BY Bulan
  ORDER BY MIN(rental_date)
")

tren_data$Bulan <- factor(tren_data$Bulan, levels = c("May", "June", "July", "August"))

ggplot(tren_data, aes(x = Bulan, y = Jumlah_Rental, group = 1)) +
  geom_line(color = "#2c3e50", size = 1.2) +
  geom_point(color = "#e74c3c", size = 3) +
  labs(title = "Tren Volume Penyewaan Bulanan",
       x = "Bulan (Tahun 2005)",
       y = "Total Transaksi") +
  theme_minimal()

Berdasarkan grafik tersebut, terdapat lonjakan signifikan pada bulan Juli. Volume penyewan tertinggi terdapat pada bulan Juli, hal tersebut juga menunjukkan bahwa pendapatan tertinggi tahun 2005 ada di bulan Juli.

Peringkat Pendapatan Berdasarkan Kategori

ggplot(data, aes(x = reorder(Kategori, -Total_Revenue), y = Total_Revenue, fill = Total_Revenue)) +
  geom_bar(stat = "identity") +
  scale_fill_gradient(low = "#d4e6f1", high = "#1a5276") +
  labs(title = "Peringkat Pendapatan Berdasarkan Kategori",
       x = "Kategori Film",
       y = "Total Pendapatan (USD)") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1))

Berdasarkan analisis di atas, dapat ditarik kesimpulan bahwa kategori Sports merupakan penggerak utama pendapatan perusahaan dan terdapat hubungan linear positif yang kuat antara jumlah rental dan pendapatan.