Python ile TCMB Analitik Bilançosunu İncelemek – 2023

Merhaba,

Doç.Dr. VeriDelisi

Bu yazıda hem python ile veri analitiği konusuna giriş yapacaksınız hem de TCMB analitik bilançosunu inceleme şansı bulacaksınız.

Python’a yeni başladıysanız sizlere şu 3 güzel kaynağı önereceğim. Bu yazıyı bitirdikten sonra mutlaka kurcalayın.

 


Python ve Veri Analitiği için 3 Kaynak

Edube Python 101 için en iyi online ücretsiz kurstur.

Python for Data Analysis, edube sonrasında veri 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 güzel bir araçtır.


JUPYTER KURULUMU

Anaconda

Kodlarımız çalıştırmak için jupyter’e ihtiyacımız var. Jupyter’i bilgisayara yüklemek için en basit yol ise Anacondayı bilgisayarınıza indirmektir.

Jupyter’i doğrudan kurabilirim derseniz şurada linki var.

Jupyter Home

Herşey yolunda ise web browser üzerinde yeni bir sayfa açılacak ve  aşağıdaki sayfayı göreceksiniz. Açılan sayfada “New” sekmesine tıklayın ve başlayalım.

Jupyter ana sayfa

Jupyter ana sayfa


EVDS PAKETİNİ İNDİRME VE API KEY ALMA

Açılan sayfada ilk 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

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 verileri çekmemize yardımcı olacak API aracına ulaşalım.

evdsAPI

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 verilere 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İ VERİLERİ ÇEKECEĞİZ ?

EVDS üzerinden şu adresten aşağıdaki verileri ç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 ayrıntıları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 veri cekme df görüntüleme

evds veri 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 adında bir diziye sütun isimlerimizi ekliyoruz. Sonrasında bu dizi verilerini 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

python sutun ismi değiştirme


Tarih Verisini İndex Yapma

Verilere dikkatle bakarsanız ilk 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 verileri daha sağlıklı analiz 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

İndex sütununu dönüştürme


BOŞ SATIRLARI YOK EDELİM

Tail var bayram var bazı günlerde TCMB verisi yayınlamaz. Bakın mesela: 01-01-2013 tarihinde veri yok.

Bu verileri 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 Verileri Görüntüleyelim

LOC METODU

loc ve iloc kullanarak istediğimiz verilere hızlıca 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ı verileri için

df.loc['02-01-2013':'08-01-2013', 'Kamu Mevduatı']

02-01-2013 – 08-01-2013 tarihli Kamu Mevduatı ve APİ verileri 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  veriler için

df.loc['02-01-2013']

02-01-2013 – 08-01-2013 tarihli tüm veriler 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

python loc ve iloc

 

02-01-2013 – 08-01-2013 tarihli Kamu Mevduatı verileri için

df.iloc[0:5, 9]

iloc python

iloc python

 

02-01-2013 – 08-01-2013 tarihli Kamu Mevduatı ve APİ verileri için

df.iloc[0:5, 8:10]

iloc python kullanımı

iloc python kullanımı

 

02-01-2013 tarihli tüm  veriler için

df.iloc[0] 

02-01-2013 – 08-01-2013 tarihli tüm veriler 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 değerin farkını alarak Net Dış Varlıklar‘a ulaşalım ve bu yeni veriyi sütun olarak veri 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 verilerimizi inceleyelim.

df.describe()

Bunu tek tek verilerimiz için nasıl yaparız. Bir örnek.

df['İç Varlıklar'].describe()

Şimdi bilgileri birleştirme zamanıdır. Belli bir dönem 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 dönemleri 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 veri setine geçelim. Bu veri seti mevcut veri setimizin farkının alınmasından oluşmaktadır.

df.diff() ile bu işlemi yapıp, bu yeni veri setini df_diff‘e atıyoruz.

df_diff = df.diff()

Fark alınınca ilk 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İ işlemleri yükümlülük tarafında gösterildiğinden ters işaret kullanılmaktadır. Aslında “-” gördüğünüzde bu TCMB’nin fonlama yaptığı anlamına gelmektedir. Bu kafa karışıklığını çözmek için tüm APİ verimizi “-1” ile çarpacağız.

df_diff['APİ']=df_diff['APİ'] * (-1)


Grafik ile Anlatalım

Likidite durumuna göre TCMB açık piyasa işlemlerini gerçekleştirecek ve gün sonunda ortaya çıkacak net rakam bankalar mevduatı hesabında görülecektir.

2023 yılının ağustos ayının ilk haftasında görünüm aşağıdaki şekildedir.

                   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 Anlama Rehberi

Presentación

NEW MONETARY ANALYSIS TOOL (THE DAILY LIQUIDITY DATASET)

İspanyolca Merhaba

 

 


Umuyoruz ilginizi çeken, güzel bir içerik sunabilmişizdir.

İçeriğimizi oylayın post

Yorum yapın