Spaces:
Runtime error
Runtime error
File size: 2,884 Bytes
d30adf0 fa51aa8 8896740 baa2a05 db9bec1 6e598b9 6f24fe3 6e598b9 db9bec1 8105114 2784e1a 7385a00 8105114 0b2b2dc b66d6cf 6f18e1d 3c192d2 0d8e071 ca434e3 40ccda1 8f8fccd 40ccda1 a524393 964ebb9 40ccda1 e5adb55 40ccda1 e5adb55 0b199f9 40ccda1 0b199f9 40ccda1 e5b8ed8 40ccda1 6fbfd97 fd2bdcb 6fbfd97 b0dfe85 40ccda1 6fbfd97 4509ea8 e5adb55 0d8e071 e5adb55 f9b278b bba8de4 e5adb55 22762a8 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
import streamlit as st
import pandas as pd
import numpy as np
astations = [
["hongkongobservatory","HKO",22.3022566,114.1722662,"Hong Kong Observatory"],
["kingspark","KP",22.3115408,114.1685675,"Observatory Meteorological Station, King's Park"],
]
astationcolumns = ['akey','astationcode','alatitude','alongitude','atitle',]
acontainer1 = st.empty()
acontainer2 = st.empty()
acontainer3 = st.empty()
acontainer4 = st.empty()
def asubmit(aparam):
import datetime
from io import StringIO
adf2 = aparam["adataframe"]
aselecteditem = adf2.loc[adf2["atitle"]==aparam["aselected"], "astationcode"]
aselectedrow = adf2[adf2["atitle"]==aparam["aselected"]]
aselectedindex = adf2.index[adf2["atitle"]==aparam["aselected"]].tolist()
adf3 = pd.DataFrame(
[
[
aselectedrow["alatitude"][aselectedindex[0]],
aselectedrow["alongitude"][aselectedindex[0]],
]
],
columns=['lat', 'lon']
)
aparam["acontainer"].map(adf3)
abacklogmax = 10
atimezone = os.environ['TZ']
# os.environ['TZ'] = 'Europe/London'
os.environ['TZ'] = 'Asia/Hong Kong'
time.tzset()
atoday = datetime.date.today()
ayear = int(atoday.strftime("%Y"))-0
amonth = int(atoday.strftime("%m"))
amonthday = int(atoday.strftime("%d"))
os.environ['TZ'] = atimezone
time.tzset()
atitles = aparam["acolumntitles"]
csvString = ""
csvString += (",").join(atitles)
adf3 = pd.DataFrame(columns=atitles)
for i in range((ayear-abacklogmax),ayear,1):
alink = ("https://data.weather.gov.hk/weatherAPI/opendata/opendata.php?dataType=CLMTEMP&year={}&rformat=csv&station={}").format(str(i),aselecteditem.values[0])
adf4 = pd.read_csv(alink, skiprows=[0,1,2], skipfooter=3, engine='python', on_bad_lines='skip')
adf4 = adf4.reset_index() # make sure indexes pair with number of rows
for index, row in adf4.iterrows():
if (row[2]!=amonth) or (row[3]!=amonthday):
continue
adate = ("{}{:02d}{:02d}").format(row[1], row[2], row[3])
csvString += '\n'+(",").join([adate,str(row[4])])
st.write(row[0],adate)
adf3 = adf3.append({"Date":adate,"Celsius":(row[4]),}, ignore_index=True)
break
adf3 = pd.read_csv(StringIO(csvString), sep=",")
aparam["acontainer"].dataframe(adf3)
# Trend projection for same date of current year with past year references of same date
from sklearn.linear_model import LinearRegression
lr = LinearRegression()
lr.fit(adf3[['Date']].astype('float').astype('int32'), adf3['Celsius'])
atrendproject = [20230223,]
st.dataframe(pd.merge(pd.DataFrame([atrendproject]), pd.DataFrame(lr.predict(np.array([atrendproject]))), left_index=True, right_index=True))
adf = pd.DataFrame(
astations,
columns=astationcolumns
)
aoption = acontainer1.selectbox(
'Which station?',
adf['atitle']
)
if acontainer2.button("Submit") == True:
asubmit(aparam={"aselected":aoption,"acontainer":acontainer3,"adataframe":adf,"acolumntitles":['Date','Celsius'],})
|