Penyiapan Data

Read Data

data <- read.csv('/Users/radhityaharma/Downloads/datadetik.csv')
head(data)
##           source
## 1 facebook / cpc
## 2 facebook / cpc
## 3 facebook / cpc
## 4 facebook / cpc
## 5 facebook / cpc
## 6 facebook / cpc
##                                                                       title
## 1 Bikin Lambe Turah Diomelin, Nih Si Seksi yang Lengket-lengket sama Gading
## 2    Heboh! Kiki Farel Transfer Uang Jajan Rp 1 Juta ke Selebgram Mimi Peri
## 3                Tak Sesuai Harapan, Barang Belanja Online Ini Bikin Ngakak
## 4                                   Antar 'Tuyul', 7 Pengemudi Grab Dibekuk
## 5                               Melihat Kantor Pelayanan Grab Driver Center
## 6      2 Pelajar di Yogya Lempar Batu ke Mobil hingga Tewaskan Pengemudinya
##              cat    us        br    pv      pvps        avg
## 1          Gosip 13736 19.269967 83593  6.042140  21.790189
## 2          Gosip 15909 62.303763 74032  4.612011  16.330553
## 3 Unik dan Viral  7748 30.934520 54657  6.949396  21.429338
## 4       Kriminal 43893  6.966219 47924  1.106560   5.056397
## 5     Informatif 41155 11.630219 44072 43.809145 180.944233
## 6       Kriminal 28334 82.671710 30570  1.080632 123.586301

Melihat struktur data

str(data)
## 'data.frame':    155 obs. of  8 variables:
##  $ source: chr  "facebook / cpc" "facebook / cpc" "facebook / cpc" "facebook / cpc" ...
##  $ title : chr  "Bikin Lambe Turah Diomelin, Nih Si Seksi yang Lengket-lengket sama Gading" "Heboh! Kiki Farel Transfer Uang Jajan Rp 1 Juta ke Selebgram Mimi Peri" "Tak Sesuai Harapan, Barang Belanja Online Ini Bikin Ngakak" "Antar 'Tuyul', 7 Pengemudi Grab Dibekuk" ...
##  $ cat   : chr  "Gosip" "Gosip" "Unik dan Viral" "Kriminal" ...
##  $ us    : int  13736 15909 7748 43893 41155 28334 22885 5180 23208 21116 ...
##  $ br    : num  19.27 62.3 30.93 6.97 11.63 ...
##  $ pv    : int  83593 74032 54657 47924 44072 30570 24941 24097 23989 22642 ...
##  $ pvps  : num  6.04 4.61 6.95 1.11 43.81 ...
##  $ avg   : num  21.79 16.33 21.43 5.06 180.94 ...

Melihat missing value/NA

colSums(is.na(data))
## source  title    cat     us     br     pv   pvps    avg 
##      0      0      0      0      0      0      0      0

Tidak terdapat nilai NA pada masing-masing peubah yang digunakan.

Melihat dan Menghapus Data Duplikat

# Mengecek apakah ada duplikat
ada_duplikat <- anyDuplicated(data)

# Menampilkan hasil
print(ada_duplikat)
## [1] 0
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.2.3
## 
## 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
# Menghapus duplikat
data_unique <- data %>% distinct()
head(data_unique)
##           source
## 1 facebook / cpc
## 2 facebook / cpc
## 3 facebook / cpc
## 4 facebook / cpc
## 5 facebook / cpc
## 6 facebook / cpc
##                                                                       title
## 1 Bikin Lambe Turah Diomelin, Nih Si Seksi yang Lengket-lengket sama Gading
## 2    Heboh! Kiki Farel Transfer Uang Jajan Rp 1 Juta ke Selebgram Mimi Peri
## 3                Tak Sesuai Harapan, Barang Belanja Online Ini Bikin Ngakak
## 4                                   Antar 'Tuyul', 7 Pengemudi Grab Dibekuk
## 5                               Melihat Kantor Pelayanan Grab Driver Center
## 6      2 Pelajar di Yogya Lempar Batu ke Mobil hingga Tewaskan Pengemudinya
##              cat    us        br    pv      pvps        avg
## 1          Gosip 13736 19.269967 83593  6.042140  21.790189
## 2          Gosip 15909 62.303763 74032  4.612011  16.330553
## 3 Unik dan Viral  7748 30.934520 54657  6.949396  21.429338
## 4       Kriminal 43893  6.966219 47924  1.106560   5.056397
## 5     Informatif 41155 11.630219 44072 43.809145 180.944233
## 6       Kriminal 28334 82.671710 30570  1.080632 123.586301

