Tevfik

Tevfik Bulut

Data Scientist

Twitter

Linkedin

RPubs

Contact

Creativity is just connecting things. When you ask creative people how they did something, they feel a little guilty because they didn’t really do it, they just saw something. It seemed obvious to them after a while. That’s because they were able to connect experiences they’ve had and synthesize new things. Steve Jobs

İçindekiler

Intro

Sentiment analysis is an increasing area of research and application due to the large size of unstructured text data.Within the scope of the study, a word cloud was created by making step-by-step applications, and then sentiment analysis was performed using lexicons.

Giriş

Duygu analizi, yapılandırılmamış metin verilerinin büyüklüğü nedeniyle artan bir araştırma ve uygulama alanıdır.Duygu analizi için tercih edilen programlama dilleri arasında Python ve R gibi diller öne çıkmaktadır.Duygu analizi modelleri, yalnızca kutupluluğa (olumlu, olumsuz, tarafsız) değil, aynı zamanda duygu ve duygulara (kızgın, mutlu, üzgün vb.) ve hatta niyetlere de odaklanmaktadır.Duygu analizi, metin içine sinen duyguları bulmak için kullanılan bir Doğal Dil İşleme (NLP) uygulamasıdır. Günümüzde, Facebook, Twitter gibi sosyal web siteleri, film, haber, yemek, moda, politika ve çok daha fazlası gibi farklı şeyler hakkında kullanıcıların yorumlarını görmek ve değerlendirmek için yaygın olarak kullanılmaktadır. İncelemeler ve görüşler, kullanıcıların belirli bir varlıkla ilgili memnuniyet düzeyini belirlemede önemli bir rol oynar. Bunlar daha sonra polariteyi, yani pozitifliği, negatifliği ve nötrlüğü bulmak için kullanılır. Duygu analizi pek çok farklı alanda kendine kullanım alanı bulmaktadır.Bunlardan bazıları aşağıdaki şekilde verilmiştir.

name

Çalışma kapsamında, veri seti olarak Bir Türk Kadınının Avrupa İzlenimleri (A Turkish Woman’s European Impressions) adlı eser kullanılmıştır. Veri seti kaynağından okunarak, sırasıyla kelime bulutları, ardından ise duygu analizi yapılmıştır. Veri seti, https://www.gutenberg.org/files/50540/50540-0.txt URL adresinden alınmıştır.

Metodoloji

Bu kısımda ilk olarak veri seti kaynağından okunmuştur. Ardından kelime bulutları oluşturulmuştur. Son durumda ise duygu analizleri yapılmıştır.

Örnek Uygulama

İlk olarak analizde kullanılacak R kütüphanelerini vererek işe başlayalım. Aşağıda gerekenden fazla kütüphane verdiğimi biliyorum. Ancak daha çok esneklik ve estetik tasarım tanıdığı için genellikle olması gerekenden fazla kütüphane ile çalışıyorum.Aşağıda R kod bloğunun çalıştırılmasından sonra kütüphanelerin yüklenip yüklenmediğine dair mantıksal vektör sonuçları gelecektir. Eğer mantıksal vektör sonuçlarının hepsi TRUE ise kütüphanelerin hepsini yüklenmiştir demektir. Kolaylık sağlaması açısından yukarıda kütüphanelerin yüklenmesini gösterir tabloyu da elde etmek ve daha kolay okumanız için kod da yazdım. Bu kod çalıştırıldığında aşağıdaki tabloda görüleceği üzere bütün kütüphaneler yüklenmiştir. Eğer sizlerde ilgili kütüphane yüklenmemiş olursa “Paket Kurulumu Gerekli” ifadesi tablo satırında yazacaktır.

Kütüphaneler

kütüphane<-c("dplyr","tibble","tidyr","ggplot2","ggthemes","readr","readxl","ggpubr","formattable", "ggstance", "pastecs","writexl", "psych", "GGally","pander", "rstatix", "stringr", "sentimentr","webshot","stringr","wordcloud", "wordcloud2","RColorBrewer", "htmlwidgets","syuzhet", "corpus","tidytext", "RColorBrewer","rmarkdown", "kableExtra", "report", "citation", "DT", "lubridate", "tm", "hwordcloud")
yükle<-sapply(kütüphane, require, character.only = TRUE, warn.conflicts = FALSE)
 
#Kütüphane yüklenme durumunu gösteren tablo
 
tibble(Sıra=1:length(kütüphane), Kütüphane=names(yükle), Durumu=as.logical(yükle)) %>% mutate(Durumu=if_else(Durumu==TRUE, "Yüklendi", "Paket Kurulumu Gerekli")) %>% 
kable(caption = htmltools::tags$caption(
    style = 'caption-side: top; text-align: center;background-color: #0077b5;color:white;font-family: arial; font-size: 20px;font-weight: bold;border: 3px solid #0e76a8;box-shadow: 10px 10px 20px grey',"Yüklenen Kütüphanelerin Listesi")) %>% 
kable_styling(bootstrap_options = c("striped", "hover"),font_size = 16) %>% row_spec(0, bold = T, color = "black") 
Yüklenen Kütüphanelerin Listesi
Sıra Kütüphane Durumu
1 dplyr Yüklendi
2 tibble Yüklendi
3 tidyr Yüklendi
4 ggplot2 Yüklendi
5 ggthemes Yüklendi
6 readr Yüklendi
7 readxl Yüklendi
8 ggpubr Yüklendi
9 formattable Yüklendi
10 ggstance Yüklendi
11 pastecs Yüklendi
12 writexl Yüklendi
13 psych Yüklendi
14 GGally Yüklendi
15 pander Yüklendi
16 rstatix Yüklendi
17 stringr Yüklendi
18 sentimentr Yüklendi
19 webshot Yüklendi
20 stringr Yüklendi
21 wordcloud Yüklendi
22 wordcloud2 Yüklendi
23 RColorBrewer Yüklendi
24 htmlwidgets Yüklendi
25 syuzhet Yüklendi
26 corpus Yüklendi
27 tidytext Yüklendi
28 RColorBrewer Yüklendi
29 rmarkdown Yüklendi
30 kableExtra Yüklendi
31 report Yüklendi
32 citation Yüklendi
33 DT Yüklendi
34 lubridate Yüklendi
35 tm Yüklendi
36 hwordcloud Yüklendi

Örnek olay

Uygulama kapsamında veri seti olarak Bir Türk Kadınının Avrupa İzlenimleri eseri kullanılmıştır. Veri seti kaynağından okunarak, sırasıyla kelime bulutları, ardından ise duygu analizi yapılmıştır. Veri seti https://www.gutenberg.org/files/50540/50540-0.txt url adresinden alınmıştır.

Verinin okunması

Bu kısımda txt formatındaki veri seti kaynağından okunmuş, ardından ilk 10 cümle verilmiştir.

url="https://www.gutenberg.org/files/50540/50540-0.txt"

pl <- read.delim(url, col.names = "cumle")

pl %>% head(10) %>% datatable()

Bu kısımda veri setinde tek başına anlam ifade etmeyen ifadeler çıkartılmıştır.

rmv1<-c("may", "can","years","age","mean","diet", "qol","based","dog","two","per","model","will","is","aarc","results","label","among","are","level","cancer", "used","many", "nlm", "data", "study", "p", "n", "net", "biochar", "aloe", "ses", "systems","avs", "acid","rate","aha","year","time","since","stroke", "however", "p lt", "ssris", "score", "index","hia", "largest", "current", "ncds", "found", "labelobjective", "It","yet","models", "vera","total", "also", "ptsd", "lt", "sroi", "icdm", "scores", "new", "arm", "china", "sample", "semen", "survey", "labelconclusions","within","labelbacground","range","followed","tagsnps","mbovis","labeldesign","increased","published", "likely", "nlmcategorymethods", "acids", "fatty", "employersponsored","labelmethods", "using", "conclusions","setting", "whether","findings","crosssectional", "one", "three","review","associated", "analysis", "studies", "nlmcategory", "background", "nlmcategorymethods", "in", "of", "and", "as", "19", "the","have","were","an", "was", "during", "to", "for","a", "cth","or","hcs", "this", "u","ci", "t", "la", "043d", "064a","043b", "062a", "trastuzumab","ewars","research", "either", "ipps73","ippss","87,017", "ofips", "15,000", "eshre","tdabc","thaihealth", "0.157", "and", "analyzed", "methods", "terms", "subjects", "being", "there", "compared", "while",  "when", "their","these","between", "his","her", "which", "that","who", "after","related","higher","group", "other","each","those","lower", "number","rates","first", "about", "groups","through","including", "across", "should", "must", "have","months","adjusted", "analyses", "estimated", "could", "would", "without", "further", "versus", "cross", "method", "follow", "general", "under", "below", "estimate","following", "received", "available", "before", "aimed", "collected", "often", "often","include","relevant","having","therefore","because","thus", "gutenberg","almost", "license", "ebook", "anyone", "anywhere", "title", "author", "enough", "nothing", "cannot", "really", "never", "again", "wwwgutenbergorg", "whatsoever", "editor", "chapter","perhaps", "shall", "every","where", "been", "more", "than", "even", "with", "what",  "who", "when", "only", "your", "into", "in", "on", "always", "online", "copy", "away", "back", "myself","whose", "still")

tr<-pl %>% mutate(word=str_to_lower(cumle))%>% unnest_tokens(word, cumle) # Metindeki harflerin tamamı küçük harfe dönüştürülmüştür.
tr<-tr %>% mutate(word=removePunctuation(word)) # Metindeki noktalama işaretleri kaldırılmıştır.
tr<-tr %>% mutate(word=str_squish(word)) # Metinle iç içe geçmiş (kalem325) rakam ve sayılar metinden ayıklanmıştır.
tr<-tr %>% mutate(word=removeNumbers(word)) # Metinden rakam ve sayılar çıkarılmıştır.
tr<-tr %>% filter(!word %in% rmv1) # Yukarıdaki belirtilen kelimeler metinden çıkarılmıştır. Burada dikkat edilirse çıkarılan kelimeler daha çok zamir, sıfat, edat ve bağlaçlardır. İsteğe bağlı olarak burada değişiklikler yapabilirsiniz.
tr<-tr %>% filter(str_length(word)>4) # Karakter sayısı 4'ten büyük kelimeler filtrelenmiştir. İsteğe bağlı olarak burada değişiklikler yapabilirsiniz.
tr<-str_replace(tr$word, "[ı]", "i") # Metin istenmeyen formatta kelimeler varsa ve bu kelimeleri çıkarmanız analize zarar verecekse yerine kelimeler atayabilirsiniz.
tr<-tr %>% as_tibble()%>%rename(word=value) # Metnin değişiklikler sonra tibble tablo düzenine dönüştürülmüştür.
tr
## # A tibble: 12,094 x 1
##    word        
##    <chr>       
##  1 restrictions
##  2 project     
##  3 included    
##  4 turkish     
##  5 womans      
##  6 european    
##  7 impressions 
##  8 zeyneb      
##  9 hanoum      
## 10 grace       
## # ... with 12,084 more rows

Bu kısımda eserdeki kelime frekansları büyükten küçüğe doğru ilk 50 kelime verilmiştir.

sayi<-tr %>% group_by(word) %>% count() %>% arrange(desc(n))
sayi<-sayi %>% add_column(id=1:NROW(sayi),.before = "word")
sayi %>% head(50) %>% datatable( colnames = c('Sıra' = "id", 'Kelime' = "word", "Frekansı"="n"))

Bu kısımda kelimeler sıklıklarına göre xlsx ve csv formatında indirililebilmektedir.

sayi %>%
  DT::datatable(colnames = c('Sıra' = "id", 'Kelime' = "word", "Frekansı"="n"),
    extensions = 'Buttons', 
    options = list(dom = 'Bfrtip', 
                   buttons = c('excel', "csv")))

