26 Eylül 2013 Perşembe

Veri Analizinde Uygulanan Adımlar - 6 (Veriye Erişim ve Veriyi Saklama)

Gayet uzun bir aradan sonra, bu dizinin yeni yazısıyla tekrar merhaba. Bir önceki yazıda ideal verinin neye benzediğine ilişkin bir çerçeve çizmeye çalışmıştım. Bu yazıda ise bu ideal veriye nasıl ulaşılacağı ve elde edilen verinin nasıl saklanacağına ilişkin kabul gören bazı yaklaşımlardan bahsedeceğim.

Farkettiğiniz üzere, doğru veriyi kullanmak analizin başarısı ve etkinliği üzerinde doğrudan söz sahibi. Bu nedenle, sorduğunuz soruyu cevaplamaya en uygun verinin özelliklerini en başta belirlemeli ve bu titizlikle hareket etmelisiniz. Ya da, elde edebildiğiniz veriler ideal özelliklerin bir kısmını karşılamıyorsa, o zaman da sorunuzu tekrar gözden geçirmeli ve  gerektiği şekilde sınırlamalısınız. Bu yazıyla veriye ilişkin pratik bir konuya giriyoruz: veriye nasıl ulaşmalıyız ve veriyi nasıl saklamalıyız?

Bu konu size biraz basit ve gereksiz gelebilir: çoğu zaman ya elimizde bir veri dosyası vardır, ya sık kullandığımız (genellikle web tabanlı) bir veri tabanına başvuruyoruzdur, ya da bir Google aramasıyla veriye ulaşabiliyoruzdur. Ancak çoğu zaman elde ettiğimiz veriler işlenmiştir; yani budanmış, şekil değiştirmiş, veya özelliği bozulmuş veriler!

Veri herhangi bir yaklaşımla veya teknikle üretildiği zaman (verinin ilk üretildiği şekline  ham veri [raw data] diyoruz), genellikle bakanın içini karartacak bir vaziyettedir. Mesela, borsada bir hisse senedine ilişkin güncel verilerin bir veritabanında tutulmuş halini görseniz, büyük ihtimalle hiç bir şey anlamazsınız. Her bir hisse senedinin yerine, o hisse senedini temsil eden bir kimlik [identity, ID] numarası görürsünüz ve bu numara tek başına hiç bir anlam ifade etmiyordur. Aynı zamanda, bu veri anlık bilgiyi içermektedir ve örneğin 15 sene önceki bir zaman dilimine ilişkin veri olması gerekenden çok daha küçüktür ve enflasyon karşısındaki değişim hesabına göre yeniden hesaplanmamıştır. Genetiğe geçelim: bir mikrodizi [microarray] verisinin ham hali siyah beyaz bir resim dosyasıdır (yandaki resme bir bakın)! Bu resim temel alınarak (ve bazen farklı filtreler uygulanarak) ışık yoğunluğu hesaplanır ve sayısal hale getirilir, bu haliyle dahi bir mikrodizi verisi ham haldedir ve bu veri bir analiz için bu haliyle kullanılamaz. Özetle, ham veri genelde çirkin ve kullanışsızdır; insanlar bu verileri başkalarıyla paylaşabilmek için veriyle oynar ve kullanılabilir hale getirir, bu nedenle de sizin kolaylıkla bulabildiğiniz veri ham veri değil işlenmiş veridir [processed data]. Veri işleme apayrı bir dal, şimdilik bu alana girmeyeceğiz (genetik alanında veri işlemenin önemini görmek adına Normalizasyon Neden Bu Kadar Önemli? başlıklı yazıma bir göz atabilirsiniz). 

Yani, ideal verinin özelliklerinin belirlenmesi kadar, bu verinin işlenmemiş haline ulaşılması da bir o kadar önemli. Bu süreç, fazlasıyla emek-yoğun fakat harcanan emeğin karşılığını fazlasıyla veren bir süreç. Peki bunu nasıl yapacağız, işlenmemiş veriye nasıl ulaşacağız?

