##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
##
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
##
## date, intersect, setdiff, union
# Read Data
vids <- read.csv("data_input/USvideos_2023.csv")
# Change Data Type
vids$trending_date <- ymd(vids$trending_date)
## Warning: 44200 failed to parse.
vids$publish_time <- ymd_hms(vids$publish_time)
# Extract DateTime Data
vids$publish_day <- wday(vids$publish_time, label = T, abbr = F)
vids$publish_hour <- hour(vids$publish_time)
vids$publish_date <- date(vids$publish_time)
vids$time_to_trend <- as.numeric (vids$trending_date - vids$publish_date)
# Add New Column
vids$publish_when <-
case_when(
vids$publish_hour <= 8 ~ "12am to 8am",
vids$publish_hour > 8 & vids$publish_hour <= 15 ~ "8am to 3pm",
vids$publish_hour >= 16 ~ "3pm to 12am"
)
# Change Category Id
vids$category_id <-
case_when(vids$category_id == "1" ~ "Film and Animation",
vids$category_id == "2" ~ "Autos and Vehicles",
vids$category_id == "10" ~ "Music",
vids$category_id == "15" ~ "Pets and Animals",
vids$category_id == "17" ~ "Sports",
vids$category_id == "19" ~ "Travel and Events",
vids$category_id == "20" ~ "Gaming",
vids$category_id == "22" ~ "People and Blogs",
vids$category_id == "23" ~ "Comedy",
vids$category_id == "24" ~ "Entertainment",
vids$category_id == "25" ~ "News and Politics",
vids$category_id == "26" ~ "Howto and Style",
vids$category_id == "27" ~ "Education",
vids$category_id == "28" ~ "Science and Technology",
vids$category_id == "29" ~ "Nonprofit and Activism",
vids$category_id == "43" ~ "Shows")
# Select First Trend Video Title
vids.unik <-
distinct(.data = vids,
title,
.keep_all = T)
ggplot2
Business Case: Sebagai seorang Data Analyst kita ingin menganalisa channel yang yang sering menjadi trending, tolak ukur sebuah channel sering menjadi trending adalah pernah masuk ke trend setidaknya 10 kali.
Step 1: Membuat sebuah objek dengan nama
trending_channel
yang berisikan dataframe yang chanel title
yang pernah trend setidaknya 10 kali
Hint:
table()
adalah fungsi yang dapat dimanfaatkan untuk
menghitung berapa kali chaneel tersebut menjadi trendingas.data.frame()
adalah fungsi yang dapat dimanfaatkan
untuk mengubah list menjadi dataframe# Please type your code down below
trending_channel <- as.data.frame(table(vids.unik$channel_title))
Step 2: Melakukan conditional subseting hanya untuk channel yang pernah trending 10 kali setidaknya
# Please type your code down below
trending_channel <- trending_channel[trending_channel$Freq >= 10, ]
Step 3: Coba visualisasikan dengan geom_col
# Please type your code down below
ggplot(data = top10_trending_channel, mapping = aes(x = Var1, y = Freq)) +
geom_col()
Step 4: Coba kita switch antara kolom x & y pada parameter
aes()
# Please type your code down below
ggplot(data = top10_trending_channel, mapping = aes(y = Var1, x = Freq)) +
geom_col()
Step 5: Menambahkan parameter reorder()
disumbu y
reorder()
adalah sebuh parameter yang dapat
dimanfaatkan untuk mengurutkan freq# Please type your code down below
ggplot(data = top10_trending_channel, mapping = aes(y = reorder(Var1, Freq), x = Freq)) +
geom_col()
Step 6: Mengubah warna dalam plot dengan menabahkan fungsi
scale_fill_gradient()
scale_fill_gradient()
adalah sebuah fungsi untuk
meberikan gradasi warna pada setiap bar dalam geom_col()
,
parameter yang dapat digunakan adalah
low
= parameter untuk warna yang paling bawahhigh
= parameter untuk warna yang paling atas# Please type your code down below
ggplot(data = top10_trending_channel, mapping = aes(y = reorder(Var1, Freq),
x = Freq,
fill = Freq)) +
geom_col() +
scale_fill_gradient(low = "red", high = "orange")
Step 7: Menambahkan geom_text()
geom_text()
adalah sebuah fungsi untuk memberikan
keteragan angka didalam bar plot
color
= Untuk memberikan warna ke textsize
= untuk mengatur ukuran textnudge_x
= untuk mengatur orientasi sumbu x# Please type your code down below
ggplot(data = top10_trending_channel, mapping = aes(y = reorder(Var1, Freq),
x = Freq,
fill = Freq)) +
geom_col() +
scale_fill_gradient(low = "red", high = "orange") +
geom_text(mapping = aes(label = Freq),
color = "black",
size = 2,
nudge_x = 1) +
theme(legend.position = "none")
Insight:
Multivariate plot adalah sebuah plot yang digunakan untuk menampilkan nilai dari beragam variabel secara bersamaan.
Business Case: Kita ingin mengetahui banyaknya video trending yang
di-publish berdasarkan kategorinya (category_id
) dan waktu
publish-nya (publish_when
).
Step 1: Melakukan aggregasi untuk mengetahui banyaknya jumlah video trending berdasarkan kategori
Parameter dari fungsi aggregate
: + x
:
formula + data
: dataframe yang digunakan +
FUN
: fungsi matematis
# Please Type Your Code Down Below
vids.agg <-
aggregate(
x = channel_title ~ category_id + publish_when,
data = vids.unik,
FUN = length
)
# memperbaiki nama kolom
names(vids.agg) <- c("category_id", "publish_when", "vid_count")
head(vids.agg)
Step 2: Mari visualisasi dataframe yang sudah dibuat menjadi long format
Pada fungsi geom_col()
ada sebuah parameter yang bernama
position
dan didalam postion itu bisa memasukan sebuah
value bernama dodge
.
# Please Type Your Code Down Below
ggplot(data = vids.agg, mapping = aes(x = vid_count, y = reorder(category_id, vid_count), fill = publish_when)) +
geom_col(position = "dodge")
Step 3: Mengubah warna dalam plot dengan menabahkan fungsi
scale_fill_manual()
scale_fill_manual()
adalah sebuah fungsi untuk
meberikan gradasi warna pada setiap bar dalam geom_col()
,
parameter yang dapat digunakan adalah
values
= parameter untuk menentukan warna apa saja yang
akan digunakanContoh:
scale_fill_manual(values = c("orange", "red"))
# Please Type Your Code Down Below
ggplot(data = vids.agg, mapping = aes(x = vid_count, y = reorder(category_id, vid_count), fill = publish_when)) +
geom_col(position = "dodge") +
scale_fill_manual(values = c("orange", "red", "yellow"))+
geom_text(mapping = aes(label = vid_count, group = publish_when),
size = 2,
position = position_dodge(width = 0.9),
hjust = 0.01)
Business Case: Bagaimana trending dari konten dengan kategori
Comedy
, Education
,dan
Sciennce and Technology
dari hari ke hari.
Hint:
vids
Step 1: Mari kita persiapkan datanya dengan conditional subseting
dengan memanfaatkan %in%
# Please run the code down below
vids.ces <- vids.unik[vids.unik$category_id %in% c("Gaming", "Entertainment", "Music"), ]
Step 3: Mari kita coba hitung kemunculan video yang trending dengan
menggunkan fungsi table()
# Please run the code down below
vids.ces <- as.data.frame(table(vids.ces$trending_date, vids.ces$category_id))
vids.ces
Step 4: Mari kita buat plotnya dengan menggunakan
geom_line()
# Please type your code down below
ggplot(data = vids.ces, mapping = aes(x = ymd(Var1) , y = Freq, color = Var2)) +
geom_line()
Step 5: Mari kita buat plotnya dengan menggunakan
geom_point()
# Please type your code down below
ggplot(data = vids.ces, mapping = aes(x = ymd(Var1) , y = Freq, color = Var2)) +
geom_line() +
geom_point()
Step 6: Mengatur sumbu X dengan menggunakan fungsi
scale_x_date()
Parameter yang dapat digunakan: - date breaks = ...days
... week
...month
- date_labels = format
tanggal
Contoh:
scale_x_date(date_breaks = "1 week", date_labels = "%m-%d")
# Please type your code down below
ggplot(data = vids.ces, mapping = aes(x = ymd(Var1) , y = Freq, color = Var2)) +
geom_line() +
geom_point() +
scale_x_date(date_breaks = "1 week",
date_labels = "%W-%y")
Step 6: Mengatur sumbu X dengan menggunakan fungsi
scale_y_continous()
Parameter yang dapat digunakan: -
breaks(seq(..,..,..))
Contoh: scale_y_continuous(breaks = seq(3, 27, 3))
Memplotkan variabel di panel terpisah, sehingga visual menjadi lebih
jelas. Fungsi yang dapat digunakan adalah facet_wrap()
Parameter yang bisa digunakan pada fungsi
facet_wrap()
facets
= parameter yang menentukan kolom apa yang mau
dipisahscales
= ada 3 value yang bisa diisi pada parameter ini
yaiut free_x
, free_y
&
free
Contoh:
facet_wrap(facets = ~ name, scales = "free_x")
leaflet
Kita dapat membuat interactive map dengan bantuan package
leaflet
. Leaflet sendiri adalah open-source JavaScript
library untuk pembuatan interactive maps.
Contoh sederhana:
# install.packages("leaflet")
library(leaflet)
# get icon
ico <- makeIcon(
iconUrl = "https://algorit.ma/wp-content/uploads/2017/07/logo_light_trans.png",
iconWidth=177/2, iconHeight=41/2
)
# make dummy data
set.seed(418)
loca <- data.frame(lat=runif(5, min = -6.24, max=-6.23),
lng=runif(5, min=106.835, max=106.85))
# check data
loca
# create a leaflet map widget
map1 <- leaflet()
# add tiles from open street map
map1 <- addTiles(map1)
# add markers
map1 <- addMarkers(map1, data = loca, icon=ico)
map1
# prepare pop-up
pops <- c(
"<h3>Algoritma Main HQ</h3><p>Visit us here!</p>",
"<strong>Algoritma Business Campus</strong>",
"<h3>In-Construction</h3><p>New Secondary Campus</p>",
"<strong>Secondary Campus</strong>",
"<strong>The Basecamp (business-school)</strong>"
)
# make new leaflet
map2 <- leaflet()
map2 <- addTiles(map2)
map2 <- addMarkers(map2, data = loca, icon=ico, popup = pops)
map2
Berikut adalah website dan referensi yang dapat mempermudah pemahaman kita mengenai leaflet:
Berikut adalah referensi-referensi lain dan website yang dapat memudahkan kita untuk mengekplorasi seputar data visualisasi di R: