Pendahuluan

Oleh : Devi Permata Sari (G1501231026) Perkembangan teknologi dan internet telah mengubah cara masyarakat mengonsumsi berita, dengan media online menjadi sumber informasi utama bagi banyak orang. Salah satu bentuk media online yang dapat diakses oleh masyarakat adalah Detik.com. Detik.com merupakan situs berita online yang diproduksi oleh PT Agrakom (Agranet Multicitra Siberkom) dan menjadi salah satu pelopor website berita di Indonesia. Detik.com menyediakan portal berita online yang menyajikan berita peristiwa terbaru, serta informasi lain seperti kesehatan, bisnis, gaya hidup, hiburan, olahraga, dan lain-lain. Dalam perkembangannya, Detik.com selalu berusaha menyesuaikan kebutuhan pembaca dan menyajikan berita yang ter-up to date, aktual, dan terpercaya (Batubara, 2015). Penelitian ini bertujuan untuk melakukan analisis mendalam terhadap data berita yang diperoleh dari Detik.com menggunakan teknik web scraping dan berbagai metode analisis data. Tujuan utamanya adalah untuk memperoleh pemahaman yang lebih baik tentang tren, pola, dan topik yang muncul dalam berita di Detik.com, serta mengungkap wawasan berharga yang dapat bermanfaat bagi jurnalis, editor, pembuat kebijakan, dan peneliti yang tertarik dengan analisis media dan opini publik.

Persiapan dan Koneksi ke MongoDB

library(mongolite)
library(tm)
## Loading required package: NLP
library(dplyr)
## 
## 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
library(wordcloud)
## Loading required package: RColorBrewer
library(ggplot2)
## 
## Attaching package: 'ggplot2'
## The following object is masked from 'package:NLP':
## 
##     annotate
library(lubridate)
## 
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union
library(tidytext)
library(tidyr)
library(stringr)
library(topicmodels)
library(knitr)
library(stopwords)
## 
## Attaching package: 'stopwords'
## The following object is masked from 'package:tm':
## 
##     stopwords
library(kableExtra)
## 
## Attaching package: 'kableExtra'
## The following object is masked from 'package:dplyr':
## 
##     group_rows
# Koneksi ke MongoDB
mongo_conn <- mongo(collection = "detik",
                    db = "scrappingweb",
                    url = "mongodb+srv://dvprmta:12345@cluster0.tzxirz3.mongodb.net/")

# Read data from MongoDB
headlines_df <- mongo_conn$find()

Analisis Frekuensi Kata pada Judul Berita

# Define corpus
corpus <- VCorpus(VectorSource(headlines_df$headline))

# Get Indonesian stopwords list from stopwords package
stopwords_id <- stopwords::stopwords(language = "id", source = "stopwords-iso")

# Preprocess corpus
corpus <- corpus %>%
  tm_map(content_transformer(tolower)) %>%
  tm_map(removePunctuation) %>%
  tm_map(removeNumbers) %>%
  tm_map(removeWords, stopwords_id) %>%
  tm_map(stripWhitespace)

# Create DocumentTermMatrix
dtm <- DocumentTermMatrix(corpus)

# Calculate word frequencies
word_freq <- sort(colSums(as.matrix(dtm)), decreasing = TRUE)
word_freq_df <- data.frame(word = names(word_freq), freq = word_freq)

# Display top 15 most frequent words
head(word_freq_df, 10)
##            word freq
## jakarta jakarta   34
## anies     anies   27
## jokowi   jokowi   20
## pdip       pdip   17
## fakta     fakta   13
## kpk         kpk   13
## pilkada pilkada   13
## dki         dki   12
## adha       adha   11
## gaza       gaza   11
# Generate word cloud
wordcloud(words = word_freq_df$word, freq = word_freq_df$freq, min.freq = 1,
          max.words = 100, random.order = FALSE, rot.per = 0.35,
          colors = c("#80DEEA", "#221E21"))

