İçeriğe geç

PHP ile .arff Dosya Oluşturulması

.arff dosyası, Weka‘ya ait olan bir dosya türüdür. Weka, Makine Öğrenmesi ve Veri Madenciliği alanında kullanılan Java tabanlı bir yazılımdır. Dolayısıyla Weka’yı Java ile kullanmak daha mantıklı olacaktır. Lakin PHP ile geliştirdiğiniz herhangi bir uygulamayı da Weka ile kullanabilirsiniz. Bunun dışında ekstra olarak; PHP ile makine öğrenmesi veya veri madenciliği gibi uygulamalar geliştirmek istiyorsanız, PHP ile yazılmış olan PHP-ML kütüphanesini kullanabilirsiniz. Tabi ki PHP-ML bir Weka değil, bunun da farkında olmak gerekiyor.

Bu yazımda; PHP ile .arff dosyasının oluşturulmasını göstermek istiyorum.

Öncelikli olarak; .arff dosyasını manuel olarak oluşturabileceğiniz gibi PHP ortamında kendi kodlarınızla .arff dosyasını oluşturabilirsiniz. Lakin bir library yani kütüphane yardımıyla da .arff dosyası oluşturabilirsiniz. Bu daha mantıklı ve daha kestirme bir yol olacaktır.

Bu konuda son zamanlarda kullandığım cocur/arff kütüphanesini önermek isterim. Kullanımı oldukça basit ve pratik.

cocur/arff kütüphanesini manuel olarak indirebilirsiniz. Bunun dışında her zaman önerdiğim gibi Composer yardımıyla da indirebilirsiniz. Composer ile indirmeniz durumunda; ekleme / silme / güncelleme işlemleri daha basite indirgenmiş olacaktır.

Composer ile cocur/arff kütüphanesini indirelim.

$ composer require cocur/arff

İndirme işleminde herhangi bir sıkıntı çıkmadığını varsayarak anlatımımıza kaldığımız yerden devam edelim.

./vendor/autoload.php dosyasını içe aktaralım.

require('./vendor/autoload.php');

Şimdi de kullanmak istediğimiz sınıfları belirtelim.

use Cocur\Arff\Document;
use Cocur\Arff\Writer;
use Cocur\Arff\Reader;

Document sınıfı, yeni bir doküman oluturmamızı sağlamaktadır. Bunu yeni bir belge olarak düşünebilirsiniz. Yani üzerinde işlem yapacağımız bir sayfa. Writer sınıfı, oluşturulan bu dokümanı disk üzerindeki bir dosyaya yazmamızı sağlamaktadır. Reader sınıfı ise daha önce oluşturulmuş olan bir .arff dosyasını okuma işlemini gerçekleştirir.

Şimdi ise; oluşturduğumuz bu dokümanımızın kolonlarını belirleyelim. Bunun için de kolonların tiplerini yani attribute belirlemeliyiz. 4 farklı kolon tipi mevcut. Bunlar; numeric, String, Date ve Nominal. Kolon tiplerinin her biri için ayrı bir sınıf yapısı mevcut. Hangisini kullanmak isterseniz; bu sınıfı içe aktarmalısınız. Biz de hepsini içe aktaralım.

use Cocur\Arff\Column\NumericColumn;
use Cocur\Arff\Column\StringColumn;
use Cocur\Arff\Column\DateColumn;
use Cocur\Arff\Column\NominalColumn;

Yani buraya kadar olan kısım şu şekilde olacaktır.

require('./vendor/autoload.php');

use Cocur\Arff\Document;
use Cocur\Arff\Writer;
use Cocur\Arff\Reader;
use Cocur\Arff\Column\NumericColumn;
use Cocur\Arff\Column\StringColumn;
use Cocur\Arff\Column\DateColumn;
use Cocur\Arff\Column\NominalColumn;

Kullanmak istediğimiz sınıfları içe aktardıktan sonra; bir doküman oluşturalım ve dokümanımıza bir isim verelim.

$document = new Document('twitter');

Şimdi de kolonlarımızı oluşturalım ve tiplerini belirleyelim.

$document->addColumn(new StringColumn('text'));
$document->addColumn(new NumericColumn('statuses_count'));
$document->addColumn(new NumericColumn('favorites_count'));
$document->addColumn(new NumericColumn('listed_count'));
$document->addColumn(new NominalColumn('class', ['User', 'Place', 'Hashtag']));

Basit olarak; Twitter alanlarını içeren bir doküman oluşturdum. Dokümana da Twitter’dan gelen verileri de aşağıdaki şekilde ekledim.

$document->addData([
    'text'              => 'Hello World!', 
    'statuses_count'    => 66670, 
    'favorites_count'   => 490,
    'listed_count'      => 4038, 
    'class'             => 'User'
]);

.arff dosya içeriğimiz hazır. Artık geriye bu içeriği .arff dosyasına yazdırmak kalıyor. Bunun için de;

$writer = new Writer();

Writer sınıfından bir nesne oluşturuyorum. Daha sonrasında ise değerlerimi formatlayıp yazdıracağım. Bu da şu şekilde oluyor;

$writer->render($document);

twitter.arff dokümanımız hazır. Bu dosyayı diske kaydedelim. Bunun için de;

$writer->write($document, 'twitter.arff');

Evet, twitter.arff adında dosyam hazırlandı ve diske yazıldı. Burada adres vermemeniz durumunda proje dizinine, bu dosya yazılacaktır.

twitter.arff dosyamın içeriği de aşağıdaki gibi olacaktır.

@RELATION twitter

@ATTRIBUTE text string
@ATTRIBUTE statuses_count numeric
@ATTRIBUTE favorites_count numeric
@ATTRIBUTE listed_count numeric
@ATTRIBUTE class {User,Place,Hashtag}

@DATA
'Hello World!',66670,490,4038,User

Gördüğünüz gibi oldukça basit ve pratik şekilde .arff dosyasını hazırladık.

Son olarak; Reader sınıfı yardımıyla varolan bir .arff dosyasının okunma işlemini göstermek istiyorum. Bunun için de aşağıdaki satırları yazmamız yeterli olacaktır.

$reader = new Reader();
$document = $reader->readFile('twitter.arff');

Her şey bu kadar basit. oluşturduğumuz bu .arff dosyasını artık Weka’da kullanabiliriz.

Daha önce de belirttiğim gibi; Weka, Java tabanlı bir yazılım. Dolayısıyla Weka’yı Java ile kullanmak daha mantıklı bir seçim olacaktır. PHP ile de Weka kullanılabilir. Hiç bir problem yok. Lakin biraz zahmetli bir seçim olacaktır. Sadece .arff dosyası oluşturacaksınız yukarıdaki kodlar işinizi fazlasıyla görecektir.

Saygı ve muhabbetle!

Bu içeriği paylaşmak ister misiniz?

İlk Yorumu Siz Yapın

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Buradaki içeriklerin tümü kamu malıdır. Kullanılması ve paylaşılması özgürdür.