İçeriğe geç

Ders EKO-212.01 · Seviye 2 — Orta

Kurulum ve temel kavramlar

EKO-212 Ekonomistler için Python ve R

4.106 kelime · yaklaşık 19 dakika okuma · seslendirme 9 dk · veriler Eylül 2026 itibarıyla

Katmanlar:SezgiModel

  • yorumlayıcı
  • betik
  • paket
  • tümleşik geliştirme ortamı
  • atama
  • kayan noktalı sayı
Önce özete göz atDersin sonundaki özet, okumaya başlamadan önce yol haritası olarak.
  1. Python, Guido van Rossum'un Aralık 1989'da bir hobi projesi olarak başlattığı; R ise Ross Ihaka ile Robert Gentleman'ın Auckland Üniversitesi'ndeki öğretim laboratuvarı için geliştirdiği ve Haziran 1995'te kaynak kodunu özgür yazılım olarak açtığı dillerdir; ikisi de açık kaynaklıdır ve iktisatta yaygın kullanılır.
  2. Python python.org'dan, R CRAN'dan kurulur; RStudio, Visual Studio Code ve Jupyter gibi tümleşik geliştirme ortamları, kod yazmayı, çalıştırmayı ve sonuçları görmeyi tek pencerede birleştirir.
  3. Atama, bir değeri bir ada bağlar: Python'da eşittir işaretiyle, R'da okla; temel aritmetik, üs alma, tam sayı bölmesi ve kalan işlemleri iki dilde de benzer biçimde yapılır ve ondalık ayracı noktadır.
  4. Paketler bir kez kurulur, her oturumda yüklenir; betikler, analizin bütün adımlarını baştan sona yeniden çalıştırılabilir biçimde kaydeder ve Chang ile Li'nin gösterdiği tekrarlanabilirlik sorununa karşı temel bir önlemdir.
  5. Bilgisayar ondalıklı sayıları kayan noktalı biçimde saklar; bu yüzden 0,1 ile 0,2'nin toplamı 0,3'e tam eşit çıkmaz ve McCullough ile Vinod'un vurguladığı gibi, bilgisayar aritmetiği kâğıt kalem aritmetiği değildir.

Öğrenme çıktıları

  • Hatırlama — Yorumlayıcıyı, betiği, paketi, tümleşik geliştirme ortamını, atamayı ve kayan noktalı sayıyı tanımlar.
  • Anlama — İktisatçıların neden hesap tablosu yerine Python ve R gibi programlama dillerine yöneldiğini ve kodla yapılan bir analizin tekrarlanabilirliği nasıl artırdığını açıklar.
  • Uygulama — Python'da ve R'da değişkenlere değer atar, temel aritmetik işlemlerle vergi, büyüme ve ortalama hesapları yapar, bir paketi kurup yükler.
  • Analiz — Bilgisayar aritmetiğinin kâğıt kalem aritmetiğinden neden farklı sonuçlar verebileceğini inceler ve iki ondalıklı sayıyı güvenli biçimde karşılaştırır.

Sezgi

Açılış

Bir iktisat öğrencisi, bitirme ödevi için Türkiye'nin son yirmi yılına ait enflasyon ve faiz verilerini bir hesap tablosuna yapıştırıyor. Birkaç sütun ekliyor, formülleri aşağı sürüklüyor, bir grafik çiziyor ve sonucu ödevine koyuyor. Üç ay sonra hocası, verilerin güncellenmiş hâliyle analizi yeniden yapmasını istiyor. Öğrenci hangi hücreye hangi formülü yazdığını, hangi satırları elle sildiğini ve grafiğin hangi aralığı kullandığını hatırlamıyor.

Aynı analizi yirmi satırlık bir kodla yapan bir başka öğrenci, veriyi güncelleyip kodu yeniden çalıştırıyor; bütün tablolar ve grafikler birkaç saniyede yenileniyor. Üstelik kodu okuyan herkes, her adımda ne yapıldığını görebiliyor.

Bu kurs, iktisat araştırmalarının gündelik aletleri hâline gelen Python'u ve R'ı tanıtıyor. İlk dersin sorusu basit: bu diller nereden geldi, bilgisayara nasıl kurulur ve bir analiz yazmaya başlamak için hangi temel kavramları bilmek gerekir?

Hikâye — Bir tatil projesi ve bir öğretim laboratuvarı

Aralık 1989'da Hollandalı programcı Guido van Rossum, Noel'i kapsayan haftada kendisini meşgul edecek bir hobi projesi arıyordu. Yıllar sonra bir kitaba yazdığı önsözde, Amsterdam'da devletin işlettiği bir araştırma laboratuvarında çalıştığını, ofisin o hafta kapalı olacağını, ama evde bir bilgisayarı olduğunu anlattı. Bir süredir üzerinde düşündüğü yeni bir betik dili için bir yorumlayıcı yazmaya karar verdi. Projeye geçici bir ad olarak Python dedi; kendi ifadesiyle biraz saygısız bir ruh hâlindeydi ve Monty Python's Flying Circus'ın büyük bir hayranıydı. Aynı önsözde, Python'un hayatını değiştirdiğini, başka bir kıtaya taşındığını ve çalışma günlerini Python'la büyük sistemler geliştirerek geçirdiğini yazdı.

Birkaç yıl sonra Yeni Zelanda'da, Auckland Üniversitesi'nde, istatistikçiler Ross Ihaka ile Robert Gentleman benzer bir işe girişti. Ihaka'nın anlattığına göre ikisinin de istatistiksel hesaplamaya ilgisi vardı ve Macintosh bilgisayarlarla donatılmış öğretim laboratuvarları için daha iyi bir yazılım ortamına ihtiyaç duyuyorlardı. Uygun bir ticari ortam bulamayınca kendileri geliştirmeyi denediler. Bell Laboratuvarları'nda geliştirilmiş S diline benzeyen bir sözdizimi seçtiler ve dile, iki kurucusunun adlarının baş harfine de uyan R adını verdiler.

Ağustos 1993'te R'ın ilk derlenmiş kopyalarını bir istatistik yazılımları arşivine koydular ve bir e-posta listesinde küçük bir duyuru yaptılar. Geri bildirim gönderenlerin en ısrarcısı, İsviçre Federal Teknoloji Enstitüsü'nden Martin Mächler'di; kaynak kodunun özgür yazılım olarak açılmasını istiyordu. Başta tereddüt ettiler, ama sonunda ikna oldular ve Haziran 1995'te kaynak kodunu GNU Genel Kamu Lisansı altında yayımladılar. İlgi ağızdan ağıza büyüdü; e-posta listesini elle yönetmek imkânsız hâle geldi, üstelik Auckland'da e-posta için para ödüyorlardı ve bu maliyet göze batmaya başlamıştı.

İki dil de bir kurumun satın aldığı pahalı bir ürün olarak değil, birkaç kişinin kendi ihtiyacı için başlattığı ve gönüllülerin geliştirdiği açık kaynak projeler olarak doğdu. Bugün Python, veri bilimi ve makine öğrenmesinin en yaygın dillerinden biri; R ise istatistik ve ekonometri araştırmalarında güçlü bir yere sahip. İktisatçıların çoğu, ikisinden birini ya da her ikisini birlikte kullanıyor.

Kavram

Python ve R'ın çalışma biçimini anlatan ilk kavram şudur.

Komutlar tek tek yazılabileceği gibi bir dosyada toplanabilir.

Dillerin gücü, başkalarının yazdığı hazır araçlardan gelir.

Kod yazmak için kullanılan ortamın adı şudur.

Her analiz, değerleri adlarla saklamakla başlar.

Son olarak, bilgisayarın ondalıklı sayıları nasıl sakladığını anlatan kavram şudur.

Veri ve kanıt

Bu bulgu, bu kursun neden var olduğunu açıklar. Yayımlanmış iktisat makalelerinin yarısından azı, yazarların yardımıyla bile tekrarlanabiliyordu. Sorunun bir kısmı verinin paylaşılmamasıydı; ama önemli bir kısmı, analizin adımlarının açık, eksiksiz ve yeniden çalıştırılabilir biçimde kaydedilmemesiydi. İki makalenin tekrarlanamamasının nedeni ise, araştırmacıların elinde yazarların kullandığı ücretli yazılımın bulunmamasıydı. Açık kaynak dillerle yazılmış, baştan sona çalışan bir betik, bu sorunların çoğunu önler.

İki çalışma, kodla çalışmanın iki farklı yüzünü gösterir. Chang ile Li, kodun paylaşılmasının ve yeniden çalıştırılabilmesinin önemini; McCullough ile Vinod ise, çalışan bir kodun bile yanlış sonuç verebileceğini hatırlatır. Bir programın bir sayı üretmesi, o sayının doğru olduğu anlamına gelmez. Bu yüzden bu kurs, yalnızca kod yazmayı değil, sonuçları denetlemeyi de öğretir.

Yaygın yanlış«Python ile R'dan birini seçmek zorundayım; biri doğru, öbürü yanlış tercihtir.»
Doğrusu

İki dil de iktisat araştırmalarında yaygın olarak kullanılır ve temel işlemleri benzer biçimde yapar. R, istatistik ve ekonometri paketlerinin zenginliğiyle, Python ise genel amaçlı programlama ve makine öğrenmesi araçlarıyla öne çıkar. Birini iyi öğrenmek, öbürüne geçişi de kolaylaştırır; pek çok iktisatçı ikisini birlikte kullanır.

Yaygın yanlış«Bilgisayar hesap yaptığına göre sonuç kesinlikle doğrudur.»
Doğrusu

