File size: 2,720 Bytes
0b2b2dc
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
 
 
 
 
 
 
 
 
0d8e071
40ccda1
 
0d8e071
40ccda1
 
 
4509ea8
0d8e071
 
7385a00
 
0d8e071
 
 
 
 
 
 
 
 
 
fa51aa8
 
6f24fe3
fa51aa8
db9bec1
6bc184e
aadf0ce
6f24fe3
3b498d7
0b199f9
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

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 = df.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[3], row[2], row[1])
			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)

	adf3.plot.scatter(x='Date', y='Celsius', alpha=.1)

	return

	from sklearn.linear_model import LinearRegression
# Creating a Linear Regression model on our data
	lin = LinearRegression()
	lin.fit(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'])

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":astationcolumns,})