İlk yapacağımız şey, her zaman başvurduğumuz veri kaynağının web sayfasının kıyısında köşesinde ham veriye ulaşmamıza yardımcı olacak bir link var mı, ona bakmak. Emin olun, büyük ihtimalle böyle bir veri bir yerlerde vardır ancak o zamana kadar dikkatinizi dahi çekmemiştir, ve büyük ihtimalle de ufak fontlarla hemen farkedilmeyecek bir yerdedir. Eğer bir web sayfası yoluyla ulaşmıyorsanız veriye, veya ilgili web sitesinde böyle bir link yer almıyorsa, yapmanız gereken şey bu verinin üreticisine ulaşmak olacaktır. İnsanlar bir şey ürettiklerinde genellikle bir şekilde imzalarını atarlar; bilgisayar dünyasında bu imza kişisel veya kurumsal e-posta adresidir. Eğer verinin üretiminin üzerinden de çok uzun bir zaman geçmemişse, ham veriyi paylaşmak konusunda (özel bir durum veya gizlilik kaygısı yoksa) insanlar paylaşımcı davranmayı severler (teşekkür edilmek veya yaptığınızla birilerinin ilgilenmesi herkesin hoşuna gider). En kötü senaryoda, yani ham veriye bir türlü ulaşılamadığı durumda ise, verinin nasıl işlendiğine ilişkin bir bilgi kırıntısı bulmak veya bu verinin nasıl işlendiğine ilişkin bir öngörüde bulunmak çok kıymetlidir. Bir veri, ya literatürde kabul gören bir şekilde işlenmiştir, ya da sizin aklınıza gelen ilk yöntem başkasının da aklına gelmiştir ve veriyi o şekilde işlemiştir. 

Eğer ham veriye bir şekilde ulaşabildiyseniz, sorun yok. Kötü senaryodaki durum başınıza gelmişse de, ya veri işlenme tekniği bir yerlerde yazıyordur ve bu sayede bu veriyi hangi tür analizlerde kullanamayacağınızı basit bir literatür veya google taramasıyla öğrenebilirsiniz. Diğer seçenekte, yani verinin nasıl işlendiği veya işlenip işlenmediği hakkında en ufak bir bilginizin olmadığı durumda ise, bunun bedelini maalesef kaybedeceğiniz vakitle ve fazladan göstereceğiniz dikkatle ödersiniz. Ya bu veriyle çalışmayın, ya da kaynağını bulmak için daha fazla çaba gösterin.

İşlenmiş veriyle çalışmanın problemlerinden birini, kendi yürüttüğüm bir analizden örnek vererek anlatayım. İngilizce blogumu takip edenler, şehirlerin hava durumuna ilişkin karakteristik özelliklerini ortaya çıkarmak üzere yaptığım analizi (umarım merakla ve heyecanla:)  ) okuyorlardır. Bu verinin ham halinde, özellikle geçmiş yıllarda bazı günlerin bazı saatlerine ilişkin sıcaklık verisi ulaşılabilir halde değil. Bu nedenle tarihleri daha güncel olacak şekilde (son 12 yılla) sınırlandırmak zorunda kaldım. Bu verideki boşlukları da, normal şartlar altında gerçek olamayacak bir değerle, -99 değeriyle değiştirdim (bu sıcaklığı gerçek hava durumunda gördüğümüz zaman zaten böyle bir analizi okuyabilecek kimse de kalmamış demektir). Eğer birileri tutar da, bu değişikliğin farkında olmadan her bir güne ait sıcaklık ortalamasını hesaplamaya kalkarsa, bazı günler olduğundan daha soğuk görünecektir. İşin daha da kötüsü, bu günler kış aylarına denk geliyorsa, o zaman bu durum farkedilmeyecektir. Sıcaklık ortalamalarındaki bu gariplik yaz aylarına denk gelirse ancak o zaman bir terslik olduğu anlaşılır ve veriye detaylı bir şekilde bakılınca bu durumun farkına varılır, ama o zamana kadar harcanan emek ve zaman da kısmen çöpe gider.

Bu konuda gözünüzü yeterince korkuttuğumu düşünüyorum :) Gelelim verinin saklanmasına. Bu konuda da dikkat edilmesi gereken üç temel husus var. Bunlardan ilki, verini organize edilerek saklanması, diğeri verinin saklanacağı biçim [format], son olarak da verinin saklandığı ortam [media].

