Anasayfa / Uygulamalar / R / R ile Veri Manipülasyonu | Bölüm 1/3

R ile Veri Manipülasyonu | Bölüm 1/3

Elimizde her zaman iyi bir veri seti olmayacaktır. Özellikle bazı veriler için uzun ve yorucu veri manipülasyonları yapıldıktan sonra analiz, modelleme ve görselleştirme aşamasına geçilecektir. Bu yüzden veri manipülasyonu ve tidy data (düzenli veri) formatının veri bilimci adayları tarafından iyi bir şekilde benimsenmesi gerekiyor.

Dirty Data

İşte mükemmel olmayan bir veri seti karşınızda !

[/crayon]

[/crayon]

[/crayon]

[/crayon] Öncelikle bilmemiz gereken şey, her bir satır bir gözlemi ve her bir sütun ise değişkeni temsil etmeli!

  • weather veri setinde 1. değişkenimiz “X” açıkça görülüyor ki bir anlam ifade etmiyor, sadece satır numaraları.
  • “measure” değişkeninde ise her bir gözlemin muhtemelen bir değişkeni temsil ettiğini anlayabiliriz.
  • Peki Veri Temizleme / Manipülasyon işlemi neden önemli ?

Gerçek dünya ve gerçek veri setleri ile karşılaştığınızda bunların hepsi dirty data olarak karşınıza çıkacaktır. Özellikle “Big Data” ile veri manipülasyonun önemi daha da ön plana çıkmıştır. Çünkü hangi sektör olursa olsun verinin boyutu ve çeşitliliği arttıkça içerisindeki kirli veri de bir o kadar artar.

Örümcek Adam’ın rahmetli Ben Amcasının da dediği gibi; “Büyük güç, büyük sorumluluk getirir”. Bu sözün veri bilimciler için meali şudur; “Büyük veri, büyük sorumluluk getirir”. Tüm Marvel severlerin başı sağolsun diyerek veri bilimi maceramıza devam edelim.

Veri manipülasyonu, veri bilimi sürecinin olmazsa olmaz aşamalarından biridir. Bu aşamayı dört maddede söylemek gerekirse,

  • Veri Toplama
  • Veri Manipülasyonu
  • Veri Analizi / Modelleme
  • Çalışmanın Raporlanması şeklindedir.

Veri manipülasyonu, veri bilimi süreçlerinden biri olduğu gibi ayrıca üzerinde en fazla vakit harcanması gereken aşamadır. Veri Bilimci büyüklerimizin de dediği gibi işin %80’lik kısmı burasıdır.

Veri manipülasyonu ne yazık ki diğer süreçler gibi belirli adımları uygulayarak sonuçlandıracağımız bir işlem değildir. Veriler ile sürekli haşır neşir olmamız ve uzun zaman harcamamız gerekmektedir. Bu noktada endişelenmemeliyiz. Veri manipülasyonunda diğer süreçler gibi beliri adımlarımız yok, fakat belirli prensiplerimiz var. Eğer bu prensiplere göre hareket edildiği taktirde başarılı bir veri manipülasyonu yapılmış demektir.

Veri manipülasyonu için üç aşamayı takip edebiliriz.

  1. Ham verileri keşfetmek
  2. Düzenli veri formatı – Tidy data
  3. Veriyi analizler için hazırlamak

Bu üç prensip, veri manipülasyonunun değişmez maddeleridir.

1. Ham Verileri Keşfetmek

Veri manipülasyonunun ilk aşaması ham verileri keşfetmeyi de üç alt başlığa ayırabiliriz.

  • Veri setini ve yapısını anlamak
  • Veriye göz atmak
  • Veriyi görselleştirmek

1.1. Veri setini ve yapısını anlamak

İlk aşamamız veri setini kullandığımız programa aktarmak olacaktır. Olmayan verinin nesini analiz edelim kardeşim!

[/crayon] Diğer aşamalarımız ise verinin türünü, boyutu, değişken türleri, değişken isimleri, değişkenlerin neleri temsil ettiklerini vs. bilmemiz gerekiyor. Teker teker bu dediğimiz aşamalara bakalım.

