ortalama değer bir veri kümesindeki sayıların toplamının eleman sayısına bölümü olarak hesaplanır. bunu yapacak bir…
pythonla metin şeklindeki zaman bilgisini ayrıştırmak
dateparser, datefinder gibi bir modul kullanma imkanınız yoksa metin şeklinde yazılmış bir zaman verisini nasıl işleyebiliriz basit bir örnek yapalım.
3 yıl 4 ay 5 gün 10 dakika şeklinde yazılmış bir zaman verisinin kaç dakika olduğunu hesaplayalım.
öncelikle uygun bir regex oluşturalım. daha optimize şekilde yazılabilir ancak ben aşagıdaki yapıyı kullanacağım.
desenler = {
'YIL': re.compile(r'(\d+)\s*[Yy][İiIi][Ll]', re.I),
'AY': re.compile(r'(\d+)\s*[Aa][Yy]', re.I),
'HAFTA': re.compile(r'(\d+)\s*[Hh][Aa][Ff][Tt][Aa]', re.I),
'GUN': re.compile(r'(\d+)\s*[Gg][ÜuUu][Nn]', re.I),
'SAAT': re.compile(r'(\d+)\s*[Ss][Aa][Aa][Tt]', re.I),
'DAKIKA': re.compile(r'(\d+)\s*[Dd][Aa][Kk][İiIi][Kk][Aa]', re.I),
'SANIYE': re.compile(r'(\d+)\s*[Ss][Aa][Nn][İiIi][Yy][Ee]', re.I)
}
şimdide dakika dönüşü için gerekli hesaplamayı yapacağız listeyi oluşturalım.
dakika_donusturme = {
'YIL': 365 * 24 * 60,
'AY': 30 * 24 * 60,
'HAFTA': 7 * 24 * 60,
'GUN': 24 * 60,
'SAAT': 60,
'DAKIKA': 1,
'SANIYE': 1 / 60
}
sırada ise metin bilgisini oluşturacak fonksiyonu yazalım.
def metin_ifadesinden_dakika_hesapla(metin_ifadesi):
if not isinstance(metin_ifadesi, str) or metin_ifadesi == "":
return None
zaman_birimleri = {}
for birim, desen in desenler.items():
eslesme = desen.search(metin_ifadesi)
zaman_birimleri[birim] = int(eslesme.group(1)) if eslesme else 0
toplam_dakika = sum(zaman_birimleri[birim] * dakika_donusturme[birim] for birim in zaman_birimleri)
return int(toplam_dakika)
kodumuzu çalıştırdığımız zaman
"3 yıl 4 ay 5 gün 10 dakika" zaman verisi toplam 1756810 dakikadır
çıktısını elde ederiz.