DEV Community

Cover image for Borsa Veri Akışında Python ile Otomasyon: 8 Kütüphane ile 10 Kat Hız
Serdar Tavukçu for Serdar Tavukçu

Posted on

Borsa Veri Akışında Python ile Otomasyon: 8 Kütüphane ile 10 Kat Hız

Borsa verileriyle uğraşmaya başladığımda her şeyin çok basit olacağını sanmıştım. Bir kaç API çağırırım, veriyi tabloya dökerim ve iş biter diye düşünüyordum. Ama işler hiç öyle gitmedi. Veri miktarı arttıkça ve raporlama ihtiyaçlarım çeşitlendikçe elimdeki araçların yetersiz kaldığını gördüm. Bu süreçte deneme yanılma yoluyla bazı kütüphanelerin hayat kurtardığını, bazılarının ise başımı belaya soktuğunu fark ettim. Gerçek işlerde kullandığım ve gerçekten işe yarayan sekiz kütüphaneyi sırasıyla anlatmak istiyorum.

1. pandas

Pandas 3.1.1 sürümü veri analizi dünyasının isviçre çakısı gibidir. Veri yapıları, zaman serileri ve istatistiksel hesaplamalar konusunda rakipsizdir. Ben bu aracı BIST verilerini temizlemek ve filtrelemek için kullanıyorum. Ham veriyi alıp CSV veya Excel formatında yapılandırmak istediğimde ilk durağım burası oluyor. Veriyi okuyup eksik satırları temizlemek veya belirli bir tarih aralığını filtrelemek pandas ile saniyeler sürüyor.

Ancak burada çok ciddi bir tuzak var. Büyük veri setleriyle çalışırken bellek kullanımı hızla artıyor. Eğer çok geniş bir zaman aralığını hafızaya yüklemeye çalışırsan sistemin kilitlendiğini görebilirsin. Bilgisayarın donması veya işlemin hata vermesi istenmeyen bir durum. Bu yüzden pandas kullanırken veriyi parçalara ayırarak işlemek veya sadece ihtiyacın olan sütunları okumak en mantıklı yoldur.

2. openpyxl

Openpyxl 3.1.5 sürümü Excel dosyalarını okumak ve yazmak için kullanılan bir kütüphane. Ben bunu özellikle raporlarıma grafik eklemek veya hücrelere özel biçimler vermek istediğimde tercih ediyorum. Excel 2010 ve sonrası formatlarıyla tam uyumlu çalışıyor. Raporlarıma formüller ekleyerek otomatik hesaplamalar yaptırmak çok büyük kolaylık sağlıyor.

Bunun da bir karanlık tarafı var. Çok büyük Excel dosyalarını okurken veya yazarken ciddi performans kayıpları yaşıyorsun. Eğer binlerce satırlık bir rapor oluşturuyorsan, openpyxl yavaşlamaya başlıyor ve süreç uzuyor. Bu tarz durumlarda alternatif yöntemlere geçmek veya veriyi daha küçük dosyalara bölmek gerekebiliyor.

3. polars

Polars 2.1.0 sürümü tam bir hız canavarı. Veri çerçeveleriyle çalışırken pandasin yavaş kaldığı noktalarda devreye giriyor. Büyük ölçekli finansal veri setlerini işlerken pandasdan çok daha hızlı olduğunu bizzat test ettim. Raporlama süresini minimize etmek istediğimde kesinlikle polars tercih ediyorum.

Tuzağı ise ekosistem uyumu. Pandas kadar yaygın bir kullanıcı kitlesi olmadığı için bazı yan kütüphanelerle entegre çalışırken sorun çıkabiliyor. Bazen bir fonksiyonu çalıştırmak için ekstra çaba sarf etmen gerekiyor.

4. xlsxwriter

Xlsxwriter 3.3.1 sürümü sadece Excel dosyaları oluşturmaya odaklanmış bir modüldür. Karmaşık Excel raporlarını hızlı ve bellek dostu şekilde çıkarmak istediğimde bunu kullanıyorum. Yazma odaklı olduğu için çok hızlı çalışıyor.

gorsel

Bu araçla ilgili en önemli tuzak mevcut dosyaları düzenleyememesidir. Sadece sıfırdan dosya oluşturabilirsin. Eğer elinde hazır bir Excel varsa ve üzerine bir şey eklemek istiyorsan bu kütüphane işini görmeyecektir.

import xlsxwriter

workbook = xlsxwriter.Workbook('borsa_raporu.xlsx')
worksheet = workbook.add_worksheet()
worksheet.write('A1', 'Hisse Senedi')
worksheet.write('B1', 'Kapanis Fiyati')
workbook.close()
Enter fullscreen mode Exit fullscreen mode

Bu kod bloğu basit bir Excel dosyası oluşturur. İlk satırda workbook nesnesini tanımladık, ikinci satırda çalışma sayfasını açtık. Üçüncü ve dördüncü satırlarda hücrelere değer yazdık ve son satırda dosyayı kaydederek kapattık. Bu kadar basit bir işlem bile raporlamada büyük zaman kazandırıyor.

5. pandarallel

