Bazen elimizdeki veri istediğimiz formatta olmayabilir ve bir ETL çalışması yapmamız gerekebilir. Örneğin aşağıdaki veride olduğu gibi. Bu verimizde aylık Brüt Kira ve Ciro değerleri olması gerekenin aksine yana doğru ilerlemekte. Fakat veriyi verimli bir şekilde kullanabilmemiz için ayrı bir ay kolonu olması ve Brüt Kira ve Ciro değerlerinin sayfanın aşağısına doğru akması gerekiyor.
Örnek verimizi düzenlemek için Knime’dan faydalanıyoruz. Knime ücretsiz, açık kaynak bir veri analizi, raporlama ve entegrasyon plartformudur. İnternetten kolayca indirip kurulumunu yapabilirsiniz.
Knime’ı açtığımızda karşımıza ilk olarak boş bir ekran gelecektir. Bu ekranın sol üst kısmında File’ın altındaki Boş Ekran ikonuna tıklayarak yeni bir çalışma sayfası açabilirsiniz. New KNIME Workflow’u seçiyoruz.
Açılan ekranda projemize isim verip nerede konumlandırmak istediğimizi belirtiyoruz.
Sol yanda 3 parçadan oluşan bir pencere bulunmakta. Mavi ok ile belirtiğim kısım kayıtlı çalışmalarınızın bulunduğu yer. Buradan kolayca mevcut çalışmanızı seçerek açabilirsiniz. Mor ok ile belirttiğim kısım en çok kullanılan node’ların listesi, turuncu ok ile belirttiğim kısım ise tüm node’ların bulunduğu yer. Biz en çok turuncu okun belirttiği kısmı kullanacağız.
Verimiz excelde olduğu için Node Repository’de Excel Reader node’unu bulup çift tıklayarak ya da sürükle-bırak ile çalışma alanımıza alıyoruz. Eğer kullanacağınız node’un adını biliyorsanız arama yerine adını yazarak hızlıca bulabilirsiniz, eğer bilmiyorsanız ilgili kategori altında node’unuzu arayabilirsiniz. Ek olarak; herhangi bir node’a tıkladığınızda sayfanın sağ tarafında seçtiğiniz node ile ilgili açıklama kutucuğu belirir.
Node’umuza sağ tıklayarak Configure diyerek node’umuzun içine giriyoruz.
Açılan ekranda en üstte bulunan “Select file to read” alanına browse diyerek dosyamızı ekliyoruz. Ekledikten sonra dosyamızın içeriğini en altta Preview altında görebiliyoruz. Fakat gördüğünüz üzere kolon isimlerimizi algılamayıp yerine Col0, Col1 şeklinde isim ataması yaptı. Bunu düzeltmek için hemen üst kısımda yer alan Table contains column names in row number kutucuğunu işaretliyoruz. Örnek raporumuzda kolon isimleri 1. satırda yer aldığı için 1 olarak bırakıyorum.
Bu arada eğer exceliniz birden fazla sayfadan oluşuyor ise Select the sheet to read alanından ilgili sayfanızı seçebilirsiniz. Ayrıca Select the columns and rows to read alanından verinizin ne kadarını okumak istediğinizi belirleyebilirsiniz.
Ok diyerek işlemimizi tamamladığımızda node’umuzaki kırmızı yuvarlak sarı renk alıyor. Bu her şeyi doğru yaptığımızı, node’un çalışmaya hazır olduğunu bize gösterir. Sağ tık, Execute ile ya da node’umuzu seçip üst kısımda yeşil execute butonuna tıklayarak node’umuzu çalıştırıyoruz. İşlem sorunsuz tamamlandığında sarı yuvarlak yeşile dönüyor. Şimdi sağ tık, Output diyerek elde ettiğimiz veriyi görebiliriz.
Ek not: Table contains column names in row number kutucuğunu seçtikten sonra OK dediğinizde uyarı alabilirsiniz. Bu durum olduğunda tek yapmanız gereken aşağıdaki tabloyu Reload diyerek yenilemek.
İşlemimize yana doğru giden ay verisini düzeltmekle devam ediyoruz. Node Repository’de pivot aratıyoruz. Çıkan node’lardan Unpivoting’i seçiyoruz. Çift tıkladığımızda direk önceki node’umuz olan Excel Reader ile bağlanacaktır.
Her yeni node eklediğimizde işlemlerimiz Configure, Execute ardından Output şeklinde ilerleyecek.
Tekrar Configure diyerek düzenlememizi yapıyoruz. İlk olarak Brüt Kira kolonunu düzenleyeceğiz. Üst kısımda yer alan Value columns kısmında unpivot yapılacak olan Brüt Kira kolonlarını seçiyoruz. Bu işlemi yaparken tek tek seçmek yerine “brüt” kelimesini aratıp Select all search hits diyerek aradığım kelimeyi içeren tüm kolonları seçtim. Add diyerek onları Include kısmına ekliyorum. Aşağıdaki Retained kısmında geri kalan kolonlarımızı seçiyoruz.
Çalıştırdığımızda elde ettimiz veri aşağıdaki gibi oluyor. Gördüğünüz üzere Brüt Kira artık yana doğru değil aşağıya doğru konumlandı. Şimdi aynı işlemi Ciro için de tekrarlayacağız. Yeni bir Unpivoting node’u ile yukarıdaki işlemleri tekrarlıyoruz.
Brüt Kira ve Ciro’yu düzenledik fakat şimdi birleştirmemiz gerekiyor. Bunu yapabilmemiz için ortak bir tarih kolonuna ihtiyacımız var. String Manipulation ile tarih değerimizi ayıracağız. İlk 6 karakter tarihi belirttiği için substr fonksiyonunu kullanıyorum. Burada ilgili kolonda 0. karakterden itibaren 6 karakteri al diyoruz.
Append Column kısmında yeni kolonumuzun adını Tarih olarak belirliyoruz.
Artık ayrı bir tarih kolonumuz var. Birleştirme işlemine geçmeden önce kolonlarımızın isimlendirmesini yapıyoruz. Column Rename node’u bu konuda bize yardımcı olacaktır.
Column Values bizim Brüt Kira değerlerimizi belirtiyor. Adını Brüt Kira olarak değiştiriyoruz. Değerlerimiz sayısal olduğu için IntValue olarak bırakıyorum fakat siz verinize göre veri tipini bu kısımda değiştirip String ya da double, long gibi diğer sayısal değerleri seçebilirsiniz.
Bu noktadan sonra tablolarımızı birleştirebiliriz. Joiner node’unu seçiyoruz. Joiner node’u sql mantığı ile çalışır. Varolan iki girişine joinleyeceğimiz tabloları bağlıyoruz.
Join mode kısmında hangi join tipini kullanacağınızı seçebilirsiniz. Bu örnekte Inner Join kullanıyorum. Şimdi join’i neye göre yapacağınızı belirtmeniz gerekiyor. Bunun için Add Row diyerek eşleştirmeyi yapacağımız kolonları seçiyoruz. Ortak tarih ve mağaza adına sahip satırları bir araya topluyoruz.
Join’in sonucu aşağıdaki gibi oluyor.
Görünürde yapmak istediklerimizi tamamladık ama düzenlemeye devam etmemiz gerekiyor. Şimdi Tarih değerini string’ten date’e çevireceğiz. Fakat öncelikle değerimizi tarih formatına uygun hale getirmeliyiz. Tekrar String Manipulation’ı ekliyoruz.
Mevcutta elimizde ay ve yıl değeri var fakat gün değeri yok. Bunun için join fonksiyonuyla her tarih değerimizin başına “01” şeklinde gün ekledik.
Şimdi sırada stringimizi date olarak çevirmek var. String to Date&Time node’unda aşağıdaki ayarlamaları yapıyoruz. Önemli olan nokta Date format kısmını doğru doldurmak.
Düzgün bir tarih formatı elde ettikten sonra Metrekare kolonundaki m2 ekini kaldırmak istiyorum. Çünkü verinizi Tableau gibi bir raporlama aracına attığınızda sayısal değerleri integer olarak görmek isteyecektir. Fakat bu şekilde metrekare değerimiz string halinde.
Tekrar String Manipulation’ı ekrana alıyorum. “m2” ekini ilgili kolonumdan kaldırmak için removeChars fonksiyonundan faydalanıyorum.
Sonucumuz aşağıdaki gibi oluyor.
Gördüğünüz gibi fazlaca gereksiz kolon var. Bunları temizlemek için Column Filter node’unu ekliyoruz. Kalmasını istediğimiz kolonları sağ tarafta, istemediklerimizi sol tarafta topluyoruz.
Sonunda istediğimiz tabloyu elde ettik.
Şimdi tablomuzu Excel’e geri yazalım. Dilersek tablomuzu bir veritabanına da yazabiliriz.
Excel Writer node’unu ekliyoruz. En üstte Output location kısmında dosyamızı nereye hangi isimle kaydedeceğimizi belirtiyoruz. Sheet name kısmında sayfamızı isimlendiriyoruz. Burada önemli nokta add column headers kutucuğunu işaretlemeyi unutmamak. Eğer halihazırda bulunan bir dosyanın üzerine yazacaksak Overwrite existing file kutucuğunu işaretlemeliyiz.
Workflow’umuz aşağıdaki gibi tamamlandı.
Comments