16 Şubat 2014 Pazar

Veri Analizinde Uygulanan Adımlar - 8 (Hava Durumu)

Şimdiye kadar bahsettiğim konular verinin doğrudan kendisiyle alakalıydı ve büyük oranda teorik konulardan bahsettim. Bu yazımdan itibaren gerçek verilerle oynayabileceğimiz bir yapıya dönüşecek bu yazı dizisi. Moleküler biyoloji temelli verilerle çalışmanın karmaşıklığını yaşamamak adına, daha kolay aktarabileceğimi düşündüğüm ve büyük boyutlu bir veri kaynağıyla çalışmayı tercih ettim: hava durumu verisi. İngilizce blogumda hava durumu üzerine yaptığım analizlerden ve sonuçlarından bahsetmiştim ancak bu sonuçları tam olarak nasıl ürettiğime ilişkin detaylara pek değinmemiştim. Bu yazımda, bu tarz verilere nasıl yaklaşılabileceği üzerine daha somut bir örnek üzerinden giriş yapacağım.

Neredeyse hepimizin cebinde bir akıllı telefon var, ve bu telefonlar internete bağlı olduğu sürece anlık hava durumu bilgisini de sunuyorlar. Bu verilerin nasıl oluşturulduğunu hiç merak ettiniz mi? Bildiğim kadarıyla bu işin temel motivasyonu, hava durumu bilgisinin kritik olduğu havacılık sektörü. Sıradan bir vatandaşa 4 saat sonrasına ilişkin bir tahmin raporunu yanlış verirseniz çok büyük ihtimalle hayati bir tehlike oluşturmaz veya büyük bir ekonomik kayba neden olmaz. Ancak, İngiltere'den kalkan bir uçağın Türkiye'ye iniş yapacağı saatlerdeki hava durumunu yanlış (veya büyük bir hata payıyla) tahmin ederseniz iyi ihtimalle ya gecikmeye, ya da başka bir havaalanına inmeye sebep olabilirsiniz; daha kötü örnekler de geçmişte yaşanmış maalesef (National Geographic'te Uçak Kazası Raporu adlı programda pek hoş olmayan örnekleri izleyebilirsiniz). Tam da bu nedenle, hava durumuna ilişkin gözlem merkezleri ilk olarak havaalanlarında kurulmaya başlanmış. Bu nedenle bir süre öncesine kadar Ankara'daki hava durumu için şehre gayet uzak olan Esenboğa'dan veya Kayseri'deki hava durumu için yine şehir merkezine uzak olan Erkilet'ten bilgi alınıyordu: buralar, askeri veya sivil havaalanlarının yer aldığı bölgeler çünkü. 

Bu kadar hava durumu genel kültüründen sonra ne tür verilere ulaşabileceğimize bakalım. Belirli periyotlarla (genelde 20 veya 30 dakikalık aralıklarla) sıcaklık, basınç, nem vb. veriler kaydediliyor ve bunlar bir merkezde paylaşılıyor. Her ne kadar bu verilere geçmişe dönük olarak Meteoroloji Genel Müdürlüğü üzerinden büyük ücretler karşılığında ulaşılabilse de, sizlere ücretsiz bir alternatif sunacağım ve analizlerimize de buradan elde ettiğimiz verilerle devam edeceğiz. Wunderground.com adresinde geçmişe dönük hava durumu verilerine ücretsiz bir şekilde ulaşabiliyoruz, ancak her seferinde bir merkeze ait bir günlük verilere ulaşabildiğimizden uzun bir zaman dilimine ait verilere otomatik olarak erişmek için bir program yazmaya ihtiyacımız var. 2013 yılına ait verileri otomatik olarak kaydedebilmek için yazdığım iki programa ve üç şehrimize ait (İstanbul, Ankara ve Kayseri) 2000-2013 yılları arasındaki verilere ulaşmak için github.com/ahmetrasit/biyoinformatik adresine göz atabilirsiniz. Çok önemli bir mevzuyu hatırlatmak istiyorum: yazdığım programları kullanırken lütfen karşı tarafın (wunderground.com) sunucularına acımasız davranmayın ve birden fazla il ve/veya birden fazla şehir için veri inderecekseniz aralarında kaydadeğer bir zaman dilimi bırakın: ücretsiz olarak sundukları bu hizmeti verdiklerine pişman olmasınlar :)