Veriyi mutlaka organize ederek saklamalısınız ki, ileride iyi veya kötü bir nedenle geri dönmek zorunda kaldığınızda hızlıca ulaşabilmelisiniz. Aynı zamanda, her bir veriye ilişkin oluşturulma tarihi, kayıt ve kaynak bilgilerini de ayrı bir metin dosyasında saklamalı ve veriyle aynı klasöre yerleştirmelisiniz. Bilgisayar dünyasında bu tür bilgiler genellikle README.txt veya BENIOKU.txt adı verilerek oluşturulan bir dosyaya kayıt edilir. Böylece o anda gereksiz gibi görünen ancak ileride altın madeni bulmuş gibi sevindirecek bir iş yapmış olursunuz.

Gelelim verileri saklayacağınız veri biçimine. Veriyi etkin olarak bir veritabanında saklıyor ve veriye oradan erişiyor olabilirsiniz, ancak verinin ilk ve/veya ham halini basit bir metin dosyası (veri bir resim ise, .TIFF, .BMP veya .PNG dosyası) biçiminde saklamak önerilen bir yöntemdir. Orjinal ve/veya ham veriyi bir Excel veya Word dosyası biçiminde saklamak yerine, .CSV (virgülle ayrılmış değer [comma separated value]) veya .TXT (metin [text]) dosyası biçiminde saklamayı tercih edin. Kullandığınız veritabanının versiyonu değişebilir ve uzun yıllar önce oluşturduğunuz bir veritabanı yedeğinin bir kısmını versiyon güncellemesi nedeniyle kaybedebilirsiniz. Ya da farklı bir programla ilgili veriye ulaşmak isteyebilirsiniz ve başarısız olabilirsiniz. Ancak basit metin dosyası biçimi bilgisayarların ilk varolduğundan bu yana neredeyse hiç bir değişime (Unicode istisna) uğramamıştır ve büyük ihtimalle önümüzdeki en az 50 yıl da büyük bir değişime uğramayacaktır.

Son olarak verinin saklandığı ortamdan bahsetmem gerekiyor. Eğer verilerinizi bir CD'de saklıyorsanız ve kullandığınız CD de çok kaliteli değilse, büyük ihtimalle 3 sene sonra bu CD yok hükmünde olacaktır. Bundan sonraki belki 10 yıl içerisinde de CD'ler tamamen değişim geçirebilir; işin daha kötüsü, eski CD'leri okuyabilecek bir CD okuyucusuna erişmek mümkün olmayabilir bile (yeni nesil ince dizüstü bilgisayların çoğunda olmadığı gibi). 3.5' disketler bundan 10 yıl öncesinde veri saklamak için iyi bir seçenekti ve ödevlerimizin bir kısmını bunlarla teslim ederdik. Bugün bir disket okuyucusu bulmak için hurdacıya gitmek gerek. Bu noktada yapılması gereken ideal işlem, her 5 veya 10 yılda bir verilerinizin en son teknoloji kullanılarak yedeklenmesi. Diğer bir yaklaşım ise, verileri internette saklamak. Bunun için birçok çözüm mevcut, ancak burada da dikkat edilmesi gereken şey, dosyalarınızı saklamak için seçtiğiniz servis sağlayıcısının güvenilirliği. Ucuz olsun diye seçtiğiniz bir çözüm, ilgili şirketin birkaç sene sonra batması veya el değiştirmesiyle kâbusa dönüşebilir.


Sözün Özü:
İdeal verilerin belirlenmesi kadar, bu verilerin işlenmemiş haline ulaşılması da büyük bir öneme sahiptir. Ham veriye [raw data] ulaşılması her zaman kolay olmayabilir ancak harcanan emeğe fazlasıyla değer. Bir diğer konu da, verinin orjinal veya ham halinin saklanmasıdır. En basit ve en az değişikliğe uğrayacak olan yöntemin seçilmesi sizi bir çok problemden kurtaracaktır.



Proje:
Bundan en az 10 sene önce oluşturduğunuz bir dosyayı bulmaya çalışın ve bugüne göre ne tür değişikliklerin olduğunu belirleyin. Varsa, daha eski dosyalarınıza da bir göz atın, mesela resim dosyalarınızı rahatlıkla bulabiliyor musunuz, yoksa bir önceki virüs faciasında bir kısmı kayıp mı oldu?


Meraklısına:
Veriye ilişkin olumsuz ancak fazlasıyla gerçekçi ve tahmin ettiğinizden daha yaygın durumlar hakkında daha detaylı bilgiye erişmek isterseniz, Bad Data Handbook adlı kitabı kesinlikle okumalısınız.