Dataset ini terdiri dari acara tv (TV Show) dan film (Movie) yang tersedia di Netflix dari 2008-01-01 sampai 2020-01-18. Dataset ini didapatkan dari link https://www.kaggle.com/shivamb/netflix-shows
Beberapa pertanyaan yang dapat hendak dijawab berdasarkan dataset ini yaitu:
Hasil data netflix diimport dan disimpan kedalam variabel penampung netflix
Dataset Netflix diimport dan disimpan dalam bentuk data frame. Diatas merupakan sampel 5 data teratas dari dataset netlfix yang digunakan. Data tersebut memiliki variabel yang masing-masing menyimpan informasi sebagai berikut:
| Variabel | Informasi |
|---|---|
| show_id | ID dari masing-masing data konten |
| type |
Jenis konten Movie atau TV Show
|
| title | Merupakan judul atau nama konten |
| director | Director dari konten |
| cast | Artis atau Pemeran pada konten |
| country | Negara asal konten |
| date_added | Tanggal konten tersebut dimasukan ke Netflix |
| release_year | Tahun konten tersebut perdana ditayangkan ke publik |
| rating | Penialian/rating konten tersebut. Berikut link referensi untuk sistem rating konten televisi: https://id.wikipedia.org/wiki/Sistem_rating_konten_televisi |
| duration | Durasi waktu konten |
| listed_in | Kategori atau genre konten |
| description | Deskripsi singkat dari konten |
#> 'data.frame': 6234 obs. of 12 variables:
#> $ show_id : int 81145628 80117401 70234439 80058654 80125979 80163890 70304989 80164077 80117902 70304990 ...
#> $ type : Factor w/ 2 levels "Movie","TV Show": 1 1 2 2 1 2 1 1 2 1 ...
#> $ title : Factor w/ 6172 levels "'89","#realityhigh",..: 3598 2463 5710 5714 2 418 478 1651 1714 1960 ...
#> $ director : Factor w/ 3302 levels "","Ömer Faruk Sorak",..: 2549 1 1 1 947 1 987 2627 1 1144 ...
#> $ cast : Factor w/ 5470 levels "","4Minute, B1A4, BtoB, ELSIE, EXID, EXO, Got7, INFINITE, KARA, Shinee, Sistar, VIXX, Nine Muses, BTS, Secret, Topp Dogg",..: 206 2173 4000 5324 3760 212 492 1590 1 2140 ...
#> $ country : Factor w/ 555 levels "","Argentina",..: 500 381 445 445 445 336 50 78 445 540 ...
#> $ date_added : Factor w/ 1525 levels ""," April 1, 2014",..: 1525 1524 1523 1523 1522 1522 1522 1522 1522 1522 ...
#> $ release_year: int 2019 2016 2013 2016 2017 2016 2014 2017 2017 2014 ...
#> $ rating : Factor w/ 15 levels "","G","NC-17",..: 11 10 14 13 8 10 7 10 10 7 ...
#> $ duration : Factor w/ 201 levels "1 Season","10 min",..: 192 196 1 1 201 1 16 159 1 192 ...
#> $ listed_in : Factor w/ 461 levels "Action & Adventure",..: 111 421 382 382 168 218 338 421 273 58 ...
#> $ description : Factor w/ 6226 levels "\"Brooklyn Nine-Nine\" star Chelsea Peretti showcases her diverse talents in this dark yet silly reimagining of"| __truncated__,..: 1903 3522 6130 5586 5869 972 3060 2448 1744 779 ...
Jika dilihat pada struktur dataset netflix diatas yaitu terdapat 6234 observasi dan 12 variabel. Berdasarkan data yang ditampilkan, beberapa data type perlu dikonversi ulang sesuai kebutuhan supaya mempermudah untuk mengexplorasi data. Kemudian variabel show_id kurang memberikan informasi yang penting sehingga dapat dibuang dari dataset. Berikut proses dan struktur data setelah dikonversi:
netflix <- netflix[,-1]
netflix$date_added <- as.Date(netflix$date_added, format = "%B %d, %Y")
netflix$added_year <- format(netflix$date_added,"%Y")
netflix$added_year <- as.integer(netflix$added_year)
netflix$description <- as.character(netflix$description)
str(netflix)#> 'data.frame': 6234 obs. of 12 variables:
#> $ type : Factor w/ 2 levels "Movie","TV Show": 1 1 2 2 1 2 1 1 2 1 ...
#> $ title : Factor w/ 6172 levels "'89","#realityhigh",..: 3598 2463 5710 5714 2 418 478 1651 1714 1960 ...
#> $ director : Factor w/ 3302 levels "","Ömer Faruk Sorak",..: 2549 1 1 1 947 1 987 2627 1 1144 ...
#> $ cast : Factor w/ 5470 levels "","4Minute, B1A4, BtoB, ELSIE, EXID, EXO, Got7, INFINITE, KARA, Shinee, Sistar, VIXX, Nine Muses, BTS, Secret, Topp Dogg",..: 206 2173 4000 5324 3760 212 492 1590 1 2140 ...
#> $ country : Factor w/ 555 levels "","Argentina",..: 500 381 445 445 445 336 50 78 445 540 ...
#> $ date_added : Date, format: "2019-09-09" "2016-09-09" ...
#> $ release_year: int 2019 2016 2013 2016 2017 2016 2014 2017 2017 2014 ...
#> $ rating : Factor w/ 15 levels "","G","NC-17",..: 11 10 14 13 8 10 7 10 10 7 ...
#> $ duration : Factor w/ 201 levels "1 Season","10 min",..: 192 196 1 1 201 1 16 159 1 192 ...
#> $ listed_in : Factor w/ 461 levels "Action & Adventure",..: 111 421 382 382 168 218 338 421 273 58 ...
#> $ description : chr "Before planning an awesome wedding for his grandfather, a polar bear king must take back a stolen artifact from"| __truncated__ "Jandino Asporaat riffs on the challenges of raising kids and serenades the audience with a rousing rendition of"| __truncated__ "With the help of three human allies, the Autobots once again protect Earth from the onslaught of the Decepticon"| __truncated__ "When a prison ship crash unleashes hundreds of Decepticons on Earth, Bumblebee leads a new Autobot force to protect humankind." ...
#> $ added_year : int 2019 2016 2018 2018 2017 2017 2017 2017 2017 2017 ...
Terdapat 1 data yang duplikat. Sebelumnya total data 6234 namun menggunakan fungsi uniqe menjadi 6233. Oleh karena itu data duplikat dapat dibuang dari dataset netflix.
#> type title director cast country date_added
#> 0 0 0 0 0 651
#> release_year rating duration listed_in description added_year
#> 0 0 0 0 0 651
Jika dilihat terdapat 651 data yang NULL dari variabel date_added . Berdasarkan pertanyaan yang diinginkan, variabel date_added tidak digunakan, sehingga missing values dari date added dapat diabaikan.
#> type title director
#> Movie :4264 Limitless : 3 :1969
#> TV Show:1969 Love : 3 Raúl Campos, Jan Suter: 18
#> Oh My Ghost: 3 Marcus Raboy : 14
#> The Silence: 3 Jay Karas : 13
#> Tunnel : 3 Jay Chapman : 12
#> Aquarius : 2 Martin Scorsese : 9
#> (Other) :6216 (Other) :4198
#> cast country date_added
#> : 570 United States :2032 Min. :2008-01-01
#> David Attenborough: 18 India : 776 1st Qu.:2017-09-29
#> Samuel West : 10 : 476 Median :2018-09-15
#> Jeff Dunham : 7 United Kingdom: 348 Mean :2018-06-28
#> Craig Sechler : 6 Japan : 176 3rd Qu.:2019-06-04
#> Bill Burr : 5 Canada : 141 Max. :2020-01-18
#> (Other) :5617 (Other) :2284 NA's :651
#> release_year rating duration
#> Min. :1925 TV-MA :2026 1 Season :1321
#> 1st Qu.:2013 TV-14 :1698 2 Seasons: 304
#> Median :2016 TV-PG : 701 3 Seasons: 158
#> Mean :2013 R : 508 90 min : 111
#> 3rd Qu.:2018 PG-13 : 286 91 min : 104
#> Max. :2020 NR : 218 92 min : 101
#> (Other): 796 (Other) :4134
#> listed_in description
#> Documentaries : 299 Length:6233
#> Stand-Up Comedy : 273 Class :character
#> Dramas, International Movies : 248 Mode :character
#> Dramas, Independent Movies, International Movies: 186
#> Comedies, Dramas, International Movies : 174
#> Kids' TV : 159
#> (Other) :4894
#> added_year
#> Min. :2008
#> 1st Qu.:2017
#> Median :2018
#> Mean :2018
#> 3rd Qu.:2019
#> Max. :2020
#> NA's :651
Dataset ini memiliki informasi konten yang ditambahkan dari tanggal 2008-01-01 hingga 2020-01-18 namun perlu diingat bahwa terdapat 651 missing values atas date_added sehingga informasi ini perlu divalidasi lagi. Selain itu, beberapa informasi yang bisa didapatkan antara lain:
Jawaban:
#>
#> Movie TV Show
#> 4264 1969
#>
#> Movie TV Show
#> 68.4 31.6
Jumlah Konten berjenis Movie sebanyak 4264 (68.4%) dan konten berjenis TV Show sebanyak 1969 (31.6%). Jika dilihat jumlah konten Movie lebih dari 2 kali lipat jumlah konten TV Show.
Jawaban:
Pertumbuhan jumlah konten Movie setiap tahun:
df.movie <- netflix[netflix$type=="Movie",]
df.movie.growth <- data.frame(table(df.movie$added_year))
df.movie.growthplot(df.movie.growth$Var1, df.movie.growth$Freq,type = "b", pch=15, xlab="Tahun",ylab="Jumlah",main="Pertumbuhan Jumlah Konten Movie")
lines(df.movie.growth$Var1, df.movie.growth$Freq,type = "o", col = "blue")
Pertumbuhan jumlah konten TV Show setiap tahun:
df.tv <- netflix[netflix$type=="TV Show",]
df.tv.growth <- data.frame(table(df.tv$added_year))
df.tv.growthplot(df.tv.growth$Var1, df.tv.growth$Freq,type = "b", pch=15,xlab="Tahun",ylab="Jumlah",main="Pertumbuhan Jumlah Konten TV Show")
lines(df.tv.growth$Var1, df.tv.growth$Freq,type = "o", col = "orange")Berdasarkan 2 grafik diatas, dapat disimpulkan bahwa jumlah konten Movie dan TV Show pada Netflix cenderung meningkat dari setiap tahun. Peningkatan jumlah konten cukup besar semenjak tahun 2015 hingga 2019. Kemudian, pertumbuhan jumlah konten dari tahun 2019-2020 tidak valid untuk diinterpretasikan karena tahun 2020 masih berjalan. Notes: grafik ini dibuat dengan kondisi 651 missing value dari data date_added sehingga terdapat missing information terkait pertumbuhan jumlah konten di netfix.
Jawaban:
1 konten bisa memiliki beberapa kategori, misalkan Avenger memiliki kategori Action, Crime, Sci-Fi sehingga untuk mengetahui jumlah konten berdasarkan kategori maka kategori tersebut perlu dipisahkan.
# Memisahkan kumpulan kategori didalam 1 konten menjadi satuan
netflix.kategori <- separate_rows(netflix,listed_in, sep = ',')
df.kategori <- data.frame(sort(table(netflix.kategori$listed_in),decreasing = T))
Kategori konten terbanyak:
Kategori konten paling sedikit
Kategori konten paling banyak yaitu International Movies dengan jumlah 1841 konten. Kategori konten paling sedikit yaitu Spanish-Language TV Shows, Sports Movies dan TV Sci-Fi & Fantasy yang dimana masing-masing hanya memiliki 1 konten, berikut data film dengan kategori paling sedikit:
Jawaban:
1 konten bisa memiliki beberapa negara pembuatan, misalkan La Doña memiliki negara pembuatan United States, Mexico sehingga untuk mengetahui jumlah konten berdasarkan negara pembuatan maka data negara tersebut perlu dipisahkan.
# Memisahkan kumpulan negara didalam 1 konten menjadi satuan
netflix.negara <- separate_rows(netflix,country, sep = ',')
df.negara <- data.frame(sort(table(netflix.negara$country),decreasing = T))Negara yang menghasilkan konten terbanyak:
Negara yang menghasilkan konten paling sedikit:
Negara dengan konten paling banyak di netflix adalah United States dengan jumlah 2302 konten. Kemudian terdapat 45 negara yang menghasilkan 1 konten atau paling sedikit, diantaranya dapat dilihat pada bagian diatas.
Jawaban:
# extract durasi menjadi numeric
numextract <- function(string){
as.numeric(str_extract(string, "\\-*\\d+\\.*\\d*"))
}
# dalah case ini, rata-rata durasi konten dicari menggunakan modus karena jika menggunakan fungsi mean, maka akan dijumlahkan datanya
most <- function(x){
as.character(names(sort(-table(x)))[1])
}
# MOVIE
netflix.movie <- netflix[netflix$type=="Movie",]
netflix.movie <- cbind(netflix.movie,total_minutes=numextract(netflix.movie$duration))
plot(density(netflix.movie$total_minutes), "Penyebaran Total Durasi Konten Movie")
polygon(density(netflix.movie$total_minutes), col="blue", border="orange")#> [1] 3
#> [1] 312
#> [1] "90"
#================================================================================================
# TV SHOW
netflix.tv <- netflix[netflix$type=="TV Show",]
netflix.tv <- cbind(netflix.tv,total_seasons=numextract(netflix.tv$duration))
plot(density(netflix.tv$total_seasons), "Penyebaran Total Durasi Konten TV Show (Seasons)")
polygon(density(netflix.tv$total_seasons), col="orange", border="blue")#> [1] 1
#> [1] 15
#> [1] "1"
Berdasar chart diatas, durasi konten Movie dan konten TV Show tidak berdistribusi normal yang artinya cukup banyak durasi konten yang kurang atau lebih dari rata-rata durasi konten yang ada pada masing-masing jenis konten Movie dan TV Show. Rata-rata durasi konten Movie yaitu 90 menit. Durasi konten Movie paling cepat yaitu 3 menit dengan judul Silent dan Durasi konten Movie paling lama yaitu 312 menit dengan judul Black Mirror: Bandersnatch. Rata-Rata durasi konten TV Show yaitu 1 Seasons dan durasi paling cepat yaitu 1 Seasons. Durasi konten TV Show paling lama yaitu 15 Seasons. Berikut datanya:
1. Konten Movie dengan durasi Terlama dan Tercepat
# konten movie dengan durasi tercepat dan terlama
netflix.movie[netflix.movie$total_minutes %in% c(3,312),]
2. Konten TV Show dengan durasi Terlama dan Tercepat
#konten TV Show dengan durasi terlama
df.tv.durasi <- netflix.tv[netflix.tv$total_seasons %in% c(15,1),]
df.tv.durasi[order(df.tv.durasi$total_seasons,decreasing = T),]Jawaban:
netflix.movie$rating <- as.numeric(netflix.movie$rating)
netflix.tv$rating <- as.numeric(netflix.tv$rating)
# Pengaruh durasi Konten terhadap rating
plot(x=netflix.movie$total_minutes,y=netflix.movie$rating,
main = "Pengaruh Durasi terhadap Rating pada Konten Movie",xlab = "Durasi (Minutes)", ylab = "Rating",pch = 19)
abline(lm(netflix.movie$rating ~ netflix.movie$total_minutes, data = netflix.movie), col = "blue")plot(x=netflix.tv$total_seasons,y=netflix.tv$rating,
main = "Pengaruh Durasi terhadap Rating pada Konten TV Show",xlab = "Durasi (Seasons)", ylab = "Rating",pch = 19)
abline(lm(netflix.tv$rating ~ netflix.tv$total_seasons, data = netflix.tv), col = "orange")Berdasarkan Scatter Diagram diatas, durasi pada konten Movie dan konten TV Show tidak memiliki pengaruh terhadap rating dari sebuah konten apabila dilihat secara keseluruhan. Namun, apakah benar? Melihat poin 4.5, distribusi penyeberan durasi konten tidak normal. Lantas Apakah durasi memiliki pengaruh terhadap rating konten jika data durasi konten berdistribusi normal ? Jika dilihat pada scatter diagram diatas menunjukan datanya terlalu berpencar/menyebar dan tidak membentuk pola yang linear, dengan begitu menunjukan bahwa tidak ada korelasi, berikut pembuktiannya:
1. Pengaruh Durasi terhadap Rating Konten Movie (Exclude Outlier Durasi)
Boxplot Durasi Konten Movie menunjukan cukup banyak data durasi yang menjadi outlier atau jauh diluar pemusatan data, baik lebih tinggi maupun lebih rendah. Untuk itu, data tersebut akan dibuang supaya distribusi durasi menjadi normal. Berikut prosesnya:
# Total Data Durasi movie outlier dan non outlier
data.frame("total data movie"=length(netflix.movie$total_minutes),
"total outlier"=length(bp.durasi.movie$out),
"total non outlier"=length(netflix.movie$total_minutes)-length(bp.durasi.movie$out))# Memisahkan data durasi movie dari outlier
netflix.durasi.movie.in <- netflix.movie[!netflix.movie$total_minutes %in% bp.durasi.movie$out,]
netflix.durasi.movie.in$rating <- as.numeric(netflix.durasi.movie.in$rating)
# Membuat plot
plot(density(netflix.durasi.movie.in$total_minutes), "Penyebaran Total Durasi Konten Movie (Exclude Outlier)")
polygon(density(netflix.durasi.movie.in$total_minutes), col="blue", border="orange")Berdasarkan data diatas, Total data movie sebelumnya 4264 dan setelah outlier dibuang menjadi 4034. Jika dilihat chart Penyebaran Total Durasi Konten Movie (Exclude Outlier), meskipun tetap banyak data yang jauh dari rata-rata, distribusi data dapat dikatakan lebih normal dari chart pada poin 4.5 karena pemusatan data mendekati nilai rata-rata durasi. Lantas apakah data durasi ini memiliki pengaruh terhadap data ratingnya?
# Pengaruh durasi Konten terhadap rating setelah outlier dibuang
plot(x=netflix.durasi.movie.in$total_minutes,y=netflix.durasi.movie.in$rating,
main = "Pengaruh Durasi terhadap Rating pada Konten Movie (Exclude Outlier)",xlab = "Durasi (Minutes)", ylab = "Rating",pch = 19)
abline(lm(netflix.durasi.movie.in$rating ~ netflix.durasi.movie.in$total_minutes, data = netflix.durasi.movie.in), col = "blue")Setelah outlier pada durasi konten Movie di exclude, scatter diagram diatas memperjelas bahwa durasi konten Movie tidak memiliki pengaruh terhadap nilai rating dari sebuah konten
2. Pengaruh Durasi terhadap Rating Konten TV Show (Exclude Outlier Durasi)
Boxplot Durasi Konten TV Show menunjukan cukup banyak data outlier dimana data durasi lebih tinggi dari rata-rata durasi pemusatan data. Untuk itu, data tersebut akan dibuang supaya distribusi durasi menjadi normal. Berikut prosesnya:
# Total Data Durasi TV Show outlier dan non outlier
data.frame("total data tvshow"=length(netflix.tv$total_seasons),
"total outlier"=length(bp.durasi.tv$out),
"total non outlier"=length(netflix.tv$total_seasons)-length(bp.durasi.tv$out))# Memisahkan data durasi movie dari outlier
netflix.durasi.tv.in <- netflix.tv[!netflix.tv$total_seasons %in% bp.durasi.tv$out,]
netflix.durasi.tv.in$rating <- as.numeric(netflix.durasi.tv.in$rating)
# Membuat plot
plot(density(netflix.durasi.tv.in$total_seasons), "Penyebaran Total Durasi Konten Movie (Exclude Outlier)")
polygon(density(netflix.durasi.tv.in$total_seasons), col="blue", border="orange")Berdasarkan chart data diatas, Total data TV Show sebelumnya 1969 dan setelah outlier dibuang menjadi 1783. Jika dilihat chart Penyebaran Total Durasi Konten TV Show (Exclude Outlier), meskipun data tetap berdistribusi tidak normal, setidaknya lebih menunjukan pola penyeberan durasi dari konten TV Show paling banyak berpusat 1 Season, kemudian 2 season dan kemudian 3 season.
# Pengaruh durasi Konten terhadap rating setelah outlier dibuang
plot(x=netflix.durasi.tv.in$total_seasons,y=netflix.durasi.tv.in$rating,
main = "Pengaruh Durasi terhadap Rating pada Konten Movie (Exclude Outlier)",xlab = "Durasi (Minutes)", ylab = "Rating",pch = 19)
abline(lm(netflix.durasi.tv.in$rating ~ netflix.durasi.tv.in$total_seasons, data = netflix.durasi.tv.in), col = "blue")Meskipun outlier pada durasi konten TV Show di exclude, scatter diagram diatas memperjelas bahwa durasi konten TV Show tidak memiliki pengaruh terhadap nilai rating dari sebuah konten
Berdasarkan proses analisis data yang sudah dilakukan, pertanyaan-pertanyaan yang ada sudah berhasil dijawab. Secara umum dapat disimpulkan bahwa Jumlah konten Movie dan TV Show di Netflix cenderung meningkat setiap tahun, yang dimana peningkatan jumlah konten mulai tinggi semenjak tahun 2015. Namun perlu dipertimbangkan kembali terkait 651 missing value atas variabel data_added karena variabel ini yang digunakan untuk mengukur pertumbuhan jumlah konten. Konten jenis Movie dan TV Show terdiri dari berbagai kategori/genre dan negara produksi, yang dimana setiap konten tersebut memiliki rating. Informasi penting terkait rating konten yang didapatkan yaitu durasi dari sebuah konten Movie atau konten TV Show yang ada di netflix tidak berpengaruh signifikan terhadap pemberian rating sebuah konten.