Ankara'ya ait sıcaklık verilerinin oluştuğu dosyaya bir göz atalım. Bu dosya tab-delimited, yani tab karakterleriyle ayrılmış bir şekilde kaydedilen bir dosya biçimi. Tab kelimesini dilimize sekme olarak çevirmişler ve bu karakteri kullanmanın temel amacı, verileri basit bir metin dosyasında bir tablo gibi görüntülemek (işin tarihsel detayına ulaşmak için ilgili Wikipedia sayfasına göz atabilirsiniz). Tab'la ayrılmış dosya biçimini Excel, Numbers ya da Calc gibi bir çizelge programıyla görüntülediğinizde, aşağıdaki gibi bir görüntüyle karşılaşırsınız:


Burada gördüğünüz üzere, sıcaklık değerleri günün büyük bir bölümünde 30 dakikalık aralıklarla ölçülmüş ve bu değerler derece Celcius (°C) olarak kaydedilmiştir. Önceki yazılarımı okuyanlar, aralardaki boşlukların varlığını pek de şaşkınlıkla karşılamayacaklardır: ya veri kaynağından, ya verilerin sunuluşundan, ya da verileri otomatik olarak indiren yazılımdan kaynaklanan bir sebepten ötürü aralarda eksik bilgiler yer alıyor. Gerçek hayatta bu tarz veri sorunlarıyla sıkça karşılaşılır ve bu durum da bir istisna değil. Verileri incelemeye devam ettiğimizde, hassasiyetin çok yüksek olmadığını, yani sıcaklık değerlerinin tamamen tam sayılardan oluştuğunu ve ondalık değerler içermediğini rahatça görebilirsiniz. Bu durumda, örneğin 01/01/2000 tarihinde günün en sıcak olduğu zaman diliminde sıcaklığın tam olarak ne zaman düşmeye başladığını anlamamıza engel oluyor. Bu nedenle, bu tarz bir analiz yapmak istediğimizde bu verilerden güvenilir sonuçlar elde edebilmemiz pek mümkün değil. Bunu bir kenara not ederek devam edelim. Dikkatimizi çeken bir diğer özellik ise, neredeyse her saat 2 sıcaklık değeri (30 dakikada bir) ölçülürken, gece yarısını geçince bu sıklık azalıyor ve 48 sıcaklık ölçümü beklerken 44 değer görüyoruz. Sabah saatlerine ilişkin verilerdeki bu heterojenliği de bir kenara not almalıyız, zira bu saatleri günün herhangi başka bir zaman dilimiyle kıyaslamaya kalktığımızda bazı sorunlarla karşılaşabiliriz. Bu nedenle bu verileri kullanarak bu tarz bir analizden de uzak durmak daha güvenli. Şimdiden yapabileceğimiz analizler kısıtlanmaya başladı bile; bunların farkında olmadan veriyi gelişigüzel analiz etmeye kalksaydık karşılaşabileceğimiz sorunları farketmişsinizdir sanırım. 