Analisis:
1. Jakarta (30 kali): Frekuensi tinggi kata “Jakarta” menunjukkan bahwa ibu kota Indonesia ini menjadi pusat perhatian dalam pemberitaan. Hal ini wajar mengingat Jakarta adalah pusat pemerintahan dan ekonomi negara. Beberapa judul terkait seperti “Wacana PDIP-PKB Berkoalisi Dukung Anies di Pilgub Jakarta” dan “Siapa Bersaing di Pilgub Jakarta?” menunjukkan adanya fokus pada dinamika politik di Jakarta, khususnya terkait pemilihan gubernur mendatang.
2. Anies (25 kali): Kemunculan nama Anies Baswedan dengan frekuensi tinggi mengindikasikan bahwa mantan Gubernur DKI Jakarta ini masih menjadi tokoh yang banyak dibicarakan. Judul seperti “Plus Minus Jika PDIP Usung Anies di Pilkada Jakarta Versi Bos Indostrategic” menunjukkan spekulasi tentang kemungkinan Anies kembali berkontestasi di Pilgub Jakarta.
3. Jokowi (16 kali): Presiden Joko Widodo tetap menjadi figur penting dalam pemberitaan nasional. Judul-judul seperti “Jokowi Bareng Iriana dan Jan Ethes Bersepeda di CFD Bundaran HI” menunjukkan bahwa aktivitas personal presiden pun masih menjadi perhatian publik.
4. PDIP (16 kali): Partai Demokrasi Indonesia Perjuangan (PDIP) sebagai partai penguasa saat ini juga sering muncul dalam pemberitaan. Judul seperti “Politisi PDIP Anggap Pujian Anies Objektif, Bawa-bawa Jokowi” menunjukkan peran PDIP dalam dinamika politik nasional dan hubungannya dengan tokoh-tokoh lain.

# Menghitung bigram counts
bigrams <- headlines_df %>%
  unnest_tokens(bigram, headline, token = "ngrams", n = 2) %>%
  count(bigram, sort = TRUE)
head(bigrams, 10)
##            bigram  n
## 1       idul adha 11
## 2      di pilkada  8
## 3     judi online  8
## 4       di pilgub  7
## 5    harun masiku  7
## 6        pagi ini  7
## 7  pilgub jakarta  7
## 8        anies di  6
## 9          di tol  6
## 10       hari ini  6
# Menghitung trigram counts
trigrams <- headlines_df %>%
  unnest_tokens(trigram, headline, token = "ngrams", n = 3) %>%
  count(trigram, sort = TRUE)
head(trigrams, 10)
##               trigram n
## 1   di pilgub jakarta 5
## 2     salat idul adha 5
## 3     di pilkada 2024 4
## 4     anies di pilgub 3
## 5   beda dengan anies 3
## 6  bilang beda dengan 3
## 7  di pilkada jakarta 3
## 8   effect di pilkada 3
## 9    eks penyidik kpk 3
## 10       idul adha di 3
# Visualisasi bigram counts (10 teratas)
ggplot(head(bigrams, 10), aes(x = reorder(bigram, n), y = n)) +
  geom_bar(stat = "identity", fill = "skyblue", color = "black") +
  labs(x = "Bigram", y = "Count", title = "Top 10 Bigrams in Headlines") +
  coord_flip() +  # Mengatur orientasi sumbu x menjadi horizontal
  theme_minimal() +  # Tema minimalis untuk plot
  theme(axis.text.y = element_text(size = 10))  # Mengatur ukuran teks pada sumbu y

# Visualisasi trigram counts (10 teratas)
ggplot(head(trigrams, 10), aes(x = reorder(trigram, n), y = n)) +
  geom_bar(stat = "identity", fill = "lightgreen", color = "black") +
  labs(x = "Trigram", y = "Count", title = "Top 10 Trigrams in Headlines") +
  coord_flip() +  # Mengatur orientasi sumbu x menjadi horizontal
  theme_minimal() +  # Tema minimalis untuk plot
  theme(axis.text.y = element_text(size = 10))  # Mengatur ukuran teks pada sumbu y

Analisis:

Analisis 5 bigram paling sering muncul:
1. “idul adha” (11 kali): Perayaan Idul Adha menjadi topik signifikan, tercermin dalam judul seperti “Daftar 30++ Ucapan Idul Adha 2024” dan “Wapres Ma’ruf Amin Serahkan Sapi Kurban 1,2 Ton ke Masjid Istiqlal”. Ini menunjukkan pentingnya momen keagamaan ini dalam konteks sosial dan politik Indonesia.
2. “judi online” (8 kali): Isu judi online muncul sebagai masalah serius, terlihat dari judul “Data Ngeri Judi Online di Indonesia: Angka Transaksi Salip Korupsi”. Hal ini menggambarkan keprihatinan publik dan pemerintah terhadap dampak perjudian online.
3. “di pilgub” (7 kali): Pemilihan gubernur, terutama di Jakarta, menjadi topik hangat. Judul seperti “Mencuat Wacana PDIP-PKB Berkoalisi Dukung Anies di Pilgub Jakarta” menunjukkan dinamika politik menjelang pemilihan kepala daerah.
4. “harun masiku” (7 kali): Kasus Harun Masiku tetap menjadi sorotan media, terlihat dari judul “Klaim Terbaru KPK Tangkap Harun Masiku dalam Seminggu”. Ini menandakan adanya perhatian berkelanjutan terhadap kasus korupsi dan penegakan hukum.
5. “pagi ini” (7 kali): Frasa ini sering muncul dalam berita lalu lintas harian, seperti “Lalin Tol Dalam Kota di Cawang Arah Tebet Macet Pagi Ini”, menunjukkan fokus media pada informasi real-time yang relevan bagi pembaca sehari-hari.
Analisis 5 trigram paling sering muncul
1. “di pilgub jakarta” (5 kali): Frasa ini muncul dalam judul seperti “Mencuat Wacana PDIP-PKB Berkoalisi Dukung Anies di Pilgub Jakarta”, menunjukkan fokus media pada dinamika politik menjelang pemilihan gubernur Jakarta.
2. “salat idul adha” (5 kali): Terlihat dalam judul seperti “Polda Metro Jaya Gelar Salat Idul Adha, Eks Menag Lukman Hakim Jadi Khatib”, mencerminkan perhatian media pada aspek keagamaan dan keterlibatan tokoh-tokoh penting dalam perayaan.
3. “anies di pilgub” (3 kali): Muncul dalam konteks spekulasi tentang pencalonan Anies Baswedan di Pilgub Jakarta, menandakan posisinya sebagai figur politik yang masih diperhitungkan.
4. “di pilkada jakarta” (3 kali): Serupa dengan “di pilgub jakarta”, frasa ini menekankan fokus pemberitaan pada kontestasi politik di ibukota, menunjukkan pentingnya Jakarta dalam lanskap politik nasional.
5. “eks penyidik kpk” (3 kali): Terlihat dalam judul seperti “Eks Penyidik KPK Ungkap TWK Era Firli ‘Gagalkan’ Tangkap Harun Masiku”, menggambarkan adanya sorotan terhadap dinamika internal dan kasus-kasus yang melibatkan KPK.

Kesimpulan
Analisis frekuensi kata membuktikan bahwa pemberitaan nasional masih didominasi oleh isu-isu politik, khususnya dinamika menjelang Pilkada Jakarta yang melibatkan tokoh seperti Anies Baswedan, dibuktikan dengan tingginya frekuensi kemunculan kata “Jakarta” dan “Anies” pada analisis 1 kata, frasa “di pilgub” pada analisis 2 kata, serta frasa “di pilgub jakarta”, “anies di pilgub”, dan “di pilkada jakarta” pada analisis 3 kata. Pentingnya aspek religius dalam kehidupan masyarakat Indonesia dibuktikan dengan frasa “idul adha” yang sering muncul pada analisis 2 kata dan frasa “salat idul adha” pada analisis 3 kata. Perhatian publik terhadap isu-isu sosial seperti judi online dan korupsi dibuktikan dengan frasa “judi online” dan “harun masiku” pada analisis 2 kata, serta “eks penyidik kpk” pada analisis 3 kata. Media juga menunjukkan perannya dalam menyajikan informasi yang dekat dengan kehidupan masyarakat, dibuktikan dengan frasa “pagi ini” yang sering muncul pada analisis 2 kata dalam konteks berita lalu lintas harian.

Analisis Jumlah Postingan