Kelime bulutları

Bu kısımda hwordcloud kütüphanesi kullanılarak kelime bulutu oluşturulmuştur.

hwordcloud(text = head(sayi$word,350), size = head(sayi$n, 350),
           width = "100%", height = "500px",
           theme = "darkblue")

Duygu analizi

Aşağıda yazılan kod bloğu ile ilk olarak temel duygu analizi kapsamında polarite testi yapılmıştır. Polarite test sonuçları ortalama (0,03435) üzerinden yorumlandığında metne nötr bir dilin hakim olduğu söylenebilir.

polarite<-sentiment(tr$word)

stat.desc(polarite$sentiment, basic=T) %>% pander()
Table continues below
nbr.val nbr.null nbr.na min max range sum median mean
12094 8596 0 -1 1 2 416.1 0 0.0344
SE.mean CI.mean.0.95 var std.dev coef.var
0.003173 0.00622 0.1218 0.349 10.14

Grafikte polarite sonuçlarını görmek istersek aşağıdaki kod bloğunu yazmamız yeterlidir.

polarite<-sentiment(tr$word)


tablo<-cbind(tr$word, polarite[,c(3,4)])

ggplot(tablo, aes(word_count, sentiment))+
geom_point(color="blue")+
  geom_hline(yintercept = mean(tablo$sentiment), color="red", size=1)+
  labs(y = "Skor", x = "Kelimelerin Frekansı") +
  theme_igray()+
  labs(caption = "Veri Kaynağı: A Turkish Woman’s European Impressions adlı eserden Tevfik Bulut tarafından analiz edilmiştir.")+
  theme(plot.caption = element_text(hjust = 0, face = "italic"))

Duygu sözlüklerinden Bing leksikonuna göre elde edilen sonuçlar hem tablo üzerinde hem de grafik üzerinde aşağıda verilmiştir.Bing leksikonunda duygular negatif ve pozitif olarak kelimeleri sınıflandırmaktadır. Aşağıdaki tablodan metinde negatif duygunun daha baskın olduğu anlaşılmaktadır.

d6<-sayi[,-1] %>% inner_join(get_sentiments("bing"),by="word")

#duygu grubuna göre frekanslar

d6[,c(1,3,2)]%>% group_by(sentiment) %>% summarise(toplam=sum(n)) %>% mutate(oran=round(toplam/sum(toplam)*100,2)) %>% arrange(desc(oran)) %>% rename("duygu"="sentiment") %>% datatable(extensions = 'Buttons', 
    options = list(dom = 'Bfrtip', 
                   buttons = c('excel', "csv")))

Duygu sözlüklerinden Bing leksikonuna göre elde edilen sonuçlar grafik üzerinde aşağıda verilmiştir. Bu kısımda grafik üzerinde kelimelere iki gruba ayrılmış, ardından frekansı en yüksek 10 kelime verilmiştir.

d6[,c(1,3,2)]%>% group_by(sentiment) %>% arrange(desc(n)) %>%
  top_n(10) %>%
  ggplot(aes(x=reorder(word,n), y=n, fill = sentiment)) +
  geom_col(show.legend = FALSE) +
  facet_wrap(~sentiment, scales = "free_y") +
  labs(y = "Kelime",x = "Sıklık") +
  coord_flip() +
  theme_hc() +
  labs(caption = "A Turkish Woman’s European Impressions adlı eserden Tevfik Bulut tarafından analiz edilmiştir.")+
  theme(plot.caption = element_text(hjust = 0, face = "italic"))
## Selecting by n

Duygu sözlüklerinden Afinn leksikonuna göre elde edilen sonuçlar hem tablo üzerinde hem de grafik üzerinde aşağıda verilmiştir.Afinn leksikonunda duygular -5 (negatif) ve +5 (pozitif) arasında bir tamsayı ile skorlanmaktadır. değerlik için manuel olarak derecelendirilen İngilizce terimlerin bir listesidir. negatif ve pozitif olarak kelimeleri sınıflandırmaktadır. Aşağıdaki tablodan metinde nötre yakın duygunun daha baskın olduğu anlaşılmaktadır.