Aktardığımız weather verisinin ne olduğuna bakmak için class() fonksiyonunu kullanabiliriz.

[/crayon]

[/crayon] weather bir data frame yani bir veri seti.

weather veri setinin boyutunu öğrenmek istersek dim() fonksiyonu ile verinin kaç gözlem ve kaç değişkenden oluştuğunu görebiliriz.

[/crayon]

[/crayon] weather veri seti 286 gözlem ve 35 değişkenden oluşmaktadır.

Bu değişkenlerin isimlerine de names() fonksiyonu ile bakalım.

[/crayon]

[/crayon] Elimizde yıl, ay ve ölçü haricinde X’lerden oluşan ve ne anlama geldiğini bilmediğimiz değişkenler mevcut.

Yukarıda yaptıklarımız elimizdeki veriyi anlamak için temel komutlardır. Bu komutlar yerine str() fonksiyonu ile verinin yapısını görebiliriz. Ayrıca dplyr kütüphanesinin glimpse fonksiyonu da aynı işlevde kullanılır.

X değişkenleri çok azla ve karakter formatında olduğu için 1’den 6’ya kadar olan değişkenleri alalım.

[/crayon]

[/crayon]

[/crayon]

[/crayon]

[/crayon] Bu çıktıları anlatmaya gerek yok, işte görüyorsunuz! Yukarıda yaptıklarımızı iki fonksiyon detaylı bir şekilde veriyor.

Elimizdeki veriyi daha iyi anlamak için summary() fonksiyonundan da bahsedelim tam olsun.

[/crayon]

summary verinin özetini veren bir fonksiyondur. summary(), weather veri setimizde şık durmadığı için iris veri seti ile bakalım.[/crayon]

[/crayon]

summary fonksiyonu kategorik ve nümerik değişkenler için farklı özet verir. Nümerik değişkenler için, değişkenin minimum, maksimum, kartiller, medyan ve ortalama değerlerini verirken, kategorik değişkenler için gözlemlerin frekanslarını verir.[/crayon] Bu bölümü özetlemek gerekirse,

  • class() fonksiyonu veri nesnelerinin sınıfını,
  • dim() fonksiyonu verinin boyutunu,
  • names() fonksiyonu sütunların (değişkenlerin) isimlerini,
  • str() ve glimpse() fonksiyonları da verilerin yapılarını,
  • summary() fonksiyonu ise özet istatistikleri verir.

1.2. Veriye göz atmak

Yukarıdaki komutlar ile veri setimiz hakkında bazı fikirler edindik. Şimdi veriye göz atma zamanı!

İlk bilmemiz gereken nokta tüm veriyi göz ile teker teker inceleyemeyeceğimizdir. Özellikle verinin boyutu büyüdükçe bu iş zorlaşır. Bu yüzden verinin baştaki ve sondaki verileri görmemizi sağlayan head() ve tail() fonksiyonları veriyi görmemizde yardımcı olurlar. Default – Varsayılan hali ile ilk 6 ve son 6 gözlemleri gösterirler. Eğer gözlem sayısını belirlemek istiyorsak kendimiz bir değer girebiliriz. Örneğin ilk 15 ve son 20 gözlemi görmek istiyorsanız, head(veri_ismi, 15) ve tail(veri_ismi, 20) şeklinde yazabilirsiniz.

[/crayon]

[/crayon]

[/crayon]

[/crayon] Bu bölümün özetlemek gerekirse,

  • head(), varsayılan hali ile ilk 6 gözlemi
  • tail(), varsayılan hali ile son 6 gözlemi verir.
  • print(), veri setinin hepsini görmek istersek print() fonksiyonu kullanılabilir. Ama büyük veri setleri için önerilmez.

1.3. Görselleştirmek

Eğer veriye daha detaylı göz atmak istiyorsak neden görselleştirme yapmayalım ki ? Şuan weather veri seti görselleştirme için uygun olmadığından yine iris veri seti üzerinden görselleştirelim. İlerideki kısımlarda weather veri setini manipüle edeceğiz.

