import datetime
import pandas as pd
from tradssat import WTHFile, MTHFile
from تقدیر.ذریعہ_نکتہ import ذریعہ_نکتہ
[docs]class دیسات(ذریعہ_نکتہ):
"""
دیسات کے روزانہ آبو ہوا کوائف کے مسل (``.WTH``) سے کوائف پڑھتا ہیے۔
"""
متغیرات = ['بارش', 'شمسی_تابکاری', 'درجہ_حرارت_زیادہ', 'درجہ_حرارت_کم']
def __init__(خود, مسل, خاکے=None):
خود.مسل = مسل
خود.کوائف_دیسات = WTHFile(خود.مسل)
چوڑائی = خود.کوائف_دیسات.get_value('LAT')
طول = خود.کوائف_دیسات.get_value('LONG')
بلندی = خود.کوائف_دیسات.get_value('ELEV')
super().__init__(چوڑائی, طول, بلندی, خاکے)
def _کوائف_بنانا(خود, سے, تک, عرض, طول, بلندی, خاکے):
return دیسات_سے_پڑھنا(خود.کوائف_دیسات, سال=None)
[docs]class دیسات_ماھانہ(ذریعہ_نکتہ):
"""
دیسات کے ماہانہ آبو ہوا کوائف کے مسل (``.MTH``) سے کوائف پڑھتا ہیے۔
"""
متغیرات = ['بارش', 'شمسی_تابکاری', 'درجہ_حرارت_زیادہ', 'درجہ_حرارت_کم']
def __init__(خود, مسل, عرض, طول, بلندی, خاکے=None):
خود.مسل = مسل
خود.کوائف_دیسات = MTHFile(خود.مسل)
super().__init__(عرض, طول, بلندی, خاکے)
def _کوائف_بنانا(خود, سے, تک, عرض, طول, بلندی, خاکے):
ستون = {
'بارش': 'ramn',
'شمسی_تابکاری': 'srmn',
'درجہ_حرارت_زیادہ': 'txmn',
'درجہ_حرارت_کم': 'tnmn',
}
اعداد = {س: خود.کوائف_دیسات.get_value(مت) for س, مت in ستون.items()}
سال = خود.کوائف_دیسات.get_value('yr')
مہینہ = خود.کوائف_دیسات.get_value('mo')
return pd.DataFrame(
اعداد,
index=pd.PeriodIndex([str(س) + str(م).rjust(2, '0') for س, م in zip(سال, مہینہ)], freq='M')
)
def دیسات_سے_پڑھنا(مسل, سال):
"""
دیسات کے روزانہ آبو ہوا کوائف کے مسل سے پاندس کے کوائف بناتا ہیے۔
Parameters
----------
مسل: WTHFile
دیسات کا مسل۔
سال: int | None
وہ سال جینکے کوائف اس مسل میں ہیں۔ اگر ``None`` ہیے، تو دیسات مسل کا سال کو ۲۰۰۰ جوڈکے سال بنا جائگا۔
Returns
-------
pd.DataFrame:
پاندس میں ہمہارے کوائف۔
"""
ستون = {
'بارش': 'RAIN',
'شمسی_تابکاری': 'SRAD',
'درجہ_حرارت_زیادہ': 'TMAX',
'درجہ_حرارت_کم': 'TMIN',
}
اعداد = {س: [] for س in ستون}
تاریخیں = []
for ش, تاریخ in enumerate(مسل.get_value('DATE')):
سال = سال or 2000 + int(str(تاریخ)[:2])
اسلی_تاریخ = datetime.date(سال, 1, 1) + datetime.timedelta(days=int(str(تاریخ)[-3:]) - 1)
تاریخیں.append(اسلی_تاریخ)
for مت, مت_دیسات in ستون.items():
اعداد[مت].append(مسل.get_value(مت_دیسات)[ش])
return pd.DataFrame(اعداد, index=pd.PeriodIndex(تاریخیں, freq='D'))