VERİ TÜRLERİ, BÖLÜM 2: SINIFLARI AVANTAJINIZA KULLANMA

Geçen hafta skalerler, vektörler, matrisler, veri çerçeveleri ve listeler gibi nesneler hakkında konuştum. Bu gönderide, R’da oluşturduğunuz nesneleri (ve karşılık gelen sınıflarını) nasıl kullanacağınızı göstereceğim.


Öncelikle, veri çerçeveleri sütunlarının vektörler olduğunu hatırlamak önemlidir. Yani, mydata adlı bir veri çerçevemiz varsa, mydata$Height ve mydata$Weight sütunları vektörlerdir. Sayısal vektörler birlikte toplanabilir veya çarpılabilir, karesi alınabilir veya bir sabitle toplanabilir veya çarpılabilir. Vektörler üzerindeki işlemler, her bir öğe için ayrı ayrı, yani satır satır yapılır.


İlk olarak, read.csv() fonksiyonunu kullanarak, mydata adlı bir veri dosyasını okuyalım. Aşağıdaki veri çerçevesi elde edilmiş olsun:

Nesnelerimizin sınıflarını class() kullanarak veya tümünü aynı anda ls.str() ile kontrol ediyoruz.

class(mydata$Weight)
class(mydata$Height)

veya

Bu durumda, verilerimizin bir veri çerçevesi olduğunu ve tüm sütunların sayısal olduğunu görüyoruz. Eğer, veri kümemizde BMI (vücut kitle indeksi) hesaplayan yeni bir sütun oluşturmak istersek, bazı vektör işlemleri yapabiliriz. Kilonun pound (453,59 gr) ve boyun inç (2,54 cm) cinsinden BMI formülü aşağıdaki gibidir.

mydata$BMI<-mydata$Weight/(mydata$Height)^2 * 703

Hesaplamanın herhangi bir bileşeninin eksik (NA) bir değer olması durumunda, R vücut kitle indeksini NA olarak hesaplar.


Şimdi, verilerim hakkında özet istatistikler bulunabilir ve bunları matris olarak saklayabiliriz. Örneğin, ‘Age’ (yaş) vektörünün özet istatistikleriyle başlayalım:

summary(mydata$Age)

Eğer, bu özet tablosundan bir öğeyi çıkarmak istersek, minimum değeri çıkarmak isteyelim, özet tablosunun ilk öğesini çıkaran şu ifadeyi kullanabiliriz: summary (mydata$Age) [1]


Ama, gerçekten istediğimiz bir grup değişkenin özet matrisini elde etmektir: Yaş, Cinsiyet ve BMI. Bunu yapmak için, rbind() fonksiyonunu kullanarak bu üç değişkenin özet istatistiklerini birleştirebiliriz, fakat özet tablonun yalnızca 1., 4. ve 6. öğelerini alabiliriz; özet tabloda gördüğünüz gibi Min, Ortalama ve Maksimum. Bu, summary.matrix adını verdiğimiz bir matris oluşturur:

summary.matrix<-rbind(summary(mydata$Age)[c(1,4,6)], summary(mydata$BMI)[c(1,4,6)], summary(mydata$Sex)[c(1,4,6)])

Satır birleştirme (rowbinding) temel olarak satırları birbirlerinin üstüne ekler. Matriste satır isimleri oluşturmak için rownames kullanırız ve sonra özet matrisimizin sınıfını ve sonuçlarını yazdırırız.

rownames(summary.matrix)<-c("Age", "BMI", "Sex")
class(summary.matrix)
summary.matrix

Bunu apply() fonksiyonunu kullanarak yapmanın çok daha etkili bir yolu da vardır. Daha önce, apply fonksiyonuyla ilgili başka bir yayın yapmıştım, fakat anlamak için çok örnek lazım. İşte apply() kullanımı ile ilgili başka bir uygulama.


Apply() sınıfların harika bir örneğidir, çünkü bir veri çerçevesini ilk argüman olarak alır (mydata, tüm satırlar, ancak yalnızca 2., 3. ve 7. sütunları seçiyoruz). Daha sonra, bunu alt kümelenmiş veri çerçevesinin sayısal vektör sütunlarına (MARGIN = 2) uyguluyoruz. Sonra, bu sütunların her biri için ortalama ve standart sapmayı hesaplıyoruz ve NA’ları dikkate almıyoruz. Bunu, summary.matrix2 olarak adlandırdığımız bir özet matrise yazıyoruz.

