Author Archives: melike

Listeler

Bir onceki yazida vektorlerin tek bir temel obje tipinden olustugunu soylemistik. Listeler bu acidan vektorlerden farklidir ve birden fazla obje tipini icerebilir.

Ilk olarak bir liste olusturalim:

> mylist=list(1,2,TRUE,'a')
> mylist
[[1]]
[1] 1

[[2]]
[1] 2

[[3]]
[1] TRUE

[[4]]
[1] "a"

Gordugunuz gibi bu sefer vektorlerde karsilastigimiz tur donusturme davranisi ile karsilastirmadik ve her eleman onceki seklinde kaldi. Simdi listemizin 1. elemanina ulasalim:

> mylist[1]
[[1]]
[1] 1

Ama su anda hala 1. elemana ulasmadik, cunku listelerde her eleman bir tutucu olup her eleman icindeki degere ulasmak istiyorsak cift koseli parantez kullanmamiz gerekir. Farki daha iyi anlatabilmek adina:

> mylist[1]*5
Error in mylist[1] * 5 : non-numeric argument to binary operator
> class(mylist[1])
[1] "list"
> mylist[[1]]
[1] 1
> mylist[[1]]*5
[1] 5

Ilk olarak listemin birinci elemanina tek koseli parantez ile ulasabilecegimi varsayip 5 ile carpmaya calistim. Ancak hata aldim. class() fonksiyonunu kullanip gordum ki, tek koseli parantez kullandigimda elde ettigim hala bir liste. Listenin elemaninin icinde depolanan bilgiye erismek icinse iki tane koseli parantez kullandim ve bu durumda 5 ile carpabildim.

Diger ilk asamada cok bariz olmayan kimi ozelliklere bakalim. Ornegin, listemizin 4.elemanindan kurtulmak isteyelim:

> mylist[-4]
[[1]]
[1] 1

[[2]]
[1] 2

[[3]]
[1] TRUE

Ya da

> mylist[1:3]
[[1]]
[1] 1

[[2]]
[1] 2

[[3]]
[1] TRUE

Ancak farkettiginiz uzere 4.elemandan kurtulduktan sonra da hala liste elde ediyoruz. Ayni seyi cift koseli parantez kullanip bir vektor elde etmeye calisalim:

> mylist[[1:3]]
Error in mylist[[1:3]] : recursive indexing failed at level 2

Ise yaramadi. Peki bu ne demek, listeden asla vektor olusturamaz miyiz, hep liste olarak mi kalacak? Hayir bunun icin as.vector() fonksiyonunu kullanabiliriz.

> as.vector(mylist, mode='numeric')
[1] 1 2 1 NA
Warning message:
In as.vector(mylist, mode = "numeric") : NAs introduced by coercion
> as.vector(mylist, mode='character')
[1] "1" "2" "TRUE" "a"

Bu fonksiyonellikler olsa da cok kullanilmadigini soyleyebilirim. Her veri turunun kendine ozgu avantaj ve dezavantajlari var ve her tur veriyi icin belli veri tipleri daha uygun olacaktir. Genelde donusturmeler kimi fonksiyonlar sadece vektor, sadece liste tipinde objelerde calisiyorsa gerekli olabilir ancak onun disinda donusturmelerin cok kullanilmamasi daha iyi olur. Bunun bir sebebi de listelerin elemanlari tek elemandan olusmak zorunda degil. Su ornege bakalim:

> mylist2
[[1]]
[1] 0

[[2]]
[1] 1 2

[[3]]
[1] TRUE

[[4]]
[1] "a"

Bu ornekte, listemizin ikinci elemaninda iki elemanli bir vektor sakladik. Simdi az onceki yontemi kullanmaya kalkarsak:

> as.vector(mylist2, mode='numeric')
Error in as.vector(mylist2, mode = "numeric") : 
     (list) object cannot be coerced to type 'double'
> as.vector(mylist2, mode='character')
[1] "0" "c(1, 2)" "TRUE" "a"

Ikisi de bekledigimiz gibi bir sonuc degil, degil mi? Eger ki elde etmek istedigimiz vektor suna es degerse: c(“0″,”1″,”2″,”T”,”a”), unlist() fonksiyonunu kullanabiliriz. unlist() genellikle vektor yaratir:

> unlist(mylist2)
[1] "0" "1" "2" "TRUE" "a"

Simdi bir de vektorler uzerinde yaptigimiz islemler listeler uzerinde de gecerli mi ona kisaca goz atalim. Ilk olarak eslenik olarak degerlendirebilecegimiz bir vektor objesi (myvec) ve liste objesi (mylist) yaratalim:

> myvec=1:3
> myvec
[1] 1 2 3
> mylist=list(1,2,3)
> mylist
[[1]]
[1] 1

[[2]]
[1] 2

[[3]]
[1] 3

Vektorler konusunda gordugumuz kimi islemlerin uzerinden gecip, listeler uzerinde de gecerli mi simdi ona bakalim. Ilk olarak birlestirme islemi:

> c(myvec,myvec)
[1] 1 2 3 1 2 3
> c(mylist,mylist)
[[1]]
[1] 1

[[2]]
[1] 2

[[3]]
[1] 3

[[4]]
[1] 1

[[5]]
[1] 2

[[6]]
[1] 3

Yani evet listeleri de birlestirebiliyoruz! Peki aritmetik islemler?

> myvec * 3
[1] 3 6 9
> mylist * 3
Error in mylist * 3 : non-numeric argument to binary operator

Hayir, aritmetik islemleri yapabilmek icin listenin elemanlarina tek tek erismemiz gerekiyor.

Bir de isimlendirme islemlerine bakalim.

> names(myvec)=c('a','b','c')
> myvec
a b c 
1 2 3 
> names(mylist)=c('a','b','c')
> mylist
$a
[1] 1

$b
[1] 2

$c
[1] 3

Evet, isimlendirme de calisiyor. Peki isimli listede altkume alma islemleri nasil oluyor?

> myvec['a']
a 
1 
> mylist['a']
$a
[1] 1

> mylist[['a']]
[1] 1

Ayni indismis gibi isimleri kullanarak da liste elemanlarina ulasabiliyoruz. Ancak listelerde baska bir operator daha var bunun icin kullanabilecegimiz: $

> mylist$a
[1] 1

Ve bu operator cift koseli paranteze denk isliyor, gordugunuz gibi liste tipinde bir obje degil, direkt olarak ilk eleman icine kaydedilen bilgiye ulastik. Peki bu vektorlerde ise yaramiyor mu?

> myvec$a
Error in myvec$a : $ operator is invalid for atomic vectors

Hayir!


Yararli bulduysaniz lutfen ilgili ortamlarda paylasarak daha fazla kisiye ulasmasina yardimci olabilirsiniz. Ve hatta yorum / oneri / elestirileriniz icin asagiya yorum birakabilir, icerigin daha iyi olmasini saglayabilirsiniz! Paylasimlardan haberdar olmak icin blog’u takip etmeyi unutmayin!

Advertisements

Online dersler uzerine..

Online ders konsepti, universite ortaminda verilen derslerin videolarinin, universite tarafindan, online ortamda paylasilmasi sekliyle cok eskiye dayansa da; bu yazida bahsedecegim online dersler daha ziyade MOOC olarak isimlendirilen icerikler. MOOC = massive open online course. Massive – cok kisi aliyor. Open – ucretsiz olarak herkes alabiliyor – her ne kadar kapitalizm cilginligi bu alani da vurmus, bir cok dersin ucretli versiyonu yapilmis ve ogrencilere bir sekilde dayatiliyor olsa da.

2012’den beri bir online ders bagimlisi olarak, i) neden online dersler kisinin kendisini gelistirmesi icin cok iyi bir firsat ve ii) bu MOOC platformlarindan en iyi nasil yararlanilir, bununlardan bahsetmek istedim.

Online dersler neden iyi?

  • Kaliteli egitim
    • Dersi verenler kendi alanlarinda gercekten iyiler – oyle degillerse veya iyi ‘ogretmen’ degillerse, ders oylamasinda aldiklari puandan belli oluyor zaten.
    • Genelde gercekten etiketi saglam okullardan verilen dersler var. Bu dersleri almadan once gercekten bir sehir efsanesi olarak goruyordum ama MIT, Harvard gibi okullardan hazirlanan icerikle X Y Z universitelerinden hazirlanan icerik ve/veya icerigin ogrenciye aktarilisi farkli gozukuyor gercekten. Buna iten sebepler, ve tarihsel surecte yarari mi zarari mi daha fazla bu durumun, tartisilir. Ancak su an icin bizi ilgilendiren kaliteli icerige ulasmanin kolayligi oldugundan bu bir arti.
    • Her dersin sonunda bir ‘geri bildirim formu’ dagitiliyor ogrencilere. Bunu iyi kullanan hocalar ve universiteler, bu formlarda yazanlari goz onunda bulundurarak derslerini guncelliyor ve icerigin kalitesi de dogal olarak artiyor.
  • Egitimin ulasilabilirligi: Bu bahsettigim dersler tamamiyle ucretsiz, internetin oldugu her yerden izlenebilir durumda. Tabii ne yazik ki istisnai durumlar var, Kuba ve Iran gibi, ancak online derslerin her kosulda egitimin daha genis kitleye ulasmasi icin inanilmaz bir arac olusu goz ardi edilemez.
  • Esneklik: Geleneksel okul duzenindeki gibi sabah egitimine mecbur degilsiniz. Istediginiz zaman dilediginiz yerde icerige erisebilirsiniz, isterseniz geceyarisi olsun.
  • Hangi konuda ne ogreneceginiz tamamen sizin seciminiz (tabii derslerin var olmasi gerekiyor). Cogu universitede takip etmeniz gereken bir program, zorunlu dersleriniz vardir. Hatta secmeli dersler olsa bile alabilecekleriniz kisitlidir. Burada oyle bir kisitlama yok! Bugun programlama ogrenmek istediniz, hemen katologdan ders secebilirsiniz. Yarin felsefe calismak istediniz, sonraki gun tarih ya da matematik. Istediginiz konuda istediginiz kadar kendinizi gelistirme firsati elinizde.
  • Kendi hizinizda: Sizin icin zor bir konu mu, isterseniz videoyu iki kere, uc kere dinleyin. Genel hatlariyla biliyorsunuz ama hatirlamak icin mi izliyorsunuz videoyu 2kat hizli hale getirip hizlica icerige bakin. Istediginiz yerde videolari durdurun. Diger bir firsat ise ders icerigini istediginiz gun istediginiz surede takip edebilmek. Genelde her derste haftalik olarak yaklasik 2 ile 4 saat arasi video yayinlaniyor. Isterseniz bolumlere ayirip bir kac gunde, isterseniz de bir gununuzun tamamini ayirip tum icerigi bitirebilirsiniz.
  • Modern egitim sisteminin kabusu sinavlari bu derslerde gercek amacina, yani ogrenip ogrenmediginizi degerlendirme amacina, uygun olarak kullanabilirsiniz. Bu derslerde aldiginiz notlar hayatiniz boyunca size musallat olan birer hayalete donusmeyecek, tamamen sizin icin varlar. Daha guzeli, eger anlamadiginizi gorurseniz sadece bir not alip gecmek zorunda kalmayacak, eksik oldugunuz icerige donup dersleri tekrar izleyebileceksiniz.
  • Tartisma odalari yardimsever, oldukca ilginc insanlarla dolu. Dersi alan herkes dersin konusuna gercekten ilgi duydugu icin orada. Anlamadiginiz bir seyi sordugunuzda konuyu kendi gordugu sekilde aciklayanlar, dis kaynak onerenler… Hepsi orada.
  • “Self-paced” versiyonlar sayesinde, her ne kadar gercek bir ogrenme deneyimi icin onermiyor olsam da, binge watching yapip tum icerigi bir kac gunde bitirebilirsiniz.

Cok karsilastigim bir soru: Coursera ve EdX’teki dersler ucretli, kaydolamiyorum. Sen ucret mi odedin tum derslere?

  • Hayir! Ucretsiz versiyonu olmayan cok az sayida ders var, sadece bu secenegi biraz gizliyorlar. Derse kaydol seceneginden sonra bazen kucuk harflerle en alta gizlenmis sekilde ‘audit’ secenegini gorursunuz. Buna tiklayarak ders icerigini ucretsiz olarak alabilirsiniz. Bu durumda uzerinde fotografinizin oldugu kimlik dogrulamali bir sertifikaniz olmaz – ama durust olmak gerekirse henuz bu sertifikalari onemseyen kimseyle karsilasmadim. Zaten MOOC felsefesiyle de celisiyor bence. Onun disinda ozellikle Coursera’daki kimi derslerde sinavlarin sadece derse ucret odemis olanlara acik oldugunu goruyorum. Ama ders icerigi, tum videolar yine de erisilebilir kaliyor.

Online derslerden daha iyi faydalanmak icin onerilerim:

  • Derse baslarken ne beklediginizi, amacinizi belirleyin. Ornegin, eger amaciniz bilgisayar programlama ogrenmekse, ilk olarak su soruyu sorun: Ne kadar biliyorum? Mesela ilk dersiniz olacaksa, ‘Introduction to’ tarzi giris derslerini arayin. Cok ileri bir ders secip, moralinizi ve motivasyonunuzu yok etmek gereksiz. Ayni sekilde, bir derse kaydolduktan sonra eger beklentilerinizi karsilamiyorsa, dersi birakabileceginizi unutmayin, kimseye bir sey ispatlamak icin orada degilsiniz.
  • Kimse mukemmel degildir, online dersler de. Dersi almaya basladiginiz anda biktiginiz, eziyet gibi gelen dersler olacaktir. Konudan veya online derslerden nefret etmeye gerek yok. Sevmediyseniz dersi birakin. Ayni konuda baska ders, veya baska kaynak (kitap, universitenizde verilen bir ders vb.) bulursunuz elbet.
  • Eger profesyonel bir amaciniz varsa, bir ders plani cikartin. Ornegin 2 yillik bir plan yapip, her donem ne ogreneceginizi belirleyin ve bunu takip etmeye calisin. Odaklanmanizi kolaylastiracaktir.
  • Cok fazla secenek var, cilgina donmek cok olasi – donmeyin. Sinirlarinizi bilin. Yeni baslayan hatalarindan biridir bu, 10 tane derse birden kaydolmak. Sonucta hic birini bitiremezler. Oncelik listenizi belirleyin, amaciniza gore dersleri takip edin.
  • Sinavlari, alistirmalari es gecmeyin. Bunlar ogrenip ogrenmediginizi SIZIN degerlendirmeniz icin var. Ve tartisma odalarini kullanin, anlamadiginiz kisimlari sorun. Inanilmaz derecede yardimci olan ogrenciler ve ders asistanlari var.
  • Ogrenmek zevkli ve eglenceli, oyle kalmasina ozen gosterin. Amaciniz ogrenmek olsun, gosteris degil. Ozellikle lisans egitiminin basinda ya da kariyerinin basindaki arkadaslarda yaptigim bir gozlem: bu dersleri CVleri icin aliyorlar. Yapmayin. Hic bir anlami yok. CV’ye yazacaginiz 10 tane verimsizce aldiginiz derstense cok iyi kavradiginiz 2 ders insanlarin tercihi olacaktir. Zaten insanlarin CVde gordukleri online ders sertifikasini onemsediklerini sanmiyorum, ya da onemsememeliler. Onemli olan ne kadar bildiginiz olmali, ne kadar biliyormus gibi yaptiginiz degil. Verimli bir sekilde almadiginizdan, mulakata girince rezil olacaginiz bir konuda aldiginiz bir dersi CVye yazmak ancak sacmalik olabilir, unutmayin!
  • Hangi ortamda, hangi saatte hangi tur dersi en iyi anladiginizi belirleyin ve buna uygun devam edin. Ornegin, programlama dersi alirken hic kuskusuz bir yandan ornekleri denemek ise yarayacaktir. Bu da demektir ki yataginizda pijamalarinizla dinlemek uygun bir secenek degil. En iyi verimi nasil ne zaman aldiginizi siz belirleyebiliyorsunuz, bu firsati degerlendirin. Ornegin, benim gibi bir bagimli iseniz, aksam yemeginizi Netflix esliginde yemektense Coursera’dan aldiginiz dunya tarihi dersi esliginde yiyebilirsiniz.
  • Herkesin ogrenme sekli farklidir, muhtemelen bu zamana kadar en iyi nasil ogrendiginizi kesfetmissinizdir, online ders deneyimini buna adapte etmeye calisin. Eger not almak ogrenmenizi veya sonrasinda hatirlamanizi kolaylastiriyorsa, not alin. Eger birileriyle beraber calismayi tercih ediyorsaniz, tartisma odalarinda calisma grubu kurmak icin ilan verebilirsiniz. Eger sadece dinlemek yetiyorsa, sanslisiniz bu ortam tam size gore…

Toparlayacak olursak, istediginiz surece, bir konuda bilgisiz kalmanin mumkun olmadigi bir donemde yasiyoruz. Bahane uretmek kolay ama obur yolu tercih edecek olursaniz online dersler hala cok yozlasmamis onemli bir kaynak, lutfen degerlendirelim :)


Yararli bulduysaniz, ilgili ortamlarda paylasarak daha fazla kisiye ulasmasina yardimci olabilirsiniz. Yorum / oneri / elestirileriniz icin asagiya yorum birakabilir, icerigin daha iyi olmasini saglayabilirsiniz! Paylasimlardan haberdar olmak icin blog’u takip etmeyi unutmayin!

Hesaplamali Biyoloji ile ilgileniyorum. Nereden baslamali, nasil ogrenmeli?

Son zamanlarda bu soruyu cok duyuyorum. Kendimce kisa seruvenimde ogrendiklerimden hareketle nacizane onerilerimi burasi araciligi ile paylasayim istedim..

Ilk olarak sunu soylemeliyim: burada yazdiklarim cogunlukla bu alana biyoloji temeli ile yonelenler icin gecerli olacaktir, hikayenin sadece o kismini yasadim o yuzden o kismi paylasiyorum.

Neler ogrenmek gerekir, nasil ogrenebiliriz? 

1. Biyoloji

Biyoloji temeli ile bu alana yoneliyorsaniz unutmayin ki bu alana muhtemelen en buyuk katkiniz; biyoloji icin neyin gerekli oldugu, hangi varsayimlarin yapilabilecegi, herhangi bir teknolojinin bir soruyu gercekci sekilde cevaplamak icin ne avantaji / ne dezavantaji oldugu gibi kritik noktalari yorumlayabilmeniz neticesinde gelecektir. Biyolojiye hakim degilseniz, alana uzmanliginizi getirmiyorsunuz demektir. Bu yuzden, “ders kitabi seviyesi”nde biyolojiden cikip, guncel teknolojileri takip etmek, yeni cikan metodlara hakim olmak cok onemli. Yani: i) ders seviyesinde genel kavramlara hakim olmak muhim ki uzerine kendiniz bir seyler ekleyebilesiniz ve ii) guncel makale takip etmek bence bu isin recetesi. Peki nasil yapariz? Ben biraz eski kafalilardan olarak RSS feed kullaniyorum – yeni nesil bilmiyor olabilir :) Ilk denemenizi yapin, http://www.feedly.com acin, ucretsiz uyeliginizi olusturun ve cikan sayfada arayarak Nature, Nature Methods, Bioinformatics Current Issue ve PLOS Computational Biology: New Articles i news feedinize ekleyin. Mesela her sabah gazete takip eder gibi acip bu dergilerde o gun cikan makalelere goz gezdirin. Hepsini okumaniz imkansiz ama sadece isimlerine, abstractlarina bakmaniz bile neler olup bittigine dair fikir verecektir ve en ilgilileri secip okumanizi saglayacaktir. RSSleri sadece makale takip etmek icin kullanmayin, blog takip edin. Bloglar ilk asamada dergiler gibi arama ile karsiniza cikmayabilir, bu sebeple bloglarin RSS feed linklerini kullanmalisiniz. Ornek olarak hadi bu blog’u RSS feedinize ekleyelim (kendim icin degil valla). Solda RSS – Posts linkini goruyor olmalisiniz. Ona tiklayin, acilan sayfanin adresini kopyalayip gidip feedlydeki arama kismina (ya da ‘new content’) yapistirin ve takip edin. Bu sekilde takip etmenizi onerebilecegim bloglar RNA-Seq Blog ve R-bloggers olacak.  Benzer sekilde PubMed’de bir keyword ile olusturdugunuz aramayi RSS feed haline getirebilir, gunluk olarak bunlari da takip edebilirsiniz. Bunlar haricince Nature News, phys.org gibi sayfalar da guncel makaleleri ozetleyen haberler yapan kimi kaynaklar. Guncel kalmak onemli! Diger onerim, Twitter’i yediginiz yemegi paylasmak icin degil, bilgi paylasimi icin kullanin (yediginiz yemegi de paylasin tabii canim banane!). Google’da kisa bir ‘twitterda biyoenformatikte takip edilecek kisiler’ aramasi sonunda eminim onlarca hesapla karsilasacaksinizdir. Takip edin, paylasin zamanla cevreniz buyudukce iyi icerige erisim ihtimaliniz de artacaktir. Sosyal medyayi degerlendirin.

2. Istatistik / Matematik

Bu kismi cogu biyoenformatikci / hesaplamali biyolog arkadasin es gectigini goruyorum. Oysa bu kismi es gecmek, baskalarinin metodlarini (anlamadan) kullanmaya veya baskalarinin metodlarini ufak degisikliklerle (bazen de yanlis sekilde) kullanmaya mahkum olmak demek. Iyi matematik bilirseniz, iyi istatistik ogrenmeniz cok rahat olacaktir. Istatistik biliyorsaniz (efendim o ogrendiginiz t-test ve ANOVA yi kastetmiyorum, onlar da guzel, yararli tabii ama teorisini kastediyorum, yeni metod gelistirebilecek hale gelmekten bahsediyorum), yeni metodlar gelistirmek, belirli bir soru icin uygun yontemi secmek cok daha kolay olacaktir. Peki nasil olacak. Burada benim en favori ogrenme aracim olan MOOClari onermemek gibi bir sansim yok. Benim hayatimi degistirdiler, birakin sizinkini de degistirsinler. Cok yakin zamanda MOOClarla ilgili de bir yazi yazacagim (nedir, ne degildir, en verimli nasil kullanirim? temali), oraya da beklerim. Simdilik sadece bir kac kilit nitelikte ders onerecegim:

  1. Temel matematik: eger calculus dersi almadiysaniz veya iyi bir altyapiniz oldugunu dusunmuyorsaniz, MOOC degil ama MIT OCW Single-variable ve Multivariable Calculus derslerini oneririm. Ozellikle matematikten zevk aliyorsaniz mutlaka eksik oldugunuzu dusundugunuz konulara bakmanizi tavsiye ederim.
  2. Temel istatistik: EdX’te BerkeleyX: Stat_2.1x, Stat_2.2x ve Stat_2.3x derdim ama ne yazik ki dersler artik ulasilabilir degilmis. Yine de kontrol edin derim. Alternatiflerini suradan ve suradan kendiniz arayarak bulabilirsiniz eminim.
  3. Istatistiginiz de R programlama bilginiz de ne kadar iyi olursa olsun almaktan asla pisman olmayacaginiz bir ders: Rafael Irizzary’nin HarvardX: PH525x – Data Analysis for Life Sciences Serisi.
  4. Ileri seviye: Coursera’da Andrew Ng tarafindan verilen Machine Learning dersi ve  Deep Learning serisi (buna ben de yeni basliyorum!)

3. Programlama

Bir cok kisi buradan basliyor ogrenmeye. Ben de oyle yaptim. Ama inanin aslinda en kolayi bu. Temel biyoloji ve istatistik bilgisini oturtturmak daha kritikmis meger. Ilk basta programlama cok zor gelecektir belki ama belirli bir sure gectikten sonra akicilik kazanirsiniz, panik yapmaya gerek yok.

Bu konuda en cok karsilasitigim soru: hangi programlama dilini ogrenmeliyim? Cok dolambacli “C -> Perl -> Java -> Python -> Bash & Python & R” gibi bir yol izlemis, aralara PHP vs. gibi daha ozel amacli diller de serpistirmis birisi olarak onerim: amacinizi dusunerek baslayin! Amac ilk adimda bilgisayar bilimini ogrenmek iyi bir temele sahip olmaksa, evet itiraf etmeliyim C ogrenmem bir cok seyi kolay anlamama yardimci oldu. Kritik miydi? Bence hayir! Ama amacimin ne oldugunu bilmeden basladigim icin yardimci oldu. Simdi olsa neyle baslardim? Python. Eger bu kategorideyseniz lutfen su derse bir bakin: MITx – 6.00x Introduction to Computer Science and Programming Using Python. Ancak unutmayin ki hic bir programlama, scripting dili ‘en iyisi’ degildir, hepsinin artisi eksisi vardir. Gozlemledigim kadariyla, bu alandaki herkes kullaniyor veya bilmek kesinlikle avantajli ve bir cok degisik hesaplamali biyoloji altdalinda isinize yarar diyebilecegim 3lu: Bash, Python ve R. Linux isletim sistemi ve bash’e kisa bir giris niteliginde degerlendirebileceginiz bir ders onerim de: LSF101x. R icin de kesinlikle istatistik icin de yazdigim, Rafael Irizzary’nin dersini oneriyorum. Genom, transkriptom analizi duzeyinde daha ileri kullanisini ogrenmek icin de yine ayni kisiler tarafindan verilen Genomics Data Analysis serisini oneririm. Bunlar disinda bana biraz sıkıcı gelen ancak yine de yararli buldugum Data Science Specialization kapsamindaki dersleri deneyebilirsiniz. Ozellikle ilk ders (The Data Scientist’s Toolbox)’te gosterilen version control / Git konularina mutlaka bakmanizi tavsiye ederim.

Programlama konusunda ogrenilecek en kritik seylerden birisi de nasil yardim alinacagini, cevap alabilmek icin nasil soru sorulacagini ogrenmek. StackOverflow, Biostars ve StackExchange yardim alabileceginiz sitelerden sadece birkaci. StackExchange’deki “Nasil soru sorarim?” sayfasini baslangic icin inceleyebilirsiniz.

Sadece nasil kod yazilacagini ogrenmek de ne yazik ki yeterli degil. Nasil temiz ve iyi kod yazilir, tekrar edilebilir analiz yapilir bunu ogrenmek de cok onemli. Onerdigim derslerin cogunda bu konu da isleniyor zaten (jupyter notebooks, R notebooks / R markdown incelemenizi tavsiye ederim) ama emin olun yazdiginiz bir kod temiz degilse, yorumlar eklenmemisse veya iyi dokumanlanmamissa bir kac ay sonra donup baktiginizda ne oldugunu unutmus ve anlayamaz olacaksiniz ve tekrar yazmaniz gerekecek. Kendiniz icin bile olsa, anlasilir kod yazma aliskanligini en bastan gelistirmeniz en iyisi olur.

Bunlar disinda, dedigim gibi onemli olan ne icin programlama ogrendiginiz. Eger ki biyolojiciler icin uygulama gelistirme, iyi kullanici arayuzu tasarlama, veribankasi yaratip webde sunma gibi daha genel analiz disi amaclar olasi ise Java, HTML, PHP, SQL yararli olacaktir eminim. Isin ozu, hangi programlama dili en iyisi? sorusunu birakip, su amac icin hangi programlama dili en uygun en genis kitleye sahip sorularini sormaya baslamanizi tavsiye ederim. Ilk programlama dilinden sonra digerlerini ogrenmenin cok daha kolay oldugunu farkedeceksiniz zaten. Yani surec icerisinde yenilerini ogrenmeniz cok zor degil.

4- Ozel kullanim alani olan yazilimlar

Bu kisim calisilan alana gore cok degisecektir. Ornegin, kimisi icin TopHat2, STAR, HISAT, Cufflinks, Kallisto gibi araclar kritik olacakken kimisi icin PyMol, AutoDock, OpenBabel gibi araclar onem tasiyacaktir. Bunlari makaleleri takip ettikce, ilgilendiginiz alandaki makalelerin metod kismina bakip hangi amacla hangi yazilimi kullandiklarini not ederek bir ogrenilecekler listesi cikartip derleyebilir, ve ogrenmeye baslayabilirsiniz. Bu tarz programlarin genelde oldukca guzel tutoriallari oluyor, elinizde inceleyecek bir data olmasa bile verilen ornekleri takip ederek ogrenebilirsiniz.


Ama burada olasi bir soru da su: butun bunlar sart mi? Tabii ki hayir! Neyi ne kadar ogrenmek istediginize ne dogrultuda ilerleyeceginize siz karar vereceksiniz. Burada sadece bildigim daha onceden kullanip memnun kaldigim kimi kaynaklari sundum. Eger sizin de onereceginiz kaynaklar varsa yorum olarak yazabilir veya bana ulasabilirsiniz. Onerdiginiz dogrultuda gonderiyi guncellerim.


Yararli bulduysaniz ilgili ortamlarda paylasarak daha fazla kisiye ulasmasina yardimci olabilirsiniz. Yorum / oneri / elestirileriniz icin asagiya yorum birakabilir, icerigin daha iyi olmasini saglayabilirsiniz! Paylasimlardan haberdar olmak icin blog’u takip etmeyi unutmayin!

Tidyverse’e giris

Tidyverse, data analizine yardimci olan bir grup R paketidir. Cekirdek Tidyverse paketleri:

  • ggplot2: data goruntuleme icin
  • tidyr: datayi temizlemek icin
  • readr: datayi okumak icin
  • dplyr: datayi manipule etmek icin
  • tibble: ufak degisiklikler yaratilmis data.frame objelerini icerir
  • purrr: fonksiyonel programlama araclari

Temiz data konsepti

Ayni veri, birden fazla sekilde gosterilebilir. Oysa, (genellikle) calismasi en kolay olani temiz verisetidir. Bunun en buyuk sebebi bu ‘tidyverse’ paketini kullanarak R’da data temizleme / hazirlama islemlerini cok daha az zaman ve efor sarfederek gerceklestirebilmemiz ve analize daha fazla zaman ayirabilmemiz.

Temiz datanin karakteristigi olan 3 iliskili kural tanimlayabiliriz:

  1. Her degiskenin kendi sutunu olmali
  2. Her gozlemin kendi satiri olmali
  3. Her degerin kendi hucresi olmali

Simdi tidyverse paketinin icinde olan orneklerden birisini inceleyerek temiz data konseptini daha iyi anlamaya calisalim.

‘table1’; 1999 ile 2000 yillari arasinda Dunya Saglik Orgutu tarafindan Afganistan, Brazilya ve Cin’de gorulen tuberkuloz vakalarinin sayisini ve o yillarde bu ulkelerdeki populasyona dair bilgi iceren bir tablo.

# blog'da tablolarin goruntulenmesini daha iyi yapabilmek icin kable() fonksiyonunu kullanacagiz
# kable() fonksiyonu, knitr paketinin icinde oldugundan onu cagiriyoruz oncelikle. 
> library(knitr) 
> library(tidyverse) 
> kable(table1)
|country     | year|  cases| population|
|:-----------|----:|------:|----------:|
|Afghanistan | 1999|    745|   19987071|
|Afghanistan | 2000|   2666|   20595360|
|Brazil      | 1999|  37737|  172006362|
|Brazil      | 2000|  80488|  174504898|
|China       | 1999| 212258| 1272915272|
|China       | 2000| 213766| 1280428583|

Burada yil basina ulke gozlemsel birimimiz oluyor, tuberkuloz vakasi sayisi ve populasyon ise bu gozlemsel birim basina olan degiskenlerimiz. Bu datanin temiz data konseptine uygun oldugunu goruyoruz, cunku her gozlemsel birimin kendi satiri var, her degiskenin kendi sutunu var ve her degerin kendi hucresi var.

Bir sonraki yazida ayni veri farkli formatlarda verildiginde bunlari kolayca nasil temiz formata donusturebiliriz bundan bahsedecegim.

Vektorler

R kimi veri yapilari uzerinde islem yapar. En basit veri yapilarindan biri olan vektorler, ayni temel obje turunden ogeleri iceren dizilerdir.

> x = c(1,2,3)
> x
[1] 1 2 3

Burada ‘x’; 1, 2, ve 3 ogelerine sahip bir vektordur. Vektor olusturmak icin bu ornekte c() fonksiyonunu kullandik. ‘c’yi, ‘concatenate’ (baglamak) ya da ‘combine’ (birlestirmek) kelimelerinden birinin kisaltilmis hali olarak aklinizda tutabilirsiniz.

Onceki ornekte numerik tipte ogelerden olusan bir vektor yarattik. Ancak vektorler hepsi ayni oldugu surece diger tiplerden de olusabilir.

> x = c(T,F,F) # logical
> x
[1]  TRUE FALSE FALSE
> x = c('x','y','aa','oiasjfioasjf') # character
> x
[1] "x"            "y"            "aa"           "oiasjfioasjf"
> x = c(1+4i,5+2i) # complex
> x
[1] 1+4i 5+2i
> x = c(1L,5L) #integer
> x
[1] 1 5

Simdi de ayni tipte olmayan tiplerle vektor olusturmaya calistigimizda ne oluyor, bunu gorelim. Ilk deneme olarak butun tipleri girdi olarak verip bir vektor yaratmaya calisalim.

> x = c(1.5, 'karakter', 3i+2, TRUE, F)

Bu ornekte; numerik, karakter, kompleks ve boolean tipinde ogeler ile bir vektor yaratmak istedik. Ve hata almadik. Peki ‘x’ objesinin modu ne ve nasil bir vektor elde ettik?

> x
[1] "1.5" "karakter" "2+3i" "TRUE" "FALSE"

Gordugunuz gibi, hata almadik ama vektor olusturma sirasinda ogeler kendi modlarini koruyamadilar. Data tipleri arasinda bir hiyerarsi vardir ve R farkli tipte ogeleri birlestirirken bu objelerden hiyerarside en yuksek olani secerek vektor yaratir. Buradan yapacagimiz cikarim, karakter tipi hiyerarside en yuksek olan. Simdi sirasiyla en yuksekte olani cikartarak, hiyerarsiyi cozmeye calisalim.

# karakteri cikarttigimizda
> x = c(1.5, 3i+2, TRUE, F)
> mode(x)
[1] "complex"
> x 
[1] 1.5+0i 2.0+3i 1.0+0i 0.0+0i
# kompleksi cikarttigimizda
> x = c(1.5, TRUE, F)
> mode(x)
[1] "numeric"
> x
[1] 1.5 1.0 0.0
# numerigi cikarttigimizda
> x = c(TRUE, F)
> mode(x)
[1] "logical"
> x
[1] TRUE FALSE

Bu durumda boolean < numerik < compleks < karakter cikarimini yapabiliriz.

Vektorlerle islemler

Vektorleri birlestirmek

Vektor yaratmak icin kullandigimiz c() fonksiyonu, ayni zamanda vektorleri birlestirmek icin de kullanilabilir.

> x = c(1,2,3)
> x
[1] 1 2 3
> y = c(4,5,6)
> y
[1] 4 5 6
> z = c(x,y)
> z
[1] 1 2 3 4 5 6
> a = c(z,9,8)
> a
[1] 1 2 3 4 5 6 9 8

Ve onceden bahsettigimiz, data tipinin hiyerarside en yuksek olana donusmesi bu durumda da gecerli.

> x = c(1,2,3)
> x
[1] 1 2 3
> y = c('a','b','c')
> y
[1] "a" "b" "c"
> z = c(x,y)
> z
[1] "1" "2" "3" "a" "b" "c"

Vektor aritmetigi

Daha onceden R’i hesap makinesi gibi kullanabileceginizden bahsetmistim. Vektorlerle de ayni islemleri yapabilirsiniz.

> x = c(1,2,3)
> x * 3
[1] 3 6 9
> x + 1
[1] 2 3 4
> (x * 5) -2
[1] 3 8 13

Burada onemli olan, islemlerin her bir oge uzerinde ayri ayri gerceklestiriliyor olusu. Eger iki vektorumuz olsaydi, ve bu iki vektoru toplamak isteseydik, benzer sekilde birinci ogenin ikinci vektordeki birinci ile, ikinci ogenin ikinci vektordeki ikinci oge ile vb. sekilde toplandigini gorurduk.

> x = c(1,2,3)
> y = c(4,5,6)
> x + y
[1] 5 7 9
> x * y
[1]  4 10 18

Peki ya vektorlerimiz esit uzunlukta degilse? Bu durumda kisa olan vektor, uzun vektordeki ogeler bitene kadar tekrar tekrar kullanilir.

> x = c(1,2,3,4)
> y = c(2,3)
> x * y
[1]  2  6  6 12

Ilk vektordeki ilk eleman olan 1, ikinci vektordeki ilk eleman olan 2 ile carpildi ve sonucun ilk elemani 2 oldu. Ilk vektordeki ikinci eleman olan 2, ikinci vektordeki ikinci eleman olan 3 ile carpildi ve sonucun ikinci elemani 6 oldu. Ilk vektordeki ucuncu eleman olan 3, ikinci vektorde ucuncu bir eleman olmamasi nedeniyle ilk eleman olan 2 ile carpildi ve sonucun ucuncu elemani 6 oldu. Ilk vektordeki dorduncu eleman olan 4, ikinci vektorde ikinci eleman olan 3 ile carpildi ve sonucun ucuncu elemani 12 oldu. Yani bu tarz islemleri yaparken dikkat etmek gerekiyor. Bu islemin sonucunda R’in nasil davranacagini bilmeyen birisi 8 elemanli bir vektor almayi, yani ilk vektoru once 2 ile sonra 3 ile carpip birlestirmis olmayi bekleyebilir. Oysa R boyle davranmiyor.

Peki ya vektorlerimizin uzunlugu birbirinin kati olmasaydi? Burada 4 ogeli bir vektoru 2 ogeli bir vektor ile carptik. 4 ogeli bir vektoru, 3 ogeli bir vektor ile carpmaya calissaydik farkli bir davranis bekler miyiz?

> x = c(1,2,3,4)
> y = c(1,2,3)
> x * y
[1] 1 4 9 4
Warning message:
In x * y : longer object length is not a multiple of shorter object length

Hayir. Tam olarak onceki gibi bir davranis goruyoruz, ancak bu sefer R ayni zamanda bir uyari mesaji veriyor ve vektorlerin birbirinin kati uzunlukta olmadigini soyluyor.

Vektor indeksleri (index)**

Bir vektorun icindeki elemanlara ulasmak icin koseli parantez [] operatorunu kullanabiliriz. Koseli parantez icine cagirmak – ulasmak istedigimiz ogenin indeksini – yani vektor icindeki sirasini yazarak istedigimiz elemana ulasabiliriz. Burada onemli olan bir konu, R diger kimi programlama dillerinin aksine 1-tabanli indeksleme kullaniyor, yani ilk elemanin indeksi 1 (Ornegin python’da ilk elemanin indeksi 0dir).

> x = c('a','b','c','d')
> x[1] # Birinci eleman
[1] "a"
> x[1:2] # Birinciden ikinciye kadar (dahil) elemanlar
[1] "a" "b"
> x[2:4] # Ikinciden dorduncuye kadar (dahil) elemanlar
[1] "b" "c" "d"
> x[-3] # Ucuncu haric tum elemanlar
[1] "a" "b" "d"
> x[c(1,3)] # Bir ve ucuncu elemanlar
[1] "a" "c"

Gordugunuz gibi, bu sistemle sadece tek bir eleman degil, istediginiz alt kumeye de ulasabilirsiniz.

Burada daha once gostermedigim baska bir operator (:) daha kullandik. Bu operatoru, bir dizi uretmek istedigimizde kullaniyoruz.

> 1:4
[1] 1 2 3 4
> 5:10
[1]  5  6  7  8  9 10

Tekrar indekslere donecek olursak, acikta biraktigimiz kimi sorular var.

> x = c('a','b','c','d')
> # olmayan bir elemani istemek NA verir
> x[5]
[1] NA
> # ayni indeksi tekrar tekrar isteyerek elemanin tekrar etmesini saglayabiliriz
> x[c(1,2,2,2,3)]
[1] "a" "b" "b" "b" "c"
> # elemanlari orijinal siralarina sadik kalarak cagirmak zorunda degiliz
> x[c(3,1,4)]
[1] "c" "a" "d"

Ayrica boolean vektor kullanarak vektor altkumesi almak da mumkun. Eger ki boolean TRUE ise, o indekse karsilik gelen eleman elde edilen altkumede yer alir, FALSE ise yer almaz.

> x = c('a','b','c','d')
> x[c(T,F,T,T)]
[1] "a" "c" "d"

**Bir itirafta bulunmam gerekiyor, index in dogru cevirisi indeks mi indis mi (benzer sekilde matrix in dogru cevirisi matriks mi matris mi) bilmiyorum. Bu tarz hatalari hosgormenizi ve hangisinin kullanildigini biliyorsaniz yorum olarak birakmanizi rica ediyorum.

Isimlendirilmis vektor

Simdiye kadar vektor icindeki elemanlari cagirmak icin hangi sirada olduklarini kullaniyorduk. Oysa eger ki vektor icindeki elemanlarin isimleri olsaydi bu isimleri kullanabilirdik.

> myvec = c(birinci='x',ikinci='y')
> myvec
birinci  ikinci 
    "x"     "y" 
> myvec[1]
birinci 
    "x" 
> myvec['ikinci']
ikinci 
   "y"

Vektore isim atamak, ornekteki gibi c() fonksiyonu icinde yapilabilecegi gibi sonradan names() fonksiyonu kullanarak da yapilabilir.

> a = c('x','y') 
> a
[1] "x" "y"
> isimvektorum = c('birinci','ikinci')
> isimvektorum
[1] "birinci" "ikinci" 
> names(a)=isimvektorum
> a
birinci  ikinci 
    "x"     "y"

Yararli bulduysaniz lutfen ilgili ortamlarda paylasarak daha fazla kisiye ulasmasina yardimci olabilirsiniz. Ve hatta yorum / oneri / elestirileriniz icin asagiya yorum birakabilir, icerigin daha iyi olmasini saglayabilirsiniz! Paylasimlardan haberdar olmak icin blog’u takip etmeyi unutmayin!

Temel obje turleri

Cok havali grafikler cizip, guzel istatistiksel analizler yapmadan once R’da temel bir kac konuya bakmak yapabilecegimiz kimi hatalari daha rahat anlamamizi saglayabilir. Bu sebeple biraz temellere bakalim.

R’da 5 cesit temel obje turu var:

  • karakter (character):
> x = 'a'
> x
[1] "a"
> a
Error: object 'a' not found

Karakter degiskeni yaratmak icin, tirnak isaretlerini kullaniyoruz. Yani, x bir obje iken ‘a’ bir karakter. Bu sebeple, a yazdiginizda R a isminde bir obje ariyor, bizim a isminde bir objemiz olmadigindan ‘obje bulunamadi’ hatasi veriyor. Bu arada R’da en iyi dostunuz hata mesajlari. Genelde hata mesaji sorunun nerede oldugu hakkinda cok iyi bir fikir veriyor.

> class(x)
[1] "character"

class() fonksiyonu tahmin edebileceginiz uzere, obje sinifini ogrenmemizi sagliyor.

> x = 'melike'
> x
[1] "melike"
> class(x)
[1] "character"

‘Karakter’ sinifindaki objeler, tek bir karakter icermek zorunda degil.

  • numerik (numeric)
> x = 3
> x
[1] 3
> class(x)
[1] "numeric"
> x = 3.14
> x
[1] 3.14
> class(x)
[1] "numeric"
> x = 1/0
> x
[1] Inf
> class(x)
[1] "numeric"
> x = 0/0
> x
[1] NaN
> class(x)
[1] "numeric"

Burada ilginc olan kisimlar var: 1) R tam sayilari da ozellikle belirtmedigimiz surece numerik olarak aliyor, 2) ‘Sonsuz’un veri tipi numerik, 3) NaN (“not a number’) degeri de numerik sinifinda.

  • tam sayilar (integer)
> x = 3L
> x
[1] 3
> class(x)
[1] "integer"

Gordugunuz gibi, ozellikle tam sayi olusturmak istiyorsak sondaki L ekini kullaniyoruz.

  • komplex (complex)
> x = 1+4i
> x
[1] 1+4i
> class(x)
[1] "complex"
  • mantiksal (logical, boolean)
> x = TRUE
> x
[1] TRUE
> class(x)
[1] "logical"
> x = FALSE
> x
[1] FALSE
> class(x)
[1] "logical"
> x = T
> x
[1] TRUE

TRUE ve FALSE iki temel mantiksal degisken (True=Dogru, False=Yanlis). Sadece bas harfleri kullanilarak da ifade edilebilirler.

> x = f
Error: object 'f' not found

Ancak gordugunuz gibi, bu harfler buyuk olmali yoksa f ismindeki objeye esitlemeye calismis oluyoruz x’i.


Alistirma olarak su objelerin siniflarini tahmin etmeye calisip yanilip yanilmadiginizi kontrol edebiliriz:

a='5' 
b='T'
y=10.5L
x='y'
d=x

Tirnak isaretleri icinde veriler girildiginden a, b, x, ve dolayisiyla d objeleri karakter tipinde. y ise integer degil numerik tipinde.


Ilerledikce class() fonksiyonu ile objelere baktiginizda, farkli cevaplar alacaksiniz. Objelerden olusan objeleriniz oldugunda ornegin (1den 10a kadar olan sayilari iceren bir vektorunuz varsa mesela). Ya da R’in object oriented programlama dili olmasinin getirisi olarak, yeni obje siniflari ile calistiginizda.

