Python ile TCMB Analitik Bilançosunu İncelemek
28 Ağustos 2023Python ile TCMB Analitik Bilançosunu İncelemek
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. Bu yazının kodları şurada
Python ve Veri Analitiği için 3 Kaynak
Edube Python 101 için en iyi online ücretsiz kurstur.
, 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
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.
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.
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.
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.
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
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.
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.
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]
02-01-2013 – 08-01-2013 tarihli Kamu Mevduatı verileri için
df.iloc[0:5, 9]
02-01-2013 – 08-01-2013 tarihli Kamu Mevduatı ve APİ verileri için
df.iloc[0:5, 8:10]
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
NEW MONETARY ANALYSIS TOOL (THE DAILY LIQUIDITY DATASET)