alidenewade commited on
Commit
af5a5a5
·
verified ·
1 Parent(s): fd08426

Upload 2 files

Browse files
Files changed (2) hide show
  1. app.py +94 -0
  2. requirements.txt +4 -0
app.py ADDED
@@ -0,0 +1,94 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pandas as pd
2
+ import numpy as np
3
+ from sklearn.model_selection import train_test_split
4
+ from sklearn.preprocessing import StandardScaler
5
+ from sklearn.linear_model import LinearRegression
6
+ import gradio as gr
7
+
8
+ # Define the mapping between user-friendly names and NASA variable names
9
+ data_mapping = {
10
+ "Temperature": {
11
+ "Earth Skin Temperature": "TS",
12
+ "Temperature at 2 Meters": "T2M",
13
+ "Wet Bulb Temperature at 2 Meters": "T2MWET"
14
+ },
15
+ "Moisture & Precipitation": {
16
+ "Precipitation Average": "PRECTOTCORR",
17
+ "Profile Soil Moisture (surface to bedrock)": "GWETPROF",
18
+ "Root Zone Soil Wetness (surface to 100 cm below)": "GWETROOT",
19
+ "Surface Soil Wetness (surface to 5 cm below)": "GWETTOP"
20
+ },
21
+ "Air & Pressure": {
22
+ "Specific Humidity at 2 Meters": "QV2M",
23
+ "Surface Pressure": "PS"
24
+ },
25
+ "Wind": {
26
+ "Wind Direction at 10 Meters": "WD10M",
27
+ "Wind Direction at 2 Meters": "WD2M",
28
+ "Wind Speed at 10 Meters": "WS10M",
29
+ "Wind Speed at 2 Meters": "WS2M"
30
+ }
31
+ }
32
+
33
+ def load_and_prepare_data():
34
+ data = pd.read_csv('data/preprocessed_data.csv')
35
+ nasa_features = [var for category in data_mapping.values() for var in category.values()]
36
+ target = 'Close_^FTSE'
37
+
38
+ X = data[nasa_features]
39
+ y = data[target]
40
+ X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, shuffle=False)
41
+
42
+ scaler = StandardScaler()
43
+ X_train_scaled = scaler.fit_transform(X_train)
44
+ X_test_scaled = scaler.transform(X_test)
45
+
46
+ return X_train_scaled, X_test_scaled, y_train, y_test, scaler, nasa_features, data
47
+
48
+ def train_model(X_train_scaled, y_train):
49
+ model = LinearRegression()
50
+ model.fit(X_train_scaled, y_train)
51
+ return model
52
+
53
+ def create_prediction_interface(model, scaler, features_mapping, data):
54
+ def predict_func(*args):
55
+ input_values = pd.DataFrame([args], columns=nasa_features)
56
+ input_values_scaled = scaler.transform(input_values)
57
+ prediction = model.predict(input_values_scaled)
58
+ return round(prediction[0], 2)
59
+
60
+ with gr.Blocks theme=gr.themes.Default()) as demo:
61
+ gr.Markdown("### Stock Price Prediction")
62
+ gr.Markdown("Adjust NASA POWER DAS variables to see predicted stock prices.")
63
+
64
+ with gr.Row():
65
+ with gr.Column(scale=3):
66
+ gr.Markdown("#### Adjust Inputs")
67
+ inputs = []
68
+ for category, variables in features_mapping.items():
69
+ with gr.Accordion(category, open=False):
70
+ for csv_name, das_var in variables.items():
71
+ min_val = data[das_var].min()
72
+ max_val = data[das_var].max()
73
+ slider = gr.Slider(
74
+ label=csv_name,
75
+ minimum=min_val,
76
+ maximum=max_val,
77
+ value=(min_val + max_val) / 2,
78
+ step=(max_val - min_val) / 100
79
+ )
80
+ inputs.append(slider)
81
+ predict_btn = gr.Button("Predict", variant="primary")
82
+
83
+ with gr.Column(scale=1):
84
+ gr.Markdown("#### Predicted Result", elem_id="result-header")
85
+ output = gr.Number(label="Predicted Close_^FTSE", precision=2, interactive=False, value=0.0)
86
+ predict_btn.click(fn=predict_func, inputs=inputs, outputs=output)
87
+
88
+ return demo
89
+
90
+ if __name__ == "__main__":
91
+ X_train_scaled, X_test_scaled, y_train, y_test, scaler, nasa_features, data = load_and_prepare_data()
92
+ model = train_model(X_train_scaled, y_train)
93
+ demo = create_prediction_interface(model, scaler, data_mapping, data)
94
+ demo.launch()
requirements.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ pandas
2
+ numpy
3
+ scikit-learn
4
+ gradio