Bilgisayar ondalıklı sayıları sınırlı basamakla saklar ve bu yüzden küçük yuvarlama hataları yapar; McCullough ile Vinod'un gösterdiği gibi bazı yazılımlar ciddi sayısal hatalar da içerebilir. Ayrıca kod, kullanıcının yazdığını yapar, kastettiğini değil: yanlış bir formül, yanlış bir sonucu hızla ve tutarlı biçimde üretir. Sonuçları her zaman bilinen değerlerle ve elle yapılan kaba hesaplarla karşılaştırmak gerekir.

Neden önemli?

İktisatta veri ile çalışmak, artık yalnızca araştırmacıların değil, merkez bankalarında, bakanlıklarda, bankalarda ve danışmanlık şirketlerinde çalışan iktisatçıların da günlük işidir. Hesap tabloları küçük hesaplar için pratiktir; ama veri büyüdükçe, analiz tekrarlandıkça ve başkalarıyla paylaşıldıkça, her adımı kaydeden bir kod çok daha güvenilir ve verimli hâle gelir.

Kodla çalışmanın bir başka faydası şeffaflıktır. Bir politika notunun arkasındaki hesapları bir betik olarak paylaşan bir iktisatçı, okurlarının sonucu denetlemesine ve farklı varsayımlarla yeniden hesaplamasına izin verir. Bu, güveni artırır ve hataların erken fark edilmesini sağlar.

Türkiye'de de TCMB'nin EVDS servisi, TÜİK'in sayısal veri tabanları ve uluslararası kurumların veri arşivleri, verilere programlama dilleriyle doğrudan erişilmesine olanak veriyor. Bu kursun sonraki derslerinde bu verilere nasıl ulaşılacağını, onların nasıl temizleneceğini, görselleştirileceğini ve analiz edileceğini adım adım göreceğiz. İlk adım, araçları kurmak ve dilin temel kavramlarını öğrenmektir.

Model

Çözümlü örnek — Python'u kurmak ve ilk komutu çalıştırmak

Python, dilin resmî sitesi olan python.org'dan işletim sisteminize uygun kurulum dosyası indirilerek kurulabilir. Bazı işletim sistemlerinde Python zaten yüklü gelir; ama bu sürüm eski olabilir ve sistemin kendi işleri için kullanılıyor olabilir, bu yüzden ayrı bir kurulum çoğu zaman daha güvenlidir. Kurulumdan sonra bir terminal ya da komut istemi açıp Python'un çalıştığını denetleriz. Hangi komutun geçerli olduğu işletim sistemine göre değişir; aşağıdakilerden biri Python'un sürüm numarasını yazdırmalıdır.

  • python3 --version
  • python --version

Sürüm numarası görünüyorsa, yorumlayıcı hazırdır. Terminalde python3 ya da python yazıp Enter'a basarsak etkileşimli yorumlayıcı açılır ve komutları tek tek yazıp sonuçlarını hemen görebiliriz. İlk komut olarak şunu deneyelim.

  • print("Merhaba, iktisat")

Ekranda Merhaba, iktisat yazısı görünür. print, kendisine verilen değeri ekrana yazan bir fonksiyondur. Yorumlayıcıdan çıkmak için exit() yazmak yeterlidir. Kurulumda en sık karşılaşılan sorun, terminalin Python'u bulamamasıdır; bu genellikle kurulum sırasında Python'un sistem yoluna eklenmemesinden kaynaklanır ve kurulum dosyasındaki ilgili seçenek işaretlenerek çözülür.

Çözümlü örnek — R'ı ve bir çalışma ortamını kurmak

R, Kapsamlı R Arşiv Ağı adıyla bilinen CRAN'dan, yani cran.r-project.org adresinden işletim sistemine uygun kurulum dosyası indirilerek kurulur. R'ın kendi basit konsolu vardır, ama çoğu kullanıcı R'ı RStudio gibi bir tümleşik geliştirme ortamının içinden kullanır. Sıra önemlidir: önce R, sonra ortam kurulur; ortam, bilgisayardaki R'ı bulup onu kullanır.

Ortam açıldığında, genellikle dört bölmeli bir pencere görürüz: betiğin yazıldığı düzenleyici, komutların çalıştığı konsol, bellekteki değişkenlerin listesi ve grafiklerin, dosyaların ve yardım sayfalarının görüntülendiği bir bölme. Konsola şu komutu yazalım.

  • print("Merhaba, iktisat")

R de aynı yazıyı ekrana basar. Python'da da R'da da, bir fonksiyonun ne yaptığını öğrenmek için yardım sayfasına bakılabilir: Python'da help(print), R'da ?print yazmak, fonksiyonun belgesini açar. Yeni bir dil öğrenirken en değerli alışkanlık, yardım sayfalarını okumaktır.

