R ile Twitter Verisi Analizi: Veri Toplama, Sosyal Ağ Analizi ve Metin Analizi Aşamaları

Author

Naim Çınar

EN: Analysis of Twitter Data with R: Data Collection, Social Network Analysis, and Text Analysis

Referans vermek için

Çınar, N. (2023). R ile Twitter Verisi Analizi: Veri Toplama, Sosyal Ağ Analizi ve Metin Analizi Aşamaları. The Turkish Online Journal of Design Art and Communication, 13 (1), 193-224.

1 Özet

Enformasyon ve iletişim teknolojilerindeki hızlı gelişmeler çevrim içi davranışları anlamak için büyük veri setlerine erişme imkanını da beraberinde getirdi. İnternetin yaygınlaşmasıyla birlikte çok daha fazla sayıda birey, topluluk ve kurum sosyal medya platformlarında dijital sosyal etkileşimler kurmaya başladı. Bu dönüşüm sayesinde, yapılandırılmamış ya da yarı-yapılandırılmış yapıdaki ve çok zengin bir içerik çeşitliliğine sahip olan sosyal büyük veri (Big Social Data) her an birikerek artıyor. Dijital sosyal ağların, büyük oranda internet kullanıcıları tarafından oluşturulan içerik yığınını doğal ortamında gözlemleme imkanı sağlaması araştırmacılara çok çeşitli konularda çalışma gerçekleştirmek için ideal bir ortam sağlıyor. Bruns(2020, s.65)’un da belirttiği gibi büyük sosyal veri üzerine yapılan çalışmalar aynı zamanda iletişim, kültürel çalışmalar, sosyal bilimler ve bilgisayar bilimi gibi çalışma alanlarının arasında yeni bağlantılar kuruyor. Büyük sosyal veri üzerine yapılan çalışmalarda, içeriğin yapısı, çeşitliliği, erişim imkanları ve karşılıklılık şartı aramayan kullanıcılar arası ilişki yapısı nedeniyle Twitter araştırma yapmak için ideal bir platform olarak ön plana çıkıyor. Bu çalışmada R programlama dili kullanılarak Twitter verisinin toplanması, verinin analize hazır hale getirilmesi, temizlenen veriye otomatik metin analizi ve sosyal ağ analizi yapılması adımlarını örnekler ile açıklayan bir rehber oluşturulması amaçlanmıştır.

2 Abstract

The constant development in information and communication technologies has enabled the opportunity to access and analyze large datasets to understand human behavior in the digital era. Following the widespread use of the internet, social media platforms have become the most popular environments where individuals, communities, and institutions interact. It has led to the emergence of extensive amounts of unstructured or semi-structured big social data that is very rich in content variety. Digital social networks provide an opportunity to observe the online behavior of users in a natural environment which makes it an ideal place for researchers to study a wide variety of topics. Bruns (2020, p.65) states that big social data approaches connect core disciplines that use big data methods -media, communication and cultural studies, the social sciences, and computer science. Twitter stands out as an ideal platform for research on big social data because of the structure and diversity of the content, data access opportunities, and the structure of the relations between users that does not require reciprocity. This study aims to provide a guideline for data collection from Twitter, data cleaning, social network analysis, and automated text analysis with R programming language.

3 Giriş

Bu çalışma R programlama dili aracılığıyla Twitter verisine erişim ve analiz aşamalarını içermektedir.

1.Çalışmanın ilk adımında academictwitteR paketi aracılığıyla veriye erişim ve verinin sonraki adımlardaki analizler için hazır hale getirilmesi süreçlerine yer verilmiştir.

2.İkinci adımda, sosyal ağdaki aktörler arasındaki etkileşimleri incelemeye dayalı bir yaklaşım olan sosyal ağ analizi üzerinde durulmuştur. Ağı oluşturan düğümlerin ağ içindeki konumu ve ağdaki enformasyon akışındaki rollerini ortaya koymak için dereceye dayalı merkezilik ölçümleri (derece merkeziliği, özvektör merkeziliği) ve en kısa yola dayalı merkezilik ölçümleri (arasındalık merkeziliği, yakınlık merkeziliği) yapılmıştır. Sosyal ağ görselleştirmesinin R ile nasıl gerçekleştirilebileceği açıklanmış, buna ek olarak ağ görselleştirmesinde sıklıkla kullanılan bir yazılım olan Gephi’nin kullanımından da bahsedilmiştir.

