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

Veri Bilimi maceramızda bir önceki bölümde veri manipülasyonun öneminden ve prensiplerden bahsetmiştik. Bu bölümde ise dağınık veri setlerinden ve değişken dönüşümlerinden ve tarih formatından bahsedeceğiz.

3. Dağınık Verilerin Ortak Belirtileri

Şuana kadar yaptıklarımızı kısaca örnekler üzerinde görelim.

  1. Sütun başlıkları birer değerdir, değişken ismi değildir!
kisi_dirty
##      kisi cinsiyet ela mavi yesil  boy yas
## 1    Ayşe        K   1    0     0 1.67  20
## 2   Fatma        K   0    1     0 1.73  32
## 3 Hayriye        K   0    0     1 1.60  45
## 4     Ali        E   1    0     0 1.80  18
## 5    Veli        E   0    1     0 1.75  28

Burada kişilerin göz renkleri birer değişken olarak tanımlanmıştı. Olması gereken ise aşağıdaki gibidir.

kisi
##      kisi cinsiyet   goz  boy yas dogum_tarihi
## 1    Ayşe        K   Ela 1.67  20   1998-02-11
## 2   Fatma        K  Mavi 1.73  32   1986-01-30
## 3 Hayriye        K Yeşil 1.60  45   1973-05-12
## 4     Ali        E   Ela 1.80  18   2000-02-09
## 5    Veli        E  Mavi 1.75  28   1990-03-13

Buradaki problemi tidyr’dan gather fonksiyonu ve dplyr’dan filter fonksiyonu ile çözebiliriz. Eğer filter fonksiyonunu kullanmasaydık bir çoklama problemi ile karşı karşıya kalacaktık. Bu yüzden filter fonksiyonundan destek alma ihtiyacı duyduk.

gather(kisi_dirty, key = "goz", value, -c(kisi, cinsiyet, yas, boy)) %>% 
  filter(value == 1) %>% 
  select(-value)
##      kisi cinsiyet  boy yas   goz
## 1    Ayşe        K 1.67  20   ela
## 2     Ali        E 1.80  18   ela
## 3   Fatma        K 1.73  32  mavi
## 4    Veli        E 1.75  28  mavi
## 5 Hayriye        K 1.60  45 yesil
  1. Değişkenlerin satıra ve sütuna sıkıştırılması!

– İsmail Abi!

+ Hooop!

Leyla ile Mecnun’un evcil hayvanları olsun. Bu örnek yukarıdaki örneğin tam tersidir. Elimizde tek bir kişi için farklı hayvan türleri ve bunların frekansı bulunmakta. Hayvan türünden kaynaklı bir çoklama problemi ile karşı karşıyayız.

stored <- data.frame(
  
  kisi = c("Leyla","Leyla","Leyla","Mecnun","Mecnun","Mecnun"),
  hayvan_turu = c("n_kedi","n_kopek","n_tavsan","n_kedi","n_kopek","n_tavsan"),
  hayvan_sayisi = c(1,0,1,1,2,0)
  
)

stored
##     kisi hayvan_turu hayvan_sayisi
## 1  Leyla      n_kedi             1
## 2  Leyla     n_kopek             0
## 3  Leyla    n_tavsan             1
## 4 Mecnun      n_kedi             1
## 5 Mecnun     n_kopek             2
## 6 Mecnun    n_tavsan             0

– O veri düzenli formata gelecek Mecnun!

spread(stored, hayvan_turu, hayvan_sayisi)
##     kisi n_kedi n_kopek n_tavsan
## 1  Leyla      1       0        1
## 2 Mecnun      1       2        0

spread fonksiyonu ile veri setimizi düzenli hale getirmiş bulunuyoruz.

  1. Farklı değişkenlerin tek bir sütuna sıkıştırılması!

kisi veri setinde cinsiyet ve yaş değişkenlerinin tek bir değişken içerisinde olduğunu düşünelim.

cins_yas_veri <- unite(kisi, cins_yas, cinsiyet,yas, sep="-")

cins_yas_veri
##      kisi cins_yas   goz  boy dogum_tarihi
## 1    Ayşe     K-20   Ela 1.67   1998-02-11
## 2   Fatma     K-32  Mavi 1.73   1986-01-30
## 3 Hayriye     K-45 Yeşil 1.60   1973-05-12
## 4     Ali     E-18   Ela 1.80   2000-02-09
## 5    Veli     E-28  Mavi 1.75   1990-03-13

İki farklı değişkenin tek bir sütun içerisinde olması maalesef işimize yaramıyor. Bu yüzden bu tip durumlarda separate fonksiyonu ile sıkıştırılan değişkeni iki ayrı değişken haline getirelim.

separate(cins_yas_veri, cins_yas, c("cinsiyet","yas"), sep = "-")
##      kisi cinsiyet yas   goz  boy dogum_tarihi
## 1    Ayşe        K  20   Ela 1.67   1998-02-11
## 2   Fatma        K  32  Mavi 1.73   1986-01-30
## 3 Hayriye        K  45 Yeşil 1.60   1973-05-12
## 4     Ali        E  18   Ela 1.80   2000-02-09
## 5    Veli        E  28  Mavi 1.75   1990-03-13
  1. Diğer yaygın problemler!
  • Tek bir gözlem birimi birden fazla tabloya sıkıştırılabilir.
  • Çoklu gözlem birimleri aynı tabloya sıkıştırılabilir.

İkinci maddeye odaklanalım ve Leyla-Mecnun’a geri dönelim.

hoooop <- data.frame(
  
  kisi = c("Leyla","Leyla","Mecnun","Mecnun","Mecnun"),
  yas = c(26,26,29,29,29),
  cinsiyet = c("K","K","E","E","E"),
  hayvan_ismi = c("Loki","Thor","Vision","Falcon","Hulk"),
  hayvan_turu = c("Kedi","Kopek","Kedi","Kus","Kopek"),
  hayvan_cinsiyet = c("E","E","E","E","E")
  
)

hoooop
##     kisi yas cinsiyet hayvan_ismi hayvan_turu hayvan_cinsiyet
## 1  Leyla  26        K        Loki        Kedi               E
## 2  Leyla  26        K        Thor       Kopek               E
## 3 Mecnun  29        E      Vision        Kedi               E
## 4 Mecnun  29        E      Falcon         Kus               E
## 5 Mecnun  29        E        Hulk       Kopek               E

Leyla ve Mecnun’un her ikisinin de yaşı ve cinsiyetini belirten ve çoklu halde bulunan iki değişkenimiz var. Ayrıca ikisinin evcil hayvanlarını belirten hayvanın türü, hayvanın ismi ve hayvanın cinsiyetini belirten üç değişkenimiz var. Burada bizi mutlu etmeyen bir şey var gibi. O da her bir gözlemdeki hayvan çoklu kişilere denk geliyor. Yani yine bir çoklama problemi ile karşı karşıyayız.

Burada dikkat etmemiz gereken şey ise aslında bu tablo içerisinde iki tane tablo olduğudur. Bu da ilişkili veri seti kavramını karşımıza çıkaracaktır.

4. Değişken Tipleri ve Dönüşümleri

R içerisindeki değişken türlerimiz character, integer, numeric, double, logical, date, factor vs.

Analizlere geçmeden önce değişken tipleri mutlaka kontrol edilmelidir. Örneğin karakter formatında elinizde sayılardan oluşan bir vektör olsun. Bu vektör içerisindeki sayılar üzerinde herhangi bir sayısal işlem yapamazsınız. Vektörü mutlaka sayısal değişken tiplerine dönüştürmeniz gerekmektedir.

Veri manipülasyonu kısmında ise örneğin müşteri numaralarının olduğu iki farklı özellikte veri seti olduğunu düşünelim. Bu veri setlerini birleştirmek istediğimizde müşteri numaralarından biri karakter formatında bir diğeri nümerik formatında ise eşleştirme yapılamayacaktır. İkisinden birinin diğerine dönüştürülmesi gerekmektedir.

Bir başka örnek vermek gerekirse, sürekli yapmanız gereken bir işlem var ve bunun için bir kod parçası oluşturup, sadece veriyi aktardıktan sonra kodu çalıştırmak isteyebilirsiniz. Veriyi aktardığınız gibi kod çalışmayabilir, çünkü verinizdeki bir değişkenin tipi farklılaşmış olabilir. Bu yüzden değişken tipleri mutlaka kontrol edilmelidir.

Değişken dönüşümleri de as.“değişken türü”() şeklinde yapılmaktadır. Tek bir örnek yeterli olacaktır bu kısım için, geri kalanları sizler deneyebilirsiniz.

class(kisi$boy)
## [1] "numeric"
as.character(kisi$boy)
## [1] "1.67" "1.73" "1.6"  "1.8"  "1.75"
class(as.character(kisi$boy))
## [1] "character"
  • Tarih formatı için lubridate paketi

Veri setindeki tarih değişkenlerini R’a tanıtabilmek için lubridate kütüphanesi çok yararlıdır. Örneğin karakter formatında bir tarih belirtelim ve bunu lubridate fonksiyonları ile Date fofrmatına çevirelim.

class("2018-08-25")
## [1] "character"
library(lubridate)
ymd("2018-08-25") # Yıl Ay Gün
## [1] "2018-08-25"
class(ymd("2018-08-25"))
## [1] "Date"
ymd("2018 August 25")
## [1] "2018-08-25"
mdy("August 25, 2018") # Ay Gün Yıl
## [1] "2018-08-25"
dmy("25 August 2018") # Gün Ay Yıl
## [1] "2018-08-25"

Saatler için,

hms("13:33:08") # Saat Dakika Saniye
## [1] "13H 33M 8S"

Tarih ve saat için,

ymd_hms("2018/02/08 09.30.13")

## [1] "2018-02-08 09:30:13 UTC"

Bölüm Sonu

Bu bölümde de hızlıca karşılabileceğimiz dağınık veri setlerine, değişken dönüşümlerinin önemine ve tarih formatlarına baktık. Bir sonraki bölümde biraz metin manipülasyonundan bahsedip, daha sonrasında eksik ve aykırı gözlemlere bakacağız.

Yazar Hakkında
Toplam 18 yazı
Ekrem Bayar
Ekrem Bayar
Yorumlar (Yorum yapılmamış)

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

×

Bir Şeyler Ara