Çözümlü örnek — Atama ve temel aritmetik

Bir hanenin aylık geliri 50.000 lira ve bu gelirin yüzde 20'si vergi olarak kesiliyor olsun. Hesabı iki dilde yapalım; Python'daki satırlar şunlardır.

  • gelir = 50000
  • vergi_orani = 0.2
  • vergi = gelir * vergi_orani
  • print(vergi)

Ekranda 10000.0 görünür. R'da aynı hesap şöyledir.

  • gelir <- 50000
  • vergi_orani <- 0.2
  • vergi <- gelir * vergi_orani
  • print(vergi)

R ekrana 10000 yazar. Ondalık ayracın her iki dilde de nokta olduğuna, virgül olmadığına dikkat edelim: yüzde 20, 0,2 değil 0.2 olarak yazılır. Değişken adlarında Türkçe karakterlerden ve boşluklardan kaçınmak, farklı bilgisayarlarda ortaya çıkabilecek sorunları önler; vergi_orani gibi alt çizgili adlar hem okunaklı hem de güvenlidir. Python'un 10000.0, R'ın 10000 yazması ise bir fark değil, iki dilin sonucu ekrana yazma biçimidir: her iki sonuç da aynı sayıdır. Sayılar varsayımdır.

Çözümlü örnek — Büyüme ve yüzde değişim

Bir ürünün fiyatı geçen yıl 120 lira, bu yıl 150 lira olsun. Yüzde değişim, fark bölü başlangıç değeri çarpı 100'dür. Python'da hesap aşağıdaki gibi yazılır.

  • fiyat_once = 120
  • fiyat_sonra = 150
  • print((fiyat_sonra - fiyat_once) / fiyat_once * 100)

Sonuç 25.0'dır. R'da aynı satırlar, eşittir yerine okla yazılarak çalıştırılır ve 25 sonucunu verir.

Bileşik büyüme için üs alma işlemine ihtiyacımız var. 100 liralık bir fiyat, üç yıl boyunca her yıl yüzde 45 artarsa ne olur? Python'da üs alma iki yıldızla, R'da şapka işaretiyle yazılır.

  • Python: 100 * (1 + 0.45) ** 3
  • R: 100 * (1 + 0.45)^3

Her iki dil de 304.8625 sonucunu verir: fiyat üç yılda üç katından fazlasına çıkmıştır. Parantezlerin yeri önemlidir: 100 1 + 0.45 * 3 yazsaydık, üs alma önce yapıldığı için yalnızca 0,45'in küpü hesaplanır ve sonuç 100,09'a yakın, tamamen yanlış bir sayı olurdu. İşlem önceliği, kodda da matematikteki gibidir. Sayılar varsayımdır.

Çözümlü örnek — Ortalama ve bölme türleri

Üç yıllık enflasyon oranları yüzde 60, 50 ve 40 olsun. Ortalamayı iki dilde hesaplayalım.

  • Python: sum([60, 50, 40]) / 3
  • R: mean(c(60, 50, 40))

Her ikisi de 50 sonucunu verir. Python'da köşeli parantezle, R'da c fonksiyonuyla birden çok değer bir arada tutulur; bu yapıları sonraki derste ayrıntılı olarak göreceğiz. R'ın ortalama için hazır bir fonksiyonu vardır; Python'un temel dilinde ise toplamı eleman sayısına böleriz.

Bölmenin üç türü vardır. 17 ayın kaç yıl ve kaç ay ettiğini bulmak isteyelim.

  • Python: 17 / 12, 17 // 12, 17 % 12
  • R: 17 / 12, 17 %/% 12, 17 %% 12

İlk işlem olağan bölmedir ve yaklaşık 1,417 verir. İkincisi tam sayı bölmesidir ve 1 verir: bir tam yıl. Üçüncüsü kalandır ve 5 verir: artan beş ay. Kalan işlemi, çeyreklik ya da aylık verilerde dönemleri gruplandırırken sık kullanılır. Sayılar varsayımdır.

Çözümlü örnek — Kâğıt kalem ile bilgisayar arasındaki fark

Kâğıt üzerinde 0,1 ile 0,2'nin toplamı 0,3'tür. Python'da şunları deneyelim.

  • print(0.1 + 0.2)
  • print(0.1 + 0.2 == 0.3)

İlk satır 0.30000000000000004, ikinci satır False sonucunu verir. Bilgisayar 0,1'i ve 0,2'yi ikili sistemde tam olarak saklayamaz; en yakın değerleri saklar ve bu küçük farklar toplamda görünür hâle gelir. R'da print(0.1 + 0.2) ekrana 0.3 yazar, çünkü R sonucu varsayılan olarak daha az basamakla gösterir; ama 0.1 + 0.2 == 0.3 karşılaştırması R'da da FALSE verir. Sayının kendisi aynıdır, yalnızca gösterimi farklıdır.

