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.