UTS_OSCAR

1 Data Collection

Dilakukan proses pengambilan data dari website Academy Awards yang menggunakan teknik AJAX. Data diambil dengan mengakses endpoint halaman yang memuat informasi film, tahun, dan kategori penghargaan.

library(rvest)
library(dplyr)
library(knitr)
library(kableExtra)

url <- "https://en.wikipedia.org/wiki/List_of_Academy_Award-winning_films"

page <- read_html(url)

tables <- page %>% html_elements("table")

df_oscar <- tables[[1]] %>% html_table()

colnames(df_oscar) <- c("Film", "Year", "Awards", "Nominations")

# tampilkan data (rapi)
n <- min(5, nrow(df_oscar))
kable(df_oscar[1:n, ], align = "c") %>%
  kable_styling(full_width = TRUE) %>%
  row_spec(0, bold = TRUE, background = "#8B1E3F", color = "white") %>%
  row_spec(1:n, background = "#F9F9F9")
Film Year Awards Nominations
One Battle After Another 2025 6 13
Sinners 2025 4 16
Frankenstein 2025 3 9
KPop Demon Hunters 2025 2 2
Hamnet 2025 1 8
# jumlah data
summary_df <- data.frame(
  Informasi = "Jumlah Data",
  Nilai = nrow(df_oscar)
)

kable(summary_df, align = "c") %>%
  kable_styling(full_width = TRUE) %>%
  row_spec(0, bold = TRUE, background = "#8B1E3F", color = "white")
Informasi Nilai
Jumlah Data 1401
library(dplyr)
library(knitr)
library(kableExtra)

summary_df <- data.frame(
  Informasi = c("Jumlah Baris", "Jumlah Kolom", "Missing Values"),
  Nilai = c(nrow(df_oscar), ncol(df_oscar), sum(is.na(df_oscar)))
)

kable(summary_df, align = "c") %>%
  kable_styling(full_width = TRUE) %>%
  row_spec(0, bold = TRUE, background = "#8B1E3F", color = "white") %>%
  row_spec(1:nrow(summary_df), background = "#F9F9F9")
Informasi Nilai
Jumlah Baris 1401
Jumlah Kolom 4
Missing Values 0

Data diambil dari sumber alternatif yaitu Wikipedia yang menyediakan data dalam bentuk HTML statis. Pendekatan ini digunakan karena halaman utama menggunakan teknik AJAX yang tidak dapat diakses secara langsung dengan metode scraping standar.

Data yang diperoleh meliputi judul film, tahun, jumlah penghargaan, dan nominasi, sehingga dapat digunakan untuk proses analisis selanjutnya.

2 Data Understanding

Dilakukan proses pemahaman terhadap dataset hasil scraping untuk mengetahui jumlah data, struktur kolom, serta memastikan tidak terdapat missing values. Tahap ini penting untuk memastikan kualitas data sebelum digunakan dalam proses analisis.

summary_df <- data.frame(
  Informasi = c("Jumlah Baris", "Jumlah Kolom", "Missing Values"),
  Nilai = c(nrow(df_oscar), ncol(df_oscar), sum(is.na(df_oscar)))
)

kable(summary_df, align = "c") %>%
  kable_styling(full_width = TRUE) %>%
  row_spec(0, bold = TRUE, background = "#8B1E3F", color = "white") %>%
  row_spec(1:nrow(summary_df), background = "#F9F9F9")
Informasi Nilai
Jumlah Baris 1401
Jumlah Kolom 4
Missing Values 0

Berdasarkan hasil analisis, dataset memiliki jumlah data yang besar dengan struktur kolom yang jelas. Tidak ditemukan missing values pada data, sehingga dataset dapat dikatakan lengkap dan siap digunakan untuk proses analisis selanjutnya.

3 Data Cleaning

Dilakukan proses pembersihan data untuk memastikan setiap kolom memiliki format yang konsisten dan siap digunakan untuk analisis. Tahap ini meliputi penghapusan spasi berlebih serta konversi tipe data numerik pada kolom yang relevan.

library(dplyr)
library(knitr)
library(kableExtra)

df_clean <- df_oscar %>%
  mutate(
    Film = trimws(Film),
    Year = as.integer(Year),
    Awards = suppressWarnings(as.integer(Awards)),
    Nominations = suppressWarnings(as.integer(Nominations))
  ) %>%
  filter(!is.na(Awards) & Awards >= 0)   # 🔥 buang semua yg bermasalah

# cek tipe data
structure_df <- data.frame(
  Kolom = names(df_clean),
  Tipe_Data = sapply(df_clean, class),
  row.names = NULL
)

kable(structure_df, align = "c") %>%
  kable_styling(full_width = TRUE) %>%
  row_spec(0, bold = TRUE, background = "#8B1E3F", color = "white") %>%
  row_spec(1:nrow(structure_df), background = "#F9F9F9")
Kolom Tipe_Data
Film character
Year integer
Awards integer
Nominations integer

Hasil proses cleaning menunjukkan bahwa seluruh kolom telah memiliki format yang konsisten. Kolom numerik seperti Year, Awards, dan Nominations telah berhasil dikonversi ke tipe data integer, sehingga data siap digunakan untuk proses analisis selanjutnya.

4 Conditional Logic

Dilakukan penerapan conditional logic untuk mengelompokkan film berdasarkan jumlah penghargaan yang diperoleh. Klasifikasi ini bertujuan untuk membedakan film dengan penghargaan tinggi dan rendah.

df_logic <- df_clean %>%
  mutate(
    Award_Category = ifelse(Awards >= 5, "High", "Low")
  ) %>%
  filter(!is.na(Award_Category))   # 🔥 double safety

summary_logic <- df_logic %>%
  count(Award_Category)

kable(summary_logic, align = "c") %>%
  kable_styling(full_width = TRUE) %>%
  row_spec(0, bold = TRUE, background = "#8B1E3F", color = "white") %>%
  row_spec(1:nrow(summary_logic), background = "#F9F9F9")
Award_Category n
High 65
Low 1285

Hasil klasifikasi menunjukkan bahwa sebagian besar film berada dalam kategori penghargaan rendah (Low), sedangkan hanya sebagian kecil yang memiliki jumlah penghargaan tinggi (High). Hal ini menunjukkan distribusi penghargaan yang tidak merata dalam dataset.

5 Analytical Thinking

Berdasarkan hasil scraping dan pengolahan data, diperoleh dataset yang berisi informasi film pemenang Academy Awards dengan jumlah data yang cukup besar. Data mencakup judul film, tahun, jumlah penghargaan, dan nominasi.

Setelah dilakukan proses cleaning, data yang memiliki nilai kosong pada kolom Awards telah dihapus sehingga dataset menjadi lebih konsisten dan siap untuk dianalisis. Hal ini memastikan bahwa hasil analisis yang dilakukan tidak terpengaruh oleh data yang tidak valid.

Berdasarkan hasil klasifikasi, sebagian besar film berada dalam kategori penghargaan rendah (Low), sedangkan hanya sebagian kecil yang termasuk dalam kategori penghargaan tinggi (High). Hal ini menunjukkan bahwa distribusi penghargaan dalam dataset tidak merata, di mana hanya sedikit film yang memperoleh penghargaan dalam jumlah besar.

Secara keseluruhan, dataset memiliki kualitas yang baik dan dapat digunakan untuk analisis lebih lanjut, seperti tren penghargaan berdasarkan tahun atau hubungan antara jumlah nominasi dan penghargaan yang diperoleh.