İki ondalıklı sayıyı karşılaştırırken, tam eşitlik yerine farkın çok küçük olup olmadığına bakmak gerekir.

  • Python: import math ve ardından math.isclose(0.1 + 0.2, 0.3)
  • R: isTRUE(all.equal(0.1 + 0.2, 0.3))

Her ikisi de doğru sonucunu verir. Bir başka örnek, büyük ve küçük sayıların birlikte kullanıldığı hesaplardır: Python'da 1e16 + 1 - 1e16 işlemi 1 değil 0.0 verir, çünkü 10 üzeri 16 gibi büyük bir sayıya eklenen 1, sınırlı basamak içinde kaybolur. McCullough ile Vinod'un vurguladığı gibi, bilgisayar aritmetiği kâğıt kalem aritmetiği değildir; büyük veri setlerinde toplama sırası bile sonucu küçük ölçüde değiştirebilir.

Çözümlü örnek — Hata mesajını okumak

Kod yazarken hata yapmak kaçınılmazdır; önemli olan, hata mesajını okuyabilmektir. Önceki örnekte gelir değişkenini tanımladıktan sonra, adını yanlış yazarak çağıralım.

  • Python: print(gelirr)
  • R: print(gelirr)

Python şu mesajı verir: NameError: name 'gelirr' is not defined. R ise, gelirr adında bir nesne bulunamadığını söyleyen bir hata verir. İki mesaj da aynı şeyi söyler: bu adla bir değer atanmamıştır. Çözüm, yazım hatasını düzeltmektir. Hata mesajları, ilk bakışta korkutucu görünse de, çoğu zaman sorunun ne ve nerede olduğunu tam olarak söyler; mesajın son satırı genellikle en bilgilendirici kısmıdır.

Bir başka sık hata, metin ile sayının karıştırılmasıdır. Bir veri dosyasından okunan değerler bazen sayı olarak değil, metin olarak gelir. Tırnak içindeki 5 bir metindir, tırnaksız 5 bir sayı.

  • Python: "5" + 3
  • R: "5" + 3

Python, bir metinle bir tam sayının birleştirilemeyeceğini söyleyen bir TypeError verir; R ise ikili bir işleme sayısal olmayan bir değer verildiğini bildiren bir hata verir. Metni önce sayıya çevirmek gerekir.

  • Python: int("5") + 3
  • R: as.numeric("5") + 3

Her ikisi de 8 sonucunu verir. Bu hata, iktisat verileriyle çalışırken sık görülür: binlik ayracı olarak nokta, ondalık ayracı olarak virgül kullanan Türkçe biçimli bir dosyadan okunan 1.234,5 gibi bir değer, dil tarafından sayı olarak tanınmaz. Verinin nasıl okunacağını ve temizleneceğini bu kursun ilerleyen derslerinde ayrıntılı olarak göreceğiz. Bir hata mesajını anlamadığınızda, mesajın metnini olduğu gibi bir arama motoruna yazmak da çoğu zaman işe yarar; aynı hatayla karşılaşmış birinin sorusu ve cevabı büyük olasılıkla çevrimiçi bir forumda bulunur.

Çözümlü örnek — Paket kurmak ve yüklemek

Python'da veri tablolarıyla çalışmak için pandas, R'da veri düzenlemek için dplyr paketi yaygın kullanılır. Paketler bir kez kurulur. Python'da kurulum terminalden yapılır.

  • python3 -m pip install pandas

pip, Python'un paket yöneticisidir; -m pip yazımı, paketin tam olarak hangi Python kurulumuna ekleneceğini açık kılar. R'da kurulum R'ın içinden yapılır.

  • install.packages("dplyr")

Kurulan paket, her yeni oturumda ya da betikte kullanılmadan önce yüklenir.

  • Python: import pandas as pd
  • R: library(dplyr)

Python'daki as pd ifadesi, pakete kısa bir takma ad verir; bundan sonra paketin fonksiyonları pd. ön ekiyle çağrılır. Paket yüklenmemişse, onun bir fonksiyonunu kullanmaya çalışan kod bir hata mesajı verir. Kurulum ile yükleme arasındaki bu ayrım, yeni başlayanların en sık karıştırdığı konulardan biridir: kurmak, kitabı rafa koymaktır; yüklemek, onu raftan alıp masaya açmaktır.

Paketlerin de sürümleri vardır ve bir paketin yeni sürümü, bir fonksiyonun davranışını değiştirebilir. Bugün çalışan bir betik, iki yıl sonra paketler güncellendiğinde farklı bir sonuç verebilir ya da hiç çalışmayabilir. Bu yüzden ciddi bir analizde, kullanılan dil ve paket sürümlerini bir dosyaya kaydetmek iyi bir alışkanlıktır: Python'da python3 -m pip freeze komutu kurulu paketleri sürümleriyle listeler, R'da sessionInfo() fonksiyonu R'ın ve yüklü paketlerin sürümlerini gösterir. Chang ile Li'nin çalışmasında da iki makale, araştırmacıların elinde yazarların kullandığı yazılım bulunmadığı için tekrarlanamamıştı; hangi yazılımın ve hangi sürümün kullanıldığı, tekrarlanabilirliğin ayrılmaz bir parçasıdır.