# Memeriksa jumlah total judul
total_titles <- nrow(headlines_df)
cat("Total judul berita:", total_titles, "\n")
## Total judul berita: 276
# Memeriksa jumlah total data
total_records <- length(headlines_df$tanggal)
cat("Total data:", total_records, "\n")
## Total data: 276
# Memeriksa struktur kolom tanggal
str(headlines_df$tanggal)
##  chr [1:276] "Minggu, 09 Jun 2024 09:03 WIB" ...
# Membersihkan dan mengonversi kolom tanggal
library(stringr)
headlines_df$tanggal <- str_trim(headlines_df$tanggal)  # Menghapus spasi di depan dan belakang
headlines_df$tanggal <- str_replace_all(headlines_df$tanggal, "Minggu,", "Sunday,")  # Mengganti "Minggu," dengan "Sunday,")
headlines_df$tanggal <- str_replace_all(headlines_df$tanggal, "Senin,", "Monday,")
headlines_df$tanggal <- str_replace_all(headlines_df$tanggal, "Selasa,", "Tuesday,")
headlines_df$tanggal <- str_replace_all(headlines_df$tanggal, "Rabu,", "Wednesday,")
headlines_df$tanggal <- str_replace_all(headlines_df$tanggal, "Kamis,", "Thursday,")
headlines_df$tanggal <- str_replace_all(headlines_df$tanggal, "Jumat,", "Friday,")
headlines_df$tanggal <- str_replace_all(headlines_df$tanggal, "Sabtu,", "Saturday,")

# Mengonversi kolom tanggal menggunakan strptime untuk penanganan format eksplisit
headlines_df$tanggal <- strptime(headlines_df$tanggal, format = "%A, %d %b %Y %H:%M WIB", tz = "Asia/Jakarta")

# Memeriksa nilai NA setelah konversi
if (any(is.na(headlines_df$tanggal))) {
  cat("Terdapat nilai NA dalam kolom tanggal setelah konversi\n")
} else {
  cat("Tidak ada nilai NA dalam kolom tanggal setelah konversi\n")
}
## Tidak ada nilai NA dalam kolom tanggal setelah konversi
# Melanjutkan dengan analisis frekuensi tanggal dan plotting
library(dplyr)
library(ggplot2)

date_freq <- headlines_df %>%
  na.omit() %>%
  mutate(tanggal = as.Date(tanggal)) %>%
  group_by(tanggal) %>%
  summarise(count = n())

# Menampilkan data tabel
print(date_freq)
## # A tibble: 15 × 2
##    tanggal    count
##    <date>     <int>
##  1 2024-06-09    34
##  2 2024-06-10    18
##  3 2024-06-11    16
##  4 2024-06-12    16
##  5 2024-06-13    15
##  6 2024-06-14    16
##  7 2024-06-15    16
##  8 2024-06-16    17
##  9 2024-06-17    20
## 10 2024-06-18    18
## 11 2024-06-19    20
## 12 2024-06-20    18
## 13 2024-06-21    18
## 14 2024-06-22    18
## 15 2024-06-23    16
# Plot menggunakan ggplot2
ggplot(date_freq, aes(x = tanggal, y = count)) +
  geom_line(color = "blue", size = 1.5) +
  geom_point(color = "blue", size = 3) +
  scale_x_date(date_labels = "%d-%m-%Y", date_breaks = "1 day") +
  labs(title = "Trend of News Headlines Over Time", x = "Date", y = "Number of Headlines") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 90, hjust = 1, color = "#221E21"),
        axis.text.y = element_text(color = "#221E21"),
        axis.title = element_text(color = "#221E21"),
        plot.title = element_text(color = "#221E21", size = 14, face = "bold"),
        panel.background = element_rect(fill = "white"),
        plot.background = element_rect(fill = "white"))
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

