Saat ini semua orang pasti pernah menonton Youtube, bahkan lebih sering dibandingkan menonton Televisi di rumah. Perubahan pola ini menjadikan orang berlomba-lomba untuk membuat channel youtube. Banyak sekali channel youtube yang bermunculan dengan beragam isi dan informasi. Namun tidak semua channel youtube berhasil, banyak yang gagal di tengah jalan. Untuk itu banyak orang yang mencari cara bagaimana membangun channel youtube yang dapat menghasilkan banyak views.
Sebagai seorang data scientist, kita mendapatkan client yang ingin membuat channel youtube. Dalam membangun channel Youtube tersebut, client meminta insight bagaimana membuat channel Youtube yang trending. Melalui pendekatan ‘data-driven’ kita akan menjawab permasalahan bisnis berdasarkan data yang ada.
Pada tahapan ini akan dilakukan loading library dan dataset yang disimpan ke dalam suatu variable untuk dilakukan pengolahan lebih lanjut serta explore dataset secara sekilas untuk mengetahui ukuran dataset yang kita gunakan.
Melakukan aktivasi pada packages yang akan digunakan dalam tugas ini. Penggunaan library disesuaikan dengan kebutuhan.
Membaca data CSV File yang ada. File ini merupakan kumpulan video trending di US per harinya sejak Juli 2022 hingga Desember 2022.
insight:
- Data berhasil terbaca dan dimasukan
ke dalam variable vid
Setelah file berhasil terbaca dan disimpan didalam variable
vid, selanjutnya menggunakan fungsi head() dan
tail() untuk melihat cuplikan 6 data teratas dan terbawah.
Proses melihat sekilas ini diperlukan untuk mempercepat komputasi
dibandingkan melihat keseluruhan data yang ada.
#> trending_date
#> 1 22.01.07
#> 2 22.01.07
#> 3 22.01.07
#> 4 22.01.07
#> 5 22.01.07
#> 6 22.01.07
#> title
#> 1 so long nerds
#> 2 Usher: Tiny Desk Concert
#> 3 I Delivered a Penny to MrBeast!
#> 4 Cardi B - Hot Shit feat. Kanye West & Lil Durk [Official Audio]
#> 5 Fivio Foreign, Queen Naija - What's My Name (Official Video) ft. Coi Leray
#> 6 The Sims 4 High School Years: Official Reveal Trailer
#> channel_title category_id publish_time views likes dislikes
#> 1 Technoblade 20 2022-07-01T01:29:02Z 16846983 3253577 0
#> 2 NPR Music 10 2022-06-30T16:00:10Z 1157118 92134 0
#> 3 Ryan Trahan 24 2022-06-30T14:00:38Z 6528267 648436 0
#> 4 Cardi B 10 2022-07-01T04:00:15Z 348851 51411 0
#> 5 FivioForeignVEVO 10 2022-06-30T16:00:13Z 482194 43953 0
#> 6 The Sims 20 2022-06-30T15:00:12Z 863639 89547 0
#> comment_count comments_disabled ratings_disabled video_error_or_removed
#> 1 572010 FALSE FALSE FALSE
#> 2 7592 FALSE FALSE FALSE
#> 3 75201 FALSE FALSE FALSE
#> 4 6811 FALSE FALSE FALSE
#> 5 2135 FALSE FALSE FALSE
#> 6 7056 FALSE FALSE FALSE
#> trending_date
#> 36795 22.31.12
#> 36796 22.31.12
#> 36797 22.31.12
#> 36798 22.31.12
#> 36799 22.31.12
#> 36800 22.31.12
#> title
#> 36795 Streaming in 2023 | Feels Like Home | Disney+
#> 36796 F1 Grid Does Secret Santa 2022!
#> 36797 Twins Take Lie Detector Test *EXPOSED* | Ft. Merrell Twins & Rybka Twins
#> 36798 Lies That Will DESTROY Your Trust...
#> 36799 KO and Rollins Take Down The Bloodline; Scare off Sami | WWE Raw Highlights 12/19/22 | WWE on USA
#> 36800 The Closing Ceremony DELIVERED! | FIFA World Cup Qatar 2022
#> channel_title category_id publish_time views likes
#> 36795 Disney Plus 22 2022-12-19T14:00:04Z 1491836 32069
#> 36796 FORMULA 1 17 2022-12-19T14:00:08Z 3243402 134608
#> 36797 Brooklyn and Bailey 24 2022-12-20T17:00:00Z 503431 23228
#> 36798 SocksReact 23 2022-12-20T21:47:29Z 1270017 29909
#> 36799 WWE on USA 17 2022-12-20T04:17:14Z 421607 7094
#> 36800 FIFA 17 2022-12-18T16:09:27Z 20078922 463039
#> dislikes comment_count comments_disabled ratings_disabled
#> 36795 0 1890 FALSE FALSE
#> 36796 0 5818 FALSE FALSE
#> 36797 0 652 FALSE FALSE
#> 36798 0 1362 FALSE FALSE
#> 36799 0 562 FALSE FALSE
#> 36800 0 21311 FALSE FALSE
#> video_error_or_removed
#> 36795 FALSE
#> 36796 FALSE
#> 36797 FALSE
#> 36798 FALSE
#> 36799 FALSE
#> 36800 FALSE
Informasi masing-masing kolom :
trending_date:
tanggal trending
title: judul video
channel_title: nama channel Youtube
category_id: kategori video
publish_time: tanggal upload video
views: jumlah views
likes: jumlah
likes
dislikes: jumlah dislikes
comment_count: jumlah komentar
comment_disabled: apakah kolom komentar tidak
diaktifkan
rating_disabled: apakah rating video
tidak diaktifkan
video_error_or_removed: apakah
video dihapus
insight :
- Diketahui bahwa dataset terdiri dari
36800 baris dan 12 kolom
- terdapat bermacam tipe data dalam
masing-masing kolom
- terdapat banyak nilai 0 pada kolom
dislike
Data wrangling merupakan tahapan persiapan sebelum melakukan tahapan lanjutan. Tahapan ini akan menjadikan dataset yang sebelumnya dianggap belum sesuai menurut format, tipe data dll diubah menjadi dataset yang siap digunakan. Tahapan ini terdiri dari beberapa hal yang disesuaikan dengan keadaan dataset.
struktur data diperiksa guna melihat tipe data yang terbaca langsung
oleh R Programming. Pada kenyataannya tipe data yang berhasil terbaca
langsung tidak dapat secara langsung digunakan. Untuk itu harus
diperiksa terlebih dahulu menggunakan berbagai fungsi seperti fungsi
str() dan fungsi glimpse() dari tidyverse.
Dalam hal ini digunakan fungsi glimpse() dikarenakan dapat
melakukan komputasi yang lebih cepat dan susunan tampilan yang lebih
rapih.
#> Rows: 36,800
#> Columns: 12
#> $ trending_date <chr> "22.01.07", "22.01.07", "22.01.07", "22.01.07",…
#> $ title <chr> "so long nerds", "Usher: Tiny Desk Concert", "I…
#> $ channel_title <chr> "Technoblade", "NPR Music", "Ryan Trahan", "Car…
#> $ category_id <int> 20, 10, 24, 10, 10, 20, 23, 20, 10, 27, 20, 10,…
#> $ publish_time <chr> "2022-07-01T01:29:02Z", "2022-06-30T16:00:10Z",…
#> $ views <int> 16846983, 1157118, 6528267, 348851, 482194, 863…
#> $ likes <int> 3253577, 92134, 648436, 51411, 43953, 89547, 15…
#> $ dislikes <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
#> $ comment_count <int> 572010, 7592, 75201, 6811, 2135, 7056, 9724, 12…
#> $ comments_disabled <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE…
#> $ ratings_disabled <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE…
#> $ video_error_or_removed <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE…
#> trending_date title channel_title
#> 183 7237 2741
#> category_id publish_time views
#> 14 6917 36482
#> likes dislikes comment_count
#> 31208 1 11771
#> comments_disabled ratings_disabled video_error_or_removed
#> 2 2 1
insight :
- diketahui bahwa pada kolom
dislikses semua isi data bernilai 0. hal tersebut dapat
dibuktikan menggunakan fungsi n_distict dari tidyverse. Hal
ini menunjukan kolom tersebut tidak memberikan informasi yang
dibutuhkan. Hal tersebut juga disebabkan oleh pihak Youtube yang
mematikan fitur dislikes yang menyebabkan data hanya bernilai 0.
-
diketahui bahwa pada kolom video_error_or_removed semua
nilai bernilai FALSE. Kolom ini tidak dapat memberikan informasi lebih
karena keseluruhan isi bernilai sama.
-diketahui kolom
trending_date dan publish_time memiliki tipe
data yang belum sesuai. Hal tersebut disebabkan data tanggal masih dalam
berbentuk tipe data character sehingga tidak dapat diolah informasi yang
ada dari data tersebut.
- diketahui bahwa
kolomcategory_id memiliki tipe data yang belum tepat, kolom
ini akan dapat diolah dengan baik apabila diubah menjadi tipe data
category karena memiliki nilai unique yang kecil dibandingkan total data
yang dimiliki. Walaupun tipe data ini dinyatakan dalam bentuk angka
namun masuk dalam jenis data ordinal.
Berdasarkan insight sebelumnya, kolom dislikses dan
kolom video_error_or_removed tidak akan digunakan atau
dihapuskan karena kolom ini tidak memiliki variasi data yang baik
sehingga tidak memberikan informasi yang representatif sehingga jika
dipaksa digunakan akan mengurangi kualitas data yang digunakan. Untuk
itu akan dihapus menggunakan cara subsetting dimana kita dapat mengakses
baris dan kolom memanfaatkan elemen/indeks.
insight:
- kolom dislikses dan
kolom video_error_or_removed dihapus, sehingga total kolom
pada dataframe vid berubah dari 12 kolom menjadi 10
kolom
Dari insight yang diperoleh sebelumnya, terdapat 2 buah kolom yang
dianggap belum memiliki tipe data yang sesuai yaitu kolom
trending_date, publish_time dan kolom
category_id. Berikut tahapan untuk mengubah tipe data kedua
kolom tersebut.
Untuk mengubah suatu tipe data menjadi tipe data datetime dapat
dilakukan dengan dua cara yaitu menggunakan fungsi
as.Date() yang merupakan funsgi R Base atau menggunakan
library lubridate. Pada kali ini yang akan digunakan adalah
library lubridate karena kemudahan yang diberikannya (tanpa
menggunakan string format ).
Pada kolom
trending_date
#> [1] "22.01.07"
#> [1] "22.31.12"
Pada kolom publish_time
#> [1] "2022-07-01T01:29:02Z"
#> [1] "2022-12-18T16:09:27Z"
insight:
- diketahui bahwa kedua kolom tanggal
diatas memiliki susunan tanggal yang berbeda pada kolom
trending_date susunannya YY-DD-MM, sementara pada kolom
publish_time susunannya YYYY-MM-DD HH:MM:SS
- diketahui
pada kolom publish_time memiliki tambahan informasi
waktu
- kedua kolom tersebut tidak dapat diubah menjadi tipe data
datetime sekaligus karena perbedaan susunan
Ubah kolom
trending_date ke tipe data datettime
Ubah kolom publish_time ke tipe data
datettime
vid$publish_time <- ymd_hms(vid$publish_time, tz = 'America/New_York') #tz= timezone wilayah yang digunakaninsight:
- Kolom trending_date dan
kolom publish_time sudah memiliki tipe data yang sesuai
yaitu tipe data datetime sehingga dapat digali informasi yang lebih jauh
khususnya mengenai waktu dari data ini.
Kolom category_id ketika pertama kali terbaca oleh R
Programming merupakan kolom dengan tipe data numeric. Hal tersebut tidak
sesuai karena kolom tersebut memiliki nilai unique yang sangat sedikit.
Dari informasi dataset yang diperoleh diketahui nilai tersebut adalah
urutan dari kategori video yang dibuat oleh Youtube sehingga data ini
lebih tepat digunakan sebagai data categorical karena merupakan data
ordinal. Berikut tahapan pengubahannya,
Untuk mengubah data tersebut tidak dapat dilakukan secara langsung
menggunakan as.factor(), tetapi diubah dahulu menjadi tipe
data caharacter menggunakan fungsi as.character() dan
disesuaikan menurut judul masing-masing kategori video sehingga setiap
angka yang ada merepentasikan nama kategori videonya. Untuk menjalankan
hal ini diperlukan perulangan untuk melakukankomputasi yang cepat.
Perulangan pada R dapat menggunakan fungsi sapply()
yaitu fungsi yang akan menjalankan suatu fungsi didalamnya ke tiap baris
dan kolom secara bersamaan dan menghasilkan susunan data vektor. Untuk
fungsi didalamnya gunakan fungsi swicth() yaitu fungsi yang
akan membuat pilihan berdasarkan kondisi yang di input, jika pilihan
tidak tersedia (kondisi tidak sesuai) maka akan menghasilkan nilai null
atau nilai default.
#ubah menjadi tipe data character
vid$category_id <- sapply(as.character(vid$category_id), switch,
"1" = "Film and Animation",
"2" = "Autos and Vehicles",
"10" = "Music",
"15" = "Pets and Animals",
"17" = "Sports",
"19" = "Travel and Events",
"20" = "Gaming",
"22" = "People and Blogs",
"23" = "Comedy",
"24" = "Entertainment",
"25" = "News and Politics",
"26" = "Howto and Style",
"27" = "Education",
"28" = "Science and Technology",
"29" = "Nonprofit and Activism",
"43" = "Shows")
#ubah menjadi tipe data categorical
vid$category_id <- as.factor(vid$category_id)insight:
- kolom category_id sudah
diubah menjadi menjadi tipe data yang dianggap sesuai yaitu tipe data
categorical yang mengandung informasi masing-masing nama category video
nya.
Feature engineering adalah tahapan dimana kita membuat kolom baru berdasarkan data dari kolom-kolom yang tersedia. Tahapan ini sangat dipengaruhi oleh business problem yang ingin diselesaikan. Hal tersebut disebabkan dari tujuan dilakukannya tahapan ini akan memberikan informasi tambahan untuk eksplorasi data selanjutnya.
Pada Business Question sebelumnya kita diminta mengetahui pola-pola bagaimana suatu channel youtube mampu menjadi trending. Salah satu hal yang ingin diperoleh insight nya adalah pola waktu, kapan waktu yang tepat untuk publish video sehingga ditonton oleh banyak orang yang berpotensi menjadikannya trending. Untuk itu kita perlu mengolah informasi waktu tambahan dari data yang sudah ada, dimana data bertipe datetime diolah sehingga tiap video kita ketahui kapan di publish dan pola jumlah penonton dari jam publish tersebut.
publish_hourDari kolom publish_time yang memiliki informasi waktu
hingga satuan detik, diambil informasi dalam satuan jam untuk memperoleh
pola publish video dan disimpan ke dalam kolom
publish_hour.
#> trending_date
#> 1 2022-07-01
#> 2 2022-07-01
#> 3 2022-07-01
#> 4 2022-07-01
#> 5 2022-07-01
#> 6 2022-07-01
#> 7 2022-07-01
#> 8 2022-07-01
#> 9 2022-07-01
#> 10 2022-07-01
#> title
#> 1 so long nerds
#> 2 Usher: Tiny Desk Concert
#> 3 I Delivered a Penny to MrBeast!
#> 4 Cardi B - Hot Shit feat. Kanye West & Lil Durk [Official Audio]
#> 5 Fivio Foreign, Queen Naija - What's My Name (Official Video) ft. Coi Leray
#> 6 The Sims 4 High School Years: Official Reveal Trailer
#> 7 No one can stop me from buying weird ads (not even you)
#> 8 100 Kills = $500,000 Challenge!
#> 9 Five Nights At Freddy's SB Song - This Comes From Inside - The Living Tombstone
#> 10 The Riddle That Seems Impossible Even If You Know The Answer
#> channel_title category_id publish_time views likes
#> 1 Technoblade Gaming 2022-06-30 21:29:02 16846983 3253577
#> 2 NPR Music Music 2022-06-30 12:00:10 1157118 92134
#> 3 Ryan Trahan Entertainment 2022-06-30 10:00:38 6528267 648436
#> 4 Cardi B Music 2022-07-01 00:00:15 348851 51411
#> 5 FivioForeignVEVO Music 2022-06-30 12:00:13 482194 43953
#> 6 The Sims Gaming 2022-06-30 11:00:12 863639 89547
#> 7 Drew Gooden Comedy 2022-06-29 14:03:14 1800522 152049
#> 8 MrBeast Gaming Gaming 2022-06-29 13:30:08 4726069 250088
#> 9 The Living Tombstone Music 2022-06-30 13:00:11 744652 126774
#> 10 Veritasium Education 2022-06-30 08:20:58 1203832 85248
#> comment_count comments_disabled ratings_disabled publish_hour
#> 1 572010 FALSE FALSE 21
#> 2 7592 FALSE FALSE 12
#> 3 75201 FALSE FALSE 10
#> 4 6811 FALSE FALSE 0
#> 5 2135 FALSE FALSE 12
#> 6 7056 FALSE FALSE 11
#> 7 9724 FALSE FALSE 14
#> 8 12864 FALSE FALSE 13
#> 9 11237 FALSE FALSE 13
#> 10 8245 FALSE FALSE 8
insight:
- hasil dari code diatas akan
menghasikan kolom baru publish_hour yang berisi informasi
jam publish video
publish_whenkolom publish_hour yang sudah dibuat, hasilnya akan
dikategorikan menjadi 3 yaitu 12am to 8am,
9am to 4pm dan5pm to 12am melalui IF-Else.
# x = data
pw <- function(x){
if(x < 8){
x <- "12am to 7am" # video dengan publish_hour antara tengah malam hingga jam 7 pagi
}else if(x >= 8 & x < 16){
x <- "8am to 3pm" # video jam 8 pagi hingga jam 3 sore
}else{
x <- "4pm to 12am" # video jam 4 sore sampai tengah malam
}
}# gunakan `sapply()` untuk aplikasi ke seluruh baris
vid$publish_when <- sapply(vid$publish_hour, FUN = pw)
# ubah ke factor
vid$publish_when <- as.factor(vid$publish_when)
head(vid)#> trending_date
#> 1 2022-07-01
#> 2 2022-07-01
#> 3 2022-07-01
#> 4 2022-07-01
#> 5 2022-07-01
#> 6 2022-07-01
#> title
#> 1 so long nerds
#> 2 Usher: Tiny Desk Concert
#> 3 I Delivered a Penny to MrBeast!
#> 4 Cardi B - Hot Shit feat. Kanye West & Lil Durk [Official Audio]
#> 5 Fivio Foreign, Queen Naija - What's My Name (Official Video) ft. Coi Leray
#> 6 The Sims 4 High School Years: Official Reveal Trailer
#> channel_title category_id publish_time views likes
#> 1 Technoblade Gaming 2022-06-30 21:29:02 16846983 3253577
#> 2 NPR Music Music 2022-06-30 12:00:10 1157118 92134
#> 3 Ryan Trahan Entertainment 2022-06-30 10:00:38 6528267 648436
#> 4 Cardi B Music 2022-07-01 00:00:15 348851 51411
#> 5 FivioForeignVEVO Music 2022-06-30 12:00:13 482194 43953
#> 6 The Sims Gaming 2022-06-30 11:00:12 863639 89547
#> comment_count comments_disabled ratings_disabled publish_hour publish_when
#> 1 572010 FALSE FALSE 21 4pm to 12am
#> 2 7592 FALSE FALSE 12 8am to 3pm
#> 3 75201 FALSE FALSE 10 8am to 3pm
#> 4 6811 FALSE FALSE 0 12am to 7am
#> 5 2135 FALSE FALSE 12 8am to 3pm
#> 6 7056 FALSE FALSE 11 8am to 3pm
insight:
- hasil dari code diatas akan
menghasikan kolom baru publish_when yang berisi informasi
kategori waktu
publish_wdaySelain mencari informasi waktu dalam bentuk jam, dilakukan juga
pengambilan informasi waktu dalam hari. Untuk mendapatkan informasi
terkait hari gunakan library lubridate
Missing value merupakan nilai yang tidak ada dalam dataset. Kehadiran
missing value akan menjadikan interpretasi data menjadi bias karena
tidak memiliki informasi apapun sehingga perlu dihilangkan. Sebelum
menghapus missing values, kita perlu medeteksi keberadaan missing value
sebelumnya. Untuk mendeteksi gunakan fungsi anyNA() yang
akan menghasilkan nilai TRUE apabila terdapat missing value didalam
suatu dataset.
#> [1] FALSE
#> trending_date title channel_title category_id
#> 0 0 0 0
#> publish_time views likes comment_count
#> 0 0 0 0
#> comments_disabled ratings_disabled publish_hour publish_when
#> 0 0 0 0
#> publish_wday
#> 0
insight :
- Pada dataset yang digunakan tidak
ditemukan adanya missing values
Duplikasi data merupakan keadaan dimana suatu data dalam satu baris
memiliki nilai yang sama. Duplikasi data dalam penangananya disesuaikan
dengan kebutuhan. Dalam hal ini, duplikasi data dilakukan dengan
medeteksi judul video trending yang ada pada kolom title
yang duplikat, kemudian memilih data pertama dari duplikasi yang
terjadi.
#> [1] 29563
insight :
- Pada dataset yang digunakan terdapat
29563 judul video yang duplikat
- Menghilangkan duplikasi dengan
hanya memilih data pertama saja dari setiap duplikasi judul
Setelah dataset dianggap sudah clean, dimana tipe data sudah sesuai, tidak ada missing value dll. Selanjutnya masuk ke tahapan Exploratory Data Analysis. Dalam tahapan ini akan dilakukan eksplorasi data untuk menggali insight lebih dalam sehingga diperoleh wawasan tambahan dalam menyelesaikan business problem.
Deskriptif Statistika digunakan dalam EDA untuk melihat gambaran
keseluruhan data, khususnya pada data numeric. Untuk menggunakan
statistika deskriptif dapat menggunakan fungsi summary()
atau fungsi skim() dari library skimr. Dalam hal ini
digunakan fungsi skimr() karena mampu memberikan ringkasan
statistik secara komprehensif dibandingkan fungsi
summary().
| Name | vid_unique[, sapply(vid, … |
| Number of rows | 7237 |
| Number of columns | 4 |
| _______________________ | |
| Column type frequency: | |
| numeric | 4 |
| ________________________ | |
| Group variables | None |
Variable type: numeric
| skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
|---|---|---|---|---|---|---|---|---|---|---|
| views | 0 | 1 | 1133442.71 | 2387022.96 | 0 | 295940 | 537590 | 1116865 | 57458228 | ▇▁▁▁▁ |
| likes | 0 | 1 | 65832.06 | 196877.98 | 0 | 12634 | 24953 | 55707 | 4924852 | ▇▁▁▁▁ |
| comment_count | 0 | 1 | 5235.47 | 27196.95 | 0 | 950 | 1857 | 3829 | 1078921 | ▇▁▁▁▁ |
| publish_hour | 0 | 1 | 13.17 | 5.49 | 0 | 10 | 13 | 17 | 23 | ▂▃▇▇▅ |
insight :
- dari variable numeric yang tersedia,
data publish_hour memiliki distribusi cenderung normal
dilihat dari mean dan median, sementara kolom lainnya memiliki
distribusi condong ke kanan.
- kolom views menjadi kolom yang
memiliki informasi data yang paling beragam diantara kolom
lainnya
Pada tahapan ini dilakukan pencarian insight baru melalui analisis satu variable (analisis univariate), analisis banyak variable (analisis multivariate) dan eksplorasi lanjutan dengan menjawa berbagai business questionya.
Tahapan ini dilakukan analisis pada masing-masing variable yang dipilih, sebagaimana dibawah ini.
1. Frequency Publish Video per Hours
ggplot( data = vid_unique,
mapping = aes(x = publish_hour)) +
geom_histogram(binwidth=1, fill = 'red', color ='black') +
labs(title = "Histogram of Frequency Publish Video per Hours", x = "Hours", y = "Frequency")
insight:
-diketahui bahwa video yang trending
paling banyak di publish pada jam 10 - 15 sore
1. Frequency Publish Video per Days
ggplot( data = vid_unique,
mapping = aes(x = publish_wday)) +
geom_bar(fill = 'red',color ='black') +
labs(title = "Histogram of Frequency Publish Video per Hours", x = "Hours", y = "Frequency")
insight:
- diketahui bahwa hari Friday dan Sunday
menjadi hari yang paling banyak vide trending dipublish. namun
perbedaannya tidak begitu signifikan artinya tidak ada pengaruh hari apa
video dipublish untuk menjadi trending.
Tahapan ini merupakan melihat hubungan yang terjadi antar variable
yang ada. Hubungan tersebut dinyatakan dalam bentuk perhitungan
korelasi. Walaupun perhitungan korelasi tidak menyatakan sebab akibat
namun banyak digunakan untuk interpretasi kesamaan pola yang ada dari
masing-masing kolom. Untuk perhitungan korelasi dilakukan dengan
menggunakan fungsi ggpairs() dari library GGally yang mampu
memberikan nilai korelasi dan distribusi pada masing-masing kolom
numerik dalam satu tampilan.
insight:
- diketahui bahwa kolom
likes, kolom views dan kolom
comment_count memiliki korelasi yang kuat, artinya ada pola
yang sama dari kedua nilai tersebut, sementara kolom
publish_hour memiliki korelasi yang lemah dengan kolom
numeric lainnya
Salah satu cara terbaik untuk melakukan Exploratory Data Analysis yaitu melakukan eksplorasi data yang mampu menjawab pertanyaan bisnis atau permasalahan bisnis. Untuk itu berbagai pertanyaan dituliskan dan dijawab dengan menelusuri data yang ada.
Business Question 1
# visualisasi data
ggplot(data = vid_unique,
mapping = aes(x = as.factor(publish_hour),
y = likes_view)) +
geom_boxplot(fill = "red") +
labs( title = 'Boxplot of Likes-View Youtube Video per Hours',
x = 'Hours',
y = 'Likes / View')insight:
- pada umumnya Likes ratio terbanyak
terdapat di jam 00:00 mengacu pada median data
- akan tetapi ada
kemungkinan akan mendapatkan like sangat tinggi apabila di publish pada
jam 10:00 mengacu pada data outlier yang paling tinggi.
- Jam 05:00
menjadi jam yang memiliki variasi likes tertinggi mengacu dari lebar
boxplot
- dari data diatas rekomendasi jam publish bergantung pada
profil calon youtuber, Jam 00:00 menjadi jam terbaik untuk publish video
karena umumnya jam tersebut terjadi likes ratio tertinggi. Namun jika
ingin calon youtuber tersebut berani dalam mengambil keputusan untuk
mendapatkan likes ratio tertinggi maka publish video jam 05:00 menjadi
opsi terbaik.
Business Question 2
# melakukan subsetting pada kategori tertentu
vid_cat <- vid_unique[vid_unique$category_id %in% c("Howto and Style","Pets and Animals", "Travel and Events"),]# hapus level yang tidak ada pada data
vid_cat$category_id <- droplevels(vid_cat$category_id)
# cek level
levels(vid_cat$category_id)#> [1] "Howto and Style" "Pets and Animals" "Travel and Events"
#melakukan visualisasi data
ggplot( data = vid_cat,
mapping = aes(x = likes_view,
y = comments_view,
color = category_id))+
geom_point() +
labs( x = "Likes Ratio",
y = "Comments Ratio")
insight:
- pada pola scatter plot diatas terlihat
bahwa variable comments dan likes memliki korelasi positif namun
cenderung lemah
- terdapat video yang memiliki Likes yang tinggi
namun Comment sedikit seperti video dalam kategori ‘Pets and
Animals’
- terdapat video yang memiliki comment yang banyak namun
Likes sedikit seperti video dalam kategori ‘Howto & Style’
-
dari data diatas diketahui bahwa tidak ada pola hubungan yang kuat
antara Likes dengan Comments
Business Question 3
# melakukan agregasi data
vid_top10_channel <-
vid_unique |>
group_by(channel_title) |>
summarise(Frequency = n()) |>
filter (Frequency >= 10) |>
arrange(-Frequency) |>
head(10)# melakukan visualisasi data
ggplot(data = vid_top10_channel,
mapping = aes(x = Frequency,
y = reorder(channel_title,Frequency)))+
geom_col(aes(fill = Frequency))+
scale_fill_gradient(low="red", high="black") +
labs(title = "Trending Video Channel of YouTube US 2022",
x = "Frequency of Trending",
y = NULL) +
theme_minimal() +
theme(legend.position = "none")
insight:
- Dari grafik diatas diketahui bahwa
channel youtube paling sering trending adalah NFL, Fox Soccer dan NBA
# melakukan agregasi data
vid_top10_cat <-
vid_unique |>
group_by(category_id) |>
summarise(Frequency = n()) |>
arrange(-Frequency) |>
head(10)#melakukan visualisasi data
ggplot(data = vid_top10_cat,
mapping = aes(x = Frequency,
y = reorder(category_id,Frequency)))+
geom_col(aes(fill = Frequency))+
scale_fill_gradient(low="red", high="black") +
labs(title = "Trending Categories of YouTube US 2022",
x = "Video Count",
y = NULL) +
theme_minimal() +
theme(legend.position = "none")
insight:
- Dari grafik diatas diketahui bahwa
Kategori video youtube paling sering trending adalah gamming,
entertainment dan music
- Meskipun banyak channel Sports yang
sering trending, namun channel gamming terbanyak dalam hal trending. Hal
tersebut dikarenakan banyaknya channel youtube yang ada dibandingkan
channel categories sports.
Untuk membuat suatu channel youtube yang trending ada beberapa hal
yang perlu diperhatikan, yaitu :
1. Pemilihan Kategori
Youtube Channel
Pemilihan kategori channel menjadi hal yang penting untuk menjadikan suatu channel Youtube video trending. Jika mengacu dari data yang ada maka membangun channel untuk kategori gamming, Entertainment, Music dan sports adalah category youtube yang memiliki proporsi diatas 10% yang menguasai youtube video trending. Untuk itu direkomendasikan memilih kategori tersebut dalam membuat channel youtube.
prop_cat <- round(prop.table(vid_top10_cat$Frequency)*100,2)
name_cat <- head(as.character(vid_top10_cat$category_id),n=10)
proporsi_category_youtube <- data.frame(name_cat, prop_cat)
proporsi_category_youtube#> name_cat prop_cat
#> 1 Gaming 24.34
#> 2 Entertainment 20.08
#> 3 Music 15.16
#> 4 Sports 13.96
#> 5 People and Blogs 8.62
#> 6 Comedy 4.43
#> 7 Film and Animation 4.06
#> 8 News and Politics 3.58
#> 9 Science and Technology 2.95
#> 10 Education 2.82
insight:
- kategori gaming, entertainment, dan
music adalah 3 kategori paling trending di Youtube
- pembuatan
channel youtube dengan memilih salah satu category teratas adalah salah
satu opsi dalam menarik views yang besar secara proporsional
2. Pemilihan Referensi Youtube Channel
Setelah menentukan category Youtube yang dipilih (misal: categroy
gaming), maka selanjutnya kita perlu menjadikan beberapa channel gaming
terurtama pada channel yang banyak trending sebagai rujukan dan
referensi dalam pengembangan channel youtube. Hal ini perlu untuk
mengetahui gambaran umum terhadap hal-hal atau isi konten yang
diinginkan para views, bahkan potensi untuk kolaborasi antar channel ke
depannya.
vid_unique |>
filter(category_id == "Gaming") |>
group_by(channel_title) |>
summarise(total_trending = n()) |>
arrange(-total_trending) |>
head(n=5)#> # A tibble: 5 × 2
#> channel_title total_trending
#> <chr> <int>
#> 1 Clash of Clans 17
#> 2 Genshin Impact 17
#> 3 PM7 16
#> 4 The Game Theorists 16
#> 5 aCookieGod 16
insight:
- Yotube Channel Clash of Clans,
Genshin Impact dan PM7 adalah Yotube channel yang sering memperoleh
trending Youtube
- Membuat konten Youtube channel dengan merujuk
kesalah satu youtube channel yang sudah besar berpotensi akan
mendapatkan potensi jumlah penonton yang besar
3. Pemilihan Waktu Pubish
Dalam pemilihan waktu publish video, ada dua hal yang perlu
diperhatikan yaitu pada hari apa sebaiknya di publish dan pada jam
berapa ?. mengacu pada hasil tahapan EDA yang sudah dilakukan sebelumnya
diketahui bahwa,
Berdasarkan Hari
publish_wday_game <-
vid_unique |>
filter(category_id == "Gaming") |>
group_by(publish_wday) |>
summarise(n = n())|>
arrange(-n)ggplot( data = publish_wday_game,
mapping = aes(x = publish_wday,
y = n)) +
geom_bar(stat = "sum",
fill = 'red')+
theme_minimal()+
labs(title = "Frequency Publish Video per Days in Gaming Category", x = "Days", y = "Frequency")
insight:
- pada youtube videos category gaming
publish video trending terbanyak dilakukan pada saturday dan tuesday
Berdasarkan Jam
publish_hour_game <-
vid_unique |>
filter(category_id == "Gaming") |>
group_by(publish_hour) |>
summarise(n = n()) |>
arrange(-n)ggplot(data = publish_hour_game,
mapping = aes( x= publish_hour,
y = n))+
geom_line(col = "red")+
labs(x = "Hours",
y = "Total Trending")+
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5)) +
labs(title = "Frequency Publish Video per Hours in Gaming Category", x = "Hours", y = "Frequency")
insight:
- publish video terbanyak dilakukan pada
jam 10.00 - 15.00
- Direkomendasikan untuk publish video dilakukan
pada Saturday atau Tuesday antara jam 10:00 hingga 15:00