22 Mayıs 2007 Salı

R'ın Temelleri 1 : Veri Girişi

Bu çeviri serisinde R konusunda bilgi sahibi olmak isteyen giriş düzeyindeki
kullanıcıları hedef alıyorum. Yapılan çevirinin http://www.ats.ucla.edu/stat/r/notes/
adresinden ingilizcesine de ulaşabilirsiniz.


Öncelikle bilgisayarımızda istediğimiz bir yerde mydata adında bir dizin yaratalım.
Ve yarattığımız dizinin not alalım. Bu bir Windows'ta "C:/mydata" Mac veya Unix'te
"~/mydata" şeklinde bir dizin olabilir.
Ardından mydata dizinine hs0.csv, hs0_1.csv, schdat_fix.txt, hsb2.dta
ve hsb2.sav dosyalarını kaydedelim.

Artık başlamaya hazırız.


1.0 Bu bölümde kullanılan R Fonksiyonları

































read.tabletext dosyalarını okur
read.fwfsabit formatlı (fixed format) text dosyalarını okur
read.dtaStata (.dta) veri dosyalarını okur
read.spssSPSS (.sav) veri dosyalarını okur
saveverileri R veri dosyası olarak kaydeder
loadR veri dosyasından veri okur
namesVeri tablosundaki değişken isimlerini listeler yada değiştirir.

setwd() fonksiyonu windows'taki cd komutuna benzer şekilde çalışma dizinini belirler.
getwd() fonksiyonu ise mevcut çalışma dizinin gösterir.
C:/mydata Dizinine geçmek için aşağıdaki komutları kullanmanız gerekir.



setwd("C:/mydata") # çalışma dizininizi mydata dizini olarak değiştirir
getwd() # bu komutla çalışma dizininizi kontrol edebilirsiniz

"C:/mydata"

En yaygın kullanılan ASCII veri formatlarından biri de virgülle ayrılmış değer
(comma-separated-values -csv) dosyalarıdır. Bu tip dosyalar Openoffice Excel gibi
çeşitli veritabanı programları ile oluşturulabilirler. Şimdi read.table fonksiyonunu
kullanarak mydata dizinimizdeki hs0.cvs dosyasını yükleyelim. Aşağıda ilk beş
satırı olan hs0.cvs dosyasında dikkat ederseniz ilk satırını değişken isimleri
oluşturmaktadır.



gender,id,race,ses,schtyp,prgtype,read,write,math,science,socst
0,70,4,1,1,general,57,52,41,47,57
1,121,4,2,1,vocati,68,59,53,63,61
0,86,4,3,1,general,44,33,54,58,31
0,141,4,3,1,vocati,63,44,47,53,56

Veriyi çeşitli şekillerde yükleyip görüntüleyebilirsizi.




data1 <- read.table("hs0.csv", header=T, sep=",")
attach(data1)
names(data1)

[1] "gender" "id" "race" "ses" "schtyp" "prgtype" "read"
[8] "write" "math" "science" "socst"

data1[1:5, ]
gender id race ses schtyp prgtype read write math science socst
1 0 70 4 1 1 general 57 52 41 47 57
2 1 121 4 2 1 vocati 68 59 53 63 61
3 0 86 4 3 1 general 44 33 54 58 31
4 0 141 4 3 1 vocati 63 44 47 53 56
5 0 172 4 2 1 academic 47 52 57 53 61

table(prgtype)
prgtype
academic general vocati
105 45 50

save() ve load() fonksiyonları R veri dosyalarından veri yükleyip
kaydetmeye yaramaktadır.



save(data1,file="data1.rda")
# komutu data1 tablosunu bir R objesi (R object) olarak kaydeder

detach(data1)
rm(list=ls()) # komutu hafızadaki herşeyi temizler

table(prgtype) # komutuyla veri olup olmadığını kontrol edersek

Error in table(prgtype) : Object "prgtype" not found
# hafızayı temizlediğimizden hata mesajı alırız


load("data1.rda") # Şimdi R verisini hafızaya yükleyelim
attach(data1) # data1 adını verdiğimiz dataframe'e bağlayalım
data1[1:5, ]

table(prgtype)

prgtype
academic general vocati
105 45 50

detach(data1) # işimiz bitince data1'i detach ile ayıralım
rm(list=ls()) # şimdi hafızadaki herşeyi temizleyebiliriz.

İzleyen veri kümesi hs0_1.csv veri dosyasının başlangıç bölümünü oluşturmakatadır.
Bu veri dosyası dikkat ederseniz ilk satırda değişken isimlerini içermemektedir.
Bunun yanı sıra kalın italik ile gösterilen satırda ard arda gelen
iki virgül olduğu görülür. Bu durum o alanda verinin olmadığı anlamına gelir.