Analisis:
Analisis tren jumlah berita yang diterbitkan di Detik.com pada periode 9-22 Juni 2024 menunjukkan fluktuasi yang signifikan. Jumlah berita tertinggi terjadi pada 9 Juni dengan 34 berita, kemudian mengalami penurunan konsisten hingga mencapai titik terendah 15 berita pada 13 Juni. Penurunan ini mungkin terkait dengan perayaan Idul Adha pada 10 Juni. Setelah itu, terjadi peningkatan bertahap, mencapai 20 berita pada 17 dan 19 Juni, mencerminkan kembalinya rutinitas normal dengan topik-topik seperti politik menjelang Pilkada Jakarta (spekulasi tentang Anies, Kaesang, dan RK), kasus kriminal (penangkapan Virgoun terkait narkoba pada 21 Juni), dan isu-isu sosial. Dari 20 hingga 22 Juni, jumlah berita stabil di angka 18 per hari, menunjukkan konsistensi pemberitaan setelah berakhirnya efek libur Idul Adha dan kembalinya fokus pada isu-isu reguler.

Analisis Berdasarkan Penulis

author_freq <- headlines_df %>%
  group_by(penulis) %>%
  summarise(total_articles = n()) %>%
  arrange(desc(total_articles))

# Menampilkan tabel frekuensi penulis
print(author_freq)
## # A tibble: 76 × 2
##    penulis                                  total_articles
##    <chr>                                             <int>
##  1 Tim detikcom - detikNews                             62
##  2 Dwi Andayani - detikNews                             12
##  3 Azhar Bagas Ramadhan - detikNews                     11
##  4 Farih Maulana Sidik - detikNews                      10
##  5 Rolando Fransiscus Sihombing - detikNews              9
##  6 Wildan Noviansah - detikNews                          8
##  7 Yulida Medistiara - detikNews                         8
##  8 Arief Ikhsanudin - detikNews                          7
##  9 Kadek Melda Luxiana - detikNews                       7
## 10 Matius Alfons Hutajulu - detikNews                    7
## # ℹ 66 more rows
# Plotting menggunakan ggplot2
ggplot(author_freq, aes(x = reorder(penulis, total_articles), y = total_articles)) +
  geom_bar(stat = "identity", fill = "blue") +
  coord_flip() +
  labs(title = "Number of Articles by Author", x = "Author", y = "Number of Articles") +
  theme_minimal() +
  theme(axis.text.y = element_text(color = "#221E21"),
        axis.title = element_text(color = "#221E21"),
        plot.title = element_text(color = "#221E21", size = 14, face = "bold"),
        panel.background = element_rect(fill = "white"),
        plot.background = element_rect(fill = "white"))

Analisis:
Analisis frekuensi artikel berdasarkan penulis di Detik.com menunjukkan bahwa Tim detikcom - detikNews memiliki jumlah postingan terbanyak dengan 52 artikel, jauh melampaui penulis individu lainnya. Azhar Bagas Ramadhan - detikNews berada di posisi kedua dengan 11 artikel, diikuti oleh Farih Maulana Sidik - detikNews dengan 10 artikel. Dwi Andayani - detikNews dan Wildan Noviansah - detikNews masing-masing memiliki 8 artikel. Hal ini menunjukkan bahwa Tim detikcom - detikNews, yang kemungkinan merupakan tim penulis kolektif, memiliki kontribusi yang sangat signifikan dalam menghasilkan konten berita di Detik.com, sementara penulis individu lainnya memiliki jumlah postingan yang relatif lebih sedikit.

Analisis Berdasarkan Tag

tags <- headlines_df %>%
  separate_rows(tag, sep = ", ") %>%
  count(tag, sort = TRUE)