Eger ki acik bir obje sinifina sahipse bir obje (orn. matrix gibi), numerik degerlerden olusan bir obje mi, karakter objesi mi, bunu gormek yerine sinifini – orn. matrix – oldugunu goreceksiniz. Bu durumda mode() fonksiyonunu kullanabilirsiniz. Veri yapilarina (vektor, matrix, list gibi) alistikca bunlar daha anlasilir gelecektir.

Ilk adimlar

Her zaman kod yazmaya baslamadan once onemli olan bir basamak, calistigimiz klasorun ne oldugunu bilmek, gerekirse degistirmek.

Hangi klasorde calistigimizi ogrenmek icin getwd() fonksiyonunu kullanacagiz (get working directory). Calistigimiz klasoru belirlemek icinse setwd() fonksiyonu kullaniliyor.

> getwd()
[1] "/Users/melike"
> setwd('~/Dropbox/blog/compbioscratchpad/r_baslangic/')
> getwd()
[1] "/Users/melike/Dropbox/blog/compbioscratchpad/r_baslangic"

Onerim, bilgisayarinizda R ogrenmek icin bir klasor olusturmaniz ve kodunuzu, kullandiginiz dosyalari vs. buraya kaydetmeniz. Ayni sekilde, belirli bir amacla R kullandiginiz zaman da masaustune deneme1.R gibi isimler yerine duzenli bir sekilde uygun klasorleri icerige dair fikir veren isimlendirmelerle ya da belirli bir sistemle kaydederseniz hayatiniz cok kolaylasacaktir.


Hesap Makinesi olarak R

En temelde hesap makinesi islemleri yapabilirsiniz:

> 2+2
[1] 4
> 2*3
[1] 6
> 10-5
[1] 5
> 3^2
[1] 9
> 450/3
[1] 150
> 200/3
[1] 66.66667
> 200%%3
[1] 2
> 200%/%3
[1] 66

Cok acik olmayan operatorler:

  • %% – belirli bir tabanda kalan islemi, moduler aritmetik. Ornegimizde 200un 3e bolumunden kalan 2
  • %/% – tam sayi bolmesi, kalan olsa bile tam sayi olarak bolme isleminin sonucu kac?

Fonksiyonlar

R kendi icinde fonksiyonlar barindirir. Ornegin, baslangicta kullandigimiz getwd() gibi. Farkettiyseniz, fonksiyonlardan bahsederken hep parantez kullaniyorum. Fonksiyonlari degiskenlerden ayirabileceginiz en basit sekil bu. Cok basit bir kac fonksiyona bakalim:

> log10(100) #10 tabaninda log
[1] 2
> log2(100) #2 tabaninda log
[1] 6.643856
> log(10,4) #4 tabaninda 10un log'u
[1] 1.660964
> exp(1) #e uzeri 1
[1] 2.718282
> exp(2) # e uzeri 2
[1] 7.389056
> log(exp(2)) # e uzeri 2 nin ln i - log taban belirtilmediginde e tabaninda islem yapar
[1] 2
> 16^(1/2) # 16 nin koku
[1] 4
> sqrt(16) # ayni islem fonksiyon ile
[1] 4

R’da degiskenler

Degiskenler, veri tutucular olarak dusunulebilinir. R’da degiskene deger atamak icin = veya <- operatorleri kullanilabilir. Ornegin x’e 3 degerini atamak icin, asagidaki iki kod da gecerlidir.

> x = 3
> x
[1] 3
> a <- 4
> a
[1] 4
> 3 * 4
[1] 12
> x * a
[1] 12

<- tarihsel olarak R camiasinda cokca kullanilsa da, pratik nedenlerle ben genellikle = kullanmayi tercih ediyorum.

Degisken isimleri

R’da degiskenlerinize verebileceginiz isimler icin bazi sinirlayici kurallar vardir. Degiskenler, bir harf ile ya da harfin takip ettigi nokta ile baslar. Ornegin, benimdegiskenim gecerli bir degisken ismi iken 2degisken gecerli degildir, cunku 2 bir harf degildir. .degisken gecerli bir degisken ismidir ancak .2degisken degildir. Ayrica R’da kimi ozel anlam iceren kelimelerin degisken olarak kullanilmasi mumkun degildir, if ve for gibi. Bunlari ?reserved yazarak ogrenebilirsiniz.

Yasak olmasa da diger bir sorun R icinde varolan fonksiyonlarin isimleri ile degisken yaratmak. Cogu zaman sorun olmadan calissa bile, kimi zaman karisikliga sebep olabilir.

R’da degisken isimleri buyuk/kucuk harfe duyarlidir.

Degisken isimlerini tuttugu veriyle alakali secmek genelde kolaylik saglar.

RStudio arayuzu

Ilk olarak calisacagimiz ortami taniyalim. Daha once R arayuzu yerine Rstudio’yu tercih ettigimi soylemistim zaten, bu sebeple RStudio’yu acikliyorum. Hadi baslayalim!

Rstudio_mod

RStudio’yu actiginizda buna cok benzer bir tablo ile karsilasacaksiniz – belki 4. kisim haric, oraya gelecegiz. Arkaplan muhtemelen beyazdir ve belki isletim sistemi farklari soz konusudur. Ama yine de bu ekran asagi yukari neresi ne ise yariyor, kodu nereye yazacagiz ne yapacagiz, kisaca aciklamak icin yeterli olacaktir.

1- Console

Burasi kodu yazip sonuclari gordugumuz kisim. Denemek icin 2+2 yazip enter a basalim.

> 2+2
[1] 4

2- Dosyalar, Cizimler, Yardim vs.

Buradaki ‘files’, ‘plots’ gibi sekmelere basarak degisik ekranlari aktive edebiliyoruz.

‘Files’ sekmesi (‘dosyalar’) icinde bulundugunuz klasorun icindeki dosyalari listeliyor.

‘Plots’ sekmesi, cizdiginiz grafikleri goruntulediginiz kisim. Ornegin sunu deneyebiliriz:

> hist(rnorm(1000))

Bu grafikleri kaydetme kismina ayrica gelecegiz (export – disa aktar – secenegini kullanmamanizi tavsiye ediyorum).

‘Packages’ sekmesinde, R’da yuklu olan cesitli paketleri (kutuphaneleri) gorebilirsiniz. Ancak buradan yuklemektense library() komutu ile yuklemeyi tercih ediyorum.

‘Help’ (‘yardim’) sekmesi en buyuk dostumuz. Acip ogrenme linklerini kurcalamak iyi bir secenek. Ayrica su kodu deneyelim:

> ?hist

Gordugunuz gibi, ‘help’ sekmesinde az once histogram cizmek icin kullandiginiz hist() fonksiyonu icin yardim ekrani acildi. Bu ekranda, fonksiyonun tanimi, argumanlari, sonucu hakkinda bilgi alabiliyor ve en altta ornekleri goruyorsunuz. Ornekleri calisitirip, fonksiyonla ilgili daha fazla bilgi sahibi olabilirsiniz. Burada cikan bilgiler, R’i yukledigimizde gelen ‘base R’ fonksiyonlari icin epey detayli. Indireceginiz bir cok paket icin de detayli bilgi bulabilirsiniz ancak detay ve ornek miktari paket yazarlarinin olusturdugu yardim dosyalarina bagli olan bir sey.

3- Environment, History

‘Environment’ sekmesinde, olusturdugumuz degiskenlerin listesini gorecegiz. Sunu deneyelim:

> x = 3

Bu kod ile, x isimli degiskene, 3 degerini vermis olduk. Artik sadece x yazip enter’a basarsaniz, x’in 3 oldugunu goreceksiniz. Ayni zamanda ‘Environment’ sekmesinde artik x’in listelendigini gorebiliyor olmalisiniz.