Gelelim aralardaki boşluklara, yani bir ölçüm değeri içermeyen zamanlara. Dosyaya daha genel bir şekilde göz attığınızda bu tarz eksikliklerin sistematik bir yapıda olmadığını ve rastlantısal [random] olduğunu görebilirsiniz. Eğer aksi bir durum olsaydı, yani mesela her günün öğle saatlerinde bu eksik ölçümler yoğunlaşsaydı, o zaman ya ölçüm aletinin belirli şartlar altında doğru ölçüm yapamadığını düşünüp verilerin nasıl elde edildiğine ilişkin bir araştırma yapmamız gerekebilirdi. Bu durum mesela şöyle bir rutinde meydana gelebilir: havaalanındaki sıcaklık ölçüm cihazı piste çok yakın bir konumdadır ve tam ölçüm yaptığı zamanlarda bir iniş veya kalkış gerçekleşiyordur, bu da ölçüm yapılmasını engelliyordur. Böyle bir durumda yapılması gereken şey, gidip o ölçüm cihazının nereye yerleştirildiğini ve ne tür etkilere açık olduğunu keşfetmek! Bu pek kolay olmayacaktır çoğu zaman, ancak aksi takdirde sistematik hatanın neden kaynaklandığını ve başka hangi verileri etkilediğini başka türlü anlayamazsınız. Bunun mikrodizi deneylerindeki en bariz örneği, oluşan çip görüntüsüne bakmaktır. Bir mikrodizi verisi genelde önünüze bir Excel dosyası şeklinde gelir ve orada düzeltilmiş sonuçları görürsünüz. Fakat çip görüntüsü yandaki gibi olabilir. Gördüğünüz üzere, muhtemelen üretim esnasında oluşmuş bir çizik var ve bu bölgede yer alan oligonükleotitlere ilişkin veriler hatalı bir şekilde elde edilmiş. Bu nedenle, sonuçlarımızda yer alsın ya da almasın, mutlaka veriye öncesinde birkaç farklı açıdan bakmalı ve ters giden bir şeyin olup olmadığını gözlemlemeliyiz.

Peki, veriler ciddi oranda hatalar ve eksiklikler içeriyorsa veya analiz amaçlarımıza uygun değilse ve bunların da analizimizi büyük oranda olumsuz olarak etkileme ihtimali varsa ne yapacağız? Kötü, bozuk ve/veya eksik malzemeyle güzel yemek yapılamaz: ya yemeğinizin kötü yanları olabileceğini kabul edip ona göre servis yapacaksınız, ya da daha sağlıklı bir veri kaynağı bulacaksınız. Bu durumda analizinizi devam ettirmekten tamamen vazgeçmek zorunda kalabilirsiniz veya bedelini ödeyip (satın alarak ya da veriyi elde etmek için gerekli finansal yatırımı yaparak) daha sağlıklı verileri elde ederek devam etmeyi seçebilirsiniz. Buna karar vermeden önce elinizdekini iyice didik didik etmeli ve verilerinizi iyi tanımalısınız.


Elimizdeki veri çok büyükse -hatta küçük olsa bile- en büyük yardımcımız, bazı temel istatistiksel özellikleri de içeren grafikler çizdirmek ve veriyi bir şekilde özetleyebilecek araçlar kullanmak. Burada devreye R programlama dili giriyor, ve bir sonraki yazımda bu dile hızlı sayılabilecek bir giriş yapacağım. O zamana kadar, bilgisayarınıza RStudio isimli programı kurmanızı ve biraz kurcalamanızı öneriyorum.



Sözün Özü:
Gerçek verilere ulaşmak fazladan emek ister ve çoğu zaman elde edilen veriler ideal dünyadakinden farklı olarak hatalar ve eksiklikler içerir. Belli bir merkeze ilişkin periyodik sıcaklık ölçümleri buna güzel bir örnek oluşturabilir.




Proje:
Yukarıda bahsedilen veri dosyalarına ilişkin verileri Excel'de görüntülemeye ve verilere ilişkin mümkün olduğunca işe yarar bilgi edinmeye çalışın. Yeri geldikçe de grafikleri kullanın.

Meraklısına:

Hava durumunu oluşturan farklı türdeki ölçümlere Meteoroloji Genel Müdürlüğü'nün TUMAS adlı servisi üzerinden daha sağlıklı bir şekilde ulaşabilirsiniz. Bunun için fazlasıyla büyük bir bedel ödemeniz gerekebilir!