Veri Madenciliği (Data Mining): Metin Verisinin Keşifsel Veri Analizi Üzerine Bir Vaka Çalışması (Text Mining)

Veriden desen çıkarma işlemi anlamına gelen veri madenciliği bütün alanlarda kendine uygulama alanı bulan ve büyük veri (big data)’den farklı olan bir kavramdır. Bu kavram aynı zamanda veriyi keşfetmek olarak da tanımlanabilir. Veri madenciliği, veriden desen veya örüntü çıkarırken yapay zekayı , istatistiksel metotları ve diğer pek çok metodu kullanır. Büyük veride ise genel olarak yüksek hacim (volume), akışkanlık (velocity), çeşitlilik (variety), belirsizlik (veracity) söz konusudur. Bahsedilen bu özelliklerin aynı anda sağlanması gereklidir. Büyük veri, tek başına veri setinin büyük olduğu anlamına gelmez.

Veri madenciliğinin (data mining) bir kolunu oluşturan metin madenciliği (text mining) metotları, metinlerde en sık kullanılan anahtar kelimeleri vurgulamamıza ve görselleştirmemize olanak tanır. Bu metotlarla metin verisinden metin bulutu, etiket bulutu diyebileceğimiz kelime bulutu oluşturulabilir.

Kelime bulutu oluşturma prosedürü eğer R programlama dilinde uygulama adımları bilinirse çok zor değildir. Genel olarak R’da farklı paketler kullanılmakla birlikte genellikle metin madenciliği paketi (the text mining package ™) ve kelime bulutu oluşturucu paket (the word cloud generator package (wordcloud))’lerinin kullanıldığı görülmektedir. Bu paketler, metni hızlı analiz etmemize ve kelime bulutu olarak ortaya çıkan anahtar kelimeleri görselleştirmemize olanak tanır.

Bahsedilenler ışığında metin verisini sunmada kelime bulutunu kullanmanız gerektiği durumlar şunlardır:

  1. Kelime bulutları sadelik ve yalınlık sağlar. En sık kullanılan anahtar kelimeler, kelime bulutu içinde daha iyi kendini gösterir.
  2. Kelime bulutları potansiyel iletişim araçlarıdır. Kelime bulutlarının anlaşılması ve paylaşılması kolaydır ve kelime bulutları etkilidirler.
  3. Kelime bulutları bir tablo verisinden görsel olarak daha ilgi çekicidir.

Kelime bulutları, sektör ayrımı gözetilmeksizin bütün alanlarda kullanılabilmekle birlikte en sık kullanılan alanlarla en sık kullanılan meslek grupları şöyle özetlenebilir;

  1. Kalitatif (nitel) araştırma yapan araştırmacılar,
  2. Müşterilerin ihtiyaçlarının belirlenmesi noktasında pazarlamacılar,
  3. Temel konuları desteklemek için eğitimciler,
  4. Politikacı ve gazeteciler
  5. Kullanıcı görüşlerini toplayan, analiz eden ve paylaşan sosyal medya siteleri

R’da kelime bulutu oluşturma süreci genel olarak 5 adımda tamamlanmaktadır.

  1. Birinci adımda text (txt) uzantılı bir dosya oluşturulur. Oluşturulan bu metin dosyasının içine analiz edilecek metin (uzunluğu önemli değil) kaydedilir. Ancak bu metin dosyası txt uzantılı olarak web üzerinde de olabilir. Bu durumda txt dosyasının linki üzerinden sürece devam edilir.
  2. Gerekli R programlama dili paketleri kurulur ve yüklenir. Bu paketler;

     Install (kurulum için)

install.packages("tm")  # for text mining (metin madenciliği için)
install.packages("SnowballC") # for text stemming (metin için)
install.packages("wordcloud") # word-cloud generator (kelime bulutu oluşturucu)
install.packages("RColorBrewer") # color palettes (renk paletleri)

   Load (yüklemek için)

library("tm")
library("SnowballC")
library("wordcloud")
library("RColorBrewer")

3. 1. aşamada oluşturulan metin dokümanı yüklenir. Kullanılan R kodu genellikle şu şekildedir;

filePath<-library(readr)
ml <- read_csv("ml.txt")
View(ml)
text <- readLines(filePath) 
filePath<-library(readr)
ml <- read_csv("ml.txt")
View(ml)
text <- readLines(filePath)

Metin madenciliği denilen bu aşamada, analiz edilecek metin text mining ™ paketinde olan Corpus() fonksiyonu kullanılır ve metin indekslenir. Daha sonra, veri temizleme faaliyetlerine başlanır. İstenmeyen kelimeler, bağlaçlar, boşluklar, sayılar bu aşamada çıkarılır.

  1. Metin temizlendikten sonra metnin içindeki kelimelerin kullanılma sıklığını gösteren bir matris oluşturulur.
  2. Son aşamada ise sıklık matrisinden bir kelime bulutu oluşturularak süreç tamamlanır.

Uygulama adımları anlatıldıktan sonra özgün örnek bir olay üzerinden şimdi bir uygulama yapalım. Kolaylık olması ve daha anlaşılır olması adına txt (text) dosyası yüklenmesi yerine analiz edilecek metin fonksiyon içine yazılarak aşamalar kısaltılacaktır. Bilinirliğinden dolayı, örnek uygulamada kullanılan metin, Nutuk adlı eserden alınmıştır.

#Analizde Kullanılan Nutuk Adlı Eserden alınan Metin

Türk Gençliğine Bıraktığımız Kutsal Armağan Saygıdeğer baylar, sizi, günlerce işlerinizden alıkoyan uzun ve ayrıntılı sözlerim, en sonu tarihe mal olmuş bir dönemin öyküsüdür. Bunda, ulusum için ve yarınki çocuklarımız için dikkat ve uyanıklık sağlayabilecek kimi noktaları belirtebilmiş isem kendimi mutlu sayacağım.Baylar, bu söylevimle, ulusal varlığı sona ermiş sayılan büyük bir ulusun, bağımsızlığını nasıl kazandığını; bilim ve tekniğin en son ilkelerine dayanan ulusal ve çağdaş bir devleti nasıl kurduğunu anlatmaya çalıştım.Bugün ulaştığımız sonuç, yüzyıllardan beri çekilen ulusal yıkımların yarattığı uyanıklığın ve bu sevgili yurdun her köşesini sulayan kanların karşılığıdır.Bu sonucu, Türk gençliğine kutsal bir armağan olarak bırakıyorum.Ey Türk gençliği! Birinci ödevin; Türk bağımsızlığını, Türk Cumhuriyetini, sonsuzluğa değin korumak ve savunmaktır.Varlığının ve geleceğinin biricik temeli budur. Bu temel, senin en değerli hazinendir. Gelecekte de, seni bu kaynaktan yoksun etmek isteyen iç ve dış kötücüller bulunacaktır. Bir gün, bağımsızlığını ve cumhuriyetini savunmak zorunda kalırsan, ödeve atılmak için, içinde bulunacağın durumun olanaklarını ve koşullarını düşünmeyeceksin! Bu olanak ve koşullar çok elverişsiz bir nitelikte belirebilir. Bağımsızlığına ve cumhuriyetine kıymak isteyecek düşmanlar, bütün dünyada benzeri görülmedik bir utku kazanmış olabilirler.Zorla ve aldatıcı düzenlerle sevgili yurdunun bütün kaleleri alınmış, bütün gemilikleri ele geçirilmiş, bütün orduları dağıtılmış ve yurdun her köşesi fiilen işgal edilmiş olabilir. Bütün bu koşullardan daha acı ve daha korkunç olmak üzere, yurdunda, iş başında bulunanlar, aymazlık ve sapkınlık, üstelik, hainlik içinde olabilirler. Dahası iş başında bulunan bu kişiler, kendi çıkarlarını, yurduna girmiş olan düşmanların siyasal erekleriyle birleştirebilirler. Ulus, yoksulluk ve sıkıntı içinde ezgin ve bitkin düşmüş olabilir.Ey Türk geleceğinin çocuğu! İşte, bu ortam ve koşullar içinde bile ödevin, Türk bağımsızlığını ve Cumhuriyetini kurtarmaktır! Bunun için gereken güç, damarlarındaki soylu kanda vardır.

# Yukarıda bahsedilen paketlerin kurulumu ve yüklenme işlemi tamamlandıktan sonra, metni, indekslenmesi için ilk olarak corpus fonkyonu içinde tanımlanmış VectorSource fonksiyonu içine alıyoruz.

