File size: 3,080 Bytes
1613bc5
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
042a0a2
 
 
 
 
 
 
 
7385a00
0d8e071
 
 
04cae7c
 
0d8e071
 
 
 
ffec3b2
4c51b12
9b76272
0d8e071
fa51aa8
 
6f24fe3
fa51aa8
db9bec1
6bc184e
aadf0ce
6f24fe3
3b498d7
d2fa23d
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
90
91
92
93
94
95
96

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)

	if ("0" == "mycustom"):
		import matplotlib.pyplot as plt
		xpoints = np.array(adf3['Date'])
		ypoints = np.array(adf3['Celsius'])
		plt.plot(xpoints, ypoints, 1)
		plt.xlabel('Date')
		plt.ylabel('Celsius')
		plt.show()

	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'])
	lin.fit(pd.to_numeric(adf3[['Date']]), adf3['Celsius'])
# Creating a plot
	ax = adf3.plot.scatter(x='Date', y='Celsius', alpha=.1)
	ax.plot(adf3['Date'], lin.predict(adf3[['Date']]), c='r')

#	lin.score(adf3[['Date']], adf3['Celsius'])
#	st.write(lin.predict(np.array([[20230223]])))
	st.write(lin.predict(np.array([['Date']], dtype='int32')))

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'],})