3.Son adımda, tweetlerden oluşan metin yığının içeriğini anlamak üzere metin analizi gerçekleştirilmiştir. Metin yığınındaki kelimelerin seçimi, bağlamları ve aralarındaki ilişkiler ortaya koyularak, iletişim içeriği çözümlenmiştir.

4 Twitter Verisini Toplama Aşaması

Bu çalışmada RStudio (versiyon 2022.02.3) IDE (tümleşik geliştirme ortamı) yazılımı aracılığıyla R (versiyon 4.1.3) programlama dili kullanılmıştır. Academic research erişim seviyesindeki Twitter API anahtarı kullanılarak, academictwitteR paketi (Barrie ve Ho, 2021) ile Twitter verisine erişilmiştir.

Öncelikle, Twitter API’sini kullanmak için Twitter Developer Portal’dan ulaşılabilen, bearer token adı verilen API’ye erişim anahtarı kullanılmalıdır. set_bearer() fonksiyonu bearer token’i “.Renviron” adlı dosyaya kaydetmeye yarar. “.Renviron” API anahtarı gibi hassas bilgilerin saklandığı bir dosyadır.

library(academictwitteR)
set_bearer()

Açılan “.Renviron” adlı sekmede bulunan TWITTER_BEARER=YOURTOKENHERE metninde, YOURTOKENHERE yerine önceden kopyalanan bearer token’in yapıştırılması gerekmektedir. Bu yapıldıktan sonra RStudio yeniden başlatılmalıdır. Artık academictwitteR paketinin Twitter API’sine erişimi sağlandığı için veri toplama aşamasına geçilebilir.

Veri toplama aşamasına geçmeden önce Twitter API’sine sorunsuz bir şekilde erişebildiğinizi son kez kontrol etmek amacıyla get_bearer() fonksiyonu ile bearer token’i çağırabilirsiniz.

get_bearer()

Eğer API erişim anahtarınız doğru şekilde görüntülenmiyorsa academictwitteR paketinin API yetkilendirmesiyle ilgili web sayfasını ziyaret ederek, adımları tekrar kontrol edebilirsiniz.

Araştırdığınız konuyla ilgili Tweetleri indirmeden önce, belirlenen tarihler arasında atılan o konuyla ilgili Tweetlerin sayısına ulaşmak ve bu veriyi kullanarak zaman serisi grafiği oluşturmak, çalışacağınız veri seti hakkında bir ön izleme imkanı verir. count_all_tweets fonksiyonu ile tweet sayılarına ulaşılabilir.

Bu çalışmada örnek olarak İstanbul Sözleşmesi konusu belirlenmiştir. İstanbul Sözleşmesi, kadına yönelik şiddet ve aile içi şiddeti önlemek ve bunlarla mücadeleye odaklanan bir uluslararası bir insan hakları sözleşmesidir (Comeforo ve Görgülü, 2022). Sözleşme 1 Ağustos 2014’te 10 ülkenin onaylaması ile yürürlüğe girmiş ve ilk imzalayıcı ülke Türkiye olmuştur. Yine Türkiye, imzaya açıldığı günden beri tartışmaların odağında olan İstanbul Sözleşmesi’nden yapılan aleyhte kampanyaların sonucunda 20 Mart 2021 tarihinde çekilmiştir (Çamurcu, 2021, s.64). Bu süreçte yaşanan tartışmalar Twitter platformuna da yoğun bir şekilde yansımıştır. Çalışmada kullanılan örnek veri, tartışmaların yoğunlaştığı dönemi kapsayacak şekilde sözleşmeden çekilme tarihinin bir sene öncesinden günümüze kadar olan Tweetleri kapsamaktadır. Aşağıdaki kod parçacığı özetle, 20 Mart 2020 saat 00:00’dan 01 Temmuz 2022 saat 00:00’a kadar olan süre içerisinde, içeriğinde “#istanbulsözleşmesi”, “#istanbulsözleşmesiyaşatır” ya da “istanbul sözleşmesi” ifadelerinden en az bir tanesi geçen tweetlerin sayısını saat bazında (granularity = “hour”) ortaya koymaktadır. Zaman aralığı gün (granularity = “day”), saat ya da dakika (granularity = “minute”) olarak belirlenebilir. Örneğin kısa bir zaman aralığında atılan tweetlerin sayısı incelenirken her dakika ya da her saat atılan tweet sayısındaki değişimi görmek araştırmacı için anlamlı olabilir.

istanbulsozlesmesi <- count_all_tweets(query = c("#istanbulsözleşmesi",
                                                "#istanbulsözleşmesiyaşatır",
                                                 "istanbul sözleşmesi"),
                                       start_tweets = "2020-03-20T00:00:00Z",
                                       end_tweets = "2022-07-01T00:00:00Z",
                                       bearer_token = get_bearer(),
                                       granularity = "hour",
                                       n = 5000000)