docs <- Corpus(VectorSource("Türk Gençliğine Bıraktığımız Kutsal Armağan Saygıdeğer baylar, sizi, günlerce işlerinizden alıkoyan uzun ve ayrıntılı sözlerim, en sonu tarihe mal olmuş bir dönemin öyküsüdür. Bunda, ulusum için ve yarınki çocuklarımız için dikkat ve uyanıklık sağlayabilecek kimi noktaları belirtebilmiş isem kendimi mutlu sayacağım.Baylar, bu söylevimle, ulusal varlığı sona ermiş sayılan büyük bir ulusun, bağımsızlığını nasıl kazandığını; bilim ve tekniğin en son ilkelerine dayanan ulusal ve çağdaş bir devleti nasıl kurduğunu anlatmaya çalıştım.Bugün ulaştığımız sonuç, yüzyıllardan beri çekilen ulusal yıkımların yarattığı uyanıklığın ve bu sevgili yurdun her köşesini sulayan kanların karşılığıdır.Bu sonucu, Türk gençliğine kutsal bir armağan olarak bırakıyorum.Ey Türk gençliği! Birinci ödevin; Türk bağımsızlığını, Türk Cumhuriyetini, sonsuzluğa değin korumak ve savunmaktır.Varlığının ve geleceğinin biricik temeli budur. Bu temel, senin en değerli hazinendir. Gelecekte de, seni bu kaynaktan yoksun etmek isteyen iç ve dış kötücüller bulunacaktır. Bir gün, bağımsızlığını ve cumhuriyetini savunmak zorunda kalırsan, ödeve atılmak için, içinde bulunacağın durumun olanaklarını ve koşullarını düşünmeyeceksin! Bu olanak ve koşullar çok elverişsiz bir nitelikte belirebilir. Bağımsızlığına ve cumhuriyetine kıymak isteyecek düşmanlar, bütün dünyada benzeri görülmedik bir utku kazanmış olabilirler.Zorla ve aldatıcı düzenlerle sevgili yurdunun bütün kaleleri alınmış, bütün gemilikleri ele geçirilmiş, bütün orduları dağıtılmış ve yurdun her köşesi fiilen işgal edilmiş olabilir. Bütün bu koşullardan daha acı ve daha korkunç olmak üzere, yurdunda, iş başında bulunanlar, aymazlık ve sapkınlık, üstelik, hainlik içinde olabilirler. Dahası iş başında bulunan bu kişiler, kendi çıkarlarını, yurduna girmiş olan düşmanların siyasal erekleriyle birleştirebilirler. Ulus, yoksulluk ve sıkıntı içinde ezgin ve bitkin düşmüş olabilir.Ey Türk geleceğinin çocuğu! İşte, bu ortam ve koşullar içinde bile ödevin, Türk bağımsızlığını ve Cumhuriyetini kurtarmaktır! Bunun için gereken güç, damarlarındaki soylu kanda vardır"))

#Dokuman incele fonksiyonu çalıştırılır.

inspect(docs)

#Metin dönüştürülür.

toSpace <- content_transformer(function (x , pattern ) gsub(pattern, " ", x))
docs <- tm_map(docs, toSpace, "/")
docs <- tm_map(docs, toSpace, "@")
docs <- tm_map(docs, toSpace, "\\|")

#Veri temizlenir.

# Metni küçük harfe dönüştür.
docs <- tm_map(docs, content_transformer(tolower))
# Metinden rakamları ayıkla.
docs <- tm_map(docs, removeNumbers)
# Çıkarılmasını istediğiniz kelimeleri ve bağlaçları çıkar.
docs <- tm_map(docs, removeWords, c("her", "için", "bile", "bir", "bütün", "daha", "beri")) 
# Noktalama işaretlerini kaldır.
docs <- tm_map(docs, removePunctuation)
# Ekstra boşlukları kaldır.
docs <- tm_map(docs, stripWhitespace)

#Kelime sıklık matrisi oluşturulduktan sonra sıralı bir şekilde ilk 10 kelimeyi data frame (veri çerçevesi) formatında getirilir.

dtm <- TermDocumentMatrix(docs)
m <- as.matrix(dtm)
v <- sort(rowSums(m),decreasing=TRUE)
d <- data.frame(word = names(v),freq=v)
head(d, 10)

Yukarıdaki fonksiyonlarının çalıştırılmasıyla elde edilen sıklık çerçeve tablosu aşağıdaki gibidir.

freqtable

#Kelime bulutu oluşturularak süreç tamamlanır. Bu aşamada her defasında aynı sonuçların ve düzenin elde edilebilmesi için set.seed() ve random.order=FALSE fonksiyonları kullanılır. Kelimeleri renklerdirmek için brewer.pal() fonksiyonu kullanılır.

