File size: 2,705 Bytes
06a175a
1eb602b
 
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
 
 
 
 
0b199f9
40ccda1
 
0b199f9
 
40ccda1
 
 
 
e5b8ed8
40ccda1
 
 
 
6fbfd97
fd2bdcb
6fbfd97
b0dfe85
40ccda1
 
6fbfd97
4509ea8
0d8e071
 
 
7bdf96a
f9b278b
06a175a
 
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
#1:54 AM 2/24/2023


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
	atoday = datetime.date.today()
	ayear = int(atoday.strftime("%Y"))-0
	amonth = int(atoday.strftime("%m"))
	amonthday = int(atoday.strftime("%d"))
	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)

	from sklearn.linear_model import LinearRegression
# Creating a Linear Regression model on our data
	lin = LinearRegression()
	lin.fit(adf3[['Date']].astype('float').astype('int32'), adf3['Celsius'])

	atrendproject = [20240223,]
	st.dataframe(pd.merge(pd.DataFrame([atrendproject]), pd.DataFrame(lin.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'],})