Python ile TCMB Analitik Bilançosunu İncelemek
Doç.Dr. VeriDelisi
Bu yazıda hem python ile bilgi analitiği konusuna giriş yapacaksınız hem de TCMB analitik bilançosunu inceleme bahtı bulacaksınız.
Python’a yeni başladıysanız sizlere şu 3 hoş kaynağı önereceğim. Bu yazıyı bitirdikten sonra kesinlikle kurcalayın.
Python ve Bilgi Analitiği için 3 Kaynak
Edube Python 101 için en âlâ online fiyatsız kurstur.
Python for Veri Analysis, edube sonrasında data analitiği konusunda bir adım daha atmanızı sağlayacaktır.
Python Tutor ise yazdığınız kodları görselleştirme yoluyla sizlere anlatmaya çalışan hoş bir araçtır.
JUPYTER KURULUMU
Kodlarımız çalıştırmak için jupyter’e gereksinimimiz var. Jupyter’i bilgisayara yüklemek için en kolay yol ise Anacondayı bilgisayarınıza indirmektir.
Jupyter’i direkt kurabilirim derseniz şurada linki var.
Herşey yolunda ise web browser üzerinde yeni bir sayfa açılacak ve aşağıdaki sayfayı göreceksiniz. Açılan sayfada “New
Jupyter ana sayfa
EVDS PAKETİNİ İNDİRME VE API KEY ALMA
Açılan sayfada birinci satıra şu kodu ( pip install evds –upgrade) yazarak evds paketini çağıracağız. Kodu yapıştırdıktan sonra “Run” butonuna basın. Bundan sonra her kodu yeni satıra yapıştırdıktan sonra çalışması için “Run” butonuna basacağız. Bir daha tekrar etmeyeceğim.
jupyter ana sayfa evds kurulumu
Yukarıdaki screenshot’ın sağ tarafında Python 3 yazan yerin yanında siyah yuvarlağın içi boşalana kadar yükleme sürecektir. Yaklaşık 35 saniye kadar sürüyor.
Yükleme tamamlandıysa aşağıda yeni bir satır açılacaktır. Açılan yeni satıra şu kodu (from evds import evdsAPI) yapıştırarak evds paketinden bilgileri çekmemize yardımcı olacak API aracına ulaşalım.
evdsAPI
Python 3 yazan yerin yanında siyah yuvarlağın içi boşalana kadar yükleme sürecektir. Yaklaşık 25 saniye kadar sürüyor.
Şimdi datalara erişebilmek için TCMB EVDS sayfasına kaydolmamız ve profil sayfamızdan API key‘imizi almalıyız.
Şu kodu yeni satıra yapıştıralım. Sizin API key dediğim yerde API key’iniz olacaktır.
evds = evdsAPI(‘Sizin API key‘)
HANGİ DATALARI ÇEKECEĞİZ ?
EVDS üzerinden şu adresten aşağıdaki dataları çekeceğiz.
Merkez Bankası Analitik Bilanço (Bin TL) (İş Günü)
TP.AB.A02 | A.1-DIŞ VARLIKLAR(Bin TL) |
TP.AB.A03 | A.2-İÇ VARLIKLAR(Bin TL) |
TP.AB.A08 | A.3-DEĞERLEME HESABI(BİN TL) |
TP.AB.A10 | P.1-TOPLAM DÖVİZ YÜKÜMLÜLÜKLERİ(Bin TL) |
TP.AB.A17 | P.2Aa-Emisyon(Bin TL) |
TP.AB.A18 | P.2Ab-Bankalar Mevduatı(Bin TL) |
TP.AB.A21 | P.2Ac-Fon hesapları(Bin TL) |
TP.AB.A22 | P.2Ad-Banka Dışı Kesim Mevduatı(Bin TL) |
TP.AB.A24 | P.2Ba-Açık Piyasa İşlemleri(Bin TL) |
TP.AB.A25 | P.2Bb-Kamu Mevduatı(Bin TL) |
Bu kalemlerin detaylarını şurada açıkladım.
VERİLERİ ÇEKİYORUZ
Yeni açılan kod satırına aşağıdaki kodunu yapıştırın ve çalıştırınız.
df=evds.get_data([‘TP.AB.A02′,’TP.AB.A03’, ‘TP.AB.A08′,’TP.AB.A10′,’TP.AB.A17′,’TP.AB.A18′,’TP.AB.A21’, ‘TP.AB.A22’, ‘TP.AB.A24′,’TP.AB.A25’], startdate=”01-01-2013″, enddate=”24-08-2023″)
Kontrol sağlamak için yeni açılan satıra aşağıdaki kodunu yapıştırın ve çalıştırınız.
df
evds data cekme df görüntüleme
Buraya kadar geldiyseniz devam edelim.
Verileri İşleyelim
Öncelikle sütun isimlerimizi düzenleyelim.
new_column_names = [‘Tarih’,’Dış Varlıklar’, ‘İç Varlıklar’, ‘Değerleme’, ‘Döviz Yükümlülükleri’, ‘Emisyon’, ‘Bankalar Mevduatı’, ‘Fon hesapları’, ‘BD Mevduatı’, ‘APİ’, ‘Kamu Mevduatı’]
df.columns = new_column_names
new_column_names isminde bir diziye sütun isimlerimizi ekliyoruz. Sonrasında bu dizi bilgilerini veri setimizin sütun isimleri olarak belirliyoruz.
Sonucu görmek için yeni açılan satıra df yazın ve çalıştırın.
Sadece sütun isimleri için ise df.columns yazın ve çalıştırın.
python sutun ismi değiştirme
Tarih Verisini İndex Yapma
Verilere dikkatle bakarsanız birinci sütunun 0,1,2,3 diye gitiğini göreceksiniz. İşte biz bu index sütunu dediğimiz yere Tarih verisini atayacağız ve bilgileri daha sağlıklı tahlil edeceğiz.
df.set_index(‘Tarih’, inplace=True)
sonucu görmek için df yazalım ve çalıştıralım.
İndex sütununu dönüştürme
BOŞ SATIRLARI YOK EDELİM
Tail var bayram var kimi günlerde TCMB verisi yayınlamaz. Bakın mesela: 01-01-2013 tarihinde bilgi yok.
Bu dataları veri setimizden kaldıralım.
df=df.dropna()
sonucu görmek için df yazalım ve çalıştıralım.
İstediğimiz Tarih Aralığındaki Dataları Görüntüleyelim
LOC METODU
loc ve iloc kullanarak istediğimiz datalara süratlice ulaşabiliriz.
loc metodu, satır ve sütun adları belirtilerek kullanılır:
02-01-2013 tarihli Kamu Mevduatı verisi için
df.loc[’02-01-2013′, ‘Kamu Mevduatı’]
02-01-2013 – 08-01-2013 tarihli Kamu Mevduatı dataları için
df.loc[’02-01-2013′:’08-01-2013′, ‘Kamu Mevduatı’]
02-01-2013 – 08-01-2013 tarihli Kamu Mevduatı ve APİ dataları için (Burada 2 dizi tanımlıyoruz)
df.loc[[’02-01-2013′, ’08-01-2013′], [‘Kamu Mevduatı’, ‘APİ’]]
02-01-2013 tarihli tüm datalar için
df.loc[’02-01-2013′]
02-01-2013 – 08-01-2013 tarihli tüm datalar için
df.loc[’02-01-2013′:’08-01-2013′]
ILOC METODU
iloc metodu, satır ve sütun indeksleri belirtilerek kullanılır:
02-01-2013 tarihli Kamu Mevduatı verisi için
df.iloc[0,9]
python loc ve iloc
02-01-2013 – 08-01-2013 tarihli Kamu Mevduatı dataları için
df.iloc[0:5, 9]
iloc python
02-01-2013 – 08-01-2013 tarihli Kamu Mevduatı ve APİ dataları için
df.iloc[0:5, 8:10]
iloc python kullanımı
02-01-2013 tarihli tüm datalar için
df.iloc[0]
02-01-2013 – 08-01-2013 tarihli tüm bilgiler için
df.iloc[0:5]
YENİ SÜTUN OLUŞTURMA
Dış varlıklar kalemi, büyük ölçüde TCMB’nin sahibi olduğu tüm yabancı para cinsinden paraları ve altınları göstermektedir. Döviz yükümlülükler ise TCMB’nin döviz cinsinden yükümlülüklerine göstermektedir. Bu iki pahanın farkını alarak Net Dış Varlıklar‘a ulaşalım ve bu yeni datayı sütun olarak bilgi setimize ekleyelim.
df[‘Net Dış Varlıklar’]= df[‘Dış Varlıklar’]- df[‘Döviz Yükümlülükleri’]
sonucu görmek için df yazalım ve çalıştıralım.
SÜTUN SİLME
Dış varlıklar kalemi ve Döviz yükümlülükleri kalemleriyle işimiz bitti. Bu sütunları kaldıralım.
df.drop([‘Dış Varlıklar’, ‘Döviz Yükümlülükleri’], axis=1, inplace=True)
Veri İstatistikleri
describe metoduyla tüm bilgilerimizi inceleyelim.
df.describe()
Bunu tek tek datalarımız için nasıl yaparız. Bir örnek.
df[‘İç Varlıklar’].describe()
Şimdi bilgileri birleştirme vaktidir. Belirli bir periyot için İç Varlıklar kaleminin istatistiklerini görmek istiyorsak
df.loc[’01-02-2013′:’31-12-2013′,’İç Varlıklar’].describe()
Filtreleme
Kamu mevduatının 332.857.994.000 TL’den büyük olduğu devirleri filtreyelim. Dikkat edin Kamu Mevduatı etiketini ters tırnak işareti içinde belirttik.
df.query(‘`Kamu Mevduatı` > 332857994’)
Çoklu sorgu için and ve or operatörleri kullanılmaktadır.
df.query(‘`Kamu Mevduatı` > 332857994 and `Emisyon` > 437696208’)
Fark Alma
Artık yeni bir bilgi setine geçelim. Bu bilgi seti mevcut bilgi setimizin farkının alınmasından oluşmaktadır.
df.diff() ile bu süreci yapıp, bu yeni data setini df_diff‘e atıyoruz.
df_diff = df.diff()
Fark alınınca birinci tarih NAN verecektir. Bizde serimizi birinci indexden başlatarak sıfırıncı indeksi yok edelim.
df_diff = df_diff .iloc[1:]
df_diff
Likidite Durumunu Hesaplama
∆Değerleme Hesabı +∆Net Dış Varlıklar +∆İç Varlıklar-(∆Dolaşımdaki para +∆Fon Hesapları + ∆Banka Dışı Mevduat+∆Kamu Mevduatı ) = Likidite Durumu
df_diff[‘Likidite’] = df_diff[‘Net Dış Varlıklar’]+ df_diff[‘İç Varlıklar’]+ df_diff[‘Değerleme’]- df_diff[‘Emisyon’]- df_diff[‘Fon hesapları’] – df_diff[‘BD Mevduatı’] – df_diff[‘Kamu Mevduatı’]
df_diff yazalım çalıştıralım
Likidite durumu negatif çıkarsa likidite açığı olduğu aksi durumda ise likidite fazlası olduğu anlaşılmaktadır.
APİ Verisini Değiştirme
Analitik bilançoda APİ süreçleri yükümlülük tarafında gösterildiğinden karşıt işaret kullanılmaktadır. Aslında “-” gördüğünüzde bu TCMB’nin fonlama yaptığı manasına gelmektedir. Bu baş karışıklığını çözmek için tüm APİ bilgimizi “-1” ile çarpacağız.
df_diff[‘APİ’]=df_diff[‘APİ’] * (-1)
Grafik ile Anlatalım
Likidite durumuna nazaran TCMB açık piyasa süreçlerini gerçekleştirecek ve gün sonunda ortaya çıkacak net sayı bankalar mevduatı hesabında görülecektir.
2023 yılının ağustos ayının birinci haftasında görünüm aşağıdaki formdadır.
APİ Likidite Tarih 2023-08-03 24576200.0 -37471682.0 2023-08-05 16358973.0 -8625802.0 2023-08-06 -67781100.0 21259542.0 2023-08-08 -34265100.0 30035429.0 2023-08-03 günü -374716820 likidite açığı oluşmuş, TCMB APİ ile 24576200 kadarını karşılamıştır. 2023-08-05 günü -8625802 likidite açığı oluşmuş, TCMB APİ ile 16358973 likidite vermiştir. 2023-08-06 günü 21259542 likidite fazlası oluşmuş, TCMB APİ ile -67781100 kadar likidite çekmiştir. 2023-08-08 günü 30035429 likidite fazlası oluşmuş, TCMB APİ ile -34265100 kadar likidite çekmiştir.
Kaynaklar:
Merkez Bankası Bilançosunu Manaya Rehberi
Presentación
NEW MONETARY ANALYSIS TOOL (THE DAILY LIQUIDITY DATASET)
/*! This file is auto-generated */!function(c,d){“use strict”;var e=!1,o=!1;if(d.querySelector)if(c.addEventListener)e=!0;if(c.wp=c.wp||{},c.wp.receiveEmbedMessage);else if(c.wp.receiveEmbedMessage=function(e){var t=e.data;if(!t);else if(!(t.secret||t.message||t.value));else if(/[^a-zA-Z0-9]/.test(t.secret));else{for(var r,s,a,i=d.querySelectorAll(‘iframe[data-secret=”‘+t.secret+'”]’),n=d.querySelectorAll(‘blockquote[data-secret=”‘+t.secret+'”]’),o=new RegExp(“^https?:$”,”i”),l=0;l