iris veri seti iris türündeki çiçeklerin santimetre cinsinden uzunluğunu ve genişliği veren ölçülerde “sepal” ve “petal” değişkenlerini bize sunar. Petal(Taç yaprağı) uzunluğunun dağılımına bakmak istersek histogramı aşağıdaki gibidir.

[/crayon]

Eğer iki değişken arasındaki ilişkiye bakmak istersek plot() fonksiyonu ile bir scatterplot – dağılım grafiği elde edebiliriz.

[/crayon]

Boxplot – Kutu grafiği ile bir değişkenin dağılımını ve değişkendeki aykırı gözlemleri görebiliriz.

[/crayon]

Bu bölümü özetlemek gerekirse,

  • hist() ile tek bir değişkenin dağılımını görmek için histogram elde ederiz.
  • plot() ile iki değişken arasındaki ilişkiyi görmek için scatterplot elde ederiz.
  • boxplot() ile tek bir değişkenin dağılımını ve aykırı gözlem tespiti için boxplot elde ederiz.

2. Düzenli Veri Formatı – Tidy Data

2014’te Hadley Wickham, Journal of Statistical Software’de “Tidy Data” adında bir makalesi ile bize bazı prensipler üzerinde veri manipülasyonu yapmanın kolay ve pratik yollarını sundu. Bu bölümde bu prensipleri uygulamaya çalışacağız. Yayınlanan makele: http://www.jstatsoft.org/v59/i10/paper.

Düzenli bir veri seti örneği olarak bir veri seti oluşturalım.

[/crayon]

[/crayon] Burada 5 kişinin isim, cinsiyet, boy ve yaşını gösteren bir veri seti.

İlk satıra bakacak olursak, Ayşe adındaki kişinin bir hanımefendi olduğu, gözünün ela renginde, boyunun 1.67 ve yaşının da 20 olduğu bilgisine ulaşırız. İlk satır tek bir kişiye ait özellikleri barındırır, yani birinci satır aslında bir gözlemi (observation) ifade eder.

Dördüncü sütuna bakacak olursak, her bir gözlemin yaşlarının dağılımını verir. Sütun da bir değişken (variable) ya da bir davranışı (attribute) temsil eder.

Bu veri setinde her bir gözlem her bir kişinin karakteristik özelliklerini verir.

2.1. Düzenli Veri Prensipleri

Yukarıdan çıkartılacak prensipler şunlardır:

  • Gözlemler satır olmalıdır,
  • Değişkenler satır olmalıdır ve
  • Tablo başına gözlem birimi bir tür olmalıdır.

Veri seti değerlerin bir toplamıdır. Her bir değer hem bir değişkene ve hem de bir gözleme aittir. Bir değişken farklı birimler için aynı ölçüleri / davranışları gösteren değerleri içerir. Bir gözlem ise tek bir birim için farklı ölçüleri / davranışları gösteren değerleri içerir.

Şimdi bu prensipleri dağınık bir veri seti (dirty data) üzerinde görelim.

2.2. Dağınık Veri Teşhisi

[/crayon] [/crayon] Buradaki sorunumuz nedir ? Bu veri setinde hala gözlemlerimiz satır ve gözlem birimimiz de insan. Ayrıca her bir sütun da bir değişkeni temsil ediyor. Ancak, burada fark etmemiz gereken “ela”, “mavi” ve “yesil” değişkenleri önceki tablomuzda göz renklerini temsil eden birer değerlerdi. Buradaki sorunun benzeri de başka veri setlerinde karşınıza çıkacaktır, yaygın olarak dağınık veri tipi şeklidir. Burada değişken başlıkları birer değerdir, bir değişken ismi değildir.

2.3. Geniş veya Uzun Veri Setleri

Başımıza gelecek bir başka dert de geniş veya uzun veri setleridir. Bu satırların değişkenlerden (uzun olma problemi) veya değişkenlerin satırlardan (geniş olma problemi) çok fazla olma durumudur. Yukarıda yaptığımız kişi özellikleri veri setleri gibi düşünebilirsiniz.

Veri setlerinin geniş veya uzun olma problemini de Hadley Wickham’ın yazdığı “tidyr” paketi ile çözebiliriz. tidyr paketi düzenli veri prensiplerini uygulamamızda büyük kolaylık sağlar.

