DEV Community

Cover image for Kisisel Butce Otomasyonunda Python ile Veri Yonetimi: İhtiyaciniz Olan 8 Paket
Serdar Tavukçu for Serdar Tavukçu

Posted on

Kisisel Butce Otomasyonunda Python ile Veri Yonetimi: İhtiyaciniz Olan 8 Paket

Kendi finansal verilerimi yönetmek için yola çıktığımda karşımda devasa bir karmaşa vardı. Banka ekstreleri, Excel dosyaları ve anlık değişen varlık fiyatları arasında kayboluyordum. Bu süreci otomatize etmek için uzun süre deneme yanılma yaptım. Sonunda işimi gerçekten gören ve beni yarı yolda bırakmayan sekiz farklı Python paketini belirledim. Bu paketleri kendi finansal sistemimi kurarken bizzat kullandım ve her birinin hem güçlü yanlarını hem de beni en çok uğraştıran tuzaklarını öğrendim. Şimdi bu araçları neden tercih ettiğimi ve hangi noktalarda dikkatli olmanız gerektiğini anlatacağım.

1. pandas

Pandas, veri analizi dünyasının İsviçre çakısı gibidir. Sürüm 3.1.1 ile gelen yetenekler, özellikle zaman serisi verilerini işlerken hayat kurtarıyor. Ben bu kütüphaneyi banka ekstrelerimi temizlemek, harcamalarımı farklı kategorilere ayırmak ve aylık bazda istatistiksel analizler yapmak için kullanıyorum. Ham haldeki dağınık veriyi anlamlı bir tabloya dönüştürmek için başka bir araca ihtiyaç duymuyorum.

Ancak pandas kullanırken dikkat etmeniz gereken çok kritik bir nokta var. Büyük veri setleri üzerinde çalışırken bellek yönetimi oldukça zayıf kalabiliyor. Eğer binlerce satırlık bir finansal veri setini yanlış veri tipleriyle yüklerseniz, sisteminiz bir anda kilitlenebilir. Özellikle sayısal sütunlarda yanlış veri tipi atamaları yapmak, ilerleyen aşamalarda hesaplama hatalarına davetiye çıkarır. Örneğin bir para birimini metin olarak işlerseniz, toplama işlemlerinde hatalı sonuçlar alırsınız. Bu yüzden veriyi yüklerken veri tiplerini en baştan tanımlamak büyük önem taşıyor. Pratik bir örnek vermek gerekirse, 500 megabaytlık bir CSV dosyasını okurken tüm sütunları varsayılan tiplerle yüklemek yerine, sadece ihtiyacınız olan kolonları seçip float64 yerine float32 kullanarak bellek kullanımını yüzde 40 oranında düşürebilirsiniz. Bu küçük optimizasyon, düşük donanımlı bir sunucuda çalışırken sistemin kilitlenmesini engeller.

2. yfinance

Finansal varlıklarınızı takip ediyorsanız, veriyi manuel olarak güncellemek imkansızdır. Sürüm 1.8.0 ile yfinance, Yahoo Finance üzerinden piyasa verilerini çekmek için harika bir köprü görevi görüyor. BIST hisselerim, altın ve döviz pozisyonlarımın anlık piyasa değerlerini portföyüme yansıtmak için bu aracı kullanıyorum. Otomasyonum her çalıştığında güncel fiyatları çekip toplam varlık değerimi hesaplıyor.

Yine de bu aracın en büyük tuzağı, resmi bir API olmamasıdır. Yahoo Finance kendi verilerini dışarıya resmi bir yolla açmadığı için, veri akışında zaman zaman kesintiler veya gecikmeler yaşanabiliyor. Bir sabah uyandığınızda sisteminiz fiyatları çekemeyebilir. Bu durum, otomasyonunuzun hata yönetimi mekanizmalarının ne kadar güçlü olması gerektiğini gösteriyor. Veri gelmediğinde sistemin çökmesi yerine, bir önceki günün verisini kullanması gibi önlemler almanız gerekiyor. Kendi sistemimde, veri çekme fonksiyonunu bir try-except bloğu içine alarak API yanıtı boş döndüğünde son başarılı veriyi veritabanından çeken bir yedekleme mekanizması kurdum. Bu sayede grafiklerimde boşluk oluşmasını engelledim ve sistemin sürekliliğini sağladım.

3. SQLAlchemy

Verilerimi sadece geçici olarak değil, kalıcı ve sorgulanabilir şekilde saklamam gerekiyordu. Sürüm 2.1.8 ile SQLAlchemy, veritabanı işlemlerini standartlaştırmak için en iyi seçenek. Harcama geçmişimi ve bütçe verilerimi SQLite veya PostgreSQL üzerinde tutuyorum. Bu sayede aylar öncesine ait bir harcama detayını saniyeler içinde sorgulayabiliyorum.

Buradaki en büyük zorluk, karmaşık ilişkisel sorgularda öğrenme eğrisinin oldukça dik olmasıdır. Eğer veritabanı modelinizi yanlış kurgularsanız, ileride performans sorunlarıyla karşılaşmanız kaçınılmaz olur. Yanlış yapılandırılmış bir model, basit bir sorgunun bile dakikalar sürmesine neden olabilir.

gorsel

