1 Mart 2015 Pazar

DERS 3-R PROGRAMLAMA VERİ TİPLERİ 2


3 Matrisler

    Bir matris, iki boyutlu bir dikdörtgen yatay kesitli düzenlenmiş veri elemanlarının bir koleksiyonudur. Matrix() fonksiyonu ile  R'da  matrix'in bellek temsili yeniden oluşturulur. Veri elemanları aynı temel tipte olmalıdır.

A=matrix(
c(2,4,3,1,5,7) ,               #Veri elementleri
nrow=2,                        #satır sayısı
ncol=3 ,                        #sütun sayısı
byrow=TRUE)             #satır ile doldurma
A                                  #matrix'i yazdırır

     [,1] [,2] [,3] 
[1,]    2    4    3 
[2,]    1    5    7
 
A'nın m. satır ve n. sütunda yer alan üye,  A[m,n]  ifadesi ile erişilebilir.
A[2,3]
A
[1] 7

 A matrix'inde m. satırın tümün yazdırmak istiyorsak, A[m,]  ifadesi kullanılır. Aynı şekilde sütun içinde geçerlidir. A[,n]

A[2,]
[1]  1,5,7
A[,3]
[1]   3,7

Aynı zamanda birden fazla satır ve sütunları yazdırılabiliriz

 A[,c(1,3)]               #1. ve 3. sütundaki tüm elemanları yazdırır
    [,1] [,2] 
[1,]    2    3 
[2,]    1    7

Eğer matrix'in satır ve sütunlarına isim atarsak, o zaman isimler ile satır ve sütunlara erişebiliriz.

dimnames(A)=list(c("row1","row2"),
                             c("col1","col2","col3"))

A
     col1 col2 col3 
row1    2    4    3 
row2    1    5    7 

A["row2","col3"]
[1]  7

4-List

    List diğer nesneleri içeren genel bir vektördür. Örneğin aşağıdaki x değişkeni,  3 vektör olan n,s,b nin kopyalarını ve numerik değer olan 3'ü içerir 

n = c(2, 3, 5) 
s = c("aa", "bb", "cc", "dd", "ee") 
b = c(TRUE, FALSE, TRUE, FALSE, FALSE) 
x = list(n, s, b, 3)

Liste Dilimleme

     [] operatörü ile listenin bir dilimini alabiliriz.  Aşağıdaki x ikinci üyesini içeren bir dilim ki bu da s'in kopyasına denk geliyor 

x[2] 
[[1]] 
[1] "aa" "bb" "cc" "dd" "ee"

Bir indeks vektörü ile, birden fazla üye ile bir dilim alınabilir. İşte x'in ikinci ve dördüncü üyelerini içeren bir dilim.  

x[c(2, 4)] 
[[1]] 
[1] "aa" "bb" "cc" "dd" "ee"  
[[2]] 
[1] 3

Üye Çağırma

  Doğrudan liste üyesine başvurmak için, iki tane köşeli ayraç "[[]]" kullanmalıyız,Aşağıda x[[2]], x nesnesinin ikinci üyesidir, Başka bir deyişle s'in kopyasıdır. ama s veya s'in kopyasını içeren bir dilim değildir 

> x[[2]] 
[1] "aa" "bb" "cc" "dd" "ee"

İçeriğini doğrudan düzenleyebiliriz

x[[2]][1] = "ta" 
x[[2]] 
[1] "ta" "bb" "cc" "dd" "ee" 
[1] "aa" "bb" "cc" "dd" "ee"   #s etkilenmez

4-1 Liste Üyelerini isimlendirme

Liste üyelerine isim atayabiliriz, ve sayı indexlerinin yerine isimleri ile çağırabiliriz. Örneğin aşağıda v "bob" ve "john" isimli 2 üye içeren bir listedir 

v = list(bob=c(2, 3, 5), john=c("aa", "bb")) 
v
$bob 
[1] 2 3 5 
$john 
[1] "aa" "bb" 

Liste Dilimleme

  Tek köşeli ayraç ile listenin bir dilimini alabiliriz. işte "bob" isimli  v'nin üyesini içeren liste dilimi

v["bob"] 
$bob 
[1] 2 3 5 
   Bir indeks vektörü ile, birden fazla üye ile bir dilim alabilirsiniz. İşte v'nin iki üyesi ile liste dilimi 

v[c("john", "bob")] 
$john 
[1] "aa" "bb" 
$bob 
[1] 2 3 5

Üyeleri Çağırma

 Doğrudan listenin üyesini çağırmak için  çift köşeli ayraç kullanılır. 
v[["bob"]] 
[1] 2 3 5
Ayrıca 

> v$bob 
[1] 2 3 5
da kullanılır

Arama Yolu Eklenti

  Eğer attach() fonksiyonuna elemanlarına ulaşmak istediğimiz listeyi eklersek,  artık o listenin elemanına ulaşmak için listeyi belirmemizi gerek kalmaz sadece listenin üyesini yazsak içindeki elemanları gösterir işimiz bittikten sonra listeyi arama yolundan silmek istersek detach() fonksiyonu kullanılır

attach(v) 
bob 
[1] 2 3 5 
detach(v)

5-DataFrame

 Veri tablolarının depolanması için kullanılır. Eşit uzunluktaki vektörlerin  listesidir. Örneğin df değişkeni  3 vektör olan n,s,b 'yi içeren bir dataframe dir. 

> n = c(2, 3, 5) 
> s = c("aa", "bb", "cc") 
> b = c(TRUE, FALSE, TRUE) 
> df = data.frame(n, s, b) 

Yerleşik DataFrame
    Eğitim materyali için R'da  yerleşik dataframe kullanılır. Örneğin  R'da  mtcars olarak adlandırılan yerleşik dataframe'dir

 mtcars 
               mpg cyl disp  hp drat   wt ... 
Mazda RX4     21.0   6  160 110 3.90 2.62 ... 
Mazda RX4 Wag 21.0   6  160 110 3.90 2.88 ... 
Datsun 710    22.8   4  108  93 3.85 2.32 ... 

    Tablonun üst satırı başlık olarak adlandırılır, sütun adları içerir. Her yatay çizgi sonrası veri satırını ifade eder. yani satır adı ile başlar ve ardından gerçek veriler takip edilir. Satırın her bir veri üyesi hücre olarak adlandırılır.

   Hücrede veri almak için çift köşeli ayraçta satır ve sütun koordinatlarını girilmelidir. İki koordinat virgül ile ayrılır.
  Burda ilk satır ve ikinci sütunun hücre değeri görülmektedir.

 mtcars[1, 2] 
[1] 6
Ayrıca yerin sayısal koordinatları yerine satır ve sütun adları kullanılabilir.

mtcars["Mazda RX4", "cyl"] 
[1] 6

Son olarak verinin satır sayısı nrow() fonksiyonu ile verilmektedir.

> nrow(mtcars)    # number of data rows 
[1] 32

ve verinin sütun sayısı ncol() fonksiyonu ile verilmektedir.

> ncol(mtcars)    # number of columns 
[1] 11

"mtcars" veri kümesi içindaha fazla ayrıntı  R documentasyonunda  mevcuttur.

help(mtcars)

5.1 Data Frame Sütun Vektörü

İki çift köşeli ayraç işlemi ile dataframe sütunu çağırabiliriz. Örneğin yerleşik veri kümesi "mtcars "verisinin 9. sütunu almak için Aynı işlemi sütun ismi ile de yapılabilir.

 mtcars[[9]] 
[1]  1 1 1 0 0 0 0 0 0 0 0 ...

Aynı işlem sütun ismi ile de yapılabilir. 

 mtcars[["am"]] 
[1]  1 1 1 0 0 0 0 0 0 0 0 ..

Ayrıca iki tane çift köşeli ayraç yerine $ işareti ile de alınabilir 

 mtcars$am 
[1]  1 1 1 0 0 0 0 0 0 0 0 ...

Bir başka yolda Sütunda ki tüm veriyi çağırmai daha önce bu gösterilmişti

> mtcars[,"am"] 
 [1]  1 1 1 0 0 0 0 0 0 0 0 ...

5.2 Data Frame Sütun Dilimi

Tek çift köşeli ayraç işlemi ile dataframe sütun dilimi alınabilir.

Sayısal İndexleme
   Aşağıda, yerleşik veri kümesi "mtcars" verisinin ilk sütunu gösterilmekte

 mtcars[1] 
                   mpg 
Mazda RX4         21.0 
Mazda RX4 Wag     21.0 
Datsun 710        22.8 

İsim olarak İndexleme

Bir önceki örneği sütun ismi ile de yapılabilir.

> mtcars["mpg"] 
                   mpg 
Mazda RX4         21.0 
Mazda RX4 Wag     21.0 
Datsun 710        22.8 

İki sütun(mpg ve  hp) ile dataframe sütun dilimi almak için  tek köşeli ayraç işlemi içine dizin vektörün adları yazılır

> mtcars[c("mpg", "hp")] 
                   mpg  hp 
Mazda RX4         21.0 110 
Mazda RX4 Wag     21.0 110 
Datsun 710        22.8  93 


5.1 Data Frame Satır Dilimi

   Tek köşeli ayraç ile bir dataframe'den satırları alabiliriz sütunlardan yaptıüğımız gibi. Ancak  satır pozisyonun dizin vektörüne ek olarak bir virgül karakteri ekleyin, bu önemlidir.

Sayısal İndexleme
 Örneğin aşağıda yerleşik veri kümesi "mtcars" satır kayıtları alınmakta. Köşeli parantez  işlemine ekstra olarak virgül olduğuna dikkat edin bu bir yazım hatası değil. 

 mtcars[24,] 
            mpg cyl disp  hp drat   wt  ... 
Camaro Z28 13.3   8  350 245 3.73 3.84  ... 

Bir satırdan daha fazla almak istiyorsak sayısal bir index vektörü kullanılır

 mtcars[c(3, 24),] 
            mpg cyl disp  hp drat   wt  ... 
Datsun 710 22.8   4  108  93 3.85 2.32  ... 
Camaro Z28 13.3   8  350 245 3.73 3.84  ...

İsim olarak İndexleme
 Satır ismi ile satırdaki bilgilere ulaşılabilir.

 mtcars["Camaro Z28",] 
            mpg cyl disp  hp drat   wt  ... 
Camaro Z28 13.3   8  350 245 3.73 3.84  ...

 Birden fazla satır için

> mtcars[c("Datsun 710", "Camaro Z28"),] 
            mpg cyl disp  hp drat   wt  ... 
Datsun 710 22.8   4  108  93 3.85 2.32  ... 
Camaro Z28 13.3   8  350 245 3.73 3.84  ...

Mantıksal  İndexleme
  Son olarak mantıksal bir index vektörü ile satırlara ulaşma. Aşağıdaki L vektörü, Eğer aracınızda otomotik şanzuman varsa üye değer TRUE yoksa FALSE tur.

L = mtcars$am == 0 

[1]   FALSE FALSE FALSE  TRUE ...

 İşte otomotik şanzumanlı araçların listesi 

mtcars[L,] 
                     mpg cyl  disp  hp drat    wt  ... 
Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215  ... 
Hornet Sportabout   18.7   8 360.0 175 3.15 3.440  ... 
                 ............
Ve burada otomatik şanzıman için gaz kilometre verilir.

 mtcars[L,]$mpg 
[1] 21.4 18.7 18.1 14.3 24.4 ...



Şükrü ERGÜNTOP

Author & Editor

Bilecik Şeyh Edebali Üniversitesi Bilgisayar Mühendisi mezunuyum 2015 yılından beri Sigorta Bilgi ve Gözetim Merkezinde İş Zekası alanında çalışmaktayım

0 yorum:

Yorum Gönder