Python 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.
28 Ağustos 2023

Python ile TCMB Analitik Bilançosunu İncelemek
ispanyolca 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.
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
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 Anaconda yı 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.
[caption id="attachment_60881" align="alignnone" width="1194"] Jupyter ana sayfa[/caption] 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.
[caption id="attachment_60882" align="alignnone" width="1054"] jupyter ana sayfa evds kurulumu[/caption] 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.
[caption id="attachment_60884" align="alignnone" width="958"] evdsAPI[/caption] 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 [caption id="attachment_60885" align="alignnone" width="976"] evds veri cekme df görüntüleme[/caption] 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.
[caption id="attachment_60886" align="alignnone" width="1018"] python sutun ismi değiştirme[/caption] 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.
[caption id="attachment_60887" align="alignnone" width="965"] İndex sütununu dönüştürme[/caption] 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] [caption id="attachment_60889" align="alignnone" width="940"] python loc ve iloc[/caption] 02-01-2013 - 08-01-2013 tarihli Kamu Mevduatı verileri için df.iloc[0:5, 9] [caption id="attachment_60890" align="alignnone" width="297"] iloc python[/caption] 02-01-2013 - 08-01-2013 tarihli Kamu Mevduatı ve APİ verileri için df.iloc[0:5, 8:10] [caption id="attachment_60891" align="alignnone" width="278"] iloc python kullanımı[/caption] 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) https://www.ispanyol.com/ispanyolca-a1/ispanyolca-a1-haberlesme/ https://www.ispanyol.com/basit-ispanyolca/ispanyolca-merhaba/