from sqlalchemy import create_engine, Column, Integer, String, Float
from sqlalchemy.orm import declarative_base, sessionmaker

Base = declarative_base()
engine = create_engine('sqlite:///butce.db')
Session = sessionmaker(bind=engine)
session = Session()
Enter fullscreen mode Exit fullscreen mode

Bu kod parçası, SQLAlchemy kullanarak yerel bir veritabanı bağlantısı kurmamı sağlıyor. İlk satırda veritabanı motorunu oluşturuyorum, ardından oturum yönetimini başlatıyorum. Bu yapı sayesinde veritabanı işlemlerini nesne tabanlı bir şekilde yönetebiliyorum, böylece SQL sorgularını doğrudan yazmak yerine Python sınıflarını kullanabiliyorum.

4. openpyxl

Finansal dünyada Excel hala bir standart. Sürüm 3.1.5 ile openpyxl, Excel dosyalarını okumak ve yazmak için en güvenilir araç. Bankalardan gelen dökümler genellikle Excel formatında oluyor. Ben bu kütüphaneyi, banka dökümlerini otomatik okuyup veritabanıma aktarmak veya analiz sonuçlarımı rapor halinde dışarıya yazmak için kullanıyorum.

Büyük dosyalarla çalışırken dikkatli olunması gereken bir konu var. Çok büyük Excel dosyalarını belleğe yüklediğinizde RAM tüketimi hızla artıyor. Ayrıca dosya kilitleme hatalarıyla karşılaşmak oldukça yaygın. Eğer bir dosyayı hem Excel üzerinde açık tutup hem de Python ile yazmaya çalışırsanız programınız hata verecektir.

5. selenium

Bazı bankalar veya finans siteleri API desteği sunmuyor. Sürüm 4.52.0 ile Selenium, bu noktada devreye giriyor. Otomatik giriş yaparak veri çekmek istediğim zamanlarda bu aracı kullanıyorum. Tarayıcıyı sanki bir insan kullanıyormuş gibi yönlendirerek veriye ulaşabiliyorum.

Selenium kullanmanın en büyük tuzağı ise sitelerin arayüz değişikliğidir. Bir web sitesi butonun yerini değiştirdiğinde veya HTML etiketlerini güncellediğinde, yazdığınız otomasyon scripti anında kırılır. Bakımı oldukça zordur ve sürekli güncel tutulması gerekir.

6. schedule

Finansal raporlarımın belirli gün ve saatlerde çalışmasını istiyorum. Sürüm 1.2.2 ile schedule kütüphanesi, insan odaklı bir görev zamanlayıcı sunuyor. Aylık harcama raporlarımı veya veri çekme işlemlerimi bu araçla zamanlıyorum.

Ancak bu aracın en büyük handikapı, programın sürekli arka planda çalışması gerektiğidir. Bilgisayarınızı kapattığınızda veya script durduğunda zamanlanmış görevler çalışmaz. Bu yüzden otomasyonu her zaman açık bir sunucuda veya arka plan servisi olarak çalıştırmanız gerekir.

7. matplotlib

Verileri görselleştirmek, finansal durumu anlamanın en hızlı yoludur. Sürüm 3.11.2 ile matplotlib, aylık harcama dağılımlarımı veya birikim trendlerimi görmemi sağlıyor. Grafiklere bakarak hangi kategoride daha fazla harcama yaptığımı anında görebiliyorum.

Buradaki zorluk, varsayılan arayüzün pek modern olmamasıdır. Estetik ve şık grafikler elde etmek için çok fazla kod yazmanız ve ayar yapmanız gerekiyor.

gorsel

8. python-dotenv

En hassas konu ise güvenlik. Banka giriş bilgileri veya API anahtarları gibi verileri kodun içine asla yazmamalısınız. Sürüm 1.2.4 ile python-dotenv, bu verileri bir çevresel değişken dosyası üzerinden yönetmemi sağlıyor.

Buradaki en büyük tuzak, .env dosyasını yanlışlıkla GitHub gibi platformlara yüklemektir. Eğer bu dosyayı commit ederseniz, tüm finansal bilgileriniz herkesin erişimine açılır. Bu konuda çok dikkatli olmalı ve .gitignore dosyanıza bu dosyayı eklemeyi unutmamalısınız.

Toparlarsak

Finansal otomasyon, sadece doğru araçları seçmek değil, bu araçları tekrar tekrar kullanarak kendi sistemini oturtmakla ilgili bir süreç. Her bir aracın kendine has bir yapısı ve sizi bekleyen tuzakları var. Benim deneyimlerim gösterdi ki, aynı işi yaparken her zaman aynı kütüphaneleri kullanmak bana ciddi bir zaman kazandırıyor.

Bundan sonra ne yapmalı? İlk adım olarak sadece banka ekstrelerinizi pandas ile temizlemeye başlayın. Ardından verilerinizi SQLAlchemy ile bir veritabanına aktarmayı deneyin. Sistemi karmaşıklaştırmadan önce, temel veri akışınızı güvenli bir şekilde kurduğunuzdan emin olun. Araç seçimi zeka değil, bir tekrar meselesidir. Kendi sisteminizi kurun, hatalarınızdan ders çıkarın ve süreci basitleştirmeye devam edin.

Top comments (0)