10 Tibblelar
10.1 Giriş
Bu kitap boyunca R’a ait klasik veri tabloları yerine “tibbler”lar
ile çalışacağız. tibble’lar, hayatı biraz daha kolaylaştımak için bazı
eski davranışları değiştiren veri tablolarıdır. R eski bir dildir ve
10-20 yıl öncesinde kullanışlı olan bazı şeyler şimdi işlerimizi
zorlaştırabilir. Halihazırda var olan kodu bozmadan temel R üzerinde
değişikilik yapmak zordur ve çoğu yenilik paketler aracılığıyla olur.
Biz de tibble adlı, tidyverse’te çalışmayı biraz daha kolaylaştıran
görüşlü (opinionated) veri tabloları sağlayan paketi tanıtacağız. Çoğu yerde
tibble ve veri tablosu (dataframe) terimlerini dönüşümlü olarak kullanacağım;
Özellikle R’da yerleşik olan veri tablosuna dikkat çekmek istediğimde
data.frame
diyeceğim.
Eğer bu bölümden sonra tibble’lar hakkında daha fazla şey öğrenmek
isterseniz vignette("tibble")
ilginizi çekebilir.
10.2 Tibble oluşturmak
Bu kitapta yer alan tibble’ları üretmek için kullanacağınız
neredeyse tüm fonskiyonlar, tıpkı tibble’lar gibi tidyverse’ün
birleştirici özelliklerinden biridir. Diğer R paketlerinin çoğunluğu
normal veri tablolarını kullanır, bu yüzden bir veri tablosunu
tibble’a dönüşmeye zorlamak isteyebilirsiniz. Bunu as_tibble()
ile
yapabilirsiniz:
as_tibble(iris)
#> # A tibble: 150 × 5
#> Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#> <dbl> <dbl> <dbl> <dbl> <fct>
#> 1 5.1 3.5 1.4 0.2 setosa
#> 2 4.9 3 1.4 0.2 setosa
#> 3 4.7 3.2 1.3 0.2 setosa
#> 4 4.6 3.1 1.5 0.2 setosa
#> 5 5 3.6 1.4 0.2 setosa
#> 6 5.4 3.9 1.7 0.4 setosa
#> # … with 144 more rows
tibble()
ile bağımsız vektörlerden oluşan yeni bir tibble yapabilirsiniz.
tibble()
, otomatik olarak 1 uzunluğundaki girdileri
dönüştürür ve aşağıda gösterildiği gibi az önce oluşturdğunuz
değişkenlere atıfta bulunmanıza izin verir.
tibble(
x = 1:5,
y = 1,
z = x ^ 2 + y
)#> # A tibble: 5 × 3
#> x y z
#> <int> <dbl> <dbl>
#> 1 1 1 2
#> 2 2 1 5
#> 3 3 1 10
#> 4 4 1 17
#> 5 5 1 26
Halihazırda data.frame()
fonksiyonuna aşinaysanız, tibble()
’ın daha
azını yaptığını unutmayın: hiç bir zaman girdilerin türünü değiitirmez
(örneğin; dizileri faktötrlere dönüştürmez!), değişkenlerin isimlerini
değiştirmez ve satır isimleri oluşturmaz.
Bir tibble, R’da geçerli olmayan yani sözdizimsel olmayan
değişken isimlerine sahip sütun adlarına sahip olabilir. Örneğin; bir
harfle başlamayabilirler ya da boşluk gibi farklı karakterler
içerebilirler. Bu tip değişkenlere atıf yapmak için, değişkeni kesme
işareti içine almanız gereklidir, `
:
<- tibble(
tb `:)` = "smile",
` ` = "space",
`2000` = "number"
)
tb#> # A tibble: 1 × 3
#> `:)` ` ` `2000`
#> <chr> <chr> <chr>
#> 1 smile space number
Bu değiikenlerle ggplot2, dplyr, ve tidyr gibi başka paket programlarda çalışırken de kesme işareti kullanmanız gerekir.
tibble oluşturmanın bir diğer yolu transpoze tibble’ın
kısaltması olan tribble()
dır. tribble()
koda veri girişi için
uyarlanmıştır: sütun başlıkları formüller ile tanımlanır (örneğin; ~
ile
başlar) ve girdiler virgülle ayrılır. Bu küçük boyutlu verilerin
kolayca okunabilecek şekilde düzenlenmesini sağlar.
tribble(
~x, ~y, ~z,
#--|--|----
"a", 2, 3.6,
"b", 1, 8.5
)#> # A tibble: 2 × 3
#> x y z
#> <chr> <dbl> <dbl>
#> 1 a 2 3.6
#> 2 b 1 8.5
Başlığın nerede olduğunu açıkça belirtmek için sıklıkla bir yorum
(#
ile başlayan bir satır) eklerim.
10.3 Tibble’lar veri tablolarına karşı
tibble ile klasik data.frame
kullanımı arasında iki ana farklılık
vardır: yazdırma ve alt kümeleme.
10.3.1 Yazdırma
tibble’lar sadece ilk 10 satırın gösterildiği ve bütün sütunları
ekrana sığdıran, özelleştrilmiş bir yazdırma yöntemine sahiptir. Böylece
büyük veriler ile çalışmayı kolaylaıtırır. str()
’den alınan bir
özellik olarak her sütun ismine ek olarak kendi veri tipini de gösterir:
tibble(
a = lubridate::now() + runif(1e3) * 86400,
b = lubridate::today() + runif(1e3) * 30,
c = 1:1e3,
d = runif(1e3),
e = sample(letters, 1e3, replace = TRUE)
)#> # A tibble: 1,000 × 5
#> a b c d e
#> <dttm> <date> <int> <dbl> <chr>
#> 1 2022-07-05 21:56:11 2022-07-12 1 0.368 n
#> 2 2022-07-06 16:01:21 2022-07-17 2 0.612 l
#> 3 2022-07-06 10:25:00 2022-07-27 3 0.415 p
#> 4 2022-07-05 23:46:17 2022-07-26 4 0.212 m
#> 5 2022-07-05 20:10:34 2022-07-23 5 0.733 i
#> 6 2022-07-06 07:11:31 2022-07-19 6 0.460 n
#> # … with 994 more rows
tibble’lar, büyük veri tabloları yazdırırken konsolunuzu yanlışlıkla boğmamanız için tasarlanmıştır. Ancak, bazen varsayılan göstergeden/ekrandan daha fazla çıktıya ihtiyacınız olabilir.
İlk olarak veri tablosunu açıkça print()
ile yazdırabilir,
satırların sayısını (n
) ve göstergenin genişliğini kontrol
edebilirainiz. width = Inf
tüm sütunları gösterecektir:
::flights %>%
nycflights13print(n = 10, width = Inf)
Seçenekleri ayarlayarak varsayılan yazdırma işlemininin işleyişini de kontrol edebilirsiniz.
options(tibble.print_max = n, tibble.print_min = m)
: eğern
satırdan fazla satır varsa, sadecem
kadar satırı yazdırır. Tüm satırları göstermek iöinoptions(tibble.print_min = Inf)
kullanın.Ekran genişliğine bağlı kalmaksızın her zaman tüm sütunları yazdırmak için
options(tibble.width = Inf)
kullançn.
Paket yardımına package?tibble
ile bakarak seçeneklerin tam
listesini görebilirsniniz.
Son seçenek olarak, tüm veri setinin kaydırılabilir görüntüsünü RStudio’da yerleşik olan veri görüntüleyeciyi kullanarak elde edebilirsiniz.
::flights %>%
nycflights13View()
10.3.2 Alt kümeleme
Buraya kadar öğrendiğiniz tüm araçlar tamamlanmış veri tabloları
ile çalışıyordu. Eğer bir tek değişkeni seçmek isterseniz, yeni
araçlara ihtiyacınız var, $
ve [[
. [[
isme veya konuma göre;
$
biraz daha az yazarak sadece isme göre seçebilir.
<- tibble(
df x = runif(5),
y = rnorm(5)
)
# isme göre seçme
$x
df#> [1] 0.7330 0.2344 0.6604 0.0329 0.4605
"x"]]
df[[#> [1] 0.7330 0.2344 0.6604 0.0329 0.4605
# konuma göre seçme
1]]
df[[#> [1] 0.7330 0.2344 0.6604 0.0329 0.4605
Bunları bir pipe operatöründe kullanmak için, özel bir vekil
kullanmanız gerekir .
:
%>% .$x
df #> [1] 0.7330 0.2344 0.6604 0.0329 0.4605
%>% .[["x"]]
df #> [1] 0.7330 0.2344 0.6604 0.0329 0.4605
Bir data.frame
ile karşılaştırıldığında, tibble’lar daha katıdır:
asla kısmi eşleştirme yapmaz ve erişmeye çalıştığınız sütun
eksikse ya da yoksa bir uyarı oluştururlar.
10.4 Eski kod ile ilişkilendirme
Bazı eski fonksiyonlar tibble’lar ile çalışmaz. Eğer yeni bir işleve
rastlarsanız, tibble’ı tekrar veri tablosuna dönüştürmek için
as.data.frame()
i kullanın.
class(as.data.frame(tb))
#> [1] "data.frame"
Eski fonksiyonların tibble’lar ile birlikte çalışmamasının temel sebebi
[
fonksiyonudur. bu kitapta[
fazla kullanılmadı çünkü dplyr::filter()
ve dplyr::select()
aynı problemleri daha temiz bir kodla çözmenize
olanak tanır (ama vektör alt kümeleme kısmında
birazını öğreneceksiniz.) temel R veri tabloları ile [
bazen tablosuna,
bazen de vektöre dönüşür. tibble’lar ile ise [
her zaman bir
başka tibble’a dönüşür.
10.5 Alıştırmalar
Bir objenin tibble olduğunu nasıl söylersniniz? (İpucu: normal bir veri tablosu olan
mtcars
ı yazdırmayı deneyin.)Aşağıdaki işlemleri bir
data.frame
ve eşdeğer bir tibble üzerinde kıyaslayın ve karşılaştırın. Farklı olan nedir? Neden varsayılan veri tablosu işleyiş şekli sizi hayal kırıklığına uğratmış olabilir?<- data.frame(abc = 1, xyz = "a") df $x df"xyz"] df[, c("abc", "xyz")] df[,
Objelerde saklanan bir değiikenin isimine sahipseniz, örenğin
var <- "mpg"
gibi, referans değişkeni tibble’dan nasıl seçersiniz?Aşağıdaki veri tablosu sözdizimine uygun olmayan isimleri kullanarak alıştırmaları yapın.
1
adlı değişkeni seçim.1
e2
’ yi gösteren bir dağılım grafiği çizdirin.3
isminde,2
’nin1
e bölümü olan yeni bir sütun oluşturun.Sütunları
one
,two
vethree
olarak yeniden adlandırın.
<- tibble( annoying `1` = 1:10, `2` = `1` * 2 + rnorm(length(`1`)) )
tibble::enframe()
komutu ne yapar? Ne zaman kullanabilirsiniz?Hangi seçenek bir tibble’ın altbilgisinde kaç tane ek sütun isminin yazdırılacağını kontrol eder?