Pandarallel 1.6.5 sürümü pandas işlemlerini paralelleştirmek için kullanılır. Borsa verileri üzerinde ağır hesaplamalar yaparken işlemci çekirdeklerini verimli kullanmak çok önemli. Bu kütüphane sayesinde işlemi parçalara bölüp tüm çekirdeklere dağıtabiliyorum.

Ancak küçük veri setlerinde kullanmak hatalı olabilir. Paralelleştirme maliyeti nedeniyle bazen performansı artırmak yerine yavaşlatabiliyor. Sadece gerçekten büyük veri setlerinde kullanmak gerekir.

6. python-dotenv

Python-dotenv 1.2.4 sürümü borsa API anahtarları gibi hassas bilgileri korumak için kullanılıyor. Kodun içine şifre yazmak büyük bir hata. Bu kütüphane ile bilgilerimi .env dosyasında saklıyorum.

gorsel

Tuzağı ise ortam değişkenlerinin yanlış ayarlanmasıdır. Eğer dosyayı doğru konumlandırmazsan veya değişken isimlerini yanlış yazarsan otomasyon scriptlerin aniden hata verip durur.

7. fsspec

Fsspec 2026.9.0 sürümü dosya sistemi özelliklerini yönetir. CSV raporlarını yerel disk yerine doğrudan bulut depolama alanlarına göndermek için bunu kullanıyorum.

En büyük riski ağ gecikmeleridir. Bağlantı koptuğunda dosya aktarımları yarım kalabiliyor. Bu durumu kontrol eden bir hata yakalama mekanizması kurmak şart.

8. tabulate

Tabulate 0.10.0 sürümü konsol üzerinden tablolar görmemi sağlıyor. Hızlı kontrol için çok başarılı.

Çok geniş veri setlerinde ekranı okunmaz hale getirebiliyor. Bu yüzden sadece küçük özet tablolar için kullanmak gerekiyor.

Gerçek Hayat Senaryosu: Nerede Karşına Çıkar?

Bir gün kendi portföyümdeki hisse senetlerinin anlık fiyatlarını çekip, bunları günlük olarak Excel dosyasına kaydeden bir sistem kurmam gerekti. Sabah dokuzda borsa açılmadan scriptin çalışması, gün boyu fiyatları takip etmesi ve akşam kapanışta bana bir özet tablo sunması gerekiyordu. İşte bu noktada elimdeki verinin boyutu, bir saat içinde gigabaytlar seviyesine ulaştı. Pandas ile veriyi işlerken bilgisayarımın RAM kullanımı yüzde doksanlara çıktı ve sistem yanıt vermemeye başladı. O an anladım ki sadece veri çekmek yetmiyor, veriyi işleme biçimini de optimize etmem gerekiyor.

Adım Adım Çözüm ve Hata Giderme

Öncelikle veriyi pandas ile okumaya çalıştım ama hata aldım. Veriyi chunk yöntemiyle parçalara bölerek okumayı denedim. Kodumu şu hale getirdim:

import pandas as pd

for chunk in pd.read_csv('borsa_verisi.csv', chunksize=10000):
    process(chunk)
Enter fullscreen mode Exit fullscreen mode

Bu kod, devasa CSV dosyasını on binlik parçalar halinde okuyarak RAM üzerindeki yükü minimize etmemi sağladı. Yolda çıkan en büyük hata ise API bağlantısının kopmasıydı. Sunucu taraflı bir kesinti olduğunda script duruyordu. Bunu çözmek için bir try-except bloğu ekleyerek bağlantı koptuğunda scriptin beş saniye bekleyip tekrar denemesini sağlayan bir döngü kurdum. Böylece otomasyonun başında beklemek zorunda kalmadım.

Alternatif Yöntemler ve Neden Bu Seçim

Başta sadece pandas kullanıyordum çünkü en popüler olanı oydu. Ancak polars ile tanışınca işler değişti. Polars, veriyi belleğe yükleme biçimi açısından çok daha verimli. Pandas ile bir tabloyu filtrelemek iki saniye sürerken, polars ile bu işlem milisaniyeler içinde bitiyor. Xlsxwriter tercih etmemin sebebi ise openpyxl ile yaşadığım hız sorunuydu. Openpyxl daha çok görsel düzenleme için iyiyken, xlsxwriter sadece veri yazma konusunda çok daha hafif. Bu kütüphaneleri birleştirerek, veri işleme aşamasında polars, rapor oluşturma aşamasında ise xlsxwriter kullanmayı standart hale getirdim.

Toparlarsak

Araç seçimi zeka değil tekrar meselesidir. Aynı işe aynı aracı kullanmak zaman kazandırıyor. Bundan sonra yapman gereken ilk şey, kendi rutininde en çok zamanını alan kısmı tespit etmek ve buradaki kütüphanelerden birini o iş için standart haline getirmek. Bir sonraki adım olarak kendi basit otomasyon scriptini yazıp veriyi otomatik işlemeye başla. Zamanla bu araçların hangisinin senin ihtiyacına tam olarak cevap verdiğini göreceksin. Her şeyi bir anda değiştirmeye çalışma, sadece bir tanesini seç ve projene dahil et.

Top comments (0)