Import Data Excel

data_film <- read_excel("C:/Users/khels/Documents/RPUBS/TEST/data_film.xlsx")

data_film
No. judul film genre zona rilis bulan rilis jumlah penonton rating IMDb
1 Jumbo Animasi Lebaran April 10.2 7.8
2 Agak Laen : Menyala Pantiku! Komedi Natal/Tahun Baru November 9.5 7.4
3 Pabrik Gula Horor Lebaran Maret 4.7 6.4
4 Petak Gunung Gede Horor Regular Februari 3.2 6.2
5 Sore : Istri Dari Masa Depan Drama - Romansa Regular Juli 3.1 7.6
6 Komang Drama - Romansa Lebaran Maret 3.0 7.1
7 Jalan Pulang Horor Regular Agustus 2.8 6.3
8 Kang Solah From Kang Mak x Nenek Gayung Komedi - Horor Natal/Tahun Baru Oktober 2.5 6.5
9 Qodrat 2 Horor Lebaran Maret 2.2 6.8
10 Pengepungan di Bukit Duri Thriller Regular September 1.8 6.5
11 KKN di Desa Penari Horor Lebaran Mei 10.0 6.5
12 Dilan 1991 Drama - Romansa Natal/Tahun Baru Februari 5.2 7.0
13 Miracel In Cell No.7 Drama - Keluarga Regular September 5.8 7.5
14 Pengabdi Setan Horor Regular September 4.2 6.7
15 Sewu Dino Horor Lebaran April 4.9 6.3
16 Habibi dan Ainun Drama Natal/Tahun Baru Desemberr 4.5 7.6
17 Ayat - ayat Cinta Drama - Romansa Regular Februari 3.7 7.2
18 Laskar Pelangi Drama Regular September 4.6 8.0
19 Warkop DKI Reborn Komedi Regular September 6.8 6.1
20 Gundala Action Regular Agustus 1.7 6.2

Mengambil Data yang Dibutuhkan

film     <- data_film$`judul film`
penonton <- data_film$`jumlah penonton`
rating   <- data_film$`rating IMDb`

Statistik Deskriptif

stat_desc <- data.frame(
  Ukuran = c("Mean (x̄)", "Median", "Modus", "Kuartil 1 (Q1)", "Kuartil 3 (Q3)",
             "Range (R)", "Varians (s²)", "Std. Deviasi (s)"),
  Nilai  = c(
    round(mean(penonton), 3),
    round(median(penonton), 3),
    as.numeric(names(sort(table(penonton), decreasing = TRUE)[1])),
    round(quantile(penonton, 0.25), 3),
    round(quantile(penonton, 0.75), 3),
    round(max(penonton) - min(penonton), 3),
    round(var(penonton), 3),
    round(sd(penonton), 3)
  )
)

stat_desc %>%
  kbl(align = c("l", "c"), col.names = c("Ukuran Statistik", "Nilai")) %>%
  kable_styling(
    bootstrap_options = c("striped", "hover", "bordered"),
    full_width        = TRUE
  ) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#2c3e50") %>%
  row_spec(c(1, 3, 5, 7), background = "#2a2a2a", color = "white") %>%
  row_spec(c(2, 4, 6, 8), background = "#323232", color = "white") %>%
  column_spec(2, bold = TRUE, color = "#5dade2")
Ukuran Statistik Nilai
Mean (x̄) 4.720
Median 4.350
Modus 1.700
Kuartil 1 (Q1) 2.950
Kuartil 3 (Q3) 5.350
Range (R) 8.500
Varians (s²) 6.757
Std. Deviasi (s) 2.600

Menghitung Persentase

persen    <- round((penonton / sum(penonton)) * 100)
data_plot <- data.frame(film, penonton, persen, rating)

data_plot %>%
  kbl(align = c("l", "c", "c", "c"),
      col.names = c("Judul Film", "Penonton (juta)", "Persentase (%)", "Rating IMDb")) %>%
  kable_styling(
    bootstrap_options = c("striped", "hover", "bordered"),
    full_width        = TRUE
  ) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#2c3e50") %>%
  row_spec(1:20, color = "white") %>%
  column_spec(2:4, bold = TRUE, color = "#5dade2")
Judul Film Penonton (juta) Persentase (%) Rating IMDb
Jumbo 10.2 11 7.8
Agak Laen : Menyala Pantiku! 9.5 10 7.4
Pabrik Gula 4.7 5 6.4
Petak Gunung Gede 3.2 3 6.2
Sore : Istri Dari Masa Depan 3.1 3 7.6
Komang 3.0 3 7.1
Jalan Pulang 2.8 3 6.3
Kang Solah From Kang Mak x Nenek Gayung 2.5 3 6.5
Qodrat 2 2.2 2 6.8
Pengepungan di Bukit Duri 1.8 2 6.5
KKN di Desa Penari 10.0 11 6.5
Dilan 1991 5.2 6 7.0
Miracel In Cell No.7 5.8 6 7.5
Pengabdi Setan 4.2 4 6.7
Sewu Dino 4.9 5 6.3
Habibi dan Ainun 4.5 5 7.6
Ayat - ayat Cinta 3.7 4 7.2
Laskar Pelangi 4.6 5 8.0
Warkop DKI Reborn 6.8 7 6.1
Gundala 1.7 2 6.2

Pie Chart

data_plot$label_legenda <- paste0(data_plot$film, " (", data_plot$persen, "%)")

jumlah_film <- nrow(data_plot)
my_palette  <- colorRampPalette(brewer.pal(12, "Paired"))(jumlah_film)

ggplot(data_plot, aes(x = "", y = penonton,
                      fill = reorder(label_legenda, -penonton))) +
  geom_bar(stat = "identity", width = 1, color = "white", linewidth = 0.3) +
  coord_polar("y") +
  scale_fill_manual(values = my_palette) +
  geom_text(aes(label = paste0(persen, "%")),
            position = position_stack(vjust = 0.5),
            size = 4, fontface = "bold") +
  labs(title = "Persentase Penonton Film Indonesia",
       fill  = "Judul Film & Persentase Penonton") +
  theme_void() +
  theme(
    plot.title       = element_text(hjust = 0.5, size = 26, face = "bold",
                                    margin = margin(b = 20)),
    legend.position  = "bottom",
    legend.title     = element_text(face = "bold", size = 20, margin = margin(b = 10)),
    legend.text      = element_text(size = 14, face = "bold"),
    legend.key.size  = unit(1.2, "cm"),
    legend.spacing.x = unit(0.5, "cm"),
    plot.margin      = margin(1, 1, 1, 1, "cm")
  ) +
  guides(fill = guide_legend(title.position = "top", title.hjust = 0.5,
                             ncol = 4, byrow = TRUE))

Pie chart di atas menunjukkan persentase jumlah penonton dari setiap film Indonesia dalam data yang telah kita analisis. Setiap bagian dalam lingkaran tersebut merepresentasikan kontribusi jumlah penonton suatu film terhadap total keseluruhan penonton.


Bar Chart

ggplot(data_plot, aes(x = reorder(film, -penonton), y = penonton,
                      fill = penonton)) +
  geom_col(show.legend = FALSE) +
  scale_fill_gradient(low = "#85c1e9", high = "#1a5276") +
  geom_text(aes(label = paste0(persen, "%")),
            vjust = -0.5, size = 3, fontface = "bold", color = "#2c3e50") +
  labs(title = "Diagram Jumlah Penonton Film",
       x     = "Judul Film",
       y     = "Jumlah Penonton (juta)") +
  theme_minimal() +
  theme(
    axis.text.x        = element_text(angle = 90, hjust = 1, vjust = 0.5, color = "black"),
    panel.grid.major.x = element_blank(),
    panel.grid.minor   = element_blank()
  )

Bar chart di atas menunjukkan perbandingan volume penonton antar judul film. Di sini terlihat bahwa film yang paling diminati adalah film Jumbo dibandingkan film lainnya.


Dot Plot

ggplot(data_plot, aes(x = penonton, y = reorder(film, penonton))) +
  geom_segment(aes(xend = 0, yend = reorder(film, penonton)),
               color = "grey80", linewidth = 0.6) +
  geom_point(size = 4, color = "#e74c3c") +
  geom_text(aes(label = paste0(penonton, " jt  |  ", persen, "%")),
            hjust = -0.1, size = 3, color = "#2c3e50") +
  labs(title = "Dot Plot Jumlah Penonton Film",
       x     = "Jumlah Penonton (juta)",
       y     = "Judul Film") +
  theme_bw() +
  theme(
    axis.text.y = element_text(face = "bold", size = 9)
  )

Dot plot menampilkan posisi titik-titik yang mendefinisikan banyaknya jumlah penonton dari setiap film. Terlihat juga adanya pengelompokan penonton pada kisaran angka tertentu. Dot plot di atas yang termasuk sekelompok adalah film Gundala, Pengepungan di Bukit Duri, Qodrat, dan Kang Solah yang berada di kelompok terendah yaitu kisaran 1–2,5 juta.


Stem and Leaf Plot

stem(penonton, scale = 2)
## 
##   The decimal point is at the |
## 
##    1 | 78
##    2 | 258
##    3 | 0127
##    4 | 25679
##    5 | 28
##    6 | 8
##    7 | 
##    8 | 
##    9 | 5
##   10 | 02

Pada bagian plot ini menyajikan distribusi frekuensi tapi tetap mempertahankan nilai asli data itu sendiri. Kita dapat melihat di sini sebagian besar film memiliki jumlah penonton pada digit awalnya.


Histogram

ggplot(data_plot, aes(x = penonton)) +
  geom_histogram(bins = 3, fill = "#3498db", color = "white", alpha = 0.85) +
  labs(title = "Histogram Jumlah Penonton Film",
       x     = "Jumlah Penonton (juta)",
       y     = "Frekuensi") +
  theme_minimal() +
  theme(panel.grid.minor = element_blank())

Histogram menggambarkan kepadatan jumlah penonton dalam rentang (bin) tertentu. Mayoritas film dalam data ini memiliki jumlah penonton berkisar antara 4 sampai 8 juta penonton.


Density Plot

mean_penonton <- mean(penonton)

ggplot(data_plot, aes(x = penonton)) +
  geom_density(fill = "lightgreen", alpha = 0.6, color = "#27ae60", linewidth = 1) +
  geom_vline(xintercept = mean_penonton, color = "#e74c3c",
             linetype = "dashed", linewidth = 0.9) +
  annotate("text",
           x     = mean_penonton + 0.3,
           y     = 0.02,
           label = paste0("Mean = ", round(mean_penonton, 1)),
           color = "#e74c3c", hjust = 0, fontface = "bold", size = 3.8) +
  labs(title = "Density Plot Jumlah Penonton Film",
       x     = "Jumlah Penonton (juta)",
       y     = "Density") +
  theme_classic()

Density plot ini menyajikan hampir sama seperti histogram tapi lebih halus. Puncak kurva di atas menunjukkan jumlah penonton yang paling sering muncul pada data. Garis merah putus-putus menandai posisi nilai rata-rata (mean).


Box Plot (Penonton dan Rating)

data_box <- data.frame(
  penonton = penonton,
  rating   = rating
)

data_long <- pivot_longer(data_box,
                          cols      = everything(),
                          names_to  = "variabel",
                          values_to = "nilai")

ggplot(data_long, aes(x = variabel, y = nilai, fill = variabel)) +
  geom_boxplot(alpha = 0.8, outlier.shape = 21, outlier.size = 3,
               outlier.color = "#e74c3c", outlier.fill = "#e74c3c") +
  scale_fill_manual(values = c("penonton" = "#3498db", "rating" = "#f39c12")) +
  labs(title = "Box Plot Jumlah Penonton dan Rating IMDb",
       x     = "Variabel",
       y     = "Nilai") +
  theme_minimal() +
  theme(legend.position = "none")

Box plot ini membandingkan distribusi antara jumlah penonton dan rating IMDb. Pada kolom penonton terlihat adanya titik di luar garis yang mengartikan bahwa adanya film yang sangat sukses secara luar biasa dibanding rata-rata.


Sumber Data

IMDb. (2025). Jumbo – Full Cast & Crew, Rating & Reviews. Internet Movie Database. https://www.imdb.com/title/tt33479839/

Wikipedia. (2025). Daftar Film Indonesia Terlaris Sepanjang Masa. Wikimedia Foundation. https://id.wikipedia.org/wiki/Daftar_film_Indonesia_terlaris_sepanjang_masa

CNN Indonesia. (2025). Daftar 10 Film Indonesia Terlaris 2025. CNN Indonesia. https://www.cnnindonesia.com/hiburan/20251212154034-220-1306024/daftar-10-film-indonesia-terlaris-2025