summary.matrix2<-apply(mydata[,c(2,3,7)], MARGIN=2, FUN=function(x) c(mean(x,na.rm=TRUE), sd(x, na.rm=TRUE)))

Daha sonra bu matrisin satırlarını yeniden adlandırıyoruz ve iki ondalık basamağa yuvarlanmış sonuçları yazdırıyoruz. Son matrisin formatının burada nasıl farklı olduğuna dikkat edin. Satırlarda değişkenler ve sütunlarda özet istatistikler vardı, burada tersine çevrildi. İlk durumda sütun birleştirmeyi (rbind() yerine cbind()) kullanabilirdik. Bu durumda, aşağıdaki şekilde dönüştürülmüş bir matris elde ederdik:

rownames(summary.matrix2)<-c("Mean", "Stdev")
round(summary.matrix2, 2)

Son olarak, grafik oluştururken skaler ve vektörlerden nasıl yararlanabileceğinizi göstermek istiyorum. Aynı işi birden çok kez yaparken skaler ve vektör nesneleri oluşturmak gerçekten yararlıdır. Aşağıda, birkaç tane dağılım grafiği oluşturma örneği yer alıyor.


Yaşa göre üç değişkenin (Boy, Kilo ve BMI) her biri için bir dağılım grafiği oluşturmak istediğimizi düşünelim. Üç dağılım grafiğinin hepsi çok benzer olacağından, yaş aralığı, grafik sembolleri ve grafik renkleri dahil olmak üzere tüm grafik argümanlarımızı standartlaştırmak istiyoruz. Ortalama yaş için dikey bir çizgi ve her grafik için bir başlık eklemek istiyoruz. Bunun için yazılan kod aşağıdaki gibidir:

##Assign numeric vector for the range of x-axis
agelimit<-c(20,80)

##Assign numeric single scalar to plotsymbols and meanage
plotsymbols<-2
meanage<-mean(mydata$Age)

##Assign single character words to plottype and plotcolor 
plottype<-"p"
plotcolor<-"darkgreen"

##Assign a vector of characters to titletext
titletext<-c("Scatterplot", "vs Age")

Tamam, şimdi tüm bunları atadık. Aşağıdaki kodu kullanarak üç grafiği birlikte çizebiliriz. Kırmızı ile yazılmış kodun, her bir grafikte aynı olduğuna dikkat edin (ana başlık hariç), ve burada yeni oluşturduğumuz atanmış nesneleri kullanıyoruz. Bunun en güzel yanı, aslında rengi kırmızı olarak çizmek istediğime karar verirsek, onu tek bir yerde değiştirebiliriz. Aynı şeyi birden çok kez yaptığımızda ve daha sonra küçük bir parametreyi değiştirmeye karar verdiğimizde, bunun diğer durumlarda (veri temizleme, regresyon vb.) çok yararlı olacağını düşünebiliriz. Aşağıdaki koddan emin değilseniz, daha önceki yazımda dağılım grafiği oluşturmayla ilgili temel bilgileri yayınladım.

##Plot area is 1 row, 3 columns
par(mfrow=c(1,3))

##Plot all three plots using the assigned objects
plot(mydata$Age, mydata$Height, xlab=”Age”, ylab=”Height”, xlim=agelimit,pch=plotsymbols, type=plottype, col=plotcolor, main=paste(titletext[1], “Height”, titletext[2]))
abline(v=meanage)

plot(mydata$Age, mydata$Weight, xlab=”Age”, ylab=”Weight”, xlim=agelimit,pch=plotsymbols, type=plottype, col=plotcolor, main=paste(titletext[1], “Weight”, titletext[2]))
abline(v=meanage)

plot(mydata$Age, mydata$BMI, xlab=”Age”, ylab=”BMI”, xlim=agelimit,pch=plotsymbols, type=plottype, col=plotcolor, main=paste(titletext[1], “BMI”, titletext[2]))
abline(v=meanage)

Yapıştır deyimi ile ana başlığı nasıl yaptığımıza dikkat edin. Paste(), başka bir değişkenin sözcüklerini ve öğelerini bir cümlede birleştirmek için çok kullanışlıdır. Elde ettiğimiz çıktı aşağıdaki gibi görünüyor. Çok hoş!

Kaynak: https://www.r-bloggers.com/data-types-part-2-using-classes-to-your-advantage/