import win32com.client as win32
import os
from datetime import datetime, timedelta
import yfinance as yf
import matplotlib.pyplot as plt
Giriş
İş verimliliğini artırmak için rutin görevlerin otomatize edilmesini önemsiyorum. Tekrarlayan rutin görevlerin otomatize edilmesi, çalışanların değerli zamanlarını stratejik ve yaratıcı faaliyetlere odaklamalarını sağlayabilir.
Bu uygulamada, Windows Görev Zamanlayıcı (Task Scheduler) ile belirlediğimiz rutin görevin otomatik olarak çalıştırılmasını sağlayacağız.
Rutin görevimiz şöyle olacak: Belirlediğimiz kripto paraların 52 + 1 haftalık kapanış fiyatlarını alacağız ve her birinin getiri ortalaması ile standart sapmasını hesaplayacağız. Getiri ortalamaları ile standart sapmaları grafik üzerine aktaracağız. Grafiği ve verileri sırasıyla PNG ve XLSX formatlarında kaydedeceğiz. Tüm bu bilgileri Microsoft Outlook uygulaması aracılığıyla göndereceğiz.
Kullanılacak Kütüphaneler
Gönderilecek Verilerin Çekilmesi, Hesaplamaların Yapılması ve Grafiğin Oluşturulması
= ['BTC-USD','ETH-USD','SOL-USD','XRP-USD','DOGE-USD','ADA-USD','AVAX-USD','DOT-USD','NEAR-USD','RNDR-USD']
tickers
= datetime.today().date()
today_date = today_date - timedelta(weeks=53)
start_date
= yf.download(
df =tickers,
tickers=start_date,
start=today_date,
end=False
progress
)
= df['Adj Close'].pct_change()
daily_returns
# print(daily_returns)
'cryptocurrency_returns_data.xlsx')
daily_returns.to_excel(
= daily_returns.std()
std_devs = daily_returns.mean()
means
=(10, 6))
plt.figure(figsizefor ticker in tickers:
=100)
plt.scatter(std_devs[ticker], means[ticker], s=8, ha='right', va='bottom')
plt.text(std_devs[ticker], means[ticker], ticker, fontsize
'Average and Standard Deviation of 52-Week Returns of Tracked Cryptocurrencies')
plt.title('Standard Deviation')
plt.xlabel('Average')
plt.ylabel(True)
plt.grid('cryptocurrency_returns_chart.png')
plt.savefig(# plt.show()
Gönderilecek grafik:
Gönderilecek excel dosyası içeriği:
Outlook Mail İçeriğinin Hazırlanması
= win32.Dispatch('outlook.application')
outlook = outlook.CreateItem(0)
mail
= 'Cryptocurrency Returns Chart as of ' + datetime.now().strftime('%#d %b %Y %H:%M')
mail.Subject = 'urazdev@gmail.com'
mail.To
= mail.Attachments.Add(os.getcwd() + '\cryptocurrency_returns_chart.png')
attachment 'http://schemas.microsoft.com/mapi/proptag/0x3712001F', 'cryptocurrency_returns_chart')
attachment.PropertyAccessor.SetProperty(
= r"""
mail.HTMLBody Dear Uraz,<br><br>
The chart illustrating the average return and standard deviation for each cryptocurrency is as follows:<br><br>
<img src="cid:cryptocurrency_returns_chart"><br><br>
Please find attached the Excel file containing the 52-week returns data for the tracked cryptocurrencies.<br><br>
Best regards,<br>
@urazdev
"""
+ '\cryptocurrency_returns_data.xlsx')
mail.Attachments.Add(os.getcwd()
mail.Send()
win32com.client
modülünün Dispatch
fonksiyonu Outlook uygulaması oluşturur. Bu, Windows üzerinde Outlook’u otomatik olarak başlatmak ve programı kontrol etmek için kullanılır.
CreateItem
fonksiyonu, Outlook uygulaması üzerinden yeni bir öğe oluşturur. Burada 0
parametresi, bir e-posta öğesi oluşturmak için kullanılan sabit değerdir.
mail.Subject
, e-postanın başlığını belirtir.
mail.To
, e-postanın gönderileceği alıcı adresini belirtir.
mail.Attachments.Add()
, e-postaya bir ek ekler. Bunu hem PNG hem de XLSX için kullanıyoruz.
attachment.PropertyAccessor.SetProperty()
, eklenen dosyanın özelliklerini ayarlar. http://schemas.microsoft.com/mapi/proptag/0x3712001F
, ek dosyanın gömülü dosya ismini belirlemek için kullanılır.
mail.HTMLBody
, e-postanın HTML biçimindeki gövdesini tanımlar.
mail.Send()
, oluşturulan e-postayı gönderir.
Görev Zamanlayıcı Uygulamasına Görev Girilmesi
Görev Zamanlayıcı uygulamasını açıyoruz ve Create Task
’e tıklıyoruz.
General:
Trigger:
Actions:
Program/Script için Python .exe dosyasının bulunduğu dosya konumu .exe uzantılı dosya ile girilmelidir. Bunun için CMD’de where python
komutu çalıştırılabilir. Add arguments için çalıştırılacak script’in bulunduğu dosya konumu .py uzantılı dosya ile girilmelidir. Start in için çalıştırılacak script’in bulunduğu dosyanın konumu girilmelidir.
Test
Gelecek içeriklerde görüşmek dileğiyle.