istanbulsozlesmesi adını verdiğimiz dataframe (veri çerçevesi), 3 sütundan oluşmaktadır. “tweet_count” sütunu her gün atılan tweet sayısını göstermektedir.

colnames(istanbulsozlesmesi)

“tweet_count” sütunundaki sayıları toplayarak toplam tweet sayısına ulaşabiliriz. Bu örnekte toplam 2228413 adet tweete ulaşılmıştır.

sum(istanbulsozlesmesi$tweet_count, na.rm=TRUE)

Veri çerçevesindeki “end” ve “start” sütunları saat aralığının başlangıcını ve bitişini göstermektedir. Ancak Twitter’dan elde ettiğimiz bu veriler “character” (karakter) formatındadır. Sonraki aşamalarda yapılacak analizlerde sorun yaşamamak için karakter (character) ya da sayısal (numeric) formattaki tarih bilgisi içeren sütunlar, POSIXct adı verilen tarih/saat sınıfına dönüştürülmelidir.

Lubridate paketini kullanarak formatı POSIXct sınıfına dönüştürebilir ve verimiz Türkçe dilinde paylaşılan tweetlerden oluştuğu için saat dilimini İstanbul’un yerel saat dilimine göre ayarlayabiliriz.

library(lubridate)

istanbulsozlesmesi$end = ymd_hms(istanbulsozlesmesi$end,
                            tz = "Europe/Istanbul")

4.1 Zaman serisi analizi

Zaman serisi grafiği oluşturmak için tarih/saat formatına dönüştürdüğümüz “end” sütunu ve her saat atılan tweet sayısını gösteren “tweet_count” sütunları yeterli olduğundan sadece bu iki sütunu bırakıyoruz. Daha anlaşılır bir grafik için “end” sütununu “tarih”, “tweet_count” sütununu “tweet_sayisi” olarak yeniden adlandırıyoruz.

istanbulsozlesmesi = subset(istanbulsozlesmesi, select = c(end, tweet_count))
names(istanbulsozlesmesi) <- c("tarih", "tweet_sayisi")

Düzenlenen istanbulsozlesmesi adlı veri çerçevesi artık zaman grafiği oluşturmaya hazır durumdadır. Grafiği oluşturmak için ggplot2 paketini kullanıyoruz.

library(ggplot2)

gg1 <- ggplot(data = istanbulsozlesmesi,
       aes(x = tarih, y = tweet_sayisi)) +
  geom_line(lwd = 0.5) +
  coord_cartesian(ylim = c(0, 10000)) + #Grafikte görünen saatlik tweet sayısı üst limitini 10000 olarak belirledik.
  theme(text = element_text(family = "Times New Roman"))

Veride ortalamanın çok üzerinde tweet sayısı atılan saat aralıkları olduğu için (örn: 2021-03-20 tarihinde 13:00 ve 14:00 saatleri arasında toplam 76410 tweet), görsel olarak daha anlaşılır bir grafik oluşturmak adına tweet sayılarının olduğu y ekseni için üst limit (10000) belirledik. Eğer ortalamadan çok farklı değerler yoksa bu satır kullanılmayabilir.

gg1

Şekil 1. Saatte atılan tweet sayısını gösteren zaman serisi grafiği

Yukarıdaki grafik iki yıllık süreçte atılan tweet sayılarındaki yoğunlukla ilgili genel bir izlenim vermekle birlikte, hafta, gün ve saat gibi daha dar zaman aralıklarındaki değişimleri görüntülememize olanak sunmuyor. Zaman serisi grafiği için bir alternatif yöntem de interaktif bir görselleştirme yapılmasıdır. İnteraktif grafikte zaman dilimleri daha detaylı bir şekilde incelenebilir. Aşağıdaki interaktif grafik ggplot2 ve plotly paketleri ile oluşturulmuştur.

library(plotly)

gg2 <- istanbulsozlesmesi %>% 
  ggplot(mapping = aes(x = tarih, y = tweet_sayisi)) +
  theme_light() +
  geom_line() +
  xlab(label = 'Tarih') +
  ylab(label = 'Tweet Sayisi') +
  coord_cartesian(ylim = c(0, 10000)) +
  theme(text = element_text(family = "Times New Roman"))
  ggtitle(label = 'Saatte atılan tweet sayısı')
gg2 %>% ggplotly()