2.3.1. Geniş Veri Seti – gather() Fonksiyonu

[/crayon] [/crayon] Elimizde X ve Y iki bilinmeyenimiz var. Ayrıca A,B,C ve D şeklinde 4 kategori ve bu kategorilerin aldığı bir değer var.

  • Yukarıda düzenli veri formatı için şu ifadeyi kullanmıştık:

“Veri seti değerlerin bir toplamıdır. Her bir değer hem bir değişkene ve hem de bir gözleme aittir. Bir değişken farklı birimler için aynı ölçüleri / davranışları gösteren değerleri içerir. Bir gözlem ise tek bir birim için farklı ölçüleri / davranışları gösteren değerleri içerir.”

Örneğimizde A,B,C ve D değişkenleri bilinmeyenlerimizin kategorileridir, yani bu kategoriler farklı birimler için aynı ölçüleri / davranışları gösterir. Kategorilerin aldığı değerler ise tek bir birim için farklı ölçüleri / davranışları gösterir.

tidyr paketinden gather() fonksiyonu ile geniş veri seti problemini çözebiliriz.

  • gather() ile sütunları key-value eşleri haline getirme işlemi aşağıdaki gibidir.

gather(data, key, value, …)

Veri setimizi wide olarak belirttik, key-value eşlerini belirlemek içinde biinmeyen isimli değişkenimizi dışarıda bıraktık ve böylelikle düzenli veri formatını elde etmiş olduk.

[/crayon]

[/crayon]

2.3.2. Uzun Veri Seti – spread() Fonksiyonu

Burada “Geniş Veri Seti” kısmında yaptıklarımızın tam tersini yapıyor olacağız. Başka veri seti oluşturmaya gerek olmadığından gather işlemini long isminde kaydedelim ve uzunbir veri seti elde etmiş olalım.

[/crayon]

[/crayon]

  • gather() fonksiyonun tam tersini yapan spread() fonksiyonu ile uzun veri setini geniş bir veri setine dönüştürebiliriz.

spread(data, key, value)

[/crayon]

[/crayon] Çıktıda gördüğümüz gibi orjinal “wide” veri setini elde etmiş olduk.

2.4. Değişken Birleştirme ve Ayırma

Veri setimizde bazı değişkenlerin birleştirilmesi ve ayrıştırılmasına ihtiyaç duyabiliriz. Bu yüzden tidyr paketi bize iki kullanışlı fonksiyon daha sunuyor, separate() ve unite() fonksiyonları.

Bu fonksiyonları kullanmak için “kisi” adlı veri setimize her bir kişinin doğum tarihlerini yazalım.

[/crayon]

  • separate() fonksiyonu ile “yil”, “ay” ve “gun” şeklinde üç değişkene ayıralım.

[/crayon]

  • unite() fonksiyonu ile de tarih değişkenlerini birleştirelim.

[/crayon]

[/crayon] tidyr paketini özetlemek gerekirse,

  • gather() fonksiyonu, sütunları key-value eşleri olarak bir araya toplar.
  • spread() fonksiyonu, key-value eşlerini sütunlara yayar.
  • separate() fonksiyonu, bir değişkeni birden fazla değişkene ayırır.
  • unite() fonksiyonu, birden fazla değişkeni tek bir değişken olarak birleştirir.

Bölüm Sonu

Bu bölümde veri manipülasyonun öneminden, Dirty Data Vs. Tidy Data kavramlarının neler olduğundan, önümüze veri geldiğinde ilk yapmamız gereken aşamalardan, tidyr kütüphanesinden bahsettik. Bir sonraki bölümde dağınık verileri göreceğimiz ve değişken tipleri üzerinde konuşacağımız bir bölüm olacaktır.

Hakkında Ekrem Bayar

GÖZ ATMAK İSTEYEBİLİRSİNİZ

Bootstrap (Yeniden Örnekleme) Nedir ?

Utku Kubilay ÇINAR   Bootstrap Yöntemi, istatistik alan(lar)ında sıklıkla kullanılan yöntemlerin başında gelmektedir. Bootstrap yöntemleri …

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir