Knime ile Veri Madenciliğine Giriş Projesi ( Bölüm 1 — Veriyi Anlamak)
Merhaba arkadaşlar. Bu yazımda sizlere Kaggle.com üzerinde veri bilimi dünyasına yeni girmiş kişilere yönelik açılmış olan “Titanic: Machine Learning from Disaster” competition’ı hakkında detaylı bir öğretici içerik sunacağım.
Öncelikle “Titanic: Machine Learning from Disaster” yarışması, bizden ne yapmamızı istiyor sorusunu cevaplayalım. Bu yarışmanın sayfasında, bizlere sunulan bir takım veriler(datasets) var. Bu veriler, herkesin bildiği batan gemi titanic’in içinde yolculuk etmiş insanlara ait yaş, cinsiyet, bilet sınıfı, hayatta kalıp kalmadıkları gibi bir takım bilgiler içermekte. Bir veri bilimcisi olarak bizden yapmamız istenilen şey ise, bize verilen verilerdeki bilgileri kullanarak, hayatta kalıp kalmadığını bilmediğimiz yolcuların bu durumlarını tahmin edebilecek bir makine öğrenmesi modeli oluşturmak. Burada bahsettiğimiz makine öğrenmesi modelini oluşturabilmek için, elimizdeki veri üzerinde bir takım veri madenciliği işlemleri uygulamayalız ve ben bu yazımda Knime Veri Analiz Platformunu kullanacağım. Eğer veri bilimi konusunda yeterli temel bilgiye sahip değilseniz, bu yazıyı okumadan önce daha giriş makaleleri incelemenizi tavsiye ederim. Ayrıca Knime kullanımı konusunda da, temel bilgilere sahip olmak bu yazıda kullanılacak teknikleri anlamanızı kolaylaştıracaktır. Kimi zaman okuyucunun Knime üzerinde çok fazla bilgisi olmadığını varsayacak olsam da, bazı işlemleri yazıyı uzatmamak adına atlayabileceğimden bu uyarıyı dikkate alınız. İstiyorsanız başlayalım…
R-1.1
İlk önce, kaggle.com sitesine giriş yaptıktan sonra ,search kısmına “titanic” yazarak, aşağıdaki ekran görüntüsünde(R-1.1) gördüğünüz competition’a ulaşıyoruz. Daha sonra “ Overview — Data — Kernels — Discussions…..” diye devam eden sekmeler arasından, “data” sekmesine gidiyoruz. Buraya kadar doğru bir şekilde geldiyseniz, resimde ki ile aynı sayfa görünümüne sahipsiniz demektir ve burada görüntülediğimiz şey aslında üzerinde işlem yapacağımız verilerin(datasets) ta kendileri. Son olarak “test.csv” ve “train.csv” dosyaları indiriyoruz. kaggle.com ile işimiz şimdilik bitti. İsterseniz bu yazıya devam etmeden önce, Overview kısmını inceleyip competition hakkında daha detaylı bilgi edinebilirsiniz.
Şimdi ise elimizdeki veriler üzerinde işlem yapacağımız ( veri madenciliği ) platform üzerinde çalışmaya başlayalım. Yazının girişinde de bahsettiğim gibi, platformumuzun ismi Knime. Veri Bilimi ile uğraşan kişiler, verileri işleme konusunda birden çok platform kullanabilirler. Python ve R üzerinde ki kütüphaneler ile yapabileceğiniz çoğu işlemi; KNIME, RapidMiner, Weka gibi platformlar ile de hiç bir programlama bilgisi kullanmadan, tamamen GUI ( grafik kullanıcı ara yüzü ) ile yapabilirsiniz. Veri bilimi üzerinde profesyonel olarak çalışmış ve benim de kendilerinden eğitim aldığım ya da yazılarını okuduğum kişilerin görüşlerine göre, bu tarz platformları kullanmak, kod yazarken harcanan eforun ve zamanın, verinin analizine ve işlenmesine eklenmesine olanak sağlıyor. Bu da, asıl amacımız olan veri madenciliğinin daha sağlıklı sonuçlar vermesini sağlıyor. Kısa bir bilgilendirmeden sonra, uygulama aşamalarımıza devam edelim. ( Knime kurulumunu anlatan yazıma gitmek için tıklayın).
Knime programını başlattıktan sonra, karşımıza default bir görüntü gelecektir. Bu noktadan sonra yeni bir proje açmalı ve verilerimizi projeye koymalıyız. ( Knime ile yeni proje nasıl açılır, veriler projeye nasıl eklenir ve diğer teknik bilgiler için tıklayın). Projemizi açtıktan sonra, aşağıdaki ekran görüntüsünde(R-1.2) kırmızı kare ile gösterdiğim arama kutusuna, csv yazarak filtreleme yapıyoruz. Daha sonra filtrelenmiş araçlardan mavi okla gösterdiğim, “CSV Reader” aracını sürükleyip çalışma alanının üzerine bırakıyoruz. CSV Reader aracı artık çalışma alanımıza bir node olarak dahil oldu. CSV Reader bir basitçe .csv uzantılı dosyaları okuyabilen bir araçtır. Bu aracı kullanarak, kaggle.com’dan indirdiğimiz .csv uzantılı verilerimizi projemize ekleyeceğiz. Bu aşamaya kadar geldiyseniz, CSV Reader’ınız kırmızı trafik lambası gösterecek şekilde duruyor olmalı. Bu node’un henüz çalışır durumda olmadığını gösterir.
R-1.2
Node’umuzu projeye ekledikten sonra,üzerine sağ tıklayıp “Configure” seçeneğini seçiyoruz. Karşımıza çıkan pencerede ise “Browse” ile daha önce indirmiş olduğumuz “train.csv” dosyasını seçip daha sonra “Okey” butonuna tıklayarak işlemi tamamlıyoruz. Burada kısaca train.csv ve test.csv dosyalarının ne olduğuna değinmek istiyorum. Veri madenciliğinde, train ve test diye iki önemli kavram bulunmaktadır. Elimizde bütün bir veri kümesi olduğunu düşünelim, biz bu veriyi kullanarak oluşturacağımız makine öğrenmesi modelinin çalışırlığını kontrol etmek için, bu modeli konuyla alakalı başka veriler üzerinde de test etmeliyiz. İşte bu noktada, elimizdeki bütün veri kümesini train ve test diye iki parçaya ayırarak, train’i öğrenme, test’i ise üzerinde deneme yapılacak kısım olarak görevlendirebiliriz. KNIME üzerinde, bu işlemi “Partitioning” olarak isimlendireceğiz ve uygulamasını bu yazı serisinin diğer bölümlerinde göreceğiz.
R-1.3
İşlemi tamamladıktan sonra node’umuz artık sarı trafik ışığını gösteriyor olmalı. Bu, çalışmaya hazır olduğu anlamına gelir. Node’un üzerine tıklayıp, F7 kısayol tuşuna tıkladığımızda ise trafik ışığının yeşile döndüğünü görürüz. Bu ise, node’un çalışır duruma geçtiğini gösterir.
Node’un üzerine tekrar sağ tıklarsak, en altta “File Table” seçeneğinin geldiğini görebiliriz. Üzerine tıkladığımız zaman, karşımıza satır ve sütunlardan oluşan bir veri tablosu çıkacak.Bu tabloya şöyle genel olarak bir bakış atalım. Her satır, gemide yolculuk etmiş bir kişiye denk geliyor. Sütunlar ise bu kişiye ait sex,age,ticket gibi birden çok bilgiler içermekte. Bu projede, benim kullanacağım veri bilimi yaklaşımı CRISP-DM metodolojisi olacak. Veri madenciliği üzerine yaklaşımları
R-1.4
inceleyen yazıma da şu bağlantı ile ulaşabilirsiniz. Bu konu hakkında farklı bir yazım olsa da, burada da kısaca sizlere CRISP-DM yaklaşımından bahsetmek istiyorum. Aşağıda paylaştığım işlemler döngüsü(R-1.6), aslında CRISP-DM yaklaşımını tamamen anlatan bir döngü. Bir veri madenciliği çalışması yapmadan önce, Business Understanding ( İşi-Alanı Tanıma) adımını tamamlamalıyız. Örneğin, üzerinde çalışmak istediğiniz veri ya da alan sağlık üzerineyse, siz sağlık alanını iyi tanıyor durumuna gelmelisiniz ya da çalışma ekibinizde bu alanı iyi tanıyan bir profesyonelle çalışmalısınız. Bizim projemizde ilgileneceğimiz alan, temel olarak bir competition olduğu için titanic ve tarihi konusunda temel bir bilgiye sahip olmamız bu aşamayı atlamamızda yardımcı olacaktır. Bir diğer aşamaya ilerlediğimizde, karşımıza Data Understanding(Veriyi Anlamak) kısmı çıkıyor. Burada ise elimizdeki veriyi altına üstüne getirerek ve bazı visualization(görselleştirme) araçlarının da yardımıyla, veri içinde ki bilgileri anlamaya, hangilerinin işimize yarayıp, hangilerinin alacağımız sonucu kötü yönde etkileyebileceğini anlamaya çalışacağız. Data Understanding ile Business Understanding arasında, çift yönlü oklar bulunmakta. Bunun anlamı, iki aşama arasında gerektikçe gidip gelebileceğimizdir. Şimdilik Data Understanding aşamasında kalacağız ve diğer aşamaları bu proje kapsamında başka yazılarımızda devam ettireceğiz.
R-1.5
Data Understanding kısmına başlarken, elimizdeki veriyi tanımanın birden çok yolu olduğunu bilmeliyiz. Bu yollardan işimize en çok yarayacağını düşündüklerimizi seçip, kullanacağız. KNIME’ın bize sunduğu araçları kullanmadan önce, veriye soru sorma metodlarıyla kendi çapımızda bir inceleme yapmaya çalışalım.
- Tüm sütun başlıklarını inceleyelim. Hangileri daha ilgi çekici görünmekte ?
- Sütunların altındaki bilgilerin, mantığını tartalım . Örneğin, Name başlıklı sütunda ki veriler gerçekten kişilerin isimlerini yansıtıyor mu ?
- Kabin numaralarını inceleyelim, aynı kabinlerde yolculuk yapan kişiler arasında bağlantılar kurabiliyor muyuz ?
- Ticket sütununu inceleyelim. Bilet isimleri neyi ifade ediyor ? Bilet isimleriyle binilen yer arasında bir bağlantı var mı?
- “Fare” sütunundan bilete ödenmiş rakamı görebiliyoruz. Fiyat neye göre belirlenmiş ? Kabin’e göre mi yoksa Bilet tipine göre mi ?
- Sütunlar üzerine sol tıklayarak, “Sort Ascendign” ya da “Sort Descending” seçenekleri ile artan ya da azalan sırada sıralamalar yapabiliriz. Örneğin “Age” sütununda bunu uygulayalım. Hangi yaşlar arasında yolcular, bu gemide yolculuk etmişler ?
- Veriler arasında kimliksel nitelikte bilgiler var mı ? Örneğin, Name kısmı her birey için farklı isim ve soyisim bilgilerini içermekte. Bu tarz kimliksel bilgiler, bu projede veri madenciliği yapabilmek için bizim işimize yarar mı ?
- “Survived” kısmına bakalım. Altında ki satırlarda 1 ve 0’dan başka veri bulunmamakta. Bu sayılar ne anlama geliyor ?
- Kendi sorularınızı da bulup, veriye sormaya devam ederek daha iyi bir Data Understanding süreci yapabilirsiniz…
Bu soruları kendinize ve veriye sormak, daha sonra da cevapları için düşünmek size veriyi tanıma konusunda güzel bir başlangıç sağlayacaktır. Ancak bu beyin fırtınasını bitirdikten sonra, KNIME’ın bize sunduğu araçlardan da yardım almak, veriyi tanımak için daha ileri seviye teknikler kullanabilmemize olanak sağlayabilir. Örneğin “Statistics” aracı, veri üzerinde istatiksel sonuçları toplu bir şekilde bize gösteren çok güçlü bir araçtır. Kendisine, Repository kısmında ki arama kutusuna “statistics” yazarak ulaşabiliriz(R-1.7) ve daha sonra önceden de yaptığımız gibi sürükleyip çalışma alanına bırakmamız gerekmekte. Sürüklemeyi yaptıktan sonra, CSV Reader node’u ile Statistics node’u arasında bağlantıyı, R-1.8’de olduğu gibi kurmalıyız.
R-1.7
R-1.8
Daha sonra, “Statistics” node’unu çalıştırarak trafik lambasının yeşil’e dönmesini bekliyoruz. Sağ tıkladığımızda, “View: Statistics View” seçeneğine tıklayarak karşımıza bir pencere gelmesini bekliyoruz(R-1.9).
R-1.9
Karşımıza gelen pencerede, bir çok istatistik yan yana sıralanmış durumda. Satır bilgisine göre; minimum, maksimum, ortalama değer gibi istatistikleri burada inceleyebiliriz. Göze çarpan bir diğer husus ise, en sağdaki histogram kısmı. Satırdaki numeric verilerin histogram şeklinde dağılımlarını da buradan inceleyebiliriz. İnceleme yapmayı yazıyı uzatmaması açısından size bırakıyorum ancak bir örnek vermem gerekirse, bu tabloyu kullanarak hangi sütunlarda eksik veri ( missing value) var bunu saptayabilirim. Bunu “No. Missing” değerlerini inceleyerek yaparım ve eksik veriye sahip olduğunu saptadığım verileri “Data Preprocessing” aşamasında ön işleme tabii tutarak, veri madenciliğine uygun hale getiririm. Yukarı da bulunan sekmelerden, “Nominal” sekmesine geçtiğimizde ise nominal, yani sayısal sıralama olarak bir önemi olmayan, ad kökenli sütunları göreceğiz. Buna örnek olarak “Survived” sütununu verebiliriz. “Survived” sütunu aslında bir integer değer olarak geçse de, statistics aracımız onun nominal bir değer olduğunu saptamış ve o şekilde incelemiş. Bildiğiniz gibi “Survived” sütununda ki verilen 1 ve 0 sayılarından oluşuyorlar. Burada 1 = Kurtuldu, 0 = Öldü olarak anlaşılabilir. Yani burada ki 1 ve 0’ın sayısal olarak birbirlerinden üstün olup olmamaları önem arz etmiyor, bu sebeple bu bir nominal değerdir. Veri üzerinde, istatistiki bir araştırma da yaptığımıza göre, elimizde bulunan veriyi baya bir tanımış olduk diye düşünüyorum. Bu aşamadan sonra eğer tatmin olduysak durup “Data Preprocessing” aşamasına geçebilir, ya da farklı görselleştirme araçları kullanarakta veriyi daha iyi tanıma yolunda ilerleyebiliriz.
Bu yazının sonuna gelirken, veriyi tanımak adına yapabileceğiniz ve kullanabileceğiniz daha bir çok araç olduğunu belirtmek isterim. İlerleyen zamanlarda belki bunları da, bu yazının altına ekleyebilirim ancak şimdilik kullanımlarını kendiniz öğrenip, veri üzerinde çalışmalar yapmalısınız. Bu araçlara örnek olarak; Histogram, Pie Chart, Line Chart gibi araçlar gösterilebilir. Ayrıca yine KNIME içerisinde bulunan, “Color Manager” aracı ile de birbirinden farklı değerlere farklı renkler vererek, görselliği ve ayırt edilebilirliği arttırabilirsiniz. Bu projede bu kadar detaylı bir “Data Understanding” uygulamasına gerek olup olmadığı tartışılır ancak daha büyük ve karmaşık projelerde, kesinlikle bu araçları kullanmanın faydalarını görüceksiniz. Yazının ikinci kısmında, CRISP-DM konseptini takip etmemiz sebebiyle, “ Data Preparation” aşamasını işleyeceğiz. Veriyi tanıdıktan sonra edindiğimiz gözlemsel bilgiler ile, veri üzerinde ne gibi ön-işlemler yapmamız gerektiğine bakacağız. Herkese iyi çalışmalar…