0,70,4,1,1,"general",57,52,41,47,57
1,121,4,2,1,"vocati",68,59,53,63,61
0,86,4,3,1,"general",44,33,54,58,31
0,141,4,3,1,"vocati",63,44,47,53,56
0,172,4,2,1,"academic",47,52,57,53,61
0,113,4,2,1,"academic",44,52,51,63,61
0,50,3,2,1,"general",50,59,42,53,61
0,11,1,2,1,"academic",34,46,45,39,36
0,84,4,2,1,"general",63,57,54,,51
0,48,3,2,1,"academic",57,55,52,50,51
0,75,4,2,1,"vocati",60,46,51,53,61
0,60,5,2,1,"academic",57,65,51,63,61
0,95,4,3,1,"academic",73,60,71,61,71

read.table()fonksiyonu hs0_1.csv dosyasındaki verileri temp adı verilen
geçici bir data frame'e yükleyecektir. Bundan sonra örneğin istediğimiz
5 gözlemi görüntüleyerek veri girdilerinin doğru olup olmadığını kontrol edebiliriz.



temp <- read.table('hs0_1.csv', sep=",")
# hs0_1.csv okunuyor (sütun adları yok)
names(temp) <- c("gender","id","race","ses","schtyp","prgtype",
"read","write","math","science","socst")
# Sütun adlarını ekleyelim

temp[5:10, ] # şimdi 5'ten 10'a kadar gözlemleri
listeleyerek verileri kontrol edelim

gender id race ses schtyp prgtype read write math science socst
5 0 172 4 2 1 academic 47 52 57 53 61
6 0 113 4 2 1 academic 44 52 51 63 61
7 0 50 3 2 1 general 50 59 42 53 61
8 0 11 1 2 1 academic 34 46 45 39 36
9 0 84 4 2 1 general 63 57 54 NA 51
10 0 48 3 2 1 academic 57 55 52 50 51

read.table() fonksiyonu aynı zamanda internet üzerinden veri okumak
için de kullanılabilir.



hsb2<-read.table("http://www.ekonomist.gen.tr/belgeler/File/R/hsb2.csv",
sep=',', header=T)

hsb2[1:5,]

id female race ses schtyp prog read write math science socst
1 70 male white low public general 57 52 41 47 57
2 121 female white middle public vocation 68 59 53 63 61
3 86 male white high public general 44 33 54 58 31
4 141 male white high public vocation 63 44 47 53 56
5 172 male white middle public academic 47 52 57 53 61

Bir diğer yaygın kullanılan ASCII data formatı fixed format'tır. Bu formatta veri
her gözlem için sabitlenmiş bir sütunda yer alır. Böyle bir veri kullanımında hangi
sütunun hangi değişkene karşılık geldiğini gösteren bir codebook kullanımı
gerektirir. Aşağıda schdat_fix.txt dosyasından bir codebook kullanılarak getirilen
veri getirilmektedir. Codebook'taki sütunlar hakkındaki bilgiler ayrı bir (sep)
argümanla kullanılır.


schdat_fix.txt veri dosyasının içeriği.



 195 094951
26386161941
38780081841
479700 870
56878163690
66487182960
786 069 0
88194193921
98979090781
107868180801

Codebook


































variable name
değişken adı
column number
sütun numarası
id1-2
a13-4
t15-6
gender7
a28-9
t210-11
tgender12

Bu tablo (codebook) sayesinde yukarıdaki schdat_fix.txt dosyasındaki
verilerin ne anlama geldiğini görebiliriz.



Fixed format data'ları okumak için read.table() fonksiyonun yerine
read.fwf() fonksiyonunu kullanırız. İki fonksiyon arasındaki farklılıklardan
birisi de her bir verinin başladığı yeri belirten sep argümanı yerine
her bir verinin genişliğini belirten width argümanının kullanılmasıdır.
Yani uzun lafın kısası read.table() ile okursak her bir sütunun başlangıç
satırını sep argümanı ile belirtiyoruz. Yok read.fwf() fonksiyonu
kullanacaksak width argümanı ile her verinin kaç haneden oluştuğunu
belirtmemiz gerekiyor. Böylece ilk değişken olan id 2 haneli ise width
argümanının ilk değeri 2 olacaktır. width = c(2, ... ) gibi.


fixed <- read.fwf("schdat_fix.txt", width = c(2, 2, 2, 1, 2, 2, 1))
# verileri yükleyip her değişkenin genişliğini tanımlayalım
names(fixed) <- c("id", "a1", "t1", "gender", "a2", "t2", "tgender")
# değişkenleri adlandıralım


fixed # şimdi verileri kontrol edelim
 id a1 t1 gender a2 t2 tgender
1 1 95 NA 0 94 95 1
2 2 63 86 1 61 94 1
3 3 87 80 0 81 84 1
4 4 79 70 0 NA 87 0
5 5 68 78 1 63 69 0
6 6 64 87 1 82 96 0
7 7 86 NA 0 69 NA 0
8 8 81 94 1 93 92 1
9 9 89 79 0 90 78 1
10 10 78 68 1 80 80 1

Bütün bunlardan sonra bazen farklı istatistik paket programları için
(STATA, SPSS gibi) hazırlanmış verileri kullanmak da isteyebiliriz.
Bunun için.



detach()
rm(list=ls()) # hafızadaki herşeyi temizleyelim

library(foreign) # farklı datasetlerden veri okumak
#için gerekli "foreign" kütüphanesini yükleyelim

hstata <- read.dta(file="hsb2.dta") # stata data dosyasından
# okuma yapalım
attach(hstata)
table(female)

female
male female
91 109

detach()
rm(list=ls()) # tekrar hafızayı temizleyelim

hspss <- read.spss(file="hsb2.sav")
# spss data dosyasından okuma yapalım
attach(hspss)

table(PROG)

PROG
vocation academic general
50 105 45

Tekrar Görüşmek Üzere.

5 yorum:

  1. Murat Çalışkan28 Mayıs 2007 11:44

    Gerçekten güzel bir çalışma olmuş devamını sabırsızlıkla bekliyorum.

    YanıtlaSil
  2. Hocam,

    Öncelikle çalışmalarınızda kolaylıklar diliyorum. R programı ile çalışmaya yeni başlayacağım ve kullanımı hakkında yeterli bilgiye sahip değilim. Kısaca aktarmam gerekirse, amacım excel dosyası şeklinde hazırlanmış bir çerçeveden örnek seçmek. Excel dosyasını txt dosyası olarak akradım fakat hangi komutları nasıl kullanacağım konusunda bilgiye sahip değilim. Ulaşabileceğim yolar hakında beni bilgilendirirseniz sevinirim.

    YanıtlaSil
  3. Sayın Zeynep OKBAY;

    Öncelikle sorunuza kısa sürede cevap veremediğim için kusuruma bakmayın. İşlerimin yoğunluğu nedeni ile web sitem ile bir süredir ilgilenemiyorum.

    Konu ile ilgili aşağıdaki linkten ingilizce açıklayıcı bilgilere ulaşabilirsiniz. Bu notların ilk bölümünü Türkçeye çevirmiş ancak devamını getirememiştim.
    http://www.ats.ucla.edu/stat/r/notes/

    Ayrıca www.google.com sitesinde örneğin “regression analysis in R” diye yazılırsa istenen komutun ne olduğu rahatlıkla bulunabilir.

    Ayrıca kullanacağınız komutlar yapacağınız analize göre değişecektir. Eğer bir paket programla ekonometrik analiz yapmayı amaçlıyorsanız ve daha kullanışlı bir program arıyorsanız açık kaynak kodlu diğer bir ekonometri yazılımı GRETL'ı size öneririm.
    Bkz. http://www.ekonomist.gen.tr/v4/iktisatcinin-alet-cantasi/gretl/
    Ayrıca bu program değerli arkadaşım Talha Yalta ( http://www.etu.edu.tr/cv.php?cv=yalta ) tarafından Türkçeye de çevirilmiş kullanışlı bir arayüze sahiptir.
    http://gretl.sourceforge.net/gretl_turkish.html

    Selamlarımla.

    YanıtlaSil
  4. Cengiz Bey emeklerinizden dolayi tesekkur ederiz. Kullanicilarin ilgisini cekebilecegini dusundugum bir haberi paylasmak isterim:

    Bu alanda Turkce kaynak sikintisinin farkina vararak yazdigim 'R yazilimina giris' baslikli kitabim ODTU Yayinciliktan cikti. Kitap hakkindaki bilgiye asagidaki baglantidan ulasabilirsiniz.

    http://www.metu.edu.tr/~oilk/Rgiris.html

    Iyi calismalar diliyorum.

    YanıtlaSil
  5. Değerli Özlem Hocam;

    Böyle bir eseri bize kazandırdığınız için teşekkür ederim.

    Ben de size iyi çalışmalar diliyorum.

    YanıtlaSil