Bir önceki yazımda Scraper eklentisi ile bir web sayfasında bulunan büyük miktarda veriyi nasıl Excel’e veya Google Docs’a aktardığımızı anlatmıştım. O örnekteki veriler hali hazırda HTML tablolarında <tr> <td> yapısında tutulduğu için oldukça temiz bir çıktı elde etmiştik. Ancak ne yazık ki durum her zaman öyle olmuyor. Çektiğimiz verilerin içinde “noise” yani parazit/kirlilik olarak adlandırabileceğimiz karakterler veya kelimeler olabiliyor. Benim yaptığım çalışmalarda genelde HTML ve CSS kodları noise olarak karşıma çıktı.
Örnek :
Uzun bir listeniz var ve bu listenin kolonları “Şirket Adı | Ülke | Şehir” şeklinde.
Sizin elinizdeki veri ise ” <td> Ufuk Cad. Tan Sk. <br> Doğan Apt <br> Beşiktaş <br> Istanbul <br> Türkiye ” şeklinde.
Bunun gibi yüzlerce kaydınız var diye düşünün, sadece ülke ve şehir isimlerini nasıl ayrı bir kolona alırdınız ?
Bu sorunun cevabı bizim için Google Refine’da !
Sırası gelmişken biraz Google Refine’dan bahsedeyim. Bu araç 2010 yılında Google tarafından geliştirilmiş ve ücretsiz olarak sunulmuş. Daha sonra 2011’de ise stabil sürümü tamamlanmış. Her ne kadar ben Google Refine desem de aslında şu anki resmi adı Open Refine. Çünkü Google 2012’de bu projeden desteğini çekmiş ve proje “Open Source”a dönüştürülerek gitHub üzerinden geliştiricilere açılmıştır. Bundan dolayı da Open Refine adını almış ve bence gayet yerinde olmuş.
Programın belki de en sevdiğim parçası logosu. Abartıyor olabilirim ancak koydukları o “diamond” bana bütün bir Data Mining sürecini anlatıyor. Şimdi bu yazıda karıştırmayayım ancak buraya bakıp ne demek istediğimi anlayabilirsiniz.
Open Refine’ın kullanım amaçları sitesinde şu şekilde sıralanmış :
- Kirli Verileri Temizlemek : Az önce verdiğim örnek bunun en basit örneği.
- Veri Dönüşümü (Transformation of Data) : Verilerin bir formattan diğerine dönüştürülmesi ve normalizasyon işlemleri buna örnek olabilir.
- Web Sitelerinden Veri “Çalmak” (Parsing Data): Parsing’in tam olarak Türkçe karşılığı bu noktada pek anlam ifade etmediği için “Çalmak” dedim ancak bir noktada da doğru. Verdiğiniz URL’leri adeta bir elektrik süpürgesi gibi bütün HTML kodları ile emiyor Refine.
- Web Servislerden Data Çekmek : Henüz kullanmadığı bir yönü.
- Freebase kullanımı : Google’ın Wikipedia’ya rakip olmayı hedeflediği,biraz daha teknik (daha çok veritabanı gibi) görünen bilgi platformu. Türkçe yeteri kadar bilgi olmasa da farklı konularda çeşitli verileri freebase’den çekip deneysel çalışmalar yapılabilir.
Biraz da Google Refine’ın ilk göze çarpan özelliklerinden bahsedeyim :
- Open Refine’da her bir sayfa tek bir tabloya denktir. Excel sheet’lere benzemez yani.
- İlişkisel veri tabanlarındaki tabloları düşünün, işte o burada tek bir sayfaya denk geliyor.
- Uyguladığınız formüller hücrelerde saklanmaz. Yalnızca veri bulunur hücrelerde. (Hatırlayınız Excel’de bir formül uyguladığınızda o formül o hücrede kayıtlı kalır)
- Bir kolon üzerinde değişiklik yapmak yerine o kolonun değişiklik yapılmış kopyası oluşturulur hemen yanına.
- Verileri filitrelemek için Facet’leri kullanacağız. Adı farklı ama tamamen filtre işlevi görüyorlar. Örneğin; boş hücreleri getirme veya içinde ‘Bahadır’ geçen kayıtları getir diyebiliyorsunuz. Bunun yanında çok karmaşık Regex’ler de yazabilirsiniz tabi.
- Open Refine’da kullanılan dilin adı ise şaşırtıcı olmayan bir şekilde “Open Refine Expression Language” , GREL olarak da geçer. Hatta GREL adı altında daha çok döküman vardır.
- Open Refine (Google Refine) kullanabilmek için GREL kodları yazmanız şart ama hemen paniklemeyin cidden kolay bir dil. Söz dizimi diğer dillere (java,c#) oldukça benziyor. Hatta hiç programlama yapmadıysanız bile yapısı İngilizce’nin söz dizimine de yakın olduğu için sıkıntı yaşamaz bir iki günde öğrenirsiniz.
Bu konuda araştırma yaparken karşıma çıkan “data wrangling” terimi de ilgimi çekti, belki arada onun hakkında da bir şeyler karalayabilirim. Aynı zamanda Freebase de hakkında yazılması gereken sitelerden bir tanesi diye düşünüyorum.
Google Refine’ın uygulama yazısını yazana kadar sizlere okumanızı tavsiye edeceğim bir kaç kaynak vereyim :