RStudio içinde Python Kullanmak


RStudio harika bir araç. Özellikle değişkenleri canlı olarak göstermesi, grafik ve yardım paneli ile vazgeçilmez bir veri bilim aracı. Bu aracın tam bir Python muadili yoktu, Python ile analizler için. Gerek de kalmadı. RStudio’nun son sürümlerinde Python ile analizleri gerçekleştirmek mümkün. Bunun için `reticulate` adlı bir R kütüphanesini import etmek gerekiyor. Gerisi şöyle:

R Markdown içerisinde python kullanıyoruz.

Yeni Akademik Makale: Haberler ve Gerçeklik İlişkisi: Bir Kamu Kurumu Hakkındaki Haberler Üzerine İnceleme


Karadeniz Teknik Üniversitesi dergisinde çıkan bu makalemizde, algoritmik haber analitiği metotları ile TKDK hakkında farklı kaynaklarda çıkan haberleri analiz ettik. Bu yöntemler haberleri bir nevi “bilgisayarların okuyarak değerlendirmesine” olanak veren metotlar olarak kabul edilebilir. İşin içerisinde bilgisayarlar olunca yanlılık mevcut olmadığı gibi, milyonlarca haber bile olsa bunları hızla okuyacak bir güç söz konusu oluyor.

TKDK hakkında çıkan haberlerin kelime bulutu (İlgili makaleden)

Veri madenciliği daha da özelde metin madenciliği yöntemleri ile Söz gelimi haberlerde en sık görülen kavramları yukarıdaki gibi modelleyebiliyoruz. Ya da en çok hangi konuların ele alındığını aşağıdaki gibi görmek mümkün:

Haber Konuları Dağılımı (İlgili Makaleden)

Yine haberlerin yıl içerisinde yayınlanma tarihlerini de görebiliyoruz:

Haberlerin zamansal dağılımı (İlgili makaleden)

Haberlerin bu şekilde analizi, özetle şu sonuçları verdi:

  • Kurum hakkında çıkan haberlerde en çok yatırımlar ve hibe tutarları vurgulanmıştır.
  • Haberler genellikle hibelerin sunulacağı tarihlerde yoğunlaşmıştır.
  • Tanıtım toplantıları da haberlerde önemli bir yer edinmektedir.

Analizi Neyle Yaptık

Haberlerin otomatik olarak bulunup, daha sonra analiz edilmesi için R dili ile bir betik yazılması gerekiyor. R dili bu tür veri analitiği işlerinde harika bir araçtır ve ücretsizdir. R dili öğrenmek için hazırladığımız Türkçe bir kitap da mevcut:

R Dili ile Veri Analizi: Dr. Suat ATAN & Dr. Hakan Emekci, Seçkin Yayınevi.

Makalenin tam metni için aşağıyı tıklayınız

Metin Madenciliğinde Kullanılan TF.IDF skoru nasıl hesaplanır


Elinizde diyelim ki Suriye hakkında yazılmış bir milyon habervar. Tek tek okumayı düşünmüyorsunuz:) Bu dokümanların içinden söz gelimi İdlib hakkında geçen haberleri arayacaksınız. Hemen Ctrl+F’ye davranıyorsunuz 120806 adet kavram geliyor. Eh bunları da okuyazsınız. Peki bunların içinden en ilgili olanı okumak isterseniz ne yaparsınız. Bir nevi kendi küçük Google’nizi yaratmanız gerekecek. İşte tam burada böyle bir durumda TF.IDF skoru hesaplatmak yardımınıza koşar. Nasıl yapılacağını basit bir simülasyonla şurada anlattım.

configR paketi ile R’da konfigürasyon dosyaları yazmak, okumak


Şöyle bir config dosyamız olsun, iki parametremiz var:

[max_allowed_error]
=10

[a]
=10

Bu dosyayı R’da okumak için şöyle yaparız:

library(configr)
#
config <- read.config(file="config.ini")
print(config$max_allowed_error)

Gördüğünüz gibi direkt olarak parametrlerimizi alanımıza çağırdık. Şimdi parametreleri değiştirip config.ini dosyamıza bir daha yazdıralım:

yazilacak_veriler <- list(max_allowed_error =200,a=10)
write.config(yazilacak_veriler,file="config.ini")

Bu durumda config.ini dosyamızı açınca değerlerimiz 200 ve 10 olarak görülecektir.

Bu configR paketi bizi dosya aç, oku gibi işlemler yerine config.ini dosyalarından kolayca okuma yazma yapmamızı sağlar.

INI formatı yerine YAML formatı

Daha pratik olan yaml formatını da kullanabilirsiniz

library(configr)
config <- read.config(file="config.ini",file.type = "yaml")
print(config)

yazilacak_veriler <- list(max_allowed_error =200,starting_id=10)
write.config(yazilacak_veriler,file="config.ini",write.type = "yaml")

Sadece Tek Değişkeni Değiştirikten Sonra Dosyaya Yazmak

Yukarıda her write işleminde tüm değişkenleri yeniden yazmamız gerekirdi, ama aşağıdaki gibi liste parametresini yukarıda tanımlayarak tekli parametre güncellemesinden sonra bunu konfigürasyon dosyasına yazdırabiliriz.

library(configr)

yazilacak_veriler <- list(a=10,b=20)

#ilk yazma
write.config(yazilacak_veriler,file="deneme.yaml",write.type = "yaml",)

config <- read.config(file="deneme.yaml",file.type = "yaml")
print(config)

#sadece tek değişkeni editleme
yazilacak_veriler[['a']] = 10000
write.config(yazilacak_veriler,file="deneme.yaml",write.type = "yaml",)

RCrawler ile Web Crawling İşlemi


Metin madenciliği yapabilmek için elde büyük miktarda verinin olması gereklidir. Bu miktardaki veriyi ancak ya hazır bulmak ya da web scraping adını verdiğimiz yöntemlerle web sayfalarından derlemek durumundayız. Bu durumda ise Python için kullanılacak scrapy, ve python selenium gibi kütüphanelerin yanında R için Rvest ve scrapeR gibi kütüphaneler bulunmaktadır.

R için Rcrawl adlı bir kütüphane daha bulunmaktadır. Bu kütüphaneyi yeni keşfettim. RCrawl kütüphanesinin diğerlerinden temel farkı scraping işleminde sayfa içerisinde scrape edilecek elementlerin yerlerini CSS veya XPath ile belirleme ihtiyacının olmaması. Bu durum sayfa içinde “iğne” arama külfetinden kurtarıyor. Ayrıca çok ama çok daha kısa kod ile scraping yapmayı sağlıyor.

library(Rcrawler)
Rcrawler(Website = "https://www.sayfa_adi.com/lg-mobile", 
                    no_cores = 4, 
                    no_conn = 4, 
                    crawlZoneCSSPat = c("#gridListView",".pagination"))

ASlında sadece web sayfasını parametre olarak versek de crawler sayfaları derlemeye ve bir klasöre atmaya başlıyor. Ancak bu kütüphanenin (şu adresteki https://github.com/salimk/Rcrawler ) dokümantasyonunda gördüğüm çok iyi özellikler var. Bunlardan en önemlisi no_cores ve no_conn parametreleri bu parametreler aynı anda birden fazla scraping bağlantısı ile hızı arttırıyor.

Bu crawler epey agresif. Sayfada bulduğu her bağlantıyı açarak o bağlantıyı ve altındaki bağlantıları da alıyor. Bu durum daha sonra baş edilmesi güç miktarda ilgili ilgisiz verinin gelmesine neden olabilir. Bunu engellemek için crawlZoneCSSPat parametresi mevcut, bu parametre saydada sadece ilgili CSS selectorü ile tanımlı yerdeki linkleri (mesela haber linki, yorumlar vs.) açıyor, sayfadaki diğer ilgisiz linklere izin vermiyor.

Kütüphane dokümantasyonunda ayrıca URL parametresi ile filtreleme, proxy ekleme, sadece belli bir url listesini indirme gibi özelliklerin yanında sayfalar arası bağlantıları network grafiği ile gösterme gibi harika özellikler de mevcut.

Keyifli kullanımlar…