Analisis Data Film Tahun 2015 -2020 dengan Web Scraping menggunakan R
Assalamualaikum Wr. Wb.
hai data enthusiast! Kali ini kita akan menganalisis data film pada tahun 2015-2020 dengan Web Scraping menggunakan aplikasi R. Data ini diperoleh dari IMDb (Internet Movie Database) https://www.imdb.com yang disusun berdasar popularitas film dan kemudian menyajikan hasil analisis dalam bentuk tabel.
Hasil dari analisis tersebut akan menjawab beberapa pertanyaan, diantaranya :
- Buatlah grafik garis untuk rata-rata gross pendapatan film pada tahun 2015–2020
- Adakah perubahan trend genre kesukaan masyarakat terhadap film di tahun 2015, 2016, 2017, 2018, 2019 dan 2020?
- Berilah masukan pada produser film, film seperti apakah yang sebaiknya di produksi.
Pertama, buka aplikasi R dan install package berikut
install.packages("xml2")
library(xml2)
install.packages("rvest")
library(rvest)
sehingga pada R console akan muncul sebagai berikut :
kemudian kita lihat alamat dari halaman website yang kita inginkan di IMDb yaitu data popularitas film pada tahun 2015 yang dapat dilihat melalui tautan ini
masukkan dalam R syntax seperti berikut,
alamatweb1 <- 'https://www.imdb.com/search/title/?count=100&release_date=2015,2015&title_type=feature'
lamanweb1 <- read_html(alamatweb1)
lamanweb1
akan muncul output seperti berikut
Langkah selanjutnya yaitu mengambil data genre film yang ada di halaman web. Untuk mengetahui posisi dimana letak genre dalam halaman html maka kita perlu menggunakan aplikasi “SelectorGadget” yang bisa langsung di download dan ditempelkan dalam Chrome.
kemudian tambahkan dalam chrome, sehingga terlihat ikon kecil di kanan atas pada halaman chrome bahwa “SelectorGadget” telah terpasang.
untuk mengambil data genre, klik ikon SelectorGadget lalu arahkan ke bagian genre dan klik bagian tersebut.
Selanjutnya akan dilakukan pengambilan data genre, mengambil data text genre, menghilangkan tanda “\n”, menghilangkan spasi kosong, mengambil deskripsi pertama genre, dan mengkonversi data menjadi faktor dengan cara running syntax berikut :
#mengambil data genre
genre_data_laman1 <- html_nodes(lamanweb1,'.genre')
genre_data_laman1#ambil data text genre
genre_data1 <- html_text(genre_data_laman1)
genre_data1#hilangkan tanda "\n"
genre_data1<-gsub("\n","",genre_data1)
genre_data1#hilangkan spasi kosong
genre_data1<-gsub(" ","",genre_data1)
genre_data1#karena satu film bisa beberapa genre, maka setiap film hanya dikategorikan pada deskripsi genre yang pertama saja
genre_data1<-gsub(",.*","",genre_data1)
genre_data1#mengkonversi data genre berupa text menjadi faktor
genre_data1<-as.factor(genre_data1)
head(genre_data1)
Pada output akan muncul tampilan sebagai berikut
berikutnya,
berikutnya,
berikutnya,
berikutnya,
berikutnya,
Sehingga data genre sudah berhasil kita dapatkan. Selanjutnya kita akan mengambil data rating menggunakan syntax sebagai berikut :
#mengambil data rating
rating_data_laman1 <- html_nodes(lamanweb1,'.ratings-imdb-rating strong')
rating_data_laman1# mengambil data text rating
rating_data1 <- html_text(rating_data_laman1)
rating_data1# dikonversi dalam numerik
rating_data1<-as.numeric(rating_data1)
rating_data1
Pada output akan muncul tampilan sebagai berikut
berikutnya,
Sehingga data rating sudah berhasil kita dapatkan. Selanjutnya kita akan mengambil data gross menggunakan syntax sebagai berikut :
#mengambil data gross
gross_data_laman1 <- html_nodes(lamanweb1,'.ghost~ .text-muted+ span')
gross_data1 <- html_text(gross_data_laman1)
gross_data1# menghilangkan huruf M dan $
gross_data1<-gsub("M","",gross_data1)
gross_data1<-substring(gross_data1,2,6)
gross_data1# cek jumlah data gross_data, karena tidak semua film memuat gross data
length(gross_data1)
Pada output akan muncul tampilan sebagai berikut
berikutnya,
Berdasarkan output tersebut, ternyata hanya terdapat 91 film yang memuat data gross dari total 100 film. Kita dapat mengecek halaman web nya dan memeriksa nomer berapa sajakah yang tidak ada nilai gross nya (perlu diingat bahwa popularitas film bergerak terus, sehingga bisa jadi urutan film ketika materi ini dibuat akan berbeda dengan ketika anda mencoba saat ini)
Kemudian nilai-nilai yang kosong direkap secara manual dan diganti dengan nilai “NA” lalu mengkonversi data gross menjadi numerik dengan menggunakan syntax berikut
# Missing data diganti dengan nilai NA
for (i in c(3,23,51,66,73,76,85,92,97))
{
a<-gross_data1[1:(i-1)]
b<-gross_data1[i:length(gross_data1)]
gross_data1<-append(a,list("NA"))
gross_data1<-append(gross_data1,b)
}# data gross dikonversi menjadi numerik
gross_data1<-as.numeric(gross_data1)
length(gross_data1)
summary(gross_data1)
Pada output akan muncul tampilan sebagai berikut
Sehingga kita sudah berhasil mendapatkan data genre, rating, dan gross.
Ulangi langkah diatas dari membaca alamat web hingga mengambil data gross untuk data popularitas film pada tahun 2016 sampai 2020.
data popularitas film pada tahun 2016 dapat dilihat melalui tautan ini
data popularitas film pada tahun 2017 dapat dilihat melalui tautan ini
data popularitas film pada tahun 2018 dapat dilihat melalui tautan ini
data popularitas film pada tahun 2019 dapat dilihat melalui tautan ini
data popularitas film pada tahun 2020 dapat dilihat melalui tautan ini
Setelah kita mendapatkan data genre, rating, dan gross dari data popularitas film pada tahun 2015–2020, kita dapat melihat summary dari data gross dengan menggunakan syntax berikut
#melihat summary
summary(gross_data1)
summary(gross_data2)
summary(gross_data3)
summary(gross_data4)
summary(gross_data5)
summary(gross_data6)
Pada output akan muncul tampilan sabagai berikut
Kemudian, kita membuat data frame dari data nilai rata-rata gross pendapatan film dan tahun menggunakan syntax berikut
#dijadikan data frame
rata2_gross <-c("95.95","91.77","104.18","103.26","152.6","102.79")
tahun <-c("2015","2016","2017","2018","2019","2020")
kumpulan_data_gross <-data.frame(tahun,rata2_gross)
kumpulan_data_gross
Pada output akan muncul tampilan sebagai berikut
Untuk menjawab studi kasus no 1, kita akan membuat grafik garis untuk rata-rata gross pendapatan film pada tahun 2015–2020 menggunakan syntax berikut
#Membuat plot
plot(kumpulan_data_gross, main = "Rata-rata gross pendapatan film tahun 2015-2020",
lwd= 2, col = "red", xlim = c(2015,2020),type="l",pch=15)
Pada output akan muncul tampilan sebagai berikut
Pada plot tersebut dapat dilihat bahwa rata-rata gross pendapatan film tahun 2015–2020 paling tinggi yaitu pada tahun 2019 sedangkan paling rendah yaitu pada tahun 2016.
Selanjutnya, untuk melihat apakah ada perubahan trend genre kesukaan masyarakat terhadap film di tahun 2015, 2016, 2017, 2018, 2019 dan 2020, kita membuat data frame terlebih dahulu yang memuat data genre dan rating dari film setiap tahunnya menggunakan syntax sebagai berikut
#data dikumpulkan menjadi data frame
kumpulan_data_film1 <-data.frame(Genre2015 = genre_data1, Rating2015 = rating_data1)
str(kumpulan_data_film1)kumpulan_data_film2 <-data.frame(Genre2016 = genre_data2, Rating2016 = rating_data2)
str(kumpulan_data_film2)kumpulan_data_film3 <-data.frame(Genre2017 = genre_data3, Rating2017 = rating_data3)
str(kumpulan_data_film3)kumpulan_data_film4 <-data.frame(Genre2018 = genre_data4, Rating2018 = rating_data4)
str(kumpulan_data_film4)kumpulan_data_film5 <-data.frame(Genre2019 = genre_data5, Rating2019 = rating_data5)
str(kumpulan_data_film5)kumpulan_data_film6 <-data.frame(Genre2020 = genre_data6, Rating2020 = rating_data6)
str(kumpulan_data_film6)
Pada output akan muncul tampilan sebagai berikut
Selanjutnya, kita akan membuat tiga plot dari data frame sebelumnya yang memuat data genre dan rating film tahun 2015–2020 dengan menggunakan syntax berikut
#membuat plot
library(ggplot2)#data2015
qplot(data = kumpulan_data_film1,Rating2015,fill = Genre2015,bins = 30)
ggplot(kumpulan_data_film1,aes(x=Rating2015,y=Genre2015))+
geom_point(aes(size=Rating2015,col=Genre2015))
plot(genre_data1,main="Data Genre 2015",col="red")#data2016
qplot(data = kumpulan_data_film2,Rating2016,fill = Genre2016,bins = 30)
ggplot(kumpulan_data_film2,aes(x=Rating2016,y=Genre2016))+
geom_point(aes(size=Rating2016,col=Genre2016))
plot(genre_data2,main="Data Genre 2016",col="blue")#data2017
qplot(data = kumpulan_data_film3,Rating2017,fill = Genre2017,bins = 30)
ggplot(kumpulan_data_film3,aes(x=Rating2017,y=Genre2017))+
geom_point(aes(size=Rating2017,col=Genre2017))
plot(genre_data3,main="Data Genre 2017",col="green")#data2018
qplot(data = kumpulan_data_film4,Rating2018,fill = Genre2018,bins = 30)
ggplot(kumpulan_data_film4,aes(x=Rating2018,y=Genre2018))+
geom_point(aes(size=Rating2018,col=Genre2018))
plot(genre_data4,main="Data Genre 2018",col="orange")#data2019
qplot(data = kumpulan_data_film5,Rating2019,fill = Genre2019,bins = 30)
ggplot(kumpulan_data_film5,aes(x=Rating2019,y=Genre2019))+
geom_point(aes(size=Rating2019,col=Genre2019))
plot(genre_data5,main="Data Genre 2019",col="purple")#data2020
qplot(data = kumpulan_data_film6,Rating2020,fill = Genre2020,bins = 30)
ggplot(kumpulan_data_film6,aes(x=Rating2020,y=Genre2020))+
geom_point(aes(size=Genre2020,col=Rating2020))
plot(genre_data6,main="Data Genre 2020",col="brown")
Pada output akan muncul tampilan plot pertama sebagai berikut
plot kedua sebagai berikut
dan plot ketiga sebagai berikut
Berdasarkan plot tersebut dapat dilihat bahwa terjadi perubahan trend genre kesukaan masyarakat terhadap film di tahun 2015–2020 dan dapat disimpulkan bahwa genre action merupakan genre yang paling disukai masyarakat dari tahun 2015–2020 karena mempunyai rating tertinggi pada tahun tersebut.
Berdasarkan plot yang diperoleh dari data film tahun 2015–2020, dapat dilihat bahwa genre action merupakan genre yang paling disukai masyarakat, sehingga produser film mungkin dapat memproduksi film dengan genre action yang menarik agar memperoleh banyak penonton. Selain genre action, genre comedy dan drama mempunyai peningkatan rating pada tiga tahun terakhir yang menunjukkan bahwa banyak masyarakat mulai menyukai film dengan genre comedy dan drama. Sehingga, produser film mungkin dapat memproduksi film dengan genre tersebut agar memperoleh banyak penonton.
Sekian materi kali ini, semoga bermanfaat untuk teman-teman!:)
Wassalamualaikum Wr. Wb.
Referensi :
https://medium.com/@986110101/web-scraping-dengan-r-53d07fb81fc9