Bir fiyat serisini sayı listesi olarak görmek yerine, göz ile hızlıca değerlendirebileceğiniz bir grafiğe dönüştürmek çoğu zaman çok daha faydalıdır. Bu derste matplotlib ile bunu yapacağız.
Kurulum
pip install matplotlib
Basit Bir Çizgi Grafiği
Önceki derslerde çektiğimiz kapanış fiyatı verisini kullanalım:
import matplotlib.pyplot as plt
import yfinance as yf
veri = yf.download("BTC-USD", period="1mo", interval="1d")
plt.plot(veri.index, veri["Close"])
plt.title("Bitcoin Fiyat Grafiği (Son 1 Ay)")
plt.xlabel("Tarih")
plt.ylabel("Fiyat (USD)")
plt.show()
plt.show(), grafiği ekranda bir pencere olarak açar — yerel geliştirme sırasında hızlı kontrol için kullanışlıdır.
Grafiği Dosyaya Kaydetmek
Bir botun içinde çalışan bir script'te ekrana pencere açmak mümkün değildir — bunun yerine grafiği bir PNG dosyasına kaydederiz:
plt.plot(veri.index, veri["Close"])
plt.title("Bitcoin Fiyat Grafiği")
plt.xlabel("Tarih")
plt.ylabel("Fiyat (USD)")
plt.savefig("bitcoin_grafik.png")
plt.close()
plt.savefig(...), plt.show() yerine grafiği doğrudan diske yazar. Ardından çağrılan plt.close(), figürü bellekten temizler — özellikle döngü içinde tekrar tekrar grafik çiziyorsanız, close() çağrılmazsa figürler bellekte birikip zamanla belleği şişirebilir.
Birden Fazla Seriyi Aynı Grafikte Göstermek
plt.plot(veri.index, veri["Close"], label="Kapanış Fiyatı")
plt.plot(veri.index, veri["Close"].rolling(7).mean(), label="7 Günlük Ortalama")
plt.legend()
plt.savefig("karsilastirma.png")
plt.close()
.rolling(7).mean(), pandas'ın kendi hareketli ortalama hesaplama yöntemidir — her nokta için önceki 7 günün ortalamasını alır.
Grafiği Telegram'a Fotoğraf Olarak Göndermek
Daha önceki derslerde Telegram Bot API ile metin mesajı göndermiştik; aynı bot ile bir görsel de gönderebilirsiniz:
import requests
def grafik_gonder(dosya_yolu):
url = f"https://api.telegram.org/bot{TOKEN}/sendPhoto"
with open(dosya_yolu, "rb") as dosya:
requests.post(url, data={"chat_id": CHAT_ID}, files={"photo": dosya})
grafik_gonder("bitcoin_grafik.png")
Bu şekilde, periyodik olarak çalışan bir bot her seferinde güncel fiyat grafiğini çizip doğrudan Telegram kanalınıza gönderebilir.
Grafiği Daha Okunur Yapmak
plt.figure(figsize=(10, 5)) # daha geniş bir grafik
plt.grid(True, alpha=0.3) # hafif bir arka plan ızgarası
plt.xticks(rotation=45) # tarih etiketlerini eğerek okunabilirliği artırır
Sırada Ne Var?
Sırada, farklı bir konuya geçip pyautogui ile ekranda belirlediğiniz sabit bir koordinata otomatik olarak tıklayan basit bir bot yazmayı göreceğiz.