# Membuat wordcloud
wordcloud(words = tags$tag, freq = tags$n, min.freq = 1,
          max.words = 200, random.order = FALSE, rot.per = 0.35,
          colors = c("#80DEEA", "#221E21"))
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : round-up could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : kapolri jenderal listyo sigit prabowo could not be fit on page. It will
## not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : sekjen pbb afriansyah noor dipecat could not be fit on page. It will not
## be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : adhyaksa awards 2024 could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : bingkai sepekan could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : bos rental mobil could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : bos rental tewas dihajar di pati could not be fit on page. It will not
## be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : gelombang panas could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : hari raya idul adha could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : harun masiku buronan could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : ibu cabuli anak kandung could not be fit on page. It will not be
## plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : icha shakila could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : iriana jokowi could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : jambret cfd sudirman-thamrin could not be fit on page. It will not be
## plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : jenderal agus subiyanto could not be fit on page. It will not be
## plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : jubir kpk could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : jubir kpk tessa mahardhika could not be fit on page. It will not be
## plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : koalisi indonesia maju could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : mahmoud ahmadinejad could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : mardiono could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : masjid al-azhar could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : masjid istiqlal could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : menko pmk muhadjir effendy could not be fit on page. It will not be
## plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : narkoba could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : pemerasan could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : pemerkosaan could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : pengeroyokan could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : penjarahan could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : perubahan iklim could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : pilkada jabar 2024 could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : pilpres iran could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : pj gubernur dki jakarta could not be fit on page. It will not be
## plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : polres metro jakarta barat could not be fit on page. It will not be
## plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : rusun marunda dijarah could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : salat idul adha 2024 could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : satgas judi online could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : sekjen pbb could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : serang could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : sukolilo pati could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : timwas haji could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : tol dalam kota could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : udara jakarta could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : virgoun could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : virgoun ditangkap polisi could not be fit on page. It will not be
## plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : vladimir putin could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : wapres ma'ruf amin could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : yusril ihza mahendra could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : aedes aegypti could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : agus harimurti yudhoyono could not be fit on page. It will not be
## plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : gempa could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : konferensi internasional could not be fit on page. It will not be
## plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : one way could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : ott kpk could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : pilgub jabar could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : ppp gagal ke senayan could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : pusat data nasional gangguan could not be fit on page. It will not be
## plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : timnas indonesia could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : utut adianto could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = tags$tag, freq = tags$n, min.freq = 1, max.words =
## 200, : vandalisme could not be fit on page. It will not be plotted.

Analisis:
Analisis frekuensi tag pada artikel berita di Detik.com menunjukkan bahwa “jabodetabek” dan “round-up” adalah dua tag yang paling sering digunakan, masing-masing muncul sebanyak 46 dan 45 kali. Dominasi tag “jabodetabek” terlihat pada berita-berita seperti “Rusunawa Marunda Kian Parah: Dulu Atap Ambruk Kini Barang Dijarah”, “F-PDIP DKI Minta Penjagaan CFD Dikoreksi Buntut Viral Pelari Dijambret”, dan “Ada Bhayangkara Fun Walk 2024, Jalan Trunojoyo Jaksel Ditutup”. Ini mencerminkan fokus Detik.com pada isu-isu lokal yang relevan bagi penduduk Jakarta dan sekitarnya. Sementara itu, tag “round-up” sering muncul pada artikel-artikel seperti “5 Fakta Terbaru Kasus Akun FB Icha Shakila Minta 2 Ibu Cabuli Anak”, “6 Fakta Terkini Virgoun Ditangkap Dini Hari Bareng Wanita Terkait Narkoba”, dan “Fakta-fakta 3 Situs Judol Dibongkar, Perputaran Duit Capai Rp 1 Triliun”. Penggunaan tag ini menunjukkan strategi Detik.com dalam menyajikan informasi secara ringkas dan komprehensif, memudahkan pembaca untuk mendapatkan gambaran lengkap suatu topik dalam satu artikel. Kedua tag ini mencerminkan upaya Detik.com untuk memenuhi kebutuhan informasi pembaca tentang peristiwa lokal yang relevan serta menyajikan berita dalam format yang mudah dicerna.

#Analisis Topik Menggunakan LDA

# Dapatkan daftar stopwords bahasa Indonesia
indonesian_stopwords <- stopwords::stopwords(language = "id", source = "stopwords-iso")

# Membuat corpus dari teks tanpa stopwords bahasa Indonesia
corpus <- Corpus(VectorSource(headlines_df$teks))
corpus <- tm_map(corpus, content_transformer(tolower))  # Mengubah teks menjadi lowercase
## Warning in tm_map.SimpleCorpus(corpus, content_transformer(tolower)):
## transformation drops documents
corpus <- tm_map(corpus, removePunctuation)            # Menghapus tanda baca
## Warning in tm_map.SimpleCorpus(corpus, removePunctuation): transformation drops
## documents
corpus <- tm_map(corpus, removeNumbers)                # Menghapus angka
## Warning in tm_map.SimpleCorpus(corpus, removeNumbers): transformation drops
## documents
corpus <- tm_map(corpus, removeWords, indonesian_stopwords) # Menghapus stopwords bahasa Indonesia
## Warning in tm_map.SimpleCorpus(corpus, removeWords, indonesian_stopwords):
## transformation drops documents
dtm <- DocumentTermMatrix(corpus)

# Membuat model LDA
lda_model <- LDA(dtm, k = 5, control = list(seed = 1234))

# Mendapatkan istilah teratas untuk setiap topik
topics <- tidy(lda_model, matrix = "beta")
top_terms <- topics %>%
  group_by(topic) %>%
  slice_max(beta, n = 10) %>%
  ungroup() %>%
  arrange(topic, -beta)

# Visualisasi hasil
top_terms %>%
  mutate(term = reorder_within(term, beta, topic)) %>%
  ggplot(aes(beta, term, fill = factor(topic))) +
  geom_col(show.legend = FALSE) +
  facet_wrap(~ topic, scales = "free") +
  scale_y_reordered() +
  labs(title = "Top Terms per Topic", x = "Beta", y = "Terms") +
  theme_minimal() +
  theme(plot.title = element_text(color = "#221E21", size = 14, face = "bold"),
        panel.background = element_rect(fill = "white"),
        plot.background = element_rect(fill = "white"))

Analisis:
1. Topik 1:
Topik ini didominasi oleh istilah-istilah yang terkait dengan politik Jakarta dan Indonesia, seperti “jakarta”, “anies”, “pdip”, “dki”, “kpk”, “pilkada”, “pkb”, “calon”, “partai”, dan “kaesang”. Topik ini kemungkinan membahas tentang dinamika politik di Jakarta, termasuk pemilihan kepala daerah (pilkada), partai politik yang terlibat (PDIP, PKB), dan tokoh-tokoh politik seperti Anies Baswedan dan Kaesang Pangarep.
2. Topik 2:
Topik ini mengandung istilah-istilah seperti “online”, “judi”, “pbb”, “afriansyah”, “idul”, “adha”, “with”, “scroll”, “continue”, dan “content”. Topik ini mungkin terkait dengan perjudian online dan isu-isu yang berkaitan dengan teknologi atau konten online. Selain itu, topik ini juga menyebutkan tentang Idul Adha dan PBB (Perserikatan Bangsa-Bangsa).
3. Topik 3:
Topik ini mencakup istilah-istilah seperti “jakarta”, “ppp”, “presiden”, “prabowo”, “jokowi”, “anies”, “ridwan”, “kamil”, “partai”, dan “ahok”. Topik ini tampaknya membahas tentang politik nasional Indonesia, dengan fokus pada tokoh-tokoh politik seperti Presiden Joko Widodo, Prabowo Subianto, Anies Baswedan, Ridwan Kamil, dan Basuki Tjahaja Purnama (Ahok), serta partai politik seperti PPP.
4. Topik 4:
Topik ini mengandung istilah-istilah seperti “rita”, “indonesia”, “palestina”, “gaza”, “israel”, “warga”, “jalan”, “orang”, “negara”, dan “jakarta”. Topik ini tampaknya membahas tentang isu-isu internasional, khususnya konflik antara Israel dan Palestina, serta dampaknya terhadap warga dan negara-negara yang terlibat, termasuk Indonesia.
5. Topik 5:
Topik ini didominasi oleh istilah-istilah yang terkait dengan kriminalitas dan penegakan hukum, seperti “jakarta”, “polisi”, “pelaku”, “korban”, “metro”, “polda”, “jaya”, “uang”, “tersangka”, dan “orang”. Topik ini kemungkinan membahas tentang kejahatan yang terjadi di Jakarta, peran polisi dalam menangani kasus-kasus tersebut, serta pelaku dan korban yang terlibat.

Secara keseluruhan, analisis topik menggunakan LDA ini memberikan wawasan tentang tema-tema utama yang dibahas dalam kumpulan dokumen, mulai dari politik Jakarta dan nasional, perjudian online, isu internasional seperti konflik Israel-Palestina, hingga kriminalitas dan penegakan hukum di Jakarta. Analisis ini dapat membantu memahami fokus dan tren dalam pemberitaan atau diskusi yang terjadi dalam dokumen-dokumen tersebut.