d6<-tr %>% inner_join(get_sentiments("afinn"),by="word")
stat.desc(d6$value, basic=T) %>% pander()
Table continues below
nbr.val nbr.null nbr.na min max range sum median mean
1569 0 0 -4 4 8 424 1 0.2702
SE.mean CI.mean.0.95 var std.dev coef.var
0.05399 0.1059 4.574 2.139 7.914

Duygu sözlüklerinden Loughran leksikonuna göre elde edilen sonuçlar hem tablo hem de grafik üzerinde aşağıda verilmiştir.Loughran leksikonunda duygular 6 grupta ele alınmaktadır. Bu sözlük, duyguları “olumsuz (negative)”, “olumlu (pozitive)”, “ihtilaflı (litigious)”, “belirsiz (uncertainty)”, “kısıtlayıcı (constraining)” veya “gereksiz (superfluous)” olarak sınıflandırmaktadır. Aşağıdaki tablodan metinde negatif duygunun hakim olduğu görülmektedir.

library(syuzhet)
set.seed(1985) 
l1<-tr %>%inner_join(get_sentiments("loughran"),by="word") 

l1 %>% group_by(sentiment) %>% summarise(toplam=n()) %>% mutate(oran=round(toplam/sum(toplam)*100,2)) %>% arrange(desc(oran)) %>%  rename("duygu"="sentiment") %>% datatable(extensions = 'Buttons', 
    options = list(dom = 'Bfrtip', 
                   buttons = c('excel', "csv")))

Duygu sözlüklerinden Loughran leksikonuna göre elde edilen sonuçlar grafik üzerinde aşağıda verilmiştir.

l1 %>% 
  group_by(sentiment) %>% summarise(n=n())%>%
  ggplot(aes(reorder(sentiment, n), n, fill=sentiment)) +
  geom_bar(stat="identity", show.legend = FALSE)+
  labs(y = "Frekans", x = "Duygu")+
  theme_igray()+
  labs(caption = "Veri Kaynağı: A Turkish Woman’s European Impressions adlı eserden Tevfik Bulut tarafından analiz edilmiştir.")+
  theme(plot.caption = element_text(hjust = 0, face = "italic"))

Duygu sözlüklerinden NRC leksikonuna göre elde edilen sonuçlar grafik üzerinde aşağıda verilmiştir.NRC duygu Sözlüğü, sekiz duygu (öfke, korku, beklenti, güven, şaşkınlık, üzüntü, neşe ve tiksinç) ve iki ana duygu (olumsuz ve olumlu) ile İngilizce sözcüklerin ve bunların çağrışımlarının bir listesinden oluşmaktadır.

nrc<-tr %>% inner_join(get_sentiments("nrc"),by="word")

#duygu grubuna göre frekanslar
nrc1= nrc %>% group_by(sentiment) %>% summarise(toplam=n()) %>% mutate(oran=round(toplam/sum(toplam)*100,2)) %>% arrange(desc(oran)) %>%   rename("duygu"="sentiment") 
  
nrc1 %>% datatable(extensions = 'Buttons', 
    options = list(dom = 'Bfrtip', 
                   buttons = c('excel', "csv"))) %>%
  formatStyle(
    'oran',
    background = styleColorBar(nrc1$oran, 'lightblue'),
    backgroundSize = '100% 90%',
    backgroundRepeat = 'no-repeat',
    backgroundPosition = 'center')

Duygu sözlüklerinden NRC leksikonuna göre elde edilen sonuçlar grafik üzerinde aşağıda verilmiştir. Bu grafikte sekiz duygu (öfke, korku, beklenti, güven, şaşkınlık, üzüntü, neşe ve tiksinç) ve iki ana duygu (olumsuz ve olumlu) grubu kelime frekanslarına göre verilmiştir.

   nrc  %>% 
   group_by(sentiment) %>% 
   count(word, sort=T) %>% 
   top_n(5) %>% 
   ggplot(aes(reorder(word, n), n, fill=sentiment)) +
   geom_bar(stat="identity", show.legend = FALSE) +
   facet_wrap(~sentiment, scales="free_y", ncol=5) +
   labs(y = "Frekans", x = NULL) +
   coord_flip()+
   labs(caption = "Veri Kaynağı: A Turkish Woman’s European Impressions adlı eserden Tevfik Bulut tarafından analiz edilmiştir.")+
   theme(plot.caption = element_text(hjust = 0, face = "italic"))

Sonuç

Özetle, R’da duygu sözlükleri (leksikonlar) üzerinden yapılan duygu analizi çalışması ile veri bilimi (data science) ile ilgilenen akademi ve saha çalışanlarına bir katkı sunulması amaçlanmıştır.

Faydalı olması dileğiyle.

Bilimle ve teknolojiyle kalınız.

  • Kaynak gösterilmeden alıntı yapılamaz veya kopyalanamaz.
  • It can not be cited or copied without referencing.

Yararlanılan Kaynaklar

Kaynakça
ID Referanslar
[1] Alboukadel Kassambara (2020). ggpubr: ‘ggplot2’ Based Publication Ready Plots. R package version 0.4.0. https://CRAN.R-project.org/package=ggpubr
[2] Alboukadel Kassambara (2021). rstatix: Pipe-Friendly Framework for Basic Statistical Tests. R package version 0.7.0. https://CRAN.R-project.org/package=rstatix
[3] Barret Schloerke, Di Cook, Joseph Larmarange, Francois Briatte, Moritz Marbach, Edwin Thoen, Amos Elberg and Jason Crowley (2021). GGally: Extension to ‘ggplot2’. R package version 2.1.2. https://CRAN.R-project.org/package=GGally
[4] Dawei Lang and Guan-tin Chien (2018). wordcloud2: Create Word Cloud by ‘htmlwidget’. R package version 0.2.1. https://CRAN.R-project.org/package=wordcloud2
[5] Dietrich J (2020). citation: Software Citation Tools. R packageversion 0.4.1.
[6] Erich Neuwirth (2014). RColorBrewer: ColorBrewer Palettes. R package version 1.1-2. https://CRAN.R-project.org/package=RColorBrewer
[7] Garrett Grolemund, Hadley Wickham (2011). Dates and Times Made Easy with lubridate. Journal of Statistical Software, 40(3), 1-25. URL https://www.jstatsoft.org/v40/i03/.
[8] Gergely Daróczi and Roman Tsegelskyi (2021). pander: An R ‘Pandoc’ Writer. R package version 0.6.4. https://CRAN.R-project.org/package=pander
[9] H. Wickham. ggplot2: Elegant Graphics for Data Analysis. Springer-Verlag New York, 2016.
[10] Hadley Wickham (2019). stringr: Simple, Consistent Wrappers for Common String Operations. R package version 1.4.0. https://CRAN.R-project.org/package=stringr
[11] Hadley Wickham (2021). tidyr: Tidy Messy Data. R package version 1.1.4. https://CRAN.R-project.org/package=tidyr
[12] Hadley Wickham and Jennifer Bryan (2019). readxl: Read Excel Files. R package version 1.3.1. https://CRAN.R-project.org/package=readxl
[13] Hadley Wickham, Jim Hester and Jennifer Bryan (2021). readr: Read Rectangular Text Data. R package version 2.1.1. https://CRAN.R-project.org/package=readr
[14] Hadley Wickham, Romain François, Lionel Henry and Kirill Müller (2021). dplyr: A Grammar of Data Manipulation. R package version 1.0.7. https://CRAN.R-project.org/package=dplyr
[15] Hao Zhu (2021). kableExtra: Construct Complex Table with ‘kable’ and Pipe Syntax. R package version 1.3.4. https://CRAN.R-project.org/package=kableExtra
[16] Ian Fellows (2018). wordcloud: Word Clouds. R package version 2.6. https://CRAN.R-project.org/package=wordcloud
[17] Ingo Feinerer and Kurt Hornik (2020). tm: Text Mining Package. R package version 0.7-8. https://CRAN.R-project.org/package=tm
[18] Jeffrey B. Arnold (2021). ggthemes: Extra Themes, Scales and Geoms for ‘ggplot2’. R package version 4.2.4. https://CRAN.R-project.org/package=ggthemes
[19] Jeroen Ooms (2021). writexl: Export Data Frames to Excel ‘xlsx’ Format. R package version 1.4.0. https://CRAN.R-project.org/package=writexl
[20] JJ Allaire and Yihui Xie and Jonathan McPherson and Javier Luraschi and Kevin Ushey and Aron Atkins and Hadley Wickham and Joe Cheng and Winston Chang and Richard Iannone (2021). rmarkdown: Dynamic Documents for R. R package version 2.11. URL https://rmarkdown.rstudio.com.
[21] Jockers ML (2015). Syuzhet: Extract Sentiment and Plot Arcs fromText. <URL: https://github.com/mjockers/syuzhet>;.
[22] Kirill Müller and Hadley Wickham (2021). tibble: Simple Data Frames. R package version 3.1.3. https://CRAN.R-project.org/package=tibble
[23] Kun Ren and Kenton Russell (2021). formattable: Create ‘Formattable’ Data Structures. R package version 0.2.1. https://CRAN.R-project.org/package=formattable
[24] Kurt Hornik (2020). NLP: Natural Language Processing Infrastructure. R package version 0.2-1. https://CRAN.R-project.org/package=NLP
[25] Lionel Henry, Hadley Wickham and Winston Chang (2020). ggstance: Horizontal ‘ggplot2’ Components. R package version 0.3.5. https://CRAN.R-project.org/package=ggstance
[26] Makowski, D., Ben-Shachar, M.S., Patil, I. & Lüdecke, D. (2020). Automated Results Reporting as a Practical Tool to Improve Reproducibility and Methodological Best Practices Adoption. CRAN. Available from https://github.com/easystats/report. doi: .
[27] Patrick O. Perry (2021). corpus: Text Corpus Analysis. R package version 0.10.2. https://CRAN.R-project.org/package=corpus
[28] Philippe Grosjean and Frederic Ibanez (2018). pastecs: Package for Analysis of Space-Time Ecological Series. R package version 1.3.21. https://CRAN.R-project.org/package=pastecs
[29] R Core Team (2021). R: A language and environment for statistical computing. R Foundation for Statistical Computing, Vienna, Austria. URL https://www.R-project.org/.
[30] Ramnath Vaidyanathan, Yihui Xie, JJ Allaire, Joe Cheng, Carson Sievert and Kenton Russell (2021). htmlwidgets: HTML Widgets for R. R package version 1.5.4. https://CRAN.R-project.org/package=htmlwidgets
[31] Revelle, W. (2021) psych: Procedures for Personality and Psychological Research, Northwestern University, Evanston, Illinois, USA, https://CRAN.R-project.org/package=psych Version = 2.1.9,.
[32] Rinker, T. W. (2021). sentimentr: Calculate Text Polarity Sentiment version 2.9.0. https://github.com/trinker/sentimentr
[33] Silge J, Robinson D (2016). “tidytext: Text Mining and Analysis UsingTidy Data Principles in R.” JOSS, 1(3). doi: 10.21105/joss.00037(URL: https://doi.org/10.21105/joss.00037), <URL:http://dx.doi.org/10.21105/joss.00037>;.
[34] Winston Chang (2019). webshot: Take Screenshots of Web Pages. R package version 0.5.2. https://CRAN.R-project.org/package=webshot
[35] Yihui Xie, Joe Cheng and Xianying Tan (2021). DT: A Wrapper of the JavaScript Library ‘DataTables’. R package version 0.20. https://CRAN.R-project.org/package=DT
[36] Zhenxing Cheng (2019). hwordcloud: Rendering Word Clouds. R package version 0.1.0. https://CRAN.R-project.org/package=hwordcloud