‘History’, mevcut R oturumunuzda yazdiginiz kodlari listeleyen kisim. Buradan onceki kodlari gorebilirsiniz. Ancak daha pratik, daha cok kullanilan baska bir kisayol var. Konsolda iken, klavyedeki yukari ok tusu ile onceki kodlari goruntuleyebilir, tekrar calistirabilirsiniz.

4- Script

Bu ekran muhtemelen acik olarak baslamamistir. Ekran goruntusundeki sol ust kosedeki tus ile yeni ‘R script’ acabilirsiniz. Burada baska secenekler de var, bunlarin ne oldugu, avantaji hakkinda baska zaman aciklama yaparim. Simdilik ‘R script’ i secelim. Actiginiz zaman, bendeki gibi bos bir ekran cikacak. Onerim kodlarinizi konsol yerine burada yazmaniz. Rstudio’nun guzel bir ozelligi burada yazdiginiz kodu konsolda kolay bir sekilde calistirmanizi sagliyor. Simdi bu ekranda 2+2 yazip, enter a basin. Konsolda hic bir sey olmadigini goreceksiniz. Simdi tekrar onceki satira donup Ctrl+Enter (Mac icin Cmd+Enter)’a basin. Konsola baktiginizda, kodun calistirildigini ve sonucun goruntulendigini goreceksiniz (eger olmadiysa, R Script secenegini secmemis olabilirsiniz). Her calisma sonunda bu dosyayi kaydederseniz (Ctrl+S, Mac icin Cmd+S), daha sonra yazdiginiz kodlari tekrar gorme sansiniz olacaktir. Geleneksel olarak scriptlerin uzantilari ‘.R’ dir.  


Bu acikladigim panellerin yeri, sirasi ve acik olup olmayacagi, seceneklerden kontrol edilebilir – degistirilebilir.

Son olarak, RStudio’yu kapatirken size ‘workspace’ (yani environment)i kaydetmek isteyip istemediginizi soracaktir. Benim onerim buna her zaman hayir demeniz. Eger olusturdugunuz objelerden kaydetmek istedikleriniz varsa bunu baska sekilde yapmalisiniz (sonraki yazida aciklayacagim). Ve ayni sekilde history kaydetmek yerine scriptinizi kaydetmenizi tavsiye ederim.

R Ogrenmeye Nasil Baslarim?

Son zamanlarda bu soruyu o kadar cok duyuyorum ki! Arada dunyada guzel seyler de oluyor yani :) Neyse, tahmin edebileceginiz gibi sorunun kesin net bir cevabi yok, kisiden kisiye, kullanimdan kullanima farklilik gosterecektir en verimli yol. Ama yine de bir takim basamaklardan gecmemek imkansiz (R i bilgisayara indirmek gibi!). Biraz bu ‘mutlaka olmasi gereken maddeler’i biraz da kendimce yararli buldugum basamaklari toparlayip sunmak istedim.

1) R nedir, ne degildir?

R ile ilgili simdiye kadar en uygun buldugum, en cok hosuma giden benzetme Matthew Keller’a ait. Keller hatirladigim kadariyla diyor ki ‘R is like magic, except you have functions instead of spells’ – yani diyor ki R buyu gibi, ancak buyulu sozcukler yerine fonksiyonlariniz var. SPSS, SAS kullanicilari, ‘muggle’ gibidir. Ortami degistirme kabiliyetleri sinirlidir. Onlarin analizi icin birileri tarafindan uygun gorulmus dizayn edilmis algoritmalarla sinirlidirlar ve ustune para odemek zorundadirlar. Keller, R programcilari ise ‘buyucu’lere benzetiyor. R programcilar, alaninda uzman olan kisiler tarafindan yazilmis fonksiyonlara (yani buyulere) bagli kalarak devam edebilecekleri gibi kendi buyulerini de yaratabilirler (’sectumsempra’ gibi lanetler de mumkun tabii). Bunlari kullanmak / erismek icin para odemezler, ve yeterince deneyim kazandiklarinda yapamayacaklari bir sey yoktur.
Burada R in tarihine filan deginmek istemiyorum. Ancak bir kac avantaj listelemesi yapmadan gecmeyelim:
– Ucretsiz!
– Acik kaynak kodlu
– Aktif ve dinamik bir komunitesi var. Yardim almak cok kolay.
– Guncel
– Kod yazarken analiz hakkinda dusunmeniz gerekiyor. Bu sebeple yaptiginiz analizin, deney duzeneginize, ornekleminize ve en onemlisi hipotezinize uygun olup olmadigini tartabiliyorsunuz. Rastgele tuslara tiklayip p<0.05 gorunce alip devam etmekten oldukca farkli!
– Istatistiksel testlerin varsayimlarina bagli kalmadan, simulasyonlar ile empirik dagilimlar yaratip test yapabilirsiniz.
– R notebook / R markdown gibi dokuman olusturma sayesinde analizinizi / deneyinizi takip etmeniz kolay, yayinlamak kolay, ve tekrar edilebilirliginizi saglamak mumkun.
– Ozellikle rutin olarak biyoistatistik / biyoenformatik calismiyorsaniz, Windows kullanicisi olma ihtimaliniz cok yuksek. R isletim sisteminden bagimsiz oldugundan, kendi bilgisayarinizda calisabilir ve gerektiginde analizinizi / kodunuzu baska platformlarda calisanlarla rahatlikla paylasabilirsiniz.
– Bilim dili gunumuzde Ingilizce’ymis gibi gozukuyor. Ben buna katilmiyorum. Bilimin dili bence grafikler. Yazdiginiz 15 sayfalik makaleyi ozetleyebilecek 3 grafik yapabilmek cok buyuk bir guc (buyuk konustum, tabii her seyi grafiklestirmek mumkun degil ama zamanla makaleleri okurken farketmeye basliyorsunuz Excel, SPSS grafiklerinin R’da olusturulmus grafikler yaninda nasil kaldigini..)
ilk aklima gelenler ancak daha bir cok avantaji var.
Bir de ogrenmesi en kolay dillerden birisi. Ancak bunun yaninda ogrenme egrisi lineer degil. Yani ilk zamanlar cok zor gelebilir (ilk zamanlar cok basit olmasina ragmen kac defa matrix in satiri yerine sutunu ile islem yapmaya calistigimi anlatamam!) ama alistiktan sonra kendinizi gelistirmek, yeni fonksiyon hatta baskalarinin kullanimi icin paket yazmak diger dillere gore cok daha kolay.
Son olarak, R paket sayisi, paketlerin guncellenme sikligi, paket yazarlarinin ulasilabilirligi acisindan ozellikle biyoloji alaninda calisanlar acisindan cok avantajli. Bioconductor projesi ozellikle biyoloji ile alakali analizler icin -omics data analizi icin inanilmaz avantaj sagliyor.
Isin ozu, R candir.

2) R’i nasil indirecegim? 

Cok basit: https://cran.r-project.org adresine gidip, kullandigimiz isletim sistemi icin olan versiyonu indiriyoruz. Bir cok kullanici icin ‘base’ surumu yeterli olacaktir.

3) Indirdim, simdi sirada ne var?

R’i kuruyoruz. Bu kisimda cok faydam olamiyor genelde kimseye Windows kullanmadigim icin ama eminim sirasiyla tuslara basinca kurulum gerceklesiyordur 😃 kurmaya calisip bir noktada takilan olursa ekran goruntuleri ile yorum birakirsa, yardimci olmaya calisirim.

4) Baslamadan once kolaylastirici bir basamak:

R’in kendi arayuzu oldukca sade ve yeterli olsa da, ben herkese RStudio yu indirmelerini tavsiye ediyorum. Inanin hayatinizi cok kolaylastiriyor. RStudio da ucretsiz ve R programlama icin bir cesit arayuz gibi dusunebilirsiniz. https://www.rstudio.com/

5) Hadi kodlayalim!

devami gelecek..