set.seed(1234)
wordcloud(words = d$word, freq = d$freq, min.freq = 2,
          max.words=500, random.order=FALSE, rot.per=0.35, 
          colors=brewer.pal(8, "Dark2"))

Yukarıdaki fonksiyonlarının çalıştırılmasıyla elde edilen kelime bulutunun ilk görünümü aşağıdaki gibidir.

Rplot

Görüntüyü daha görsel bir hale sokmak sokmak için yukarıda elde edilen veri çerçevesine ilişkin alternatif kelime bulutları oluşturulmuştur.

Alternatif 1: Kelime Bulutu Kod Bloğu

wordcloud2(d, size=1.6)

Yukarıdaki kod bloğu çalıştırıldığında elde edilen görünüm aşağıdaki gibidir.

Alternatif 1: Kelime Bulutu (Word Cloud)

wordcloud2-1

Alternatif 2: Kelime Bulutu Kod Bloğu

wordcloud2(d, size=1.6, color='random-light', backgroundColor="black")

Yukarıdaki kod bloğu çalıştırıldığında elde edilen görünüm aşağıdaki gibidir.

Rplot02

Alternatif 3: Kelime Bulutu Kod Bloğu

wordcloud2(d, size = 2.3, minRotation = -pi/6, maxRotation = -pi/6, rotateRatio = 1)

Yukarıdaki kod bloğu çalıştırıldığında elde edilen görünüm aşağıdaki gibidir.

Rplot03

Son alternatif de benim sizlere süprizim olsun diyeceğim ama görüyorsunuz :).

Alternatif 3: Kelime Bulutu Kod Bloğu

wordcloud2(d, size = 0.7, shape = 'star')

Yukarıdaki kod bloğu çalıştırıldığında elde edilen görünüm aşağıdaki gibidir.

Rplot04

Kelime bulutu oluşturma süreci tamamladıktan sonra bu süreci biraz daha ileriye taşıyalım. Ortaya konulan kelime bulutlarının sıklıklarına göre grafikler oluşturalım.

Alternatif 1: Grafik Kod Bloğu

install.packages("tidyverse")
library(ggplot2)
str(d)
y<-head(d, 10)
y
ggplot(y)+geom_point(aes(freq, word),col="red",size=4, shape="+")+
labs(subtitle=NULL, y="Kelime Sayısı", x="Kelimeler",title="En Çok Karşılan İlk 10 Kelime", caption = "Source:TBulut")+
xlim(2,7)+
  theme(plot.title = element_text(family = "Trebuchet MS", color="#666666", face="bold", size=18, hjust=0.5)) +
theme(axis.title = element_text(family = "Trebuchet MS", color="#666666", face="bold", size=12))

Yukarıdaki kod bloğunun çalıştırılmasıyla elde edilen grafik aşağıdaki gibidir.

nutukchart-1

Alternatif 2: Grafik Kod Bloğu

install.packages("tidyverse")
library(ggplot2) 
str(d) 
y<-head(d, 10) y
ggplot(y, aes(freq, word))+geom_point(col="red", size=4)+
labs(subtitle=NULL, y="Kelimeler", x="Kelime Sayısı",title="En Çok Karşılan İlk 10 Kelime", caption = "Source:TBulut")+
xlim(2,7)+
    theme(plot.title = element_text(family = "Trebuchet MS", color="#666666", face="bold", size=18, hjust=0.5)) +
theme(axis.title = element_text(family = "Trebuchet MS", color="#666666", face="bold", size=12))

Yukarıdaki kod bloğunun çalıştırılmasıyla elde edilen grafik aşağıdaki gibidir.

wordcloudnutuk-2

Faydalı olması dileğiyle.

Yararlanılan Kaynaklar

http://ekitap.kulturturizm.gov.tr/TR,81464/nutuk.html (Nutuk adlı eserin metni için)

http://jolt.law.harvard.edu/articles/pdf/v22/22HarvJLTech515.pdf

https://www.educba.com/big-data-vs-data-mining/

Not: Emeğe saygı adına, burda yapılan çalışmanın başka bir mecrada ya da ortamda paylaşılması halinde alındığı yer adının belirtilmesini rica ederim.

Saygılarımla.

2 Comments Kendi yorumunu ekle

  1. Yasiru dedi ki:

    Aradığımı buldum sonunda paylaşım için çok teşekkürler hocam.

    Liked by 1 kişi

    1. Tevfik BULUT dedi ki:

      Faydalı olduğuna sevindim. İyi çalışmalar dilerim.

      Beğen

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s