görmüştük. Bu sefer biraz daha farklı bir işe girişeceğiz. Bunun için iki tane dosyayı bilgisayarınıza indirip oradan devam etmenizi tavsiye ederim. Bu dosyalardan biri ders 14 sonundaki veri dosyası, diğeri de aşağıda TCMB'den indirilecek aylık enflasyon veri seti
Dosya adı: 20171123-ders14sonu.rds: Bu dosyada 14.ders sonunda elde ettiğimiz tüm veriler var.
Öncelikle bu bölümde işiminizin düşebileceği kütüphanelerden "xts"'i hemen yükleyelim. Eğer yüklenmiyorsa, kurmanız gerekir onun için
install.packages("xts")
In [1]:
library(xts)
Loading required package: zoo
Attaching package: 'zoo'
The following objects are masked from 'package:base':
as.Date, as.Date.numeric
Ben bu kodlamayı defalarca çalıştırdığım için kullandığım verilerin hepsini sıfırlıyorum. Belki göremediğim ve sütun veya satır kalmasın, daha önceki işlemlerden kalan rakamlar tamamen silinsin diye.
Şimdi zaman serisi olarak bir önceki dersten gelen veri dosyamızı okuyalım.
Dosyayı indirmek için bu linki kullanabilirsiniz :20171123-ders14sonu.rds
Normalde readRDS olarak okumak yeterliyken, zaman serisi verilerini doğru çekmediğini gördüğümden, readRDS'de bir de as.xts komutu ile (xts - zaman serisi) olarak oku talimatını veriyorum
Veri setimizde yer alan her bir sütunun birbiri ile ilişkisine bakmak için
cor komutuna
tüm veri tablomuzu giriyoruz. Korelasyon tablosu 0-1 arasında, değerler verecek. Burada hangi sütun hangisi ile ne kadar ilişkili onu göreceğiz. Mesela aşağıdaki tabloda, akaryakıttaki KDV'nin Toplam yakıt bedeli ile korelasyonu 1 çıkmaktadır. Çünkü KDV tüm diğer bedellerin %18'i, dolayısıyla Toplam bedel de tüm diğer bedellerin %118'dir
R'da günlük bir veriyi, zaten zaman serisi olarak belirledi isek, apply_monthly komutu ile aylık veriye çevirebiliriz. Ben aşağıda örnek olsun diye toplam verilerin herbirinin sütun sütun aylık veriye çevrilmesini gösterdim. apply_montly komutuna mean ekleyerek ortalamaları buluyoruz.
In [221]:
# Bu satırı çalıştırmasak da olur
toplam_ay<-apply.monthly(toplam$Toplam,mean)
brenttl_ay<-apply.monthly(toplam$brentTL,mean)
kur_ay<-apply.monthly(toplam$kur,mean)
Her bir sütunu ayrı ayrı aylık veriye çevireceğimize, hepsini tek elden, aşağıdaki şekilde aylık değerlere çevirerek,
tot_ay değişkenine aktarabiliriz.
In [222]:
tot_ay<-apply.monthly(toplam,mean)
Şimdi aylık verilere baktığımızda verilerin ortalamasının ay sonu itibari ile verildiğini göreceğiz.
Şimdide de aylık ortalamalı verilerin birbiri ile korelasyonuna bakalım, komutumuz tekrar cor
In [224]:
cor(tot_ay)
WTI
Brent
LADizel
Brent2Dizel
kur
ABDBrentDizelTL
OTV
Marj
KDV
Toplam
brentTL
WTI
1.0000000
0.96838460
0.96399350
0.89112477
-0.4727313
0.4105422
-0.12726057
-0.14993403
0.1576027
0.1576027
0.5235142
Brent
0.9683846
1.00000000
0.98280745
0.96966738
-0.3849722
0.5573512
-0.01542177
-0.03780419
0.2975524
0.2975524
0.6381576
LADizel
0.9639935
0.98280745
1.00000000
0.97027138
-0.4027807
0.5377437
-0.05740604
-0.09051068
0.2631729
0.2631729
0.6003810
Brent2Dizel
0.8911248
0.96966738
0.97027138
1.00000000
-0.3040714
0.6500180
0.05083423
0.02102064
0.3825313
0.3825313
0.6807201
kur
-0.4727313
-0.38497218
-0.40278073
-0.30407136
1.0000000
0.5025619
0.86835215
0.88721628
0.7358573
0.7358573
0.4353500
ABDBrentDizelTL
0.4105422
0.55735116
0.53774368
0.65001796
0.5025619
1.0000000
0.73716671
0.70519881
0.9355330
0.9355330
0.9753797
OTV
-0.1272606
-0.01542177
-0.05740604
0.05083423
0.8683522
0.7371667
1.00000000
0.96398015
0.9269497
0.9269497
0.7091317
Marj
-0.1499340
-0.03780419
-0.09051068
0.02102064
0.8872163
0.7051988
0.96398015
1.00000000
0.9006598
0.9006598
0.6779632
KDV
0.1576027
0.29755238
0.26317292
0.38253126
0.7358573
0.9355330
0.92694969
0.90065981
1.0000000
1.0000000
0.9073252
Toplam
0.1576027
0.29755238
0.26317292
0.38253126
0.7358573
0.9355330
0.92694969
0.90065981
1.0000000
1.0000000
0.9073252
brentTL
0.5235142
0.63815765
0.60038101
0.68072009
0.4353500
0.9753797
0.70913169
0.67796325
0.9073252
0.9073252
1.0000000
Aylık Verileri Merkez Bankası Enflasyon verisi ile birleştirmek¶
Elimizde aylık akaryakıt verileri tablosu var. Şimdi TCMB(Merkez Bankasından) aylık enflasyon verilerini indirmek için yeniden tcmb_evds fonksiyonunu ve kullanmak için gerekli kütüphaneleri tanıtıyorum.
Zekice birşey yapıp herşeyi tek satırda bitirebilirsiniz. Ben veri analizinde daha temkinli olmaktan yanayım, büyük veri setleri ile çalışırken bir dikkatsizlik uzun süre görülmeden tüm bir analizi etkileyebilir.
TCMB EVDS'ye kayıt olunca, profil kısmından aldığımız anahtar ile birlikte veriyi alıyoruz
UYARI: Bu kısmı Azure Notebooks'da çalıştırırken sorunlar yaşadım. Ama diğerlerinde herhangi sorun görmedim.
Elimizde tot_ay değişkeninde daha önce hesapladığımız değişkenler vardı. Şimdi orada bir satır açarak:
tot_ay\$enf<-0
ile bu sütunun içine enf değişkeninin içindeki değişkenleri ekleyeceğiz.
Dikkat edilirse 155 satırlık değişken havuzunda sadece 154 satıra değişken atıyorum. Çünkü enf değişkeni PROGRAMIN YAZILDIĞI TARİHTE KASIM ENFLASYON VERİSİNİ İÇERMİYORDU
Eksik olan veri de son veri, yani kasım verisi.
Bunu head(enf) veya tail(enf) ile kontrol edebilirsiniz.
In [229]:
tot_ay$enf<-0
tot_ay$enf[1:154]<-t(enf[1:154,2])
Şimdi toplam matrisimizde kaç veri var(length), kaç sütun var(ncol) ve kaç satır var (nrow) onu görelim
Aylık verilerin ilişkisi ve Sonraki ay enflasyon verisinin eklenmesi¶
Tüm veriler yerli yerinde ise, şimdi aylık verilerin ilişkisine bakabiliriz
In [233]:
cor(tot_ay)
WTI
Brent
LADizel
Brent2Dizel
kur
ABDBrentDizelTL
OTV
Marj
KDV
Toplam
brentTL
enf
WTI
1.0000000
0.96838460
0.96399350
0.89112477
-0.4727313
0.4105422
-0.12726057
-0.14993403
0.1576027
0.1576027
0.5235142
-0.19619795
Brent
0.9683846
1.00000000
0.98280745
0.96966738
-0.3849722
0.5573512
-0.01542177
-0.03780419
0.2975524
0.2975524
0.6381576
-0.10298040
LADizel
0.9639935
0.98280745
1.00000000
0.97027138
-0.4027807
0.5377437
-0.05740604
-0.09051068
0.2631729
0.2631729
0.6003810
-0.14854374
Brent2Dizel
0.8911248
0.96966738
0.97027138
1.00000000
-0.3040714
0.6500180
0.05083423
0.02102064
0.3825313
0.3825313
0.6807201
-0.05315418
kur
-0.4727313
-0.38497218
-0.40278073
-0.30407136
1.0000000
0.5025619
0.86835215
0.88721628
0.7358573
0.7358573
0.4353500
0.82173823
ABDBrentDizelTL
0.4105422
0.55735116
0.53774368
0.65001796
0.5025619
1.0000000
0.73716671
0.70519881
0.9355330
0.9355330
0.9753797
0.57020368
OTV
-0.1272606
-0.01542177
-0.05740604
0.05083423
0.8683522
0.7371667
1.00000000
0.96398015
0.9269497
0.9269497
0.7091317
0.88363612
Marj
-0.1499340
-0.03780419
-0.09051068
0.02102064
0.8872163
0.7051988
0.96398015
1.00000000
0.9006598
0.9006598
0.6779632
0.90800879
KDV
0.1576027
0.29755238
0.26317292
0.38253126
0.7358573
0.9355330
0.92694969
0.90065981
1.0000000
1.0000000
0.9073252
0.78212657
Toplam
0.1576027
0.29755238
0.26317292
0.38253126
0.7358573
0.9355330
0.92694969
0.90065981
1.0000000
1.0000000
0.9073252
0.78212657
brentTL
0.5235142
0.63815765
0.60038101
0.68072009
0.4353500
0.9753797
0.70913169
0.67796325
0.9073252
0.9073252
1.0000000
0.55089856
enf
-0.1961980
-0.10298040
-0.14854374
-0.05315418
0.8217382
0.5702037
0.88363612
0.90800879
0.7821266
0.7821266
0.5508986
1.00000000
Normalde bugün ki kur, petrol fiyatı vs'nin enflasyona etkisi sonraki dönemlerde etkisini gösteriyor olabilir. Bu sebeple, enflasyonu 1,2 ve 6 ay önce çekerek analizlere tekrar bakmamız gerekiyor. Bu ileri geri mantığı benim aklımı hep karıştırıyor. O yüzden yapmak istediğim bu ay ki fiyatlar ile gelecek ay ki enflasyonun aynı satıra gelmesi
Normalde enflasyonu sabit tutup, 1,2 ve 6 dönem(ay) önceki fiyat verileri ile ilişkiye bakmak gerekirdi. Ama bunların yerine ben sadece enflasyonu kaydırmayı tercih ettim
Bunun için de lag komutunu kullanıyoruz. Aylık toplam veri tablosuna (tot_ay)'a
enf_1 (Bir ay sonraki enflasyon)
enf_2 (İki ay sonraki enflasyon)
enf_6 (Altı ay sonraki enflasyon)
verilerini ekliyoruz.
Şimdi de verilerin birbiri ile hareketini değil, verilerin aydan aya değişimlerinin birbiri ile ilişkisine bakalım.
Bu kısımda biraz karışık olabilir. lag komutu biraz farklı hareket ediyor. Bir sonraki dönemi istiyorsanız (-1) vermeniz gerekir. Aşağıdaki formülde bir ay sonraki değişkenleri o ayki değişkenlere oranlayarak 1 çıkarıyorum. Yani % değişim oranını buluyorum
Bu seferki analiz biraz daha karışık oldu. Günlük verileri aldık, aylığa çevirdik, enflasyon verisi ekledik. Sonra enflasyon verisinin 1,2 ve 6 ay sonraki verilerini de tabloya sütun olarak yerleştirdik. Otomatik model, korelasyon, herşeye bakmış olduk.
Bu analizin yazısını www.barissanli.com adresindeki 2017 yılı çalışmaları içinde bulabilirsiniz.
Aslında bu analizler çok daha basit analizler. Gelişmiş analiz yöntemlerini internette arayarak da bulabilirsiniz.