Tidak terdapat nilai duplikat pada masing-masing peubah yang digunakan.

Analisis dan Eksplorasi Data

Analisis Kategori GO Viral

library(dplyr)
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.2.3
# Agregasi data berdasarkan kategori
agg_data <- data %>%
  group_by(cat) %>%
  summarise(
    avg_us = mean(us, na.rm = TRUE),
    avg_pv = mean(pv, na.rm = TRUE),
  )

# Visualisasi data dengan bar chart
# Rata-rata Users
ggplot(agg_data, aes(x = cat, y = avg_us, fill = cat)) +
  geom_bar(stat = "identity") +
  labs(title = "Rata-rata Pengguna Menurut Kategori", x = "Kategori", y = "Rata-rata Pengguna") +
  theme_minimal()

# Rata-rata Page Views
ggplot(agg_data, aes(x = cat, y = avg_pv, fill = cat)) +
  geom_bar(stat = "identity") +
  labs(title = "Rata-Rata Tampilan Halaman Berdasarkan Kategori", x = "Kategori", y = "Rata-Rata Tampilan Halaman") +
  theme_minimal()

Analisis Kategori Ter-Relevan bagi Pembaca Berita

# Agregasi data untuk mendapatkan rata-rata bounce rate dan avg time on page per kategori
agg_data_br_avg <- data %>%
  group_by(cat) %>%
  summarise(avg_br = mean(br, na.rm = TRUE),
            avg_time = mean(avg, na.rm = TRUE))

# Visualisasi scatter plot dalam hubungan antara br dan avg time on page
ggplot(agg_data_br_avg, aes(x = avg_br, y = avg_time, label = cat)) +
  geom_point(color = "red") +
  geom_text(vjust = -0.5) +
  labs(title = "Hubungan antara Rasio Pentalan(BR) dan Waktu Rata-rata di Halaman(PVPS)", 
       x = "Rata-rata Bounce Rate", y = "Rata-rata PVPS")

### Analisis Minat dalam Durasi Bacaan

# SCATTERPLOT
ggplot(data, aes(x = cat, y = pvps, fill = cat)) +  
  geom_boxplot() +
  labs(title = "Distribusi Tampilan Halaman per Sesi (PVPS) berdasarkan Kategori", 
       x = "Kategori", y = "Pageviews per Session") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  scale_fill_manual(values = c(
    "Duka dan Peristiwa" = "#F28E82",  
    "Gosip" = "#D4AC42",               
    "Informatif" = "#7AC05B",          
    "Kontroversi dan Kebijakan" = "#52C8BE",  
    "Kriminal" = "#55C1FF",            
    "Olahraga" = "#A987FF",            
    "Unik dan Viral" = "#FF61D2"       
  )) +
  coord_cartesian(ylim = c(0, max(data$pvps, na.rm = TRUE) / 2))

Analisis faktor-faktor kunci untuk meningkatkan performa berita

# Hitung korelasi antar metrik dalam setiap kategori
library(corrplot)
## corrplot 0.92 loaded
cor_data <- data %>%
  select(us, br, pv, pvps, avg) %>%
  cor(use = "complete.obs")

# Visualisasi heatmap
corrplot(cor_data, method = "color", 
         tl.col = "black", tl.srt = 45, 
         addCoef.col = "black") 

### Analisis Strategi Konten Kedepannya

library(dplyr)
library(tidyr)
library(ggplot2)
library(tidytext)
## Warning: package 'tidytext' was built under R version 4.2.3
# Step 1: Hitung frekuensi kemunculan kata dalam judul artikel
title_words <- data %>%
  unnest_tokens(word, title) %>%
  filter(nchar(word) > 3) %>%  # Hapus kata yang hanya terdiri dari 3 huruf atau kurang
  count(word, sort = TRUE) %>%
  top_n(10, n)  # Ambil 10 kata teratas berdasarkan frekuensi

# Step 2: Hubungkan frekuensi kata dengan jumlah pengguna
word_user_data <- data %>%
  unnest_tokens(word, title) %>%
  filter(word %in% title_words$word) %>%  # Filter hanya kata-kata yang termasuk dalam top 10
  group_by(word) %>%
  summarise(total_users = sum(us), freq = n())

# Step 3: Visualisasikan hasilnya
ggplot(word_user_data, aes(x = reorder(word, total_users), y = total_users)) +
  geom_col(fill = "skyblue") +
  coord_flip() +
  labs(title = "10 Kata Teratas dalam Judul dan Total Penggunanya",
       x = "Kata dalam Judul",
       y = "Total Pengguna") +
  theme_minimal()

`