R ile Veri Analizi Kursu Akademik Bilişim 2016

dplyr Örnekleri

Aşağıdaki iki sayfada dplyr ile ilgili işleyeceğimiz örneklerin önemli bir kısmı bulunuyor. Dersi bu kodlarla da rahatça takip edebilirsiniz.

Yardımcı Kodlar

Asıl Kod

Proje Ekipleri

Bugünkü konuşmamıza istinaden 20 kişi veri projesi kapsamında çalışmak istediklerini belirttiler. Bir kısmı takımlarını oluşturdular, geri kalanı fikirlerini söyleyip takım olmaya açık olduklarını söylediler. Tamamlanan takımlar aşağıdaki gibi.

Takımlar istisnai durumlar hariç en fazla 3 kişiden oluşabilirler.

###Takım 1 (Konu: Henüz belli değil)

  • Birol Solak
  • Cem Gürkan Sur

###Takım 2 (Konu: TÜİK)

  • Kağan Etka Yörük
  • Furkan Tunç

(not: Bir kişi daha alabilirler)

###Takım 3 (Konu: İllere Göre Marka Verileri)

  • Burak
  • Ayça
  • İlkay

###Takım 4 (Konu: FiveThirtyeight verilerinden bir set kullanacaklar)

  • Ege Savcı
  • Ümit Işıkdağ
  • Gözde Yüksel

Aşağıdaki bireysel proje sahiplerinin bazıları ise takıma açık. Yanlarında notları da ekliyorum.

###Bireysel 1 (Görüntü işleme)

  • Nurdan Karapınar

(not: Takıma açık ama ileri derecede teknik konu)

###Bireysel 2 (Görüntü işleme)

  • Onur Yolcu

(not: Takıma açık ama ileri derecede teknik konu)

###Bireysel 3 (Konu: TÜİK Enerji)

  • Murat İğde

(not: Takıma açık)

###Bireysel 4 (Konu: TÜİK Eğitim)

  • İlyas Öz

(not: Bir notu daha var ama net okunmuyor)

###Bireysel 5 (Konu: Twitter Analizi)

  • Metin Yıldırım

(not: Takıma açık)

###Bireysel 6 (Konu: BDDK-TÜİK-SPK verileri)

  • Vahit Çıldır

(not: Takıma açık)

###Bireysel 7 (Konu: YÖK öğrenci verisi)

  • Murat Rahmi Kurtul

(not: Takıma açık)

Aşağıdakiler takımı bulunmayan kişiler ve gidebilecekleri takımlara önerilerim.

  • Merve Doğanay (Konu: TÜİK)
  • Burak İnce
  • Türkan Arıt

Yarın sabah takımları bitirip konulara öyle başlayacağız. Önerim 7 bireysel takımı 4e veya 5e indirmek (örneğin TÜİK eğitim ile YÖK öğrenci verisi projeleri birleşip birlikte bir şeyler çıkarabilirler). Konularınızı değiştirebilirsiniz ve sabahtan konu seçmeniz gerekli değil. Takımlar konusunda anlaşmanız önemli.

Konulara aynı açıdan bakmanız gerekmiyor birlikte çalışıp birbirinizden öğrenmeniz büyük fayda sağlar.

Birinci Gün Ders Kodları

Aşağıdaki kodlar bugün derste işlenen konuları içeriyor.

Birincı kısım

```{r} a=49 str(a) a=’abc’ a=”a” a[2]=51 a[10]=’k’

b=a[1:5] b d=as.numeric(b) d e=a[-10] e ind=-c(1:5) ind a=a[ind]

x=c(1,5,3,6,7)

ornekdata=data.frame(Yas=c(1:5), X=c(‘a’,’b’,’c’,’d’,’e’))

write.csv(ornekdata,’ornek.csv’)

path=’C:/mustafa/Presentation/AB2016/Gün1’ setwd(path)

ornekdata[,2:3]

yeni=5*(1:5)

ornekdata[c(1,3),]


İkinci kısım

```{r}
carptopla <- function(x,y){
  toplam=x+y
  carpim=x*y
  print(x)
  #return(c(toplam,carpim)) 
  return(list(Toplam=toplam,
              Carpim=carpim))
}

a=carptopla(3,7)
a$Toplam
help(read.table)

Üçüncü kısım

```{r} veri=matrix(rnorm(100000000),100000,100) str(veri)

hist(veri[,1])

write.csv(veri,’veri.csv’,row.names=F)

baslangic=Sys.time() veri=read.csv(‘veri.csv’) bitis=Sys.time() print(bitis-baslangic)

#data.table install.packages(‘data.table’) require(data.table)

n=1500 r=1/3 vek=rexp(n,r) hist(vek) boxplot(vek)

n=1000 x=runif(n,-1,1) y=runif(n,-1,1)

plot(x,y) n=100000 vmat=matrix(runif(2n,-1,1),n,2) plot(vmat[,1],vmat[,2]) n=100000 vmat=matrix(runif(2n,-1,1),n,2) binvek=sqrt(vmat[,1]^2+vmat[,2]^2)<=1 #sum(binvek) ind=which(binvek) #plot(vmat[ind,1],vmat[ind,2])

plot(vmat[,1],vmat[,2],main=’Kare ve Daire’) points(vmat[ind,1],vmat[ind,2],col=’red’) tahminipi=4*sum(binvek)/n print(tahminipi) print(pi) ```

Alıştırma Seti Cevap Anahtarı

Aşağıdaki kodlar bugünkü alıştırma setinin cevap anahtarı olarak düşünülebilir.

```{r}

#store plots in pdf, will save in Documents folder if you are on windows #and do not specify a path for the file #text results will be printed on R terminal window

pdf(“plots.pdf”,width=7,height=5) ### Exercise 1 ### ### ### q1rand=rexp(1500,1/3) par(mfrow=c(1,2)) hist(q1rand,main=’Histogram for Exercise 1’) boxplot(q1rand,main=’Boxplot for Exercise 1’)

Exercise 2

### ### #(part a) nofrandom=100 q2rand=runif(nofrandom,3,10) percentage=100*sum(q2rand>5)/nofrandom sampmean=mean(q2rand) sampmedian=median(q2rand) print(c(percentage,sampmean,sampmedian))

#(part b) #population prob=1-punif(5,3,10) popmean=0.5(3+10) popmedian=popmean #symmetry print(c(100prob,popmean,popmedian))

#(part c) nofrandom=1000 q2rand=runif(nofrandom,3,10) percentage=100sum(q2rand>5)/nofrandom sampmean=mean(q2rand) sampmedian=median(q2rand) print(c(percentage,sampmean,sampmedian)) print(c(100prob,popmean,popmedian))

Exercise 3

### ### #(part a) nofrandom=2000 q4rand=rnorm(nofrandom,8,5) #(part b) nofgreater=sum(q4rand>=9) print(nofgreater) #(part c) sampmean=mean(q4rand) sampstdev=sd(q4rand) print(c(sampmean,sampstdev)) #(part d) #population percentile25=qnorm(0.25,8,5) percentile75=qnorm(0.75,8,5) print(c(percentile25,percentile75)) #(part e) orderedsample=sort(q4rand) samplepercentile25=(orderedsample[500]+orderedsample[501])/2 samplepercentile75=(orderedsample[1500]+orderedsample[1501])/2 print(c(samplepercentile25,samplepercentile75)) #(part f) print(c(pnorm(0.789),pnorm(-0.543))) #default values imply standard normal, check help!

Exercise 3

### ### #(part a) nofdim=c(2,3) nofrandom=1000 fraction=array(0,nofdim) par(mfrow=c(1,1)) for(k in nofdim){ q3rand=runif(k*nofrandom,-1,1) q3rand=matrix(q3rand,nrow=nofrandom) #matrix form distances=apply(q3rand,1,function(x) { sqrt(sum(x^2))}) #apply to each row fraction[k]=sum(distances<1)/nofrandom } plot(c(1:nofdim),fraction,type=’l’,lty=2,lwd=2,col=2,xlab=’# of dimensions’,ylab=’fraction’,main=’Exercise 3’) points(c(1:nofdim),fraction,pch=2,cex=1)

#(part b) #fraction[2] is the ratio of the areas of circle with radius of 1 and the square with side length of 2 #fraction[3] is the ratio of the volumes of circle with radius of 1 and the cube with side length of 2 approximatedpi2D=fraction[2]4/1 approximatedpi3D=fraction[3]8/(4/3) print(c(pi,approximatedpi2D,approximatedpi3D))

Exercise 5

### ### #(part a and b) nlevel=c(2,5,10,30,50,100) nofsampling=1000 par(mfrow=c(2,3)) for(i in nlevel){ q5rand=rpois(i*nofsampling,3) q5rand=matrix(q5rand,nrow=nofsampling) #matrix form means=apply(q5rand,1,mean) hist(means,main=paste(‘n=’,i)) } #as n gets larger the distribution of mean is closer to normal distribution

#(part c) par(mfrow=c(1,1)) qqnorm(means, ylab=”Standardized Scores”, xlab=”Normal Scores”, main=”Exercise 5 Part c”) qqline(means) dev.off()

```

Alıştırma Seti

Teorik dağılımlar ile örneklemler üzerinden istatistiklerin ilişkileri

###Alıştırma 1 a) 1500 uzunluğunda parametresi olan bir üssel (exponential) dağılımdan 1500 uzunluğunda bir vektör yaratalım.

b) Bu vektörün çubuk grafiğini (histogram) ve kutu grafiğini (boxplot) çizelim.

###Alıştırma 2

a) 3 ile 10 arasında tekdüze (uniform) dağılımdan gelen 100 tane sayı yaratalım ve bu sayıların özet (summary) istatistiklerini hesaplayalım.

b) Oluşturduğunuz vektörde 5’ten büyük sayılar tüm sayıların yüzde kaçını oluşturur?

c) 3 ile 10 arasında tekdüze dağılımın teorik olarak 5’ten büyük olma olasılığı nedir? a şıkkında bulunan sayı ile bu olasılığı karşılatırın.

d) a şıkkında hesapladığımız yüzdeyi 100 yerine 1000 tane rastgele üretilmiş sayı üzerinden hesaplayalım ve sonuçları karşılaştıralım. Ne gibi bir sonuca varıyorsunuz?

###Alıştırma 3 a) Ortalaması 8, varyansı 25 olan bir Normal dağılımdan 2000 tane rastgele sayı üretelim.

b) Oluşturduğunuz vektörün yüzde kaçı 9’dan büyük ya da eşittir?.

c) Ürettiğiniz 2000 sayının örneklem ortalaması ve standart sapması nedir? Bu değerleri dağılımın ortalaması ve standart sapması ile karşılaştırın.

d) Ortalaması 8, varyansı 25 olan bir Normal dağılımın teorik yirmeştebirlik (25th percentile) ve yetmişbeştebirlik (75th percentile) değerleri nedir?

e) Oluşturduğunuz 2000 sayının özet istatiklerini çıkaralım. Bu değerlerden yirmeştebirlik ve yetmişbeştebirlikleri teorik değerler ile karşılaştıralım.

Döngüler, koşullar ve bunların benzetim (simülasyon) amaçlı kullanımı

###Alıştırma 4

Bu alıştırmada veri analizinde veri boyutunun büyümesiyle veriyi açıklamanın zorluğunun simülasyonunu yapacağız. Bunu öncelikle bir karenin alanını bir dairenin alanı ile karşılaştırarak yapacağız. Daha sonra ise aynı karşılaştırmayı bir küp ve küre ile tekrarlayacağız. Küp ele alındığında 3 boyuta geçtiğimiz için bu karşılatırmayı hacimler cinsinden yapacağız.

a) Bir karenin alanine iki boyutta yaratacağımız rastgele sayılar ile ifade edelim. Diyelim ki rastgele -1 ile 1 arası tekdüze dağılımdan gelen 1000 rastgele sayı üretelim. Bunlar x kordinatımızı ifade etsin. Aynı işlemi bird aha tekrarlayıp 1000 uzunluğunda bir vektör daha elde edelim. Bunlar da y kordinatımızı ifade etsin. Bu noktaları x-y kordinatları şeklinde plot fonksiyonunu kullanarak çizelim. Gözleminiz nedir? Bir karenin alanını 1000 tane sayı ile ifade etmiş olduk mu?

b) Oluşturduğunuz noktalardan kaç tanesinin (0,0) noktasına olan Öklit uzaklığı bir ya da birden küçüktür. Bu noktaları bulun, kareyi simüle eden noktalar içinden bu koşulu sağlayanları kırmızı ile boyayın (önceki grafiğin üzerinde). Koşulu sağlayan noktaların sayısına k diyelim.

c) Bu noktaların oranının (yani k/1000) dairenin alanının karenin alanına oranına eşit olması gerekir. Diyelim ki daire formülünü biliyoruz ama gerçek \pi değerini bilmiyoruz. Noktalarının oranını \pi değerinin tahmin etmek için kullanabiliriz. Tahmini \pi değerini hesaplayınız ve gerçek \pi değeri ile kıyaslayınız. Daire alanı ve kare alanı , r dairenin yarıçapını, x Karenin bir kenarının uzunluğunu temsil etmekte.

d) Yukardaki işlemi aynı şekilde 1000 tane daha rastgele sayı üreterek yapalım. Bu da z kordinatımızı ifade etsin. Dolayısıyla şu anda bir küpün hacmini 1000 tane sayıyla ifade etmiş olduk. Benzer şekilde (0,0,0) noktasına uzaklığı bire eşit ya da küçük olan noktalar bir küreyi temsil eder. Benzer hesabını kürenin alanının küpün alanına oranını kullanarak yapalım. Küre hacmi ve küp hacmi , kürenin yarıçapını, küpün bir kenarının uzunluğunu temsil etmekte

Hesapladığınız değerleri karşılaştırdığınızda örneklem sayısı sabit tutulduğu düşünülürse 2 boyutlu (değişkenli) bir veriden 3 boyutlu (değişkenli) bir veriye çıktığınızda tahminlerinizin kötüleştiğini göstericektir. Bu veri analizi ya veri madenciliğinde boyut büyüklüğünün laneti (curse of dimensionality) diye bilinir.

###Alıştırma 5 Bu alıştırmada matrixler üzerinde çeşitli operasyonları denemek temel amaçtır. Bunu merkezi limit teoremini ampirik olarak göstererek yapacağız. Merkezi limit teoremini hatırlayacak olursak bize şöyle der: Birbirinden bağımsız ve aynı olasılık dağılımı ile dağılan sayıların (independently and identically distributed) n tane sayının ortalaması Normal dağılıma yakınsar. Bu genellikle n 30’dan büyük iken geçerlidir.

Bunun için 1000 tane örneklem yaratacağız. Her örneklem n tane gözlem içeriyor diyelim. Dağılımımız Poisson olsun.

a) n=2, 5, 10, 30, 50 ve 100 olduğu durumlarda hesapladığımız 1000 ortalamanın çubuk grafiğini (histogram) çizelim.

b) n arttıkça ne gözlemliyorsunuz?