Tutorial : Web Scraping di R dengan rvest
Assalamu’alaikum Warahmatullahi Wabarakatuh.
Apa itu Web Scraping?
Web scraping, merupakan kegiatan yang dilakukan untuk mengambil data tertentu secara semi-terstruktur dari sebuah halaman website . Halaman tersebut umumnya dibangun menggunakan bahasa markup seperti HTML atau XHTML, proses akan menganalisis dokumen sebelum memulai mengambil data.
Data yang akan digunakan untuk scraping kali ini adalah data dari IMDb (Internet Movie Database) https://www.imdb.com/ untuk film dari tahun 2015 hingga 2020 yang diurutkan berdasarkan popularity-nya.
Untuk scraping-nya akan dilakukan dari tahun per tahun, berikut untuk melihat data Film tahun 2015 ada dalam link ini .
Atau bisa langsung pada tautan berikut untuk 2016, 2017, 2018, 2019 dan 2020.
Tidak hanya terkait dengan popularitas filmnya, tetapi juga akan digunakan genre, rating, runtime dan juga gross pendapatan dari film tersebut. Langkah pertama yang dapat dilakukan adalah membuka software R dan menginstall package yang akan digunakan yakni seperti berikut.
> install.packages("xml2")
> library(xml2)
> install.packages("rvest")
> library(rvest)
> install.package("dplyr")
> library(dplyr)
> install.library("ggplot2")
> library(ggplot2)
pertama, kita akan memasukkan link website yang akan di-scraping, gunakan perintah seperti berikut,
#Memasukkan link alamat web yang akan discraping
alamatweb2015 <- 'https://www.imdb.com/search/title/?count=100&release_date=2015&title_type=feature'
lamanweb2015 <- read_html(alamatweb2015)
lamanweb2015
selanjutnya mengambil data runtime film dari halaman website,
untuk mengetahui letak gross pada html, diperlukan selector gadget. Jika belum terdapat pada laman chrome kalian, bisa di download terlebih dahulu,
akan muncul icon “Selector Gadget” pada bagian pojok kanan atas seperti berikut,
untuk menggunakannya cukup dengan click pada ikon selector lalu arahkan kursor dan click pada bagian runtime yang akan diambil datanya, lakukan hal yang sama seperti diatas untuk tahun 2016, 2017, 2018, 2019 dan 2020
jalankan perintah berikut untuk mengambil data runtime 2015,
#Mengambil data runtime
runtime_data_laman2015 <- html_nodes(lamanweb2015,'.runtime')
runtime_data_laman2015
runtime_data2015<- html_text(runtime_data_laman2015)
runtime_data2015
head(runtime_data2015)runtime_data2015 <- gsub(" min","",runtime_data2015)
runtime_data2015
runtime_data2015<-as.numeric(runtime_data2015)
runtime_data2015
hasilnya seperti berikut,
kemudian, mengambil data genre 2015 dengan perintah berikut,
#Mengambil data genre
genre_data_laman2015 <- html_nodes(lamanweb2015,'.genre')
genre_data_laman2015#kita ambil data text genre
genre_data2015 <- html_text(genre_data_laman2015)
# kemudian kita lihat data tersebut
genre_data2015# karena masih banyak memuat tanda "\n" maka kita hilangkan terlebih dahulu
genre_data2015<-gsub("\n","",genre_data2015)
genre_data2015# kita hilangkan juga spasi kosong
genre_data2015<-gsub(" ","",genre_data2015)
genre_data2015# karena satu film bisa beberapa genre, maka setiap film hanya
# dikategorikan pada deskripsi genre yang pertama saja
genre_data2015<-gsub(",.*","",genre_data2015)
genre_data2015# mengkonversi data genre berupa text menjadi faktor
genre_data2015<-as.factor(genre_data2015)# kita lihat lagi hasilnya
head(genre_data2015)
hasilnya seperti berikut,
lalu, mengambil data rating 2015 jalankan perintah berikut,
#Mengambil data rating
rating_data_laman2015 <- html_nodes(lamanweb2015,'.ratings-imdb-rating strong')
rating_data_laman2015rating_data2015 <- html_text(rating_data_laman2015)
rating_data2015rating_data2015<-as.numeric(rating_data2015)
rating_data2015
muncul hasil seperti berikut,
mengambil data gross 2015 dengan perintah berikut,
#Mengambil data gross pendapatan
gross_data_laman2015 <- html_nodes(lamanweb2015,'.ghost~ .text-muted+ span')
gross_data2015 <- html_text(gross_data_laman2015)
gross_data2015# menghilangkan huruf M dan $
gross_data2015<-gsub("M","",gross_data2015)
gross_data2015<-substring(gross_data2015,2,6)
gross_data2015# cek jumlah data gross_data, karena tidak semua film memuat gross
# data
length(gross_data2015)
hasilnya seperti berikut,
kemudian, menghitung nilai mean gross 2015 dengan perintah berikut,
# data gross dikonversi menjadi numerik
gross_data2015<-as.numeric(gross_data2015)
summary(gross_data2015)
#Mencari nilai mean gross data 2015
mean_gross2015 <- mean(gross_data2015)
mean_gross2015
muncul hasil berikut,
untuk tahun 2016, kita akan mencari data yang sama seperti 2015. Jalankan perintah berikut untuk data runtime 2016,
#Memasukkan link alamat web yang akan discraping
alamatweb2016 <- 'https://www.imdb.com/search/title/?count=100&release_date=2016&title_type=feature'
lamanweb2016 <- read_html(alamatweb2016)
lamanweb2016#Mengambil data runtime
runtime_data_laman2016 <- html_nodes(lamanweb2016,'.runtime')
runtime_data_laman2016
runtime_data2016<- html_text(runtime_data_laman2016)
runtime_data2016
head(runtime_data2016)runtime_data2016 <- gsub(" min","",runtime_data2016)
runtime_data2016
runtime_data2016<-as.numeric(runtime_data2016)
runtime_data2016
muncul hasil seperti berikut,
lanjut, untuk mengambil data genre 2016 dengan perintah berikut,
#Mengambil data genre
genre_data_laman2016 <- html_nodes(lamanweb2016,'.genre')
genre_data_laman2016#kita ambil data text genre
genre_data2016 <- html_text(genre_data_laman2016)
# kemudian kita lihat data tersebut
genre_data2016# karena masih banyak memuat tanda "\n" maka kita hilangkan terlebih dahulu
genre_data2016<-gsub("\n","",genre_data2016)
genre_data2016# kita hilangkan juga spasi kosong
genre_data2016<-gsub(" ","",genre_data2016)
genre_data2016# karena satu film bisa beberapa genre, maka setiap film hanya
# dikategorikan pada deskripsi genre yang pertama saja
genre_data2016<-gsub(",.*","",genre_data2016)
genre_data2016# mengkonversi data genre berupa text menjadi faktor
genre_data2016<-as.factor(genre_data2016)# kita lihat lagi hasilnya
head(genre_data2016)
hasilnya seperti berikut,
lalu ambil data rating 2016 dengan jalankan perintah berikut,
#Mengambil data rating
rating_data_laman2016 <- html_nodes(lamanweb2016,'.ratings-imdb-rating strong')
rating_data_laman2016rating_data2016 <- html_text(rating_data_laman2016)
rating_data2016rating_data2016<-as.numeric(rating_data2016)
rating_data2016
muncul hasil berikut,
setelah itu ambil data gross pendapatan 2016 dengan perintah berikut,
#Mengambil data gross pendapatan
gross_data_laman2016 <- html_nodes(lamanweb2016,'.ghost~ .text-muted+ span')
gross_data2016 <- html_text(gross_data_laman2016)
gross_data2016# menghilangkan huruf M dan $
gross_data2016<-gsub("M","",gross_data2016)
gross_data2016<-substring(gross_data2016,2,6)
gross_data2016# cek jumlah data gross_data, karena tidak semua film memuat gross
# data
length(gross_data2016)
hasilnya seperti berikut,
dan mencari nilai rata-rata gross 2016 dengan perintah berikut,
# data gross dikonversi menjadi numerik
gross_data2016<-as.numeric(gross_data2016)
summary(gross_data2016)
#Mencari nilai mean gross data 2016
mean_gross2016 <- mean(gross_data2016)
mean_gross2016
hasilnya seperti berikut,
kita lanjut untuk scrap halaman web tahun 2017, lakukan perintah berikut untuk mengambil data runtime 2017,
#Memasukkan link alamat web yang akan discraping
alamatweb2017 <- 'https://www.imdb.com/search/title/?count=100&release_date=2017&title_type=feature'
lamanweb2017 <- read_html(alamatweb2017)
lamanweb2017#Mengambil data runtime
runtime_data_laman2017 <- html_nodes(lamanweb2017,'.runtime')
runtime_data_laman2017
runtime_data2017<- html_text(runtime_data_laman2017)
runtime_data2017
head(runtime_data2017)runtime_data2017 <- gsub(" min","",runtime_data2017)
runtime_data2017
runtime_data2017<-as.numeric(runtime_data2017)
runtime_data2017
muncul hasil berikut,
lakukan perintah berikut untuk data genre 2017,
#Mengambil data genre
genre_data_laman2017 <- html_nodes(lamanweb2017,'.genre')
genre_data_laman2017#kita ambil data text genre
genre_data2017 <- html_text(genre_data_laman2017)
# kemudian kita lihat data tersebut
genre_data2017# karena masih banyak memuat tanda "\n" maka kita hilangkan terlebih dahulu
genre_data2017<-gsub("\n","",genre_data2017)
genre_data2017# kita hilangkan juga spasi kosong
genre_data2017<-gsub(" ","",genre_data2017)
genre_data2017# karena satu film bisa beberapa genre, maka setiap film hanya
# dikategorikan pada deskripsi genre yang pertama saja
genre_data2017<-gsub(",.*","",genre_data2017)
genre_data2017# mengkonversi data genre berupa text menjadi faktor
genre_data2017<-as.factor(genre_data2017)# kita lihat lagi hasilnya
head(genre_data2017)
hasilnya adalah seperti berikut,
setelah data genre, kita ambil untuk data rating 2017 dengan perintah berikut,
#Mengambil data rating
rating_data_laman2017 <- html_nodes(lamanweb2017,'.ratings-imdb-rating strong')
rating_data_laman2017rating_data2017 <- html_text(rating_data_laman2017)
rating_data2017
rating_data2017<-as.numeric(rating_data2017)
rating_data2017
muncul hasil berikut,
kita lanjut untuk mengambil data gross pendapatan 2017 dengan perintah berikut,
#Mengambil data gross pendapatan
gross_data_laman2017 <- html_nodes(lamanweb2017,'.ghost~ .text-muted+ span')
gross_data2017 <- html_text(gross_data_laman2017)
gross_data2017# menghilangkan huruf M dan $
gross_data2017<-gsub("M","",gross_data2017)
gross_data2017<-substring(gross_data2017,2,6)
gross_data2017# cek jumlah data gross_data, karena tidak semua film memuat gross
# data
length(gross_data2017)
hasilnya adalah berikut,
dan mencari nilai rata-rata gross 2017 dengan perintah berikut,
# data gross dikonversi menjadi numerik
gross_data2017<-as.numeric(gross_data2017)
summary(gross_data2017)#Mencari nilai mean gross data 2017
mean_gross2017 <- mean(gross_data2017)
mean_gross2017
hasilnya sebagai berikut,
selanjutnya tahun 2018, perintah berikut untuk data runtime 2018
library(xml2)
library(rvest)#Memasukkan link alamat web yang akan discraping
alamatweb2018 <- 'https://www.imdb.com/search/title/?count=100&release_date=2018&title_type=feature'
lamanweb2018 <- read_html(alamatweb2018)
lamanweb2018#Mengambil data runtime
runtime_data_laman2018 <- html_nodes(lamanweb2018,'.runtime')
runtime_data_laman2018
runtime_data2018<- html_text(runtime_data_laman2018)
runtime_data2018
head(runtime_data2018)runtime_data2018 <- gsub(" min","",runtime_data2018)
runtime_data2018
runtime_data2018<-as.numeric(runtime_data2018)
runtime_data2018
muncul hasil seperti berikut,
lalu, untuk data genre 2018 gunakan perintah berikut,
#Mengambil data genre
genre_data_laman2018 <- html_nodes(lamanweb2018,'.genre')
genre_data_laman2018#kita ambil data text genre
genre_data2018 <- html_text(genre_data_laman2018)
# kemudian kita lihat data tersebut
genre_data2018# karena masih banyak memuat tanda "\n" maka kita hilangkan terlebih dahulu
genre_data2018 <-gsub("\n","",genre_data2018)
genre_data2018# kita hilangkan juga spasi kosong
genre_data2018 <-gsub(" ","",genre_data2018)
genre_data2018# karena satu film bisa beberapa genre, maka setiap film hanya
# dikategorikan pada deskripsi genre yang pertama saja
genre_data2018 <-gsub(",.*","",genre_data2018)
genre_data2018# mengkonversi data genre berupa text menjadi faktor
genre_data2018 <-as.factor(genre_data2018)# kita lihat lagi hasilnya
head(genre_data2018)
akan muncul hasil berikut,
kemudian, lanjut untuk data rating 2018 menggunakan perintah dibawah,
#Mengambil data rating
rating_data_laman2018 <- html_nodes(lamanweb2018,'.ratings-imdb-rating strong')
rating_data_laman2018rating_data2018 <- html_text(rating_data_laman2018)
rating_data2018
rating_data2018<-as.numeric(rating_data2018)
rating_data2018
hasilnya adalah berikut,
untuk data gross pendapatan 2018 dengan menggunakan perintah berikut,
#Mengambil data gross pendapatan
gross_data_laman2018 <- html_nodes(lamanweb2018,'.ghost~ .text-muted+ span')
gross_data2018 <- html_text(gross_data_laman2018)
gross_data2018# menghilangkan huruf M dan $
gross_data2018<-gsub("M","",gross_data2018)
gross_data2018<-substring(gross_data2018,2,6)
gross_data2018#cek jumlah data gross_data, karena tidak semua film memuat gross
length(gross_data2018)
hasilnya adalah berikut,
dan mencari nilai rata-rata gross 2018 dengan perintah berikut,
# data gross dikonversi menjadi numerik
gross_data2018<-as.numeric(gross_data2018)
summary(gross_data2018)
#Mencari nilai mean gross data 2018
mean_gross2018 <- mean(gross_data2018)
mean_gross2018
muncul hasil berikut,
selanjutnya, untuk data tahun 2019. Berikut perintah untuk data runtime 2019,
#Memasukkan link alamat web yang akan discraping
alamatweb2019 <- 'https://www.imdb.com/search/title/?count=100&release_date=2019&title_type=feature'
lamanweb2019 <- read_html(alamatweb2019)
lamanweb2019#Mengambil data runtime
runtime_data_laman2019 <- html_nodes(lamanweb2019,'.runtime')
runtime_data_laman2019
runtime_data2019<- html_text(runtime_data_laman2019)
runtime_data2019
head(runtime_data2019)runtime_data2019 <- gsub(" min","",runtime_data2019)
runtime_data2019
runtime_data2019<-as.numeric(runtime_data2019)
runtime_data2019
length(runtime_data2019)
maka hasilnya seperti berikut,
untuk data genre 2019 jalankan perintah berikut,
#Mengambil data genre
genre_data_laman2019 <- html_nodes(lamanweb2019,'.genre')
genre_data_laman2019#kita ambil data text genre
genre_data2019 <- html_text(genre_data_laman2019)
# kemudian kita lihat data tersebut
genre_data2019# karena masih banyak memuat tanda "\n" maka kita hilangkan terlebih dahulu
genre_data2019 <-gsub("\n","",genre_data2019)
genre_data2019# kita hilangkan juga spasi kosong
genre_data2019 <-gsub(" ","",genre_data2019)
genre_data2019# karena satu film bisa beberapa genre, maka setiap film hanya
# dikategorikan pada deskripsi genre yang pertama saja
genre_data2019 <-gsub(",.*","",genre_data2019)
genre_data2019# mengkonversi data genre berupa text menjadi faktor
genre_data2019 <-as.factor(genre_data2019)# kita lihat lagi hasilnya
head(genre_data2019)
berikut adalah hasilnya,
lalu, untuk data rating 2019
#Mengambil data rating
rating_data_laman2019 <- html_nodes(lamanweb2019,'.ratings-imdb-rating strong')
rating_data_laman2019rating_data2019 <- html_text(rating_data_laman2019)
rating_data2019
rating_data2019<-as.numeric(rating_data2019)
rating_data2019
hasilnya adalah berikut,
selanjutnya untuk data gross 2019,
#Mengambil data gross pendapatan
gross_data_laman2019 <- html_nodes(lamanweb2019,'.ghost~ .text-muted+ span')
gross_data2019 <- html_text(gross_data_laman2019)
gross_data2019# menghilangkan huruf M dan $
gross_data2019 <-gsub("M","",gross_data2019)
gross_data2019 <-substring(gross_data2019,2,6)
gross_data2019# cek jumlah data gross_data, karena tidak semua film memuat gross
# data
length(gross_data2019)
hasilnya seperti berikut,
dan mencari nilai rata-rata (mean) data gross 2019,
# data gross dikonversi menjadi numerik
gross_data2019 <-as.numeric(gross_data2019)
summary(gross_data2019)
#Mencari nilai mean gross data 2019
mean_gross2019 <- mean(gross_data2019)
mean_gross2019
hasilnya adalah berikut,
kemudian untuk tahun terakhir yaitu 2020, berikut perintah untuk data runtime 2020,
#Memasukkan link alamat web yang akan discraping
alamatweb2020 <- 'https://www.imdb.com/search/title/?count=100&release_date=2020&title_type=feature'
lamanweb2020 <- read_html(alamatweb2020)
lamanweb2020#Mengambil data runtime
runtime_data_laman2020 <- html_nodes(lamanweb2020,'.runtime')
runtime_data_laman2020
runtime_data2020<- html_text(runtime_data_laman2020)
runtime_data2020
head(runtime_data2020)runtime_data2020 <- gsub(" min","",runtime_data2020)
runtime_data2020
runtime_data2020<-as.numeric(runtime_data2020)
runtime_data2020
length(runtime_data2020)
hasilnya adalah berikut,
karena jumlah data runtime 2020 hanya 94, coba kita cek ke web terlebih dahulu
ternyata terdapat missing pada beberapa data, lalu kita akan mengganti missing data dengan nilai NA yang diinput secara manual seperti berikut,
# Missing data diganti dengan nilai NA
for (i in c(4,5,19,43,46,93)){
a<-runtime_data2020[1:(i-1)]
b<-runtime_data2020[i:length(runtime_data2020)]
runtime_data2020<-append(a,list("NA"))
runtime_data2020<-append(runtime_data2020,b)
}
runtime_data2020 <-as.numeric(runtime_data2020)
length(runtime_data2020)
hasilnya seperti berikut,
untuk data genre 2020,
#Mengambil data genre
genre_data_laman2020 <- html_nodes(lamanweb2020,'.genre')
genre_data_laman2020#kita ambil data text genre
genre_data2020 <- html_text(genre_data_laman2020)
# kemudian kita lihat data tersebut
genre_data2020# karena masih banyak memuat tanda "\n" maka kita hilangkan terlebih dahulu
genre_data2020 <-gsub("\n","",genre_data2020)
genre_data2020# kita hilangkan juga spasi kosong
genre_data2020 <-gsub(" ","",genre_data2020)
genre_data2020# karena satu film bisa beberapa genre, maka setiap film hanya
# dikategorikan pada deskripsi genre yang pertama saja
genre_data2020 <-gsub(",.*","",genre_data2020)
genre_data2020# mengkonversi data genre berupa text menjadi faktor
genre_data2020 <-as.factor(genre_data2020)# kita lihat lagi hasilnya
head(genre_data2020)
maka muncul hasil seperti berikut,
lalu, untuk data rating 2020,
#Mengambil data rating
rating_data_laman2020 <- html_nodes(lamanweb2020,'.ratings-imdb-rating strong')
rating_data_laman2020rating_data2020 <- html_text(rating_data_laman2020)
rating_data2020
rating_data2020<-as.numeric(rating_data2020)
rating_data2020
length(rating_data2020)
muncul hasil berikut,
karena jumlah data rating 2020 hanya 88, coba kita cek ke web terlebih dahulu
ternyata terdapat missing pada beberapa data, lalu kita akan mengganti missing data dengan nilai NA yang diinput secara manual seperti berikut,
# Missing data diganti dengan nilai NA
for (i in c(4,5,19,43,46,55,64,81,84,93,95,97)){
a<-rating_data2020[1:(i-1)]
b<-rating_data2020[i:length(rating_data2020)]
rating_data2020<-append(a,list("NA"))
rating_data2020<-append(rating_data2020,b)
}
rating_data2020 <-as.numeric(rating_data2020)
length(rating_data2020)
hasilnya seperti berikut,
selanjutnya untuk data gross 2020 seperti dibawah,
#Mengambil data gross pendapatan
gross_data_laman2020 <- html_nodes(lamanweb2020,'.ghost~ .text-muted+ span')
gross_data2020 <- html_text(gross_data_laman2020)
gross_data2020# menghilangkan huruf M dan $
gross_data2020 <-gsub("M","",gross_data2020)
gross_data2020 <-substring(gross_data2020,2,6)
gross_data2020# cek jumlah data gross_data, karena tidak semua film memuat gross
# data
length(gross_data2020)
hasilnya adalah berikut,
menghitung nilai rata-rata data gross pendapatan 2020 dengan perintah berikut,
# data gross dikonversi menjadi numerik
gross_data2020 <-as.numeric(gross_data2020)
summary(gross_data2020)
#Mencari nilai mean gross data 2020
mean_gross2020 <- mean(gross_data2020)
mean_gross2020
muncul hasil seperti berikut,
Grafik garis rata-rata gross pendapatan film pada tahun 2015–2020
memvisualisasikan nilai rata-rata data gross pendapatan dari film-film terpopuler dari tahun 2015–2020 menggunakan data gross yang sebelumnya telah didapat dengan perintah berikut,
#Plot Rata-Rata Pendapatan Gross 2015-2020 berdasarkan Popularitasnya
Mean_Gross <-c(mean_gross2015, mean_gross2016,
mean_gross2017, mean_gross2018,
mean_gross2019, mean_gross2020)
Mean_Gross
Tahun_Film<-c(2015, 2016, 2017, 2018, 2019, 2020)
data<-data.frame(Tahun_Film, Mean_Gross)
data
library(ggplot2)
ggplot(data = data, aes(x = Tahun_Film, y = Mean_Gross, group=1))+
ylab(label="Mean_Gross")+ xlab("Tahun_Film")+
geom_line(colour="Red",size=2)+geom_point(size=3,colour="Blue")+
labs(title = "Rata-Rata Gross Pendapatan Film Terpopuler Tahun 2015 - 2020")
maka akan mucul grafik garis (line chart) seperti berikut,
dapat dilihat pada plot diatas, bahwa nilai gross pendapatan pada tahun 2015 hingga 2018 mengalami fluktuasi kenaikan dan penurunan data di setiap tahunnya, dan di tahun 2019 merupakan tahun dengan rata-rata gross pendapatan film yang paling tinggi. Dan di tahun 2020 terjadi penurunan yang sangat drastis.
Perubahan trend genre kesukaan masyarakat terhadap film di tahun 2015, 2016, 2017, 2018, 2019 dan 2020
untuk mengetahui perubahan trend genre film yang disukai masyarakat kita akan menggunakan semua data yang telah didapat sebelumnya yaitu data runtime, genre, rating dan gross. Langkah awal yang dilakukan adalah mengecek ukuran data pada masing-masing tahun,
#Mengecek ukuran data runtime
length(runtime_data2015)
length(runtime_data2016)
length(runtime_data2017)
length(runtime_data2018)
length(runtime_data2019)
length(runtime_data2020)#Mengecek ukuran data genre
length(genre_data2015)
length(genre_data2016)
length(genre_data2017)
length(genre_data2018)
length(genre_data2019)
length(genre_data2020)#Mengecek ukuran data rating
length(rating_data2015)
length(rating_data2016)
length(rating_data2017)
length(rating_data2018)
length(rating_data2019)
length(rating_data2020)#Mengecek ukuran data gross
length(gross_data2015)
length(gross_data2016)
length(gross_data2017)
length(gross_data2018)
length(gross_data2019)
length(gross_data2020)
hasilnya seperti berikut,
lalu, kita akan mengganti missing data dengan nilai NA yang diinput secara manual seperti pada sebelumnya, untuk data gross 2015 gunakan perintah berikut,
# Missing data diganti dengan nilai NA
for (i in c(3,23,51,66,73,76,85,92,97)){
a<-gross_data2015[1:(i-1)]
b<-gross_data2015[i:length(gross_data2015)]
gross_data2015<-append(a,list("NA"))
gross_data2015<-append(gross_data2015,b)
}
length(gross_data2015)# data gross dikonversi menjadi numerik
gross_data2015<-as.numeric(gross_data2015)
summary(gross_data2015)kumpulan_data_film15 <-data.frame(Runtime_2015 = runtime_data2015, Genre_2015 = genre_data2015,
Rating_2015 = rating_data2015, Gross_Pendapatan_2015 = gross_data2015)
str(kumpulan_data_film15)
muncul hasil berikut,
untuk data gross 2016,
# Missing data diganti dengan nilai NA
for (i in c(10,22,50,59,68,69,77,92)){
a<-gross_data2016[1:(i-1)]
b<-gross_data2016[i:length(gross_data2016)]
gross_data2016<-append(a,list("NA"))
gross_data2016<-append(gross_data2016,b)
}
length(gross_data2016)# data gross dikonversi menjadi numerik
gross_data2016<-as.numeric(gross_data2016)
summary(gross_data2016)kumpulan_data_film16 <-data.frame(Runtime_2016 = runtime_data2016, Genre_2016 = genre_data2016,
Rating_2016 = rating_data2016, Gross_Pendapatan_2016 = gross_data2016)
str(kumpulan_data_film16)
muncul hasil seperti berikut,
untuk data gross 2017,
# Missing data diganti dengan nilai NA
for (i in c(24,32,36,40,64,67,73,75,78,
80,81,84,87,89,90,93,95)){
a<-gross_data2017[1:(i-1)]
b<-gross_data2017[i:length(gross_data2017)]
gross_data2017<-append(a,list("NA"))
gross_data2017<-append(gross_data2017,b)
}
length(gross_data2017)# data gross dikonversi menjadi numerik
gross_data2017<-as.numeric(gross_data2017)
summary(gross_data2017)kumpulan_data_film17 <-data.frame(Runtime_2017 = runtime_data2017, Genre_2017 = genre_data2017,
Rating_2017 = rating_data2017, Gross_Pendapatan_2017 = gross_data2017)
str(kumpulan_data_film17)
hasilnya adalah berikut,
lanjutnya untuk data gross 2018 dengan perintah berikut,
# Missing data diganti dengan nilai NA
for (i in c(4,6,29,32,38,51,58,66,68,76,86,94,96,98)){
a<-gross_data2018[1:(i-1)]
b<-gross_data2018[i:length(gross_data2018)]
gross_data2018<-append(a,list("NA"))
gross_data2018<-append(gross_data2018,b)
}
length(gross_data2018)# data gross dikonversi menjadi numerik
gross_data2018<-as.numeric(gross_data2018)
summary(gross_data2018)kumpulan_data_film18 <-data.frame(Runtime_2018 = runtime_data2018, Genre_2018 = genre_data2018,
Rating_2018 = rating_data2018, Gross_Pendapatan_2018 = gross_data2018)
str(kumpulan_data_film18)
hasilnya seperti berikut ini,
selanjutnya untuk data gross 2019,
# Missing data diganti dengan nilai NA
for (i in c(2,3,4,10,17,18,21,27,30,31,
32,34,35,36,39,41,43,49,51,52,
54,55,56,57,61,62,63,66,68,70,
71,74,75,76,77,78,80,82,83,86,
87,88,89,90,92,93,97,98,99,100)){
a<-gross_data2019[1:(i-1)]
b<-gross_data2019[i:length(gross_data2019)]
gross_data2019<-append(a,list("NA"))
gross_data2019<-append(gross_data2019,b)
}
gross_data2019= gross_data2019[-1]
gross_data2019=as.numeric(unlist(gross_data2019))
length(gross_data2019)# data gross dikonversi menjadi numerik
gross_data2019 <-as.numeric(gross_data2019)
summary(gross_data2019)kumpulan_data_film19 <-data.frame(Runtime_2019 = runtime_data2019, Genre_2019 = genre_data2019,
Rating_2019 = rating_data2019, Gross_Pendapatan_2019 = gross_data2019)
str(kumpulan_data_film19)
hasilnya seperti berikut,
dan untuk data gross 2020 sebagai berikut,
# Missing data diganti dengan nilai NA
for (i in c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
11,12,14,15,16,17,18,19,20,21,
22,23,24,25,26,27,28,29,30,31,
32,33,34,35,36,37,38,39,40,42,
43,44,45,46,47,48,49,50,51,52,
53,54,55,56,57,58,59,61,62,63,
64,65,66,67,68,69,70,71,72,73,
74,75,76,77,78,79,80,81,82,83,
84,85,87,88,90,92,93,94,95,96,
97,98,99,100)){
a<-gross_data2020[1:(i-1)]
b<-gross_data2020[i:length(gross_data2020)]
gross_data2020<-append(a,list("NA"))
gross_data2020<-append(gross_data2020,b)
}
gross_data2020 <-as.numeric(gross_data2020)
length(gross_data2020)
gross_data2020 = gross_data2020[-1]
gross_data2020=as.numeric(unlist(gross_data2020))
length(gross_data2020)# data gross dikonversi menjadi numerik
gross_data2020 <-as.numeric(gross_data2020)
summary(gross_data2020)kumpulan_data_film20 <-data.frame(Runtime_2020 = runtime_data2020, Genre_2020 = genre_data2020,
Rating_2020 = rating_data2020, Gross_Pendapatan_2020 = gross_data2020)
str(kumpulan_data_film20)
akan muncul hasil berikut,
langkah berikutnya memvisualisasikan trend genre film yang disukai oleh masyarakat dengan menggabungkan data runtime, rating dan gross yang telah didapat sebelumnya. Perintah untuk menampilkan plot-nya sebagai berikut,
#PLOT TREND GENRE FILM
kumpulan_data_film_gabungan <-data.frame(Tahun=gl(6,100,labels=c(2015,2016,2017,2018,2019,2020)),
Runtime = c(runtime_data2015, runtime_data2016, runtime_data2017, runtime_data2018, runtime_data2019, runtime_data2020),
Genre = as.character(genre_data2015, genre_data2016, genre_data2017, genre_data2018, genre_data2019, genre_data2020),
Rating = c(rating_data2015, rating_data2016, rating_data2017, rating_data2018, rating_data2019, rating_data2020),
Gross_Pendapatan = c(gross_data2015, gross_data2016, gross_data2017, gross_data2018, gross_data2019, gross_data2020))#menampilkan plot trend genre gabungan dari 2015-2020
ggplot(kumpulan_data_film_gabungan,aes(x=Runtime,y=Gross_Pendapatan))+
geom_point(aes(size=Rating,col=Genre))#menampilkan plot trend genre per tahun
ggplot(kumpulan_data_film_gabungan,
aes(x = Tahun,
y = Gross_Pendapatan,
color = Genre))+
geom_point( position = position_jitter())
maka akan muncul tampilan plot-nya seperti berikut,
berdasarkan plot diatas dapat dilihat bahwa genre yang paling dominan disukai masyarakat untuk film terpopuler dari tahun 2015 sampai 2020 adalah genre action, dengan durasi film antara 80 menit hingga 150 menit,
sehingga nampak di atas bahwa trend kesukaan genre film pada masyarakat pada tahun 2015 sampai 2020 tidak selalu sama pada setiap tahunnya dengan frekuensi yang berubah-ubah pada tiap tahunnya.
Masukan pada produser film, film seperti apakah yang sebaiknya di produksi
Dari grafik trend sebelumnya, dapat diketahui bahwa masyarakat lebih menyukai film dengan genre action, disusul dengan genre drama dan horor. Masukuan untuk para produser film akan lebih baik kedepannya lebih banyak memproduksi film genre action dengan durasi film antara 80 menit hingga 150 menit agar mendapatkan daya tarik masyarakat untuk menonton film dan dapat meningkatkan nilai gross pendapatan dari film tersebut.
Terimakasih semuanyaa ^^, Semoga bermanfaat…