Çözümlü örnek — İlk betiği yazmak

Şimdiye kadar komutları tek tek çalıştırdık. Bir betik, bu komutları bir dosyada toplar. Tümleşik geliştirme ortamında yeni bir dosya açıp, Python için vergi.py adıyla şu satırları kaydedelim.

  • # Aylık vergi hesabı
  • gelir = 50000
  • vergi_orani = 0.2
  • vergi = gelir * vergi_orani
  • net_gelir = gelir - vergi
  • print(net_gelir)

Diyez işaretiyle başlayan ilk satır bir yorumdur; yorumlayıcı onu çalıştırmaz, ama betiği okuyan kişiye ne yapıldığını anlatır. Betik terminalde python3 vergi.py komutuyla ya da ortamdaki çalıştır düğmesiyle baştan sona çalıştırılır ve ekrana 40000.0 yazar. Aynı betik R için vergi.R adıyla, eşittir yerine okla yazılarak kaydedilir ve 40000 yazar.

Artık vergi oranı değiştiğinde yalnızca bir satırı değiştirip betiği yeniden çalıştırmamız yeterlidir. Açılıştaki öğrencinin sorunu tam olarak budur: analizin her adımı bir dosyada kayıtlı olduğunda, üç ay sonra aynı analizi güncellenmiş veriyle yeniden yapmak birkaç saniye sürer. Sayılar varsayımdır.

Modelin sınırları

Kurulum adımları ve komutlar, metnin yazıldığı tarihteki yaygın uygulamayı yansıtıyor. Programlama dillerinin ve paketlerin yeni sürümleri çıktıkça, kurulum ekranları, komutların ayrıntıları ve bazı fonksiyonların davranışı değişebilir. Takıldığınız bir adımda, dilin ve paketin resmî belgelerine bakmak en güvenilir yoldur.

İşletim sistemleri arasında da farklar vardır: terminal komutlarının adı, dosya yollarının yazımı ve kurulumun yetki gerektirip gerektirmediği değişebilir. Bu derste verilen Python örnekleri çalıştırılarak denetlendi; R örnekleri ise dilin belgelenmiş standart davranışına dayanıyor. Kendi bilgisayarınızda her komutu çalıştırıp sonucun burada yazanla aynı olup olmadığını görmek, öğrenmenin en iyi yoludur.

Uygulama

Özet kartı

  1. Python, Guido van Rossum'un Aralık 1989'da bir hobi projesi olarak başlattığı; R ise Ross Ihaka ile Robert Gentleman'ın Auckland Üniversitesi'ndeki öğretim laboratuvarı için geliştirdiği ve Haziran 1995'te kaynak kodunu özgür yazılım olarak açtığı dillerdir; ikisi de açık kaynaklıdır ve iktisatta yaygın kullanılır.
  2. Python python.org'dan, R CRAN'dan kurulur; RStudio, Visual Studio Code ve Jupyter gibi tümleşik geliştirme ortamları, kod yazmayı, çalıştırmayı ve sonuçları görmeyi tek pencerede birleştirir.
  3. Atama, bir değeri bir ada bağlar: Python'da eşittir işaretiyle, R'da okla; temel aritmetik, üs alma, tam sayı bölmesi ve kalan işlemleri iki dilde de benzer biçimde yapılır ve ondalık ayracı noktadır.
  4. Paketler bir kez kurulur, her oturumda yüklenir; betikler, analizin bütün adımlarını baştan sona yeniden çalıştırılabilir biçimde kaydeder ve Chang ile Li'nin gösterdiği tekrarlanabilirlik sorununa karşı temel bir önlemdir.
  5. Bilgisayar ondalıklı sayıları kayan noktalı biçimde saklar; bu yüzden 0,1 ile 0,2'nin toplamı 0,3'e tam eşit çıkmaz ve McCullough ile Vinod'un vurguladığı gibi, bilgisayar aritmetiği kâğıt kalem aritmetiği değildir.

Kavram sözlüğü

TürkçeİngilizceKısa tanım
YorumlayıcıInterpreterKomutları okuyup hemen çalıştıran program
BetikScriptBir analizin bütün adımlarını içeren, yeniden çalıştırılabilir metin dosyası
PaketPackageBir dile sonradan eklenen fonksiyon, veri ve belge koleksiyonu
Tümleşik geliştirme ortamıIntegrated development environmentKod yazma, çalıştırma ve sonuçları görmeyi birleştiren program
AtamaAssignmentBir değeri bir ada bağlayarak bellekte saklamak
Kayan noktalı sayıFloating-point numberOndalıklı sayıların ikili sistemde sınırlı basamakla saklanma biçimi

Kendini sına

  1. (Çıktı 1) Paket kurmak ile paket yüklemek arasındaki farkı açıkla. Python'da ve R'da bu işlemler hangi komutlarla yapılır?
  2. (Çıktı 2) Bir analizi hesap tablosu yerine bir betikle yapmanın tekrarlanabilirlik açısından üstünlüğü nedir? Chang ile Li'nin bulgusu bu konuda ne söylüyor?
  3. (Çıktı 3) Python'da gelir = 80000 ve vergi_orani = 0.15 atamalarını yaptıktan sonra net geliri hesaplayan satırı yaz. Sonuç ne olur? Aynı hesabı R'da nasıl yazarsın?
  4. (Çıktı 3) 200 liralık bir fiyat, art arda iki yıl yüzde 30'ar artıyor. Bu hesabı Python'da ve R'da tek satırla nasıl yazarsın ve sonuç nedir? 29 ayın kaç yıl ve kaç ay ettiğini iki dilde hangi işlemlerle bulursun?
  5. (Çıktı 4) Python'da 0.1 + 0.2 == 0.3 karşılaştırması neden False verir? R'da print(0.1 + 0.2) ekrana 0.3 yazdığı hâlde aynı karşılaştırma neden yine FALSE verir? İki ondalıklı sayıyı güvenli biçimde nasıl karşılaştırırsın?
  6. (Çıktı 4) Bir arkadaşın, «Programın hesapladığı sonuç kesinlikle doğrudur; bilgisayar hata yapmaz» diyor. McCullough ile Vinod'un bulgusundan ve bu dersteki örneklerden yararlanarak bu görüşün neden yanıltıcı olduğunu göster.

Cevaplar

  1. Paket kurmak, paketi bilgisayara indirip eklemektir ve bir kez yapılır; paket yüklemek ise, kurulu paketi o oturumda ya da betikte kullanıma açmaktır ve her yeni oturumda tekrarlanır. Python'da kurulum terminalden python3 -m pip install pandas ile, yükleme import pandas as pd ile yapılır. R'da kurulum install.packages("dplyr") ile, yükleme library(dplyr) ile yapılır.
  2. Bir betik, analizin her adımını, yani verinin okunmasını, temizlenmesini, hesaplamaları ve grafikleri, sırasıyla ve açıkça kaydeder; veri güncellendiğinde betik yeniden çalıştırılarak bütün sonuçlar yenilenebilir ve başkaları her adımı görebilir. Hesap tablosunda ise elle yapılan düzeltmeler ve formül değişiklikleri kolayca kaybolur. Chang ile Li, 67 iktisat makalesinin yalnızca yüzde 33'ünü yazarlarla iletişime geçmeden, yazarların yardımıyla bile yalnızca 59 makalenin yüzde 49'unu tekrarlayabildi; eksiksiz ve paylaşılmış kod ve veri, bu sorunu azaltır.
  3. Python'da net_gelir = gelir (1 - vergi_orani) ya da net_gelir = gelir - gelir vergi_orani yazılır ve print(net_gelir) 68000.0 verir. R'da gelir <- 80000, vergi_orani <- 0.15, net_gelir <- gelir * (1 - vergi_orani) yazılır ve print(net_gelir) 68000 verir.
  4. Python'da 200 (1 + 0.30) 2, R'da 200 (1 + 0.30)^2 yazılır; doğru sonuç 338'dir. Ama Python ekrana 338.00000000000006 yazar: 0,30 da ikili sistemde tam saklanamaz ve bu küçük fark sonuca yansır. R, sonucu daha az basamakla gösterdiği için ekrana 338 yazar. Sonucu raporlarken yuvarlamak, örneğin Python'da round(200 1.3 * 2, 2), bu gürültüyü giderir. 29 ay için Python'da 29 // 12 işlemi 2 yıl, 29 % 12 işlemi 5 ay verir; R'da aynı sonuçlar 29 %/% 12 ve 29 %% 12 ile bulunur.
  5. Bilgisayar 0,1 ve 0,2'yi ikili sistemde tam olarak saklayamaz ve en yakın değerleri saklar; bu yüzden toplamları 0.30000000000000004 olur ve 0,3'e tam eşit değildir. R, sonucu varsayılan olarak daha az basamakla gösterdiği için ekrana 0.3 yazar, ama saklanan sayı aynıdır ve karşılaştırma FALSE verir. İki ondalıklı sayıyı karşılaştırırken tam eşitlik yerine farkın çok küçük olup olmadığına bakılır: Python'da math.isclose(0.1 + 0.2, 0.3), R'da isTRUE(all.equal(0.1 + 0.2, 0.3)) kullanılır.
  6. Görüş yanıltıcıdır. Bilgisayar ondalıklı sayıları sınırlı basamakla saklar; bu yüzden 0,1 ile 0,2'nin toplamı 0,3'e tam eşit çıkmaz ve 1e16 + 1 - 1e16 gibi bir işlem 1 değil 0 verir. McCullough ile Vinod, bazı ekonometri yazılımlarının ciddi sayısal kusurlar içerdiğini ve kullanıcıların yazılımlarının doğru olduğunu güvenle varsayamayacağını gösterdi. Ayrıca kod, kullanıcının yazdığını yapar: parantezleri yanlış yere koymak ya da yanlış bir değişken adı kullanmak, hatasız görünen ama yanlış bir sonuç üretebilir. Sonuçları bilinen değerlerle ve kaba el hesaplarıyla denetlemek gerekir.

