1. PENDAHULUAN

Pilkada Jakarta 2024 merujuk pada pemilihan kepala daerah yang akan diselenggarakan di Jakarta pada tahun 2024. Pemilihan ini akan menentukan gubernur dan wakil gubernur Jakarta untuk periode berikutnya. Pilkada ini merupakan bagian penting dari proses demokrasi di Indonesia.

Mengapa Memilih untuk Scraping Berita Terkait Pilkada Jakarta 2024

Memperoleh informasi terkini: Dengan scraping, kita dapat memperoleh berita terbaru seputar Pilkada Jakarta 2024 secara cepat dan efisien. Analisis tren dan perkembangan: Data yang diambil dapat digunakan untuk menganalisis tren dan perkembangan terkait pemilihan, membantu dalam memahami dinamika politik dan preferensi pemilih. Transparansi dan akurasi: Dengan mengumpulkan berita dari berbagai sumber, kita dapat memastikan transparansi dan akurasi informasi yang disampaikan kepada publik. Mendukung pengambilan keputusan: Informasi yang dikumpulkan dapat digunakan sebagai dasar untuk pengambilan keputusan yang lebih baik, baik bagi pemilih maupun pihak terkait dalam proses pemilihan.

Aspek Lain yang Terkait dengan Pilkada Jakarta 2024

Debat calon: Debat antara calon gubernur dan wakil gubernur yang menjadi platform untuk menyampaikan visi, misi, dan program kerja. Kampanye politik: Kegiatan kampanye yang dilakukan oleh calon dan tim pendukungnya untuk memperoleh dukungan dari pemilih. Pengawasan pemilu: Peran lembaga pengawas pemilu dan masyarakat dalam memastikan transparansi, keadilan, dan keabsahan proses pemilihan. Partisipasi masyarakat: Peran aktif masyarakat dalam proses pemilihan, termasuk hak untuk memberikan suara dan pemantauan jalannya proses pemilihan.

2. PORTAL BERITA VIVA.CO.ID

Viva.co.id adalah portal berita online Indonesia yang menyediakan berbagai informasi terkini dalam berbagai kategori seperti berita politik, ekonomi, olahraga, teknologi, dan hiburan. Diluncurkan pada tahun 2008, Viva.co.id berfokus pada penyajian berita secara cepat dan akurat, dengan tujuan untuk menjadi sumber informasi yang dapat dipercaya oleh masyarakat Indonesia. Selain berita, Viva.co.id juga menyediakan konten multimedia seperti video dan foto untuk memberikan pengalaman yang lebih komprehensif bagi penggunanya.

Pada project kali ini, kita akan melakukan scraping pada website https://www.viva.co.id/ untuk mengumpulkan data terkait Pilkada Jakarta 2024. Situs web ini menyediakan berita, artikel, dan informasi terbaru mengenai berbagai topik, termasuk politik dan pemilihan umum di Indonesia, terutama terkait Pilkada Jakarta 2024. Scrapping dilaksanakan pada 31 Mei 2024 hingga 12 Juni 2024.

Situs web Viva.co.id dipilih untuk scraping karena beberapa alasan:

3. DATA

Data yang dikumpulkan dari situs ini akan mencakup id, time scraped, judul berita terkait Pilkada Jakarta, link berita, dan tanggal dan waktu publikasi artikel berita. Data ini akan digunakan untuk menganalisis tren dan perkembangan terkait Pilkada Jakarta 2024.

Data yang akan dilakukan scraping berkaitan dengan :

berikut data yang digunakan dalam analisis ini :

DATA <- read.csv("D:/semester2/manajemen data statistika/mds scrapping uas/data3.csv")
head(DATA,5)
##                       X_id             time_scraped
## 1 6659e903d678ae9e44013e41 2024-05-31T15:12:56.090Z
## 2 6659e903d678ae9e44013e42 2024-05-31T15:12:56.090Z
## 3 6659e903d678ae9e44013e43 2024-05-31T15:12:56.090Z
## 4 6659e903d678ae9e44013e44 2024-05-31T15:12:56.090Z
## 5 6659e903d678ae9e44013e45 2024-05-31T15:12:56.090Z
##                                                                                       judul
## 1           Profil Budi Djiwandono, Ponakan Prabowo Disebut Bakal Maju Pilkada Jakarta 2024
## 2 Dijagokan Parpol Jadi Bupati Sleman, Erina Istri Kaesang Justru Disebut Miskin Pengalaman
## 3                          Nasdem Sambut Baik Kalau Budi Djiwandono Maju di Pilkada Jakarta
## 4     Petinggi PSI Ungkap Kebijakan Partainya soal Wacana Kaesang Maju Pilkada Jakarta 2024
## 5                    Selain Kaesang, Ini Daftar Keluarga Jokowi Lain yang Terjun ke Politik
##        tanggal
## 1 31 Mei 2024 
## 2 31 Mei 2024 
## 3 31 Mei 2024 
## 4 31 Mei 2024 
## 5 31 Mei 2024 
##                                                                                                                                    links
## 1           https://www.viva.co.id/berita/politik/1718920-profil-budi-djiwandono-ponakan-prabowo-disebut-bakal-maju-pilkada-jakarta-2024
## 2 https://www.viva.co.id/berita/politik/1718855-dijagokan-parpol-jadi-bupati-sleman-erina-istri-kaesang-justru-disebut-miskin-pengalaman
## 3                         https://www.viva.co.id/berita/politik/1718848-nasdem-sambut-baik-kalau-budi-djiwandono-maju-di-pilkada-jakarta
## 4    https://www.viva.co.id/berita/politik/1718851-petinggi-psi-ungkap-kebijakan-partainya-soal-wacana-kaesang-maju-pilkada-jakarta-2024
## 5                    https://www.viva.co.id/berita/politik/1718801-selain-kaesang-ini-daftar-keluarga-jokowi-lain-yang-terjun-ke-politik
##              tokoh   label
## 1  Budi Djiwandono  netral
## 2          Kaesang negatif
## 3 Budi Djiwandono  positif
## 4         Kaesang   netral
## 5          Kaesang  netral

4. TEXT PROCESSING

4.1 Library Yang Diperlukan

library(tm)
## Warning: package 'tm' was built under R version 4.3.3
## 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)
## Warning: package 'wordcloud' was built under R version 4.3.3
## Loading required package: RColorBrewer
library(ggplot2)
## 
## Attaching package: 'ggplot2'
## The following object is masked from 'package:NLP':
## 
##     annotate
library(lubridate)
## Warning: package 'lubridate' was built under R version 4.3.3
## 
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union
library(tidyr)
library(tidytext)
## Warning: package 'tidytext' was built under R version 4.3.3
library(text)
## Warning: package 'text' was built under R version 4.3.3
## This is text (version 1.2.1).
## Text is new and still rapidly improving.
##                
## Newer versions may have improved functions and updated defaults to reflect current understandings of the state-of-the-art.
##                Please send us feedback based on your experience.
## 
## For more information about the package see www.r-text.org.
library(SnowballC)

Berikut penjelasan singkat kegunaan masing-masing library dalam text processing judul berita Pilkada 2024:

  • tm: Membersihkan dan mempersiapkan teks untuk analisis.

  • dplyr: Memanipulasi dan mengelola data teks.

  • wordcloud: Membuat visualisasi awan kata untuk melihat kata-kata yang sering muncul.

  • ggplot2: Membuat berbagai grafik untuk analisis data teks.

  • lubridate: Mengelola dan menganalisis data waktu terkait teks.

  • tidyr: Merapikan dan mengatur data teks.

  • tidytext: Mengubah teks menjadi bentuk data yang rapi untuk analisis.

  • text: Alat tambahan untuk analisis teks dan pembelajaran mesin.

  • SnowballC: Mengurangi kata ke bentuk dasar untuk konsistensi analisis.

4.2 Membuat Korpus Teks

Membuat korpus teks adalah langkah penting dalam text processing yang mengumpulkan teks dalam bentuk terstruktur untuk analisis lebih lanjut. Dalam analisis judul berita, korpus memungkinkan pembersihan dan transformasi teks seperti menghapus tanda baca, angka, dan kata-kata umum (stopwords), serta mengubah teks menjadi format konsisten. Ini mempersiapkan data teks untuk analisis mendalam seperti frekuensi kata, visualisasi awan kata, dan analisis sentimen, sehingga menghasilkan wawasan yang lebih bermakna.

# Load the data
DATAberita <- read.csv("D:/semester2/manajemen data statistika/mds scrapping uas/data.csv",encoding = "ISO-8859-1")

# Ensure correct encoding of the text
DATAberita$judul <- iconv(DATAberita$judul, from = "ISO-8859-1", to = "UTF-8")

# Create a text corpus
corpus <- Corpus(VectorSource(DATAberita$judul))

# Define custom stopwords for Indonesian
stopwords_id <- c("yang", "dan", "di", "ke", "dari", "ini", "itu", "untuk", "dengan", "pada", "adalah", "sebagai", "juga", "dalam", "tidak", "akan", "atau", "saya", "kami", "kita", "mereka", "anda", "ia", "saja", "the", "setelah", "juta", "nex", "hasil", "kena", "sabet", "apa","hasil", "sabet", "catat", "ada", "gelar", "bisa", "hingga", "hadirkan", "ikut")

4.3 Membersihkan Teks

Membersihkan teks adalah langkah penting dalam text processing yang menghilangkan elemen tidak relevan, seperti tanda baca, angka, dan kata-kata umum (stopwords). Proses ini juga mencakup pengubahan teks menjadi huruf kecil dan penghapusan spasi berlebih. Tujuannya adalah untuk meningkatkan kualitas data teks sehingga analisis fokus pada informasi yang penting dan representatif.

4.3.1 Case Folding

Case folding adalah proses mengubah semua karakter huruf dalam teks menjadi huruf kecil. Hal ini dilakukan untuk memastikan konsistensi dalam teks, sehingga kata-kata yang sebenarnya sama tetapi ditulis dengan huruf besar atau kecil akan dianggap sama dalam analisis selanjutnya. Hasilnya adalah korpus teks yang telah diubah menjadi huruf kecil untuk mempersiapkan langkah-langkah pembersihan dan analisis teks selanjutnya.

corpus <- corpus %>%
  tm_map(content_transformer(tolower))
## Warning in tm_map.SimpleCorpus(., content_transformer(tolower)): transformation
## drops documents
print("After Case Folding:")
## [1] "After Case Folding:"
print(sapply(corpus, as.character))
##  [1] "profil budi djiwandono, ponakan prabowo disebut bakal maju pilkada jakarta 2024"                
##  [2] "dijagokan parpol jadi bupati sleman, erina istri kaesang justru disebut miskin pengalaman"      
##  [3] "nasdem sambut baik kalau budi djiwandono maju di pilkada jakarta"                               
##  [4] "petinggi psi ungkap kebijakan partainya soal wacana kaesang maju pilkada jakarta 2024"          
##  [5] "selain kaesang, ini daftar keluarga jokowi lain yang terjun ke politik"                         
##  [6] "ridwan kamil masih menimbang maju pilkada jabar atau jakarta, keputusannya diumumkan juli"      
##  [7] "merespons wacana budisatrio-kaesang di pilkada jakarta, ridwan kamil bicara 'garis tangan'"     
##  [8] "ridwan kamil tegaskan jika maju pilkada jakarta tidak bergantung keputusan anies baswedan"      
##  [9] "beredar puluhan spanduk, warga minta anies baswedan kembali jadi gubernur jakarta"              
## [10] "sekjen psi sebut duet kaesang-budi djiwandono di pilkada jakarta belum dibahas internal"        
## [11] "kaesang pangarep dan rano karno dibidik untuk pilkada jakarta"                                  
## [12] "zulhas sebut jokowi tak setuju kaesang maju pilkada jakarta"                                    
## [13] "dipromosikan gerindra, kaesang pilih duet dengan anies baswedan"                                
## [14] "kaesang pangarep: tunggu bulan agustus"                                                         
## [15] "golkar tunggu hasil survei meski ridwan kamil didukung gerindra maju pilkada jakarta"           
## [16] "puan akui pdip tertarik usung anies di pilkada jakarta"                                         
## [17] "elite gerindra blak-blakan akui lirik kaesang jadi calon wakil gubernur jakarta"                
## [18] "elite pdip sebut kaesang menarik untuk diusung di pilkada jakarta"                              
## [19] "muncul isu duet kaesang-zita anjani di pilkada jakarta, psi masih mikir-mikir"                  
## [20] "pan harap muncul lagi tokoh lain di pilkada jakarta, tak hanya anies dan ridwan kamilâ "        
## [21] "sekjen pdip ralat pernyataan said abdullah yang bilang tertarik usung kaesang di jakarta"       
## [22] "dijagokan gerindra di pilgub dki, segini elektabilitas ridwan kamil dari berbagai survei"       
## [23] "gerindra tunggu sikap golkar sebelum usung ridwan kamil di pilkada jakarta"                     
## [24] "didorong relawan duet dengan andika perkasa di pilgub jakarta, anies bilang begini"             
## [25] "anies balas puan soal pilkada jakarta: pdip juga menarik"                                       
## [26] "zulhas akan usung dedi mulyadi maju pilgub jabar, wakilnya dari pan"                            
## [27] "plt ketua umum ppp sebut kans sandiaga di pilkada jakarta tetap terbuka tapi susah"             
## [28] "jawaban anies soal harapan kaesang duet bareng di pilgub jakarta"                               
## [29] "oso: partai hanura terbuka untuk kaesang dan anies maju pilgub jakarta"                         
## [30] "analisis pengamat soal peluang ridwan kamil maju di pilkada jakarta"                            
## [31] "anies dan pdip bisa dipertemukan kepentingan yang sama di pilkada dki, menurut pengamat"        
## [32] "sinyal pdip usung anies di jakarta, rocky gerung: menarik, keadaan berubah"                     
## [33] "andika perkasa masuk radar pdip jadi cagub untuk pilkada 2024"                                  
## [34] "jokowi buka suara soal kaesang dilarang maju pilkada jakarta"                                   
## [35] "ridwan kamil peluang besar menang di pilkada jabar tapi jakarta lebih strategis, menurut analis"
## [36] "pdip jakarta setor nama anies baswedan ke dpp untuk diusung di pilkada jakarta"                 
## [37] "pks kirim kode keras siap koalisi dengan pdip usung anies baswedan"                             
## [38] "gerindra kaji duet dedi mulyadi - bima arya di pilgub jawa barat, ridwan kamil ke pilkada mana?"
## [39] "analisis pakar soal peluang anies diusung koalisi pdip-pks di pilkada jakarta"                  
## [40] "alasan pdip masih pertimbangkan anies baswedan diusung di pilkada jakarta"                      
## [41] "pakar: peluang ridwan kamil menang di pilgub jakarta kecil, bisa berlawanan dengan anies"       
## [42] "petinggi pdip sebut sosok anies baswedan \"merah putih-nya enggak diragukan\""                  
## [43] "pkb dukung anies di pilkada jakarta 2024, pdip rekomendasikan dan pks masih pikir-pikir"        
## [44] "pkb siap duetkan anies-kaesang di pilkada jakarta"                                              
## [45] "usai diusung di pilkada jakarta, anies baswedan bakal sowan ke dpw pkb besok"

4.3.2 Membersihkan Tanda Baca

Semua tanda baca dalam setiap dokumen teks dalam corpus akan dihapus. . Langkah ini penting dalam pra-pemrosesan teks untuk memastikan bahwa analisis selanjutnya berfokus pada kata-kata atau entitas teks yang substansial, tanpa gangguan dari tanda baca yang tidak relevan.

# Clean the text
corpus <- corpus %>%
  tm_map(removePunctuation)
## Warning in tm_map.SimpleCorpus(., removePunctuation): transformation drops
## documents
print("After Removing Punctuation:")
## [1] "After Removing Punctuation:"
print(sapply(corpus, as.character))
##  [1] "profil budi djiwandono ponakan prabowo disebut bakal maju pilkada jakarta 2024"                
##  [2] "dijagokan parpol jadi bupati sleman erina istri kaesang justru disebut miskin pengalaman"      
##  [3] "nasdem sambut baik kalau budi djiwandono maju di pilkada jakarta"                              
##  [4] "petinggi psi ungkap kebijakan partainya soal wacana kaesang maju pilkada jakarta 2024"         
##  [5] "selain kaesang ini daftar keluarga jokowi lain yang terjun ke politik"                         
##  [6] "ridwan kamil masih menimbang maju pilkada jabar atau jakarta keputusannya diumumkan juli"      
##  [7] "merespons wacana budisatriokaesang di pilkada jakarta ridwan kamil bicara garis tangan"        
##  [8] "ridwan kamil tegaskan jika maju pilkada jakarta tidak bergantung keputusan anies baswedan"     
##  [9] "beredar puluhan spanduk warga minta anies baswedan kembali jadi gubernur jakarta"              
## [10] "sekjen psi sebut duet kaesangbudi djiwandono di pilkada jakarta belum dibahas internal"        
## [11] "kaesang pangarep dan rano karno dibidik untuk pilkada jakarta"                                 
## [12] "zulhas sebut jokowi tak setuju kaesang maju pilkada jakarta"                                   
## [13] "dipromosikan gerindra kaesang pilih duet dengan anies baswedan"                                
## [14] "kaesang pangarep tunggu bulan agustus"                                                         
## [15] "golkar tunggu hasil survei meski ridwan kamil didukung gerindra maju pilkada jakarta"          
## [16] "puan akui pdip tertarik usung anies di pilkada jakarta"                                        
## [17] "elite gerindra blakblakan akui lirik kaesang jadi calon wakil gubernur jakarta"                
## [18] "elite pdip sebut kaesang menarik untuk diusung di pilkada jakarta"                             
## [19] "muncul isu duet kaesangzita anjani di pilkada jakarta psi masih mikirmikir"                    
## [20] "pan harap muncul lagi tokoh lain di pilkada jakarta tak hanya anies dan ridwan kamilâ "        
## [21] "sekjen pdip ralat pernyataan said abdullah yang bilang tertarik usung kaesang di jakarta"      
## [22] "dijagokan gerindra di pilgub dki segini elektabilitas ridwan kamil dari berbagai survei"       
## [23] "gerindra tunggu sikap golkar sebelum usung ridwan kamil di pilkada jakarta"                    
## [24] "didorong relawan duet dengan andika perkasa di pilgub jakarta anies bilang begini"             
## [25] "anies balas puan soal pilkada jakarta pdip juga menarik"                                       
## [26] "zulhas akan usung dedi mulyadi maju pilgub jabar wakilnya dari pan"                            
## [27] "plt ketua umum ppp sebut kans sandiaga di pilkada jakarta tetap terbuka tapi susah"            
## [28] "jawaban anies soal harapan kaesang duet bareng di pilgub jakarta"                              
## [29] "oso partai hanura terbuka untuk kaesang dan anies maju pilgub jakarta"                         
## [30] "analisis pengamat soal peluang ridwan kamil maju di pilkada jakarta"                           
## [31] "anies dan pdip bisa dipertemukan kepentingan yang sama di pilkada dki menurut pengamat"        
## [32] "sinyal pdip usung anies di jakarta rocky gerung menarik keadaan berubah"                       
## [33] "andika perkasa masuk radar pdip jadi cagub untuk pilkada 2024"                                 
## [34] "jokowi buka suara soal kaesang dilarang maju pilkada jakarta"                                  
## [35] "ridwan kamil peluang besar menang di pilkada jabar tapi jakarta lebih strategis menurut analis"
## [36] "pdip jakarta setor nama anies baswedan ke dpp untuk diusung di pilkada jakarta"                
## [37] "pks kirim kode keras siap koalisi dengan pdip usung anies baswedan"                            
## [38] "gerindra kaji duet dedi mulyadi  bima arya di pilgub jawa barat ridwan kamil ke pilkada mana"  
## [39] "analisis pakar soal peluang anies diusung koalisi pdippks di pilkada jakarta"                  
## [40] "alasan pdip masih pertimbangkan anies baswedan diusung di pilkada jakarta"                     
## [41] "pakar peluang ridwan kamil menang di pilgub jakarta kecil bisa berlawanan dengan anies"        
## [42] "petinggi pdip sebut sosok anies baswedan merah putihnya enggak diragukan"                      
## [43] "pkb dukung anies di pilkada jakarta 2024 pdip rekomendasikan dan pks masih pikirpikir"         
## [44] "pkb siap duetkan anieskaesang di pilkada jakarta"                                              
## [45] "usai diusung di pilkada jakarta anies baswedan bakal sowan ke dpw pkb besok"

4.3.3 Menghapus Angka

Tahap ini digunakan untuk mengonversi setiap dokumen dalam korpus menjadi format karakter agar dapat dicetak.Sintaks ini merangkum bagaimana sintaks tersebut melakukan pembersihan angka dari teks dalam korpus dan menampilkan hasilnya untuk dianalisis lebih lanjut.

corpus <- corpus %>%
tm_map(removeNumbers) 
## Warning in tm_map.SimpleCorpus(., removeNumbers): transformation drops
## documents
print("After Removing Numbers:")
## [1] "After Removing Numbers:"
print(sapply(corpus, as.character))
##  [1] "profil budi djiwandono ponakan prabowo disebut bakal maju pilkada jakarta "                    
##  [2] "dijagokan parpol jadi bupati sleman erina istri kaesang justru disebut miskin pengalaman"      
##  [3] "nasdem sambut baik kalau budi djiwandono maju di pilkada jakarta"                              
##  [4] "petinggi psi ungkap kebijakan partainya soal wacana kaesang maju pilkada jakarta "             
##  [5] "selain kaesang ini daftar keluarga jokowi lain yang terjun ke politik"                         
##  [6] "ridwan kamil masih menimbang maju pilkada jabar atau jakarta keputusannya diumumkan juli"      
##  [7] "merespons wacana budisatriokaesang di pilkada jakarta ridwan kamil bicara garis tangan"        
##  [8] "ridwan kamil tegaskan jika maju pilkada jakarta tidak bergantung keputusan anies baswedan"     
##  [9] "beredar puluhan spanduk warga minta anies baswedan kembali jadi gubernur jakarta"              
## [10] "sekjen psi sebut duet kaesangbudi djiwandono di pilkada jakarta belum dibahas internal"        
## [11] "kaesang pangarep dan rano karno dibidik untuk pilkada jakarta"                                 
## [12] "zulhas sebut jokowi tak setuju kaesang maju pilkada jakarta"                                   
## [13] "dipromosikan gerindra kaesang pilih duet dengan anies baswedan"                                
## [14] "kaesang pangarep tunggu bulan agustus"                                                         
## [15] "golkar tunggu hasil survei meski ridwan kamil didukung gerindra maju pilkada jakarta"          
## [16] "puan akui pdip tertarik usung anies di pilkada jakarta"                                        
## [17] "elite gerindra blakblakan akui lirik kaesang jadi calon wakil gubernur jakarta"                
## [18] "elite pdip sebut kaesang menarik untuk diusung di pilkada jakarta"                             
## [19] "muncul isu duet kaesangzita anjani di pilkada jakarta psi masih mikirmikir"                    
## [20] "pan harap muncul lagi tokoh lain di pilkada jakarta tak hanya anies dan ridwan kamilâ "        
## [21] "sekjen pdip ralat pernyataan said abdullah yang bilang tertarik usung kaesang di jakarta"      
## [22] "dijagokan gerindra di pilgub dki segini elektabilitas ridwan kamil dari berbagai survei"       
## [23] "gerindra tunggu sikap golkar sebelum usung ridwan kamil di pilkada jakarta"                    
## [24] "didorong relawan duet dengan andika perkasa di pilgub jakarta anies bilang begini"             
## [25] "anies balas puan soal pilkada jakarta pdip juga menarik"                                       
## [26] "zulhas akan usung dedi mulyadi maju pilgub jabar wakilnya dari pan"                            
## [27] "plt ketua umum ppp sebut kans sandiaga di pilkada jakarta tetap terbuka tapi susah"            
## [28] "jawaban anies soal harapan kaesang duet bareng di pilgub jakarta"                              
## [29] "oso partai hanura terbuka untuk kaesang dan anies maju pilgub jakarta"                         
## [30] "analisis pengamat soal peluang ridwan kamil maju di pilkada jakarta"                           
## [31] "anies dan pdip bisa dipertemukan kepentingan yang sama di pilkada dki menurut pengamat"        
## [32] "sinyal pdip usung anies di jakarta rocky gerung menarik keadaan berubah"                       
## [33] "andika perkasa masuk radar pdip jadi cagub untuk pilkada "                                     
## [34] "jokowi buka suara soal kaesang dilarang maju pilkada jakarta"                                  
## [35] "ridwan kamil peluang besar menang di pilkada jabar tapi jakarta lebih strategis menurut analis"
## [36] "pdip jakarta setor nama anies baswedan ke dpp untuk diusung di pilkada jakarta"                
## [37] "pks kirim kode keras siap koalisi dengan pdip usung anies baswedan"                            
## [38] "gerindra kaji duet dedi mulyadi  bima arya di pilgub jawa barat ridwan kamil ke pilkada mana"  
## [39] "analisis pakar soal peluang anies diusung koalisi pdippks di pilkada jakarta"                  
## [40] "alasan pdip masih pertimbangkan anies baswedan diusung di pilkada jakarta"                     
## [41] "pakar peluang ridwan kamil menang di pilgub jakarta kecil bisa berlawanan dengan anies"        
## [42] "petinggi pdip sebut sosok anies baswedan merah putihnya enggak diragukan"                      
## [43] "pkb dukung anies di pilkada jakarta  pdip rekomendasikan dan pks masih pikirpikir"             
## [44] "pkb siap duetkan anieskaesang di pilkada jakarta"                                              
## [45] "usai diusung di pilkada jakarta anies baswedan bakal sowan ke dpw pkb besok"

4.3.4 Menghapus Stopwords

Menghapus Stopwords digunakan untuk menghapus kata-kata umum (stopwords) yang telah didefinisikan sebelumnya dalam vektor stopwords_id dari setiap dokumen dalam korpus teks. Sekarang, setelah stopwords dihapus, korpus teks siap untuk langkah-langkah analisis teks selanjutnya seperti pembuatan DTM (Document-Term Matrix) atau analisis sentimen.

corpus <- corpus %>%
tm_map(removeWords, stopwords_id)
## Warning in tm_map.SimpleCorpus(., removeWords, stopwords_id): transformation
## drops documents
print("After Removing Stopwords:")
## [1] "After Removing Stopwords:"
print(sapply(corpus, as.character))
##  [1] "profil budi djiwandono ponakan prabowo disebut bakal maju pilkada jakarta "                  
##  [2] "dijagokan parpol jadi bupati sleman erina istri kaesang justru disebut miskin pengalaman"    
##  [3] "nasdem sambut baik kalau budi djiwandono maju  pilkada jakarta"                              
##  [4] "petinggi psi ungkap kebijakan partainya soal wacana kaesang maju pilkada jakarta "           
##  [5] "selain kaesang  daftar keluarga jokowi lain  terjun  politik"                                
##  [6] "ridwan kamil masih menimbang maju pilkada jabar  jakarta keputusannya diumumkan juli"        
##  [7] "merespons wacana budisatriokaesang  pilkada jakarta ridwan kamil bicara garis tangan"        
##  [8] "ridwan kamil tegaskan jika maju pilkada jakarta  bergantung keputusan anies baswedan"        
##  [9] "beredar puluhan spanduk warga minta anies baswedan kembali jadi gubernur jakarta"            
## [10] "sekjen psi sebut duet kaesangbudi djiwandono  pilkada jakarta belum dibahas internal"        
## [11] "kaesang pangarep  rano karno dibidik  pilkada jakarta"                                       
## [12] "zulhas sebut jokowi tak setuju kaesang maju pilkada jakarta"                                 
## [13] "dipromosikan gerindra kaesang pilih duet  anies baswedan"                                    
## [14] "kaesang pangarep tunggu bulan agustus"                                                       
## [15] "golkar tunggu  survei meski ridwan kamil didukung gerindra maju pilkada jakarta"             
## [16] "puan akui pdip tertarik usung anies  pilkada jakarta"                                        
## [17] "elite gerindra blakblakan akui lirik kaesang jadi calon wakil gubernur jakarta"              
## [18] "elite pdip sebut kaesang menarik  diusung  pilkada jakarta"                                  
## [19] "muncul isu duet kaesangzita anjani  pilkada jakarta psi masih mikirmikir"                    
## [20] "pan harap muncul lagi tokoh lain  pilkada jakarta tak hanya anies  ridwan kamilâ "           
## [21] "sekjen pdip ralat pernyataan said abdullah  bilang tertarik usung kaesang  jakarta"          
## [22] "dijagokan gerindra  pilgub dki segini elektabilitas ridwan kamil  berbagai survei"           
## [23] "gerindra tunggu sikap golkar sebelum usung ridwan kamil  pilkada jakarta"                    
## [24] "didorong relawan duet  andika perkasa  pilgub jakarta anies bilang begini"                   
## [25] "anies balas puan soal pilkada jakarta pdip  menarik"                                         
## [26] "zulhas  usung dedi mulyadi maju pilgub jabar wakilnya  pan"                                  
## [27] "plt ketua umum ppp sebut kans sandiaga  pilkada jakarta tetap terbuka tapi susah"            
## [28] "jawaban anies soal harapan kaesang duet bareng  pilgub jakarta"                              
## [29] "oso partai hanura terbuka  kaesang  anies maju pilgub jakarta"                               
## [30] "analisis pengamat soal peluang ridwan kamil maju  pilkada jakarta"                           
## [31] "anies  pdip  dipertemukan kepentingan  sama  pilkada dki menurut pengamat"                   
## [32] "sinyal pdip usung anies  jakarta rocky gerung menarik keadaan berubah"                       
## [33] "andika perkasa masuk radar pdip jadi cagub  pilkada "                                        
## [34] "jokowi buka suara soal kaesang dilarang maju pilkada jakarta"                                
## [35] "ridwan kamil peluang besar menang  pilkada jabar tapi jakarta lebih strategis menurut analis"
## [36] "pdip jakarta setor nama anies baswedan  dpp  diusung  pilkada jakarta"                       
## [37] "pks kirim kode keras siap koalisi  pdip usung anies baswedan"                                
## [38] "gerindra kaji duet dedi mulyadi  bima arya  pilgub jawa barat ridwan kamil  pilkada mana"    
## [39] "analisis pakar soal peluang anies diusung koalisi pdippks  pilkada jakarta"                  
## [40] "alasan pdip masih pertimbangkan anies baswedan diusung  pilkada jakarta"                     
## [41] "pakar peluang ridwan kamil menang  pilgub jakarta kecil  berlawanan  anies"                  
## [42] "petinggi pdip sebut sosok anies baswedan merah putihnya enggak diragukan"                    
## [43] "pkb dukung anies  pilkada jakarta  pdip rekomendasikan  pks masih pikirpikir"                
## [44] "pkb siap duetkan anieskaesang  pilkada jakarta"                                              
## [45] "usai diusung  pilkada jakarta anies baswedan bakal sowan  dpw pkb besok"

4.3.5 Menghapus Spasi Berlebih

Tahap ini digunakan untuk menghapus spasi berlebih di dalam korpus teks corpus menggunakan fungsi tm_map dari paket tm dalam R. Ini adalah langkah penting dalam pra-pemrosesan teks untuk memastikan teks lebih terstruktur dan bersih sebelum dilakukan analisis lebih lanjut seperti penghitungan frekuensi kata atau pembuatan awan kata.Secara keseluruhan, langkah ini bertujuan untuk memastikan bahwa teks yang akan diolah selanjutnya dalam analisis teks sudah dalam kondisi yang optimal dengan menghilangkan karakter yang tidak diperlukan sehingga proses analisis lebih akurat dan efisien.

corpus <- corpus %>%
tm_map(stripWhitespace)
## Warning in tm_map.SimpleCorpus(., stripWhitespace): transformation drops
## documents
print("After Stripping Whitespace:")
## [1] "After Stripping Whitespace:"
print(sapply(corpus, as.character))
##  [1] "profil budi djiwandono ponakan prabowo disebut bakal maju pilkada jakarta "                 
##  [2] "dijagokan parpol jadi bupati sleman erina istri kaesang justru disebut miskin pengalaman"   
##  [3] "nasdem sambut baik kalau budi djiwandono maju pilkada jakarta"                              
##  [4] "petinggi psi ungkap kebijakan partainya soal wacana kaesang maju pilkada jakarta "          
##  [5] "selain kaesang daftar keluarga jokowi lain terjun politik"                                  
##  [6] "ridwan kamil masih menimbang maju pilkada jabar jakarta keputusannya diumumkan juli"        
##  [7] "merespons wacana budisatriokaesang pilkada jakarta ridwan kamil bicara garis tangan"        
##  [8] "ridwan kamil tegaskan jika maju pilkada jakarta bergantung keputusan anies baswedan"        
##  [9] "beredar puluhan spanduk warga minta anies baswedan kembali jadi gubernur jakarta"           
## [10] "sekjen psi sebut duet kaesangbudi djiwandono pilkada jakarta belum dibahas internal"        
## [11] "kaesang pangarep rano karno dibidik pilkada jakarta"                                        
## [12] "zulhas sebut jokowi tak setuju kaesang maju pilkada jakarta"                                
## [13] "dipromosikan gerindra kaesang pilih duet anies baswedan"                                    
## [14] "kaesang pangarep tunggu bulan agustus"                                                      
## [15] "golkar tunggu survei meski ridwan kamil didukung gerindra maju pilkada jakarta"             
## [16] "puan akui pdip tertarik usung anies pilkada jakarta"                                        
## [17] "elite gerindra blakblakan akui lirik kaesang jadi calon wakil gubernur jakarta"             
## [18] "elite pdip sebut kaesang menarik diusung pilkada jakarta"                                   
## [19] "muncul isu duet kaesangzita anjani pilkada jakarta psi masih mikirmikir"                    
## [20] "pan harap muncul lagi tokoh lain pilkada jakarta tak hanya anies ridwan kamilâ "            
## [21] "sekjen pdip ralat pernyataan said abdullah bilang tertarik usung kaesang jakarta"           
## [22] "dijagokan gerindra pilgub dki segini elektabilitas ridwan kamil berbagai survei"            
## [23] "gerindra tunggu sikap golkar sebelum usung ridwan kamil pilkada jakarta"                    
## [24] "didorong relawan duet andika perkasa pilgub jakarta anies bilang begini"                    
## [25] "anies balas puan soal pilkada jakarta pdip menarik"                                         
## [26] "zulhas usung dedi mulyadi maju pilgub jabar wakilnya pan"                                   
## [27] "plt ketua umum ppp sebut kans sandiaga pilkada jakarta tetap terbuka tapi susah"            
## [28] "jawaban anies soal harapan kaesang duet bareng pilgub jakarta"                              
## [29] "oso partai hanura terbuka kaesang anies maju pilgub jakarta"                                
## [30] "analisis pengamat soal peluang ridwan kamil maju pilkada jakarta"                           
## [31] "anies pdip dipertemukan kepentingan sama pilkada dki menurut pengamat"                      
## [32] "sinyal pdip usung anies jakarta rocky gerung menarik keadaan berubah"                       
## [33] "andika perkasa masuk radar pdip jadi cagub pilkada "                                        
## [34] "jokowi buka suara soal kaesang dilarang maju pilkada jakarta"                               
## [35] "ridwan kamil peluang besar menang pilkada jabar tapi jakarta lebih strategis menurut analis"
## [36] "pdip jakarta setor nama anies baswedan dpp diusung pilkada jakarta"                         
## [37] "pks kirim kode keras siap koalisi pdip usung anies baswedan"                                
## [38] "gerindra kaji duet dedi mulyadi bima arya pilgub jawa barat ridwan kamil pilkada mana"      
## [39] "analisis pakar soal peluang anies diusung koalisi pdippks pilkada jakarta"                  
## [40] "alasan pdip masih pertimbangkan anies baswedan diusung pilkada jakarta"                     
## [41] "pakar peluang ridwan kamil menang pilgub jakarta kecil berlawanan anies"                    
## [42] "petinggi pdip sebut sosok anies baswedan merah putihnya enggak diragukan"                   
## [43] "pkb dukung anies pilkada jakarta pdip rekomendasikan pks masih pikirpikir"                  
## [44] "pkb siap duetkan anieskaesang pilkada jakarta"                                              
## [45] "usai diusung pilkada jakarta anies baswedan bakal sowan dpw pkb besok"

4.4 Tokenisasi

Tokenisasi adalah proses membagi teks menjadi token-token yang lebih kecil, biasanya kata-kata, frasa, atau simbol.Tokenisasi diperlukan dalam pemrosesan bahasa alami untuk memecah teks menjadi unit-unit yang lebih kecil, sehingga komputer dapat memahami dan memanipulasi teks dengan lebih baik, seperti analisis sintaksis, parsing, atau analisis sentimen.

# Tokenizing and converting back to a dataframe
tokenized_corpus <- lapply(corpus, function(x) unlist(strsplit(as.character(x), "\\s+")))
tokenized_data <- data.frame(text = sapply(corpus, as.character), tokens = I(tokenized_corpus))

# View the tokenized data
print(tokenized_data)
##                                                                                           text
## 1                   profil budi djiwandono ponakan prabowo disebut bakal maju pilkada jakarta 
## 2     dijagokan parpol jadi bupati sleman erina istri kaesang justru disebut miskin pengalaman
## 3                                nasdem sambut baik kalau budi djiwandono maju pilkada jakarta
## 4            petinggi psi ungkap kebijakan partainya soal wacana kaesang maju pilkada jakarta 
## 5                                    selain kaesang daftar keluarga jokowi lain terjun politik
## 6          ridwan kamil masih menimbang maju pilkada jabar jakarta keputusannya diumumkan juli
## 7          merespons wacana budisatriokaesang pilkada jakarta ridwan kamil bicara garis tangan
## 8          ridwan kamil tegaskan jika maju pilkada jakarta bergantung keputusan anies baswedan
## 9             beredar puluhan spanduk warga minta anies baswedan kembali jadi gubernur jakarta
## 10         sekjen psi sebut duet kaesangbudi djiwandono pilkada jakarta belum dibahas internal
## 11                                         kaesang pangarep rano karno dibidik pilkada jakarta
## 12                                 zulhas sebut jokowi tak setuju kaesang maju pilkada jakarta
## 13                                     dipromosikan gerindra kaesang pilih duet anies baswedan
## 14                                                       kaesang pangarep tunggu bulan agustus
## 15              golkar tunggu survei meski ridwan kamil didukung gerindra maju pilkada jakarta
## 16                                         puan akui pdip tertarik usung anies pilkada jakarta
## 17              elite gerindra blakblakan akui lirik kaesang jadi calon wakil gubernur jakarta
## 18                                    elite pdip sebut kaesang menarik diusung pilkada jakarta
## 19                     muncul isu duet kaesangzita anjani pilkada jakarta psi masih mikirmikir
## 20             pan harap muncul lagi tokoh lain pilkada jakarta tak hanya anies ridwan kamilâ 
## 21            sekjen pdip ralat pernyataan said abdullah bilang tertarik usung kaesang jakarta
## 22             dijagokan gerindra pilgub dki segini elektabilitas ridwan kamil berbagai survei
## 23                     gerindra tunggu sikap golkar sebelum usung ridwan kamil pilkada jakarta
## 24                     didorong relawan duet andika perkasa pilgub jakarta anies bilang begini
## 25                                          anies balas puan soal pilkada jakarta pdip menarik
## 26                                    zulhas usung dedi mulyadi maju pilgub jabar wakilnya pan
## 27             plt ketua umum ppp sebut kans sandiaga pilkada jakarta tetap terbuka tapi susah
## 28                               jawaban anies soal harapan kaesang duet bareng pilgub jakarta
## 29                                 oso partai hanura terbuka kaesang anies maju pilgub jakarta
## 30                            analisis pengamat soal peluang ridwan kamil maju pilkada jakarta
## 31                       anies pdip dipertemukan kepentingan sama pilkada dki menurut pengamat
## 32                        sinyal pdip usung anies jakarta rocky gerung menarik keadaan berubah
## 33                                         andika perkasa masuk radar pdip jadi cagub pilkada 
## 34                                jokowi buka suara soal kaesang dilarang maju pilkada jakarta
## 35 ridwan kamil peluang besar menang pilkada jabar tapi jakarta lebih strategis menurut analis
## 36                          pdip jakarta setor nama anies baswedan dpp diusung pilkada jakarta
## 37                                 pks kirim kode keras siap koalisi pdip usung anies baswedan
## 38       gerindra kaji duet dedi mulyadi bima arya pilgub jawa barat ridwan kamil pilkada mana
## 39                   analisis pakar soal peluang anies diusung koalisi pdippks pilkada jakarta
## 40                      alasan pdip masih pertimbangkan anies baswedan diusung pilkada jakarta
## 41                     pakar peluang ridwan kamil menang pilgub jakarta kecil berlawanan anies
## 42                    petinggi pdip sebut sosok anies baswedan merah putihnya enggak diragukan
## 43                   pkb dukung anies pilkada jakarta pdip rekomendasikan pks masih pikirpikir
## 44                                               pkb siap duetkan anieskaesang pilkada jakarta
## 45                       usai diusung pilkada jakarta anies baswedan bakal sowan dpw pkb besok
##          tokens
## 1  profil, ....
## 2  dijagoka....
## 3  nasdem, ....
## 4  petinggi....
## 5  selain, ....
## 6  ridwan, ....
## 7  merespon....
## 8  ridwan, ....
## 9  beredar,....
## 10 sekjen, ....
## 11 kaesang,....
## 12 zulhas, ....
## 13 dipromos....
## 14 kaesang,....
## 15 golkar, ....
## 16 puan, ak....
## 17 elite, g....
## 18 elite, p....
## 19 muncul, ....
## 20 pan, har....
## 21 sekjen, ....
## 22 dijagoka....
## 23 gerindra....
## 24 didorong....
## 25 anies, b....
## 26 zulhas, ....
## 27 plt, ket....
## 28 jawaban,....
## 29 oso, par....
## 30 analisis....
## 31 anies, p....
## 32 sinyal, ....
## 33 andika, ....
## 34 jokowi, ....
## 35 ridwan, ....
## 36 pdip, ja....
## 37 pks, kir....
## 38 gerindra....
## 39 analisis....
## 40 alasan, ....
## 41 pakar, p....
## 42 petinggi....
## 43 pkb, duk....
## 44 pkb, sia....
## 45 usai, di....

4.5 Membuat Dokumen Term Matrix

Membuat Dokumen-Term Matriks (DTM) adalah langkah penting dalam text processing yang mengubah kumpulan dokumen teks menjadi representasi matriks di mana setiap baris mewakili dokumen dan setiap kolom mewakili kata-kata yang unik dalam seluruh korpus. Nilai di dalam matriks ini biasanya berupa frekuensi kemunculan kata dalam dokumen tersebut.

# Create a document-term matrix
dtm <- DocumentTermMatrix(corpus)

4.6 Mengubah Dokumen Term Matrix ke Data Frame

Mengubah Dokumen-Term Matriks (DTM) ke dalam format data frame adalah langkah penting dalam text processing untuk memfasilitasi analisis lebih lanjut.Dengan representasi data frame, kita dapat melakukan manipulasi data seperti penggabungan, pemfilteran, dan pengelompokan menggunakan dplyr, serta analisis statistik dan visualisasi teks menggunakan tidytext. Langkah ini memungkinkan eksplorasi dan pemrosesan data teks yang lebih efisien dan terstruktur dalam analisis teks.

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

4.7 Menampilkan 15 Frekuensi Kata Terbanyak

# Display the top 15 most frequent words
head(word_freq_df, 15)
##              word freq
## jakarta   jakarta   35
## pilkada   pilkada   29
## anies       anies   19
## kaesang   kaesang   13
## pdip         pdip   12
## maju         maju   11
## ridwan     ridwan   11
## kamil       kamil   10
## baswedan baswedan    8
## pilgub     pilgub    7
## soal         soal    6
## duet         duet    6
## gerindra gerindra    6
## usung       usung    6
## sebut       sebut    5

5. VISUALISASI DATA

Visualisasi data untuk pemrosesan teks judul berita Pilkada Jakarta 2024 membantu mengidentifikasi tren, pola, dan sentimen. Teknik seperti word cloud, grafik frekuensi kata, dan analisis sentimen mengungkap kata kunci populer, topik utama, serta persepsi publik terhadap kandidat dan isu terkait. Ini memberikan wawasan mendalam tentang dinamika kampanye dan opini publik secara komprehensif.

5.1 Tokoh yang Banyak di Mention dalam Headlines

# Misalkan word_freq_df adalah data frame dengan kolom 'word' dan 'freq'
# Menghapus kata-kata tertentu
filtered_word_freq_df <- word_freq_df[!word_freq_df$word %in% c("pilkada", "jakarta", "pilgub", "maju", "usung", "soal", "pdip"), ]

# Mengambil 3 kata yang paling sering muncul setelah filter
top_3_words <- head(filtered_word_freq_df, 3)

# Menghitung persentase frekuensi
top_3_words$percentage <- (top_3_words$freq / sum(top_3_words$freq)) * 100

# Plot frekuensi kata dengan persentase
library(ggplot2)

ggplot(top_3_words, aes(x = reorder(word, freq), y = freq)) +
  geom_bar(stat = "identity", fill = "#B2E7E8", color = "#5E5E5E") +
  coord_flip() +
  geom_text(aes(label = paste0(round(percentage, 1), "%")), hjust = -0.1, color = "#5E5E5E") +
  labs(title = "Tiga Tokoh yang Banyak di mention dalam Headlines",
       x = "Tokoh", y = "Frequency") +
  theme_minimal() +
  theme(plot.background = element_rect(fill = "#F7F7F7"),
        panel.background = element_rect(fill = "#F7F7F7"),
        plot.title = element_text(color = "#5E5E5E", size = 14, face = "bold"),
        axis.title = element_text(color = "#5E5E5E"),
        axis.text = element_text(color = "#5E5E5E"),
        axis.line = element_line(color = "#5E5E5E"),
        panel.grid.major = element_line(color = "#D3D3D3"))

5.2 Wordcloud

Word cloud Pilkada Jakarta menampilkan kata-kata yang paling sering muncul dalam judul berita, memperlihatkan topik-topik utama dan isu-isu yang paling banyak dibahas. Ukuran setiap kata menunjukkan frekuensi kemunculannya, sehingga kata-kata yang lebih besar lebih sering muncul dalam berita. Visualisasi ini membantu memahami fokus media dan opini publik secara cepat dan intuitif.

# Memuat library yang diperlukan
library(wordcloud)
library(RColorBrewer)

# Misalkan word_freq_df adalah data frame dengan kolom 'word' dan 'freq'
# Menghapus kata-kata tertentu
filtered_word_freq_df <- word_freq_df[!word_freq_df$word %in% c("disebut", "bilang", "tak", "dki", "akui", "bakal", "maju"), ]

# Mengambil 50 kata yang paling sering muncul setelah filter
top_50_words <- head(filtered_word_freq_df, 100)

# Generate the word cloud with specific colors
set.seed(1234)
wordcloud(words = top_50_words$word, freq = top_50_words$freq, min.freq = 1,
          max.words = 50, random.order = FALSE, rot.per = 0.35, 
          colors = c("#B2E7E8", "#221E21"))

5.3 Bigram

Bigram adalah pasangan dua kata yang muncul berurutan dalam teks. Analisis bigram membantu mengidentifikasi pola berulang dan frasa umum, memberikan wawasan tentang hubungan antar kata. Dalam konteks berita Pilkada Jakarta, bigram dapat mengungkapkan pasangan kata yang sering digunakan, seperti nama kandidat dan isu terkait.

# Tokenize the titles into bigrams
bigrams <- DATAberita %>%
  unnest_tokens(bigram, judul, token = "ngrams", n = 2)

# Count the bigrams
bigram_counts <- bigrams %>%
  count(bigram, sort = TRUE)

# Display the top 10 bigrams
head(bigram_counts, 10)
##             bigram  n
## 1  pilkada jakarta 24
## 2       di pilkada 18
## 3     ridwan kamil 10
## 4   anies baswedan  8
## 5     maju pilkada  7
## 6        di pilgub  5
## 7       diusung di  4
## 8   pilgub jakarta  4
## 9         anies di  3
## 10 budi djiwandono  3
# Pastikan untuk memuat paket yang diperlukan
library(dplyr)
library(tidytext)
library(ggplot2)

# Tokenisasi judul menjadi bigram
bigrams <- DATAberita %>%
  unnest_tokens(bigram, judul, token = "ngrams", n = 2)

# Menghitung jumlah bigram
bigram_counts <- bigrams %>%
  count(bigram, sort = TRUE)

# Menampilkan 5 bigram teratas
top_bigrams <- head(bigram_counts, 5)

# Membuat visualisasi dengan ggplot2 yang lebih menarik
ggplot(top_bigrams, aes(x = reorder(bigram, n), y = n, fill = n)) +
  geom_bar(stat = "identity", show.legend = FALSE) +
  geom_text(aes(label = n), hjust = -0.3, size = 5) +
  coord_flip() +
  labs(title = "Top 5 Bigrams in Pilkada Jakarta 2024 Headlines",
       x = "Bigram",
       y = "Count") +
  theme_minimal(base_size = 15) +
  scale_fill_gradient(low = "skyblue", high = "blue") +
  theme(plot.title = element_text(hjust = 0.5, face = "bold"),
        axis.title.x = element_text(face = "bold"),
        axis.title.y = element_text(face = "bold"))

5.4 Trigram

Trigram adalah urutan tiga kata yang muncul berurutan dalam teks. Analisis trigram memperdalam pemahaman tentang konteks dan pola frasa yang lebih kompleks, seringkali menunjukkan detail yang tidak terlihat dalam analisis bigram. Dalam berita Pilkada Jakarta, trigram bisa memperlihatkan frasa umum seperti “calon gubernur Jakarta” atau “kampanye Pilkada 2024”.

# Tokenize the titles into trigrams
trigrams <- DATAberita %>%
  unnest_tokens(trigram, judul, token = "ngrams", n = 3)

# Count the trigrams
trigram_counts <- trigrams %>%
  count(trigram, sort = TRUE)

# Display the top 10 trigrams
head(trigram_counts, 10)
##                 trigram  n
## 1    di pilkada jakarta 16
## 2  maju pilkada jakarta  6
## 3    diusung di pilkada  4
## 4     di pilgub jakarta  3
## 5  pilkada jakarta 2024  3
## 6      anies di pilkada  2
## 7    kaesang di pilkada  2
## 8  kaesang maju pilkada  2
## 9       maju di pilkada  2
## 10     pdip usung anies  2
# Pastikan untuk memuat paket yang diperlukan
library(dplyr)
library(tidytext)
library(ggplot2)

# Tokenisasi judul menjadi trigram
trigrams <- DATAberita %>%
  unnest_tokens(trigram, judul, token = "ngrams", n = 3)

# Menghitung jumlah trigram
trigram_counts <- trigrams %>%
  count(trigram, sort = TRUE)

# Menampilkan 5 trigram teratas
top_trigrams <- head(trigram_counts, 5)

# Membuat visualisasi dengan ggplot2 yang lebih menarik
ggplot(top_trigrams, aes(x = reorder(trigram, n), y = n, fill = n)) +
  geom_bar(stat = "identity", show.legend = FALSE) +
  coord_flip() +
  labs(title = "Top 5 Trigrams in Pilkada Jakarta 2024 News Titles",
       x = "Trigram",
       y = "Count") +
  theme_minimal(base_size = 15) +
  scale_fill_gradient(low = "skyblue", high = "blue") +
  theme(plot.title = element_text(hjust = 0.5, face = "bold"),
        axis.title.x = element_text(face = "bold"),
        axis.title.y = element_text(face = "bold"))

5.5 Distribusi Label Berita Pilkada Jakarta 2024

library(ggplot2)
# Calculate label counts
label_counts <- table(DATA$label)

# Calculate counts of each label
label_counts <- table(DATA$label)

# Create data frame for plotting
label_summary <- data.frame(
  label = names(label_counts),
  count = as.numeric(label_counts),
  percent = as.numeric(label_counts) / sum(label_counts) * 100
)

# Create a bar plot with values and custom aesthetics
bar_plot <- ggplot(label_summary, aes(x = label, y = count, fill = label)) +
  geom_bar(stat = "identity", width = 0.5, color = "black") +
  geom_text(aes(label = paste0(count)), vjust = -0.5, size = 5, color = "black") +
  labs(title = "Distribusi Label", x = "Label", y = "Jumlah") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  scale_fill_brewer(palette = "Set3")

# Print the bar plot
print(bar_plot)

5.6 Distribusi Label Berdasarkan Tokoh

# Clean up tokoh column (remove leading/trailing whitespace)
DATA$tokoh <- trimws(DATA$tokoh)

# Calculate frequency of each combination of tokoh and label
tokoh_label_counts <- table(DATA$tokoh, DATA$label)

# Convert to data frame for plotting
tokoh_label_summary <- as.data.frame(tokoh_label_counts)
colnames(tokoh_label_summary) <- c("tokoh", "label", "count")

# Plotting
plot_tokoh_label <- ggplot(tokoh_label_summary, aes(x = tokoh, y = count, fill = label)) +
  geom_bar(stat = "identity", position = "stack") +
  labs(title = "Distribusi Label Berdasarkan Tokoh", x = "Tokoh", y = "Jumlah") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

# Print the plot
print(plot_tokoh_label)

5.7 Distribusi Label untuk Setiap Tokoh

# Filter data for Anies Baswedan
DATA_anies <- subset(DATA, tokoh == "Anies Baswedan")

# Calculate frequency of each label
label_counts <- table(DATA_anies$label)

# Create data frame for plotting with frequencies
label_summary <- data.frame(
  label = names(label_counts),
  count = as.numeric(label_counts)
)

# Plotting
plot_anies_label <- ggplot(label_summary, aes(x = label, y = count, fill = label)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = count), vjust = -0.5, size = 4, color = "white", position = position_stack(0.5)) +
  labs(title = "Distribusi Label untuk Anies Baswedan", x = "Label", y = "Jumlah") +
  theme_minimal()

# Print the plot
print(plot_anies_label)

# Filter data for Kaesang
DATA_kaesang <- subset(DATA, tokoh == "Kaesang")

# Calculate frequency of each label
label_counts_kaesang <- table(DATA_kaesang$label)

# Create data frame for plotting with frequencies
label_summary_kaesang <- data.frame(
  label = names(label_counts_kaesang),
  count = as.numeric(label_counts_kaesang)
)

# Plotting for Kaesang
plot_kaesang_label <- ggplot(label_summary_kaesang, aes(x = label, y = count, fill = label)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = count), vjust = -0.5, size = 4, color = "white", position = position_stack(0.5)) +
  labs(title = "Distribusi Label untuk Kaesang", x = "Label", y = "Jumlah") +
  theme_minimal()

# Print the plot for Kaesang
print(plot_kaesang_label)

# Filter data for Ridwan Kamil
DATA_ridwan_kamil <- subset(DATA, tokoh == "Ridwan Kamil")

# Calculate frequency of each label
label_counts_ridwan_kamil <- table(DATA_ridwan_kamil$label)

# Create data frame for plotting with frequencies
label_summary_ridwan_kamil <- data.frame(
  label = names(label_counts_ridwan_kamil),
  count = as.numeric(label_counts_ridwan_kamil)
)

# Plotting for Ridwan Kamil
plot_ridwan_kamil_label <- ggplot(label_summary_ridwan_kamil, aes(x = label, y = count, fill = label)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = count), vjust = -0.5, size = 4, color = "white", position = position_stack(0.5)) +
  labs(title = "Distribusi Label untuk Ridwan Kamil", x = "Label", y = "Jumlah") +
  theme_minimal()

# Print the plot for Ridwan Kamil
print(plot_ridwan_kamil_label)

# Filter data for Budi Djiwandono
DATA_budi_djiwandono <- subset(DATA, tokoh == "Budi Djiwandono")

# Calculate frequency of each label
label_counts_budi_djiwandono <- table(DATA_budi_djiwandono$label)

# Create data frame for plotting with frequencies
label_summary_budi_djiwandono <- data.frame(
  label = names(label_counts_budi_djiwandono),
  count = as.numeric(label_counts_budi_djiwandono)
)

# Plotting for Budi Djiwandono
plot_budi_djiwandono_label <- ggplot(label_summary_budi_djiwandono, aes(x = label, y = count, fill = label)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = count), vjust = -0.5, size = 4, color = "white", position = position_stack(0.5)) +
  labs(title = "Distribusi Label untuk Budi Djiwandono", x = "Label", y = "Jumlah") +
  theme_minimal()

# Print the plot for Budi Djiwandono
print(plot_budi_djiwandono_label)

5.8 Tokoh yang terkait dengan Label Positif

# Filter data for label "positif"
DATA_positif <- filter(DATA, label == "positif")

# Count frequency of each tokoh in positive label
tokoh_counts <- table(DATA_positif$tokoh)

# Create data frame for plotting with frequencies
tokoh_summary <- data.frame(
  tokoh = names(tokoh_counts),
  count = as.numeric(tokoh_counts)
)

# Sort data frame by count (optional)
tokoh_summary <- tokoh_summary %>% arrange(desc(count))

# Plotting
plot_tokoh_positif <- ggplot(tokoh_summary, aes(x = tokoh, y = count, fill = tokoh)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = count), vjust = -0.5, size = 4, color = "white", position = position_stack(0.5)) +
  labs(title = "Tokoh yang Terkait dengan Label Positif", x = "Tokoh", y = "Jumlah") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

# Print the plot
print(plot_tokoh_positif)

5.9 Tokoh yang terkait dengan Label Negatif

# Clean up tokoh column (remove leading/trailing whitespace)
DATA$tokoh <- trimws(DATA$tokoh)

# Filter data for label "negatif"
DATA_negatif <- filter(DATA, label == "negatif")

# Count frequency of each tokoh in negative label
tokoh_counts <- table(DATA_negatif$tokoh)

# Create data frame for plotting with frequencies
tokoh_summary <- data.frame(
  tokoh = names(tokoh_counts),
  count = as.numeric(tokoh_counts)
)

# Sort data frame by count (optional)
tokoh_summary <- tokoh_summary %>% arrange(desc(count))

# Plotting
plot_tokoh_negatif <- ggplot(tokoh_summary, aes(x = tokoh, y = count, fill = tokoh)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = count), vjust = -0.5, size = 4, color = "white", position = position_stack(0.5)) +
  labs(title = "Tokoh yang Terkait dengan Label Negatif", x = "Tokoh", y = "Jumlah") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

# Print the plot
print(plot_tokoh_negatif)

5.10 Bigram dan Trigram Budi Djiwandono

# Load necessary packages
library(dplyr)
library(tidytext)
library(stringr)
## Warning: package 'stringr' was built under R version 4.3.3
# Assume 'nama_tokoh' is the name you want to analyze
nama_tokoh <- "Budi Djiwandono"

# Filter data berita based on 'nama_tokoh'
filtered_data <- DATAberita %>%
  filter(str_detect(tolower(judul), tolower(nama_tokoh)))

# Tokenize titles into bigrams
bigrams <- filtered_data %>%
  unnest_tokens(bigram, judul, token = "ngrams", n = 2)

# Count the bigrams
bigram_counts <- bigrams %>%
  count(bigram, sort = TRUE)

# Display the top 10 bigrams
head(bigram_counts, 10)
##              bigram n
## 1   budi djiwandono 3
## 2   pilkada jakarta 3
## 3        di pilkada 2
## 4        baik kalau 1
## 5        bakal maju 1
## 6     belum dibahas 1
## 7  dibahas internal 1
## 8     disebut bakal 1
## 9     djiwandono di 1
## 10  djiwandono maju 1
# Pastikan untuk memuat paket yang diperlukan
library(dplyr)
library(tidytext)
library(stringr)
library(ggplot2)

# Contoh nama tokoh yang ingin Anda analisis
nama_tokoh <- "Budi Djiwandono"

# Filter data berita berdasarkan tokoh
filtered_data <- DATAberita %>%
  filter(str_detect(tolower(judul), tolower(nama_tokoh)))

# Tokenisasi judul menjadi bigram
bigrams <- filtered_data %>%
  unnest_tokens(bigram, judul, token = "ngrams", n = 2)

# Menghitung jumlah bigram
bigram_counts <- bigrams %>%
  count(bigram, sort = TRUE)

# Mengambil top 5 bigram
top_bigrams <- head(bigram_counts, 5)

# Menghitung total kemunculan semua bigram
total_bigrams <- sum(top_bigrams$n)

# Menghitung persentase untuk setiap bigram
top_bigrams <- top_bigrams %>%
  mutate(percentage = n / total_bigrams * 100)

# Membuat visualisasi dengan ggplot2 yang lebih menarik
ggplot(top_bigrams, aes(x = reorder(bigram, n), y = n, fill = percentage)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = paste0(round(percentage, 1), "%")), hjust = -0.3, size = 5) +
  scale_fill_gradient(low = "skyblue", high = "blue") +
  labs(title = paste("Top 5 Bigrams in Pilkada Jakarta 2024 Headlines Containing", nama_tokoh),
       x = "Bigram",
       y = "Count") +
  theme_minimal(base_size = 15) +
  theme(plot.title = element_text(hjust = 0.5, face = "bold"),
        axis.title.x = element_text(face = "bold"),
        axis.title.y = element_text(face = "bold"),
        legend.position = "none") +
  coord_flip()

# Pastikan untuk memuat paket yang diperlukan
library(dplyr)
library(tidytext)
library(stringr)
library(ggplot2)

# Contoh nama tokoh yang ingin Anda analisis
nama_tokoh <- "Budi Djiwandono"

# Filter data berita berdasarkan tokoh
filtered_data <- DATAberita %>%
  filter(str_detect(tolower(judul), tolower(nama_tokoh)))

# Tokenisasi judul menjadi trigram
trigrams <- filtered_data %>%
  unnest_tokens(trigram, judul, token = "ngrams", n = 3)

# Menghitung jumlah trigram
trigram_counts <- trigrams %>%
  count(trigram, sort = TRUE)

# Mengambil top 5 trigram
top_trigrams <- head(trigram_counts, 5)

# Menghitung total kemunculan semua trigram
total_trigrams <- sum(top_trigrams$n)

# Menghitung persentase untuk setiap trigram
top_trigrams <- top_trigrams %>%
  mutate(percentage = n / total_trigrams * 100)

# Membuat visualisasi dengan ggplot2 yang lebih menarik
ggplot(top_trigrams, aes(x = reorder(trigram, n), y = n, fill = percentage)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = paste0(round(percentage, 1), "%")), hjust = -0.3, size = 5) +
  scale_fill_gradient(low = "skyblue", high = "blue") +
  labs(title = paste("Top 5 Trigrams in Pilkada Jakarta 2024 Headlines Containing", nama_tokoh),
       x = "Trigram",
       y = "Count") +
  theme_minimal(base_size = 15) +
  theme(plot.title = element_text(hjust = 0.5, face = "bold"),
        axis.title.x = element_text(face = "bold"),
        axis.title.y = element_text(face = "bold"),
        legend.position = "none") +
  coord_flip()

5.11 Bigram dan Trigram untuk Kaesang

# Load necessary packages
library(dplyr)
library(tidytext)
library(stringr)

# Assume 'nama_tokoh' is the name you want to analyze
nama_tokoh <- "Kaesang"

# Filter data berita based on 'nama_tokoh'
filtered_data <- DATAberita %>%
  filter(str_detect(tolower(judul), tolower(nama_tokoh)))

# Tokenize titles into bigrams
bigrams <- filtered_data %>%
  unnest_tokens(bigram, judul, token = "ngrams", n = 2)

# Count the bigrams
bigram_counts <- bigrams %>%
  count(bigram, sort = TRUE)

# Display the top 10 bigrams
head(bigram_counts, 10)
##              bigram n
## 1   pilkada jakarta 9
## 2        di pilkada 5
## 3        kaesang di 3
## 4      maju pilkada 3
## 5      duet kaesang 2
## 6      kaesang maju 2
## 7  kaesang pangarep 2
## 8    pilgub jakarta 2
## 9     abdullah yang 1
## 10       akui lirik 1
# Pastikan untuk memuat paket yang diperlukan
library(dplyr)
library(tidytext)
library(stringr)
library(ggplot2)

# Contoh nama tokoh yang ingin Anda analisis
nama_tokoh <- "Kaesang"

# Filter data berita berdasarkan tokoh
filtered_data <- DATAberita %>%
  filter(str_detect(tolower(judul), tolower(nama_tokoh)))

# Tokenisasi judul menjadi bigram
bigrams <- filtered_data %>%
  unnest_tokens(bigram, judul, token = "ngrams", n = 2)

# Menghitung jumlah bigram
bigram_counts <- bigrams %>%
  count(bigram, sort = TRUE)

# Mengambil top 5 bigram
top_bigrams <- head(bigram_counts, 5)

# Menghitung total kemunculan semua bigram
total_bigrams <- sum(top_bigrams$n)

# Menghitung persentase untuk setiap bigram
top_bigrams <- top_bigrams %>%
  mutate(percentage = n / total_bigrams * 100)

# Membuat visualisasi dengan ggplot2 yang lebih menarik
ggplot(top_bigrams, aes(x = reorder(bigram, n), y = n, fill = percentage)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = paste0(round(percentage, 1), "%")), hjust = -0.3, size = 5) +
  scale_fill_gradient(low = "skyblue", high = "blue") +
  labs(title = paste("Top 5 Bigrams in Pilkada Jakarta 2024 Headlines Containing", nama_tokoh),
       x = "Bigram",
       y = "Count") +
  theme_minimal(base_size = 15) +
  theme(plot.title = element_text(hjust = 0.5, face = "bold"),
        axis.title.x = element_text(face = "bold"),
        axis.title.y = element_text(face = "bold"),
        legend.position = "none") +
  coord_flip()

# Pastikan untuk memuat paket yang diperlukan
library(dplyr)
library(tidytext)
library(stringr)
library(ggplot2)

# Contoh nama tokoh yang ingin Anda analisis
nama_tokoh <- "Kaesang"

# Filter data berita berdasarkan tokoh
filtered_data <- DATAberita %>%
  filter(str_detect(tolower(judul), tolower(nama_tokoh)))

# Tokenisasi judul menjadi trigram
trigrams <- filtered_data %>%
  unnest_tokens(trigram, judul, token = "ngrams", n = 3)

# Menghitung jumlah trigram
trigram_counts <- trigrams %>%
  count(trigram, sort = TRUE)

# Mengambil top 5 trigram
top_trigrams <- head(trigram_counts, 5)

# Menghitung total kemunculan semua trigram
total_trigrams <- sum(top_trigrams$n)

# Menghitung persentase untuk setiap trigram
top_trigrams <- top_trigrams %>%
  mutate(percentage = n / total_trigrams * 100)

# Membuat visualisasi dengan ggplot2 yang lebih menarik
ggplot(top_trigrams, aes(x = reorder(trigram, n), y = n, fill = percentage)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = paste0(round(percentage, 1), "%")), hjust = -0.3, size = 5) +
  scale_fill_gradient(low = "skyblue", high = "blue") +
  labs(title = paste("Top 5 Trigrams in Pilkada Jakarta 2024 Headlines Containing", nama_tokoh),
       x = "Trigram",
       y = "Count") +
  theme_minimal(base_size = 15) +
  theme(plot.title = element_text(hjust = 0.5, face = "bold"),
        axis.title.x = element_text(face = "bold"),
        axis.title.y = element_text(face = "bold"),
        legend.position = "none") +
  coord_flip()

5.12 Bigram dan Trigram untuk Anies Baswedan

# Load necessary packages
library(dplyr)
library(tidytext)
library(stringr)

# Assume 'nama_tokoh' is the name you want to analyze
nama_tokoh <- "Anies Baswedan"

# Filter data berita based on 'nama_tokoh'
filtered_data <- DATAberita %>%
  filter(str_detect(tolower(judul), tolower(nama_tokoh)))

# Tokenize titles into bigrams
bigrams <- filtered_data %>%
  unnest_tokens(bigram, judul, token = "ngrams", n = 2)

# Count the bigrams
bigram_counts <- bigrams %>%
  count(bigram, sort = TRUE)

# Display the top 10 bigrams
head(bigram_counts, 10)
##              bigram n
## 1    anies baswedan 8
## 2   pilkada jakarta 4
## 3        di pilkada 3
## 4        diusung di 3
## 5       alasan pdip 1
## 6       bakal sowan 1
## 7    baswedan bakal 1
## 8  baswedan diusung 1
## 9       baswedan ke 1
## 10 baswedan kembali 1
# Pastikan untuk memuat paket yang diperlukan
library(dplyr)
library(tidytext)
library(stringr)
library(ggplot2)

# Contoh nama tokoh yang ingin Anda analisis
nama_tokoh <- "Anies Baswedan"

# Filter data berita berdasarkan tokoh
filtered_data <- DATAberita %>%
  filter(str_detect(tolower(judul), tolower(nama_tokoh)))

# Tokenisasi judul menjadi bigram
bigrams <- filtered_data %>%
  unnest_tokens(bigram, judul, token = "ngrams", n = 2)

# Menghitung jumlah bigram
bigram_counts <- bigrams %>%
  count(bigram, sort = TRUE)

# Mengambil top 5 bigram
top_bigrams <- head(bigram_counts, 5)

# Menghitung total kemunculan semua bigram
total_bigrams <- sum(top_bigrams$n)

# Menghitung persentase untuk setiap bigram
top_bigrams <- top_bigrams %>%
  mutate(percentage = n / total_bigrams * 100)

# Membuat visualisasi dengan ggplot2 yang lebih menarik
ggplot(top_bigrams, aes(x = reorder(bigram, n), y = n, fill = percentage)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = paste0(round(percentage, 1), "%")), hjust = -0.3, size = 5) +
  scale_fill_gradient(low = "skyblue", high = "blue") +
  labs(title = paste("Top 5 Bigrams in Pilkada Jakarta 2024 Headlines Containing", nama_tokoh),
       x = "Bigram",
       y = "Count") +
  theme_minimal(base_size = 15) +
  theme(plot.title = element_text(hjust = 0.5, face = "bold"),
        axis.title.x = element_text(face = "bold"),
        axis.title.y = element_text(face = "bold"),
        legend.position = "none") +
  coord_flip()

# Pastikan untuk memuat paket yang diperlukan
library(dplyr)
library(tidytext)
library(stringr)
library(ggplot2)

# Contoh nama tokoh yang ingin Anda analisis
nama_tokoh <- "Anies Baswedan"

# Filter data berita berdasarkan tokoh
filtered_data <- DATAberita %>%
  filter(str_detect(tolower(judul), tolower(nama_tokoh)))

# Tokenisasi judul menjadi trigram
trigrams <- filtered_data %>%
  unnest_tokens(trigram, judul, token = "ngrams", n = 3)

# Menghitung jumlah trigram
trigram_counts <- trigrams %>%
  count(trigram, sort = TRUE)

# Mengambil top 5 trigram
top_trigrams <- head(trigram_counts, 5)

# Menghitung total kemunculan semua trigram
total_trigrams <- sum(top_trigrams$n)

# Menghitung persentase untuk setiap trigram
top_trigrams <- top_trigrams %>%
  mutate(percentage = n / total_trigrams * 100)

# Membuat visualisasi dengan ggplot2 yang lebih menarik
ggplot(top_trigrams, aes(x = reorder(trigram, n), y = n, fill = percentage)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = paste0(round(percentage, 1), "%")), hjust = -0.3, size = 5) +
  scale_fill_gradient(low = "skyblue", high = "blue") +
  labs(title = paste("Top 5 Trigrams in Pilkada Jakarta 2024 Headlines Containing", nama_tokoh),
       x = "Trigram",
       y = "Count") +
  theme_minimal(base_size = 15) +
  theme(plot.title = element_text(hjust = 0.5, face = "bold"),
        axis.title.x = element_text(face = "bold"),
        axis.title.y = element_text(face = "bold"),
        legend.position = "none") +
  coord_flip()

5.13 Bigram dan Trigram untuk Ridwan Kamil

# Load necessary packages
library(dplyr)
library(tidytext)
library(stringr)

# Assume 'nama_tokoh' is the name you want to analyze
nama_tokoh <- "Ridwan Kamil"

# Filter data berita based on 'nama_tokoh'
filtered_data <- DATAberita %>%
  filter(str_detect(tolower(judul), tolower(nama_tokoh)))

# Tokenize titles into bigrams
bigrams <- filtered_data %>%
  unnest_tokens(bigram, judul, token = "ngrams", n = 2)

# Count the bigrams
bigram_counts <- bigrams %>%
  count(bigram, sort = TRUE)

# Display the top 10 bigrams
head(bigram_counts, 10)
##               bigram  n
## 1       ridwan kamil 10
## 2    pilkada jakarta  6
## 3         di pilkada  5
## 4          di pilgub  3
## 5       maju pilkada  3
## 6          menang di  2
## 7     peluang ridwan  2
## 8      pilkada jabar  2
## 9  analisis pengamat  1
## 10    anies baswedan  1
# Pastikan untuk memuat paket yang diperlukan
library(dplyr)
library(tidytext)
library(stringr)
library(ggplot2)

# Contoh nama tokoh yang ingin Anda analisis
nama_tokoh <- "Ridwan Kamil"

# Filter data berita berdasarkan tokoh
filtered_data <- DATAberita %>%
  filter(str_detect(tolower(judul), tolower(nama_tokoh)))

# Tokenisasi judul menjadi bigram
bigrams <- filtered_data %>%
  unnest_tokens(bigram, judul, token = "ngrams", n = 2)

# Menghitung jumlah bigram
bigram_counts <- bigrams %>%
  count(bigram, sort = TRUE)

# Mengambil top 5 bigram
top_bigrams <- head(bigram_counts, 5)

# Menghitung total kemunculan semua bigram
total_bigrams <- sum(top_bigrams$n)

# Menghitung persentase untuk setiap bigram
top_bigrams <- top_bigrams %>%
  mutate(percentage = n / total_bigrams * 100)

# Membuat visualisasi dengan ggplot2 yang lebih menarik
ggplot(top_bigrams, aes(x = reorder(bigram, n), y = n, fill = percentage)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = paste0(round(percentage, 1), "%")), hjust = -0.3, size = 5) +
  scale_fill_gradient(low = "skyblue", high = "blue") +
  labs(title = paste("Top 5 Bigrams in Pilkada Jakarta 2024 Headlines Containing", nama_tokoh),
       x = "Bigram",
       y = "Count") +
  theme_minimal(base_size = 15) +
  theme(plot.title = element_text(hjust = 0.5, face = "bold"),
        axis.title.x = element_text(face = "bold"),
        axis.title.y = element_text(face = "bold"),
        legend.position = "none") +
  coord_flip()

# Pastikan untuk memuat paket yang diperlukan
library(dplyr)
library(tidytext)
library(stringr)
library(ggplot2)

# Contoh nama tokoh yang ingin Anda analisis
nama_tokoh <- "Ridwan Kamil"

# Filter data berita berdasarkan tokoh
filtered_data <- DATAberita %>%
  filter(str_detect(tolower(judul), tolower(nama_tokoh)))

# Tokenisasi judul menjadi trigram
trigrams <- filtered_data %>%
  unnest_tokens(trigram, judul, token = "ngrams", n = 3)

# Menghitung jumlah trigram
trigram_counts <- trigrams %>%
  count(trigram, sort = TRUE)

# Mengambil top 5 trigram
top_trigrams <- head(trigram_counts, 5)

# Menghitung total kemunculan semua trigram
total_trigrams <- sum(top_trigrams$n)

# Menghitung persentase untuk setiap trigram
top_trigrams <- top_trigrams %>%
  mutate(percentage = n / total_trigrams * 100)

# Membuat visualisasi dengan ggplot2 yang lebih menarik
ggplot(top_trigrams, aes(x = reorder(trigram, n), y = n, fill = percentage)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = paste0(round(percentage, 1), "%")), hjust = -0.3, size = 5) +
  scale_fill_gradient(low = "skyblue", high = "blue") +
  labs(title = paste("Top 5 Trigrams in Pilkada Jakarta 2024 Headlines Containing", nama_tokoh),
       x = "Trigram",
       y = "Count") +
  theme_minimal(base_size = 15) +
  theme(plot.title = element_text(hjust = 0.5, face = "bold"),
        axis.title.x = element_text(face = "bold"),
        axis.title.y = element_text(face = "bold"),
        legend.position = "none") +
  coord_flip()