İleri okuma

  • Guido van Rossum (1996). «Foreword for "Programming Python" (1st ed.)». python.org. Python'un doğuşunu kurucusunun kendi anlatımıyla veren kısa metin.
  • Ross Ihaka (1998). «R: Past and Future History». Interface '98 için hazırlanan bildiri taslağı, CRAN. R'ın doğuşu ve özgür yazılım olarak açılması.
  • Andrew C. Chang, Phillip Li (2015). «Is Economics Research Replicable? Sixty Published Papers from Thirteen Journals Say "Usually Not"». Finance and Economics Discussion Series 2015-083. İktisat araştırmalarının tekrarlanabilirliği.
  • B. D. McCullough, H. D. Vinod (1999). «The Numerical Reliability of Econometric Software». Journal of Economic Literature 37(2). Bilgisayar aritmetiği ve yazılım doğruluğu.

Sonraki derse köprü

Bu derste değişkenlere tek tek değerler atadık; yalnızca ortalama hesaplarken, Python'da köşeli parantezle, R'da c fonksiyonuyla birden çok değeri bir arada tuttuk. Oysa iktisat verileri neredeyse hiçbir zaman tek bir sayıdan oluşmaz: bir enflasyon serisi yüzlerce aylık gözlem, bir hane anketi binlerce satır ve onlarca sütun içerir. Sıradaki ders veri yapılarını ele alıyor. Python'daki listeler ve sözlükler ile R'daki vektörler ve listeler nasıl çalışır? Satırları gözlemlere, sütunları değişkenlere karşılık gelen veri tabloları, iktisatçının en temel çalışma nesnesi olarak nasıl kurulur ve kullanılır?

Anlamadığın bir yer mi var?

Mentor yalnız bu dersin metnine dayanarak cevap verir. Metinde geçmeyen bir şey sorarsan uydurmaz, geçmediğini söyler.

Animasyon ve seslendirme notları

Animasyon ve seslendirme notları

Video akışı

  • Açılış: ekranda iç içe geçmiş hücre formülleri ve elle boyanmış hücreler; ardından aynı analizin kısa bir betik olarak yazılmış hâli ve tek tuşla yenilenen grafikler.
  • Hikâye: 1989'un Aralık ayında Amsterdam'da kapalı bir ofis ve evde bir bilgisayar başında çalışan bir programcı; ardından Auckland'da Macintosh bilgisayarlarla dolu bir öğretim laboratuvarı ve dünyaya yayılan e-posta çizgileri.
  • Kavram: bir yorumlayıcının komutu okuyup sonucu hemen ekrana yazması; bir rafa konan ve oradan masaya alınan kitap olarak paket kurma ve yükleme.
  • Veri ve kanıt: 67 makaleden 22'sinin, sonra 59 makaleden 29'unun yeşile döndüğü bir ızgara; ardından ekranda 0.30000000000000004 sayısının yakın plan görüntüsü.
  • Model: iki dilde yan yana yazılmış aynı vergi hesabı ve aynı sonucun iki farklı gösterimi.
  • Neden önemli: bir politika notunun ekinde paylaşılan bir betik ve onu farklı bir varsayımla yeniden çalıştıran bir okur.

Seslendirme, Python ile R arasında bir taraf tutmaz; iki dilin güçlü yanlarını ve ortak temel kavramlarını birlikte anlatır. Van Rossum'un ve Ihaka'nın anlatımları, kendi yayımlanmış metinlerinden aktarılmıştır. Ekranda gösterilen kod satırları, dersin metnindeki satırlarla birebir aynıdır.

Kısa kesit

Telefon ekranı için kırpılmış kısa kesit. Seslendirme: «Bilgisayara 0,1 ile 0,2'yi topla dedik. Cevap 0,3 değildi.» Ekranda 0.30000000000000004. «Neden? Ve bu, iktisat araştırmaları için neden önemli?» Kapanış: «Kurulum ve temel kavramlar. Derste.»