space-weather / app.py
JDWebProgrammer's picture
Create app.py
e544607
raw
history blame
No virus
3.44 kB
import gradio as gr
from gradio.components import Markdown, Textbox, Button
import matplotlib.pyplot as plt
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.svm import SVR
from sklearn.pipeline import make_pipeline
from sunpy.net import Fido
from sunpy.net import attrs as a
from sunpy.timeseries import TimeSeries
def process_data():
# Define the time range for data retrieval
tstart = "2015-06-21 01:00"
tend = "2015-06-21 23:00"
# Query and fetch GOES XRS data
result_goes15 = Fido.search(a.Time(tstart, tend), a.Instrument("XRS"), a.goes.SatelliteNumber(15), a.Resolution("flx1s"))
files = Fido.fetch(result_goes15)
# Load the data into a TimeSeries
goes_15 = TimeSeries(files, concatenate=True)
# Extract X-ray flux and time data
flux_data = goes_15.quantity("xrsb").value
time_data = goes_15.time.datetime
# Create a feature matrix with time data (as numerical values)
X = np.array([(t - time_data[0]).total_seconds() for t in time_data]).reshape(-1, 1)
# Split the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, flux_data, test_size=0.2, random_state=42)
# Train a linear regression model
linear_model = LinearRegression()
linear_model.fit(X_train, y_train)
# Train a quadratic regression model
quadratic_model = make_pipeline(PolynomialFeatures(degree=2), LinearRegression())
quadratic_model.fit(X_train, y_train)
# Train a cubic regression model
cubic_model = make_pipeline(PolynomialFeatures(degree=3), LinearRegression())
cubic_model.fit(X_train, y_train)
# Train a support vector regression (SVR) model
svr_model = SVR(kernel='linear')
svr_model.fit(X_train, y_train)
# Make predictions using all models
y_pred_linear = linear_model.predict(X_test)
y_pred_quadratic = quadratic_model.predict(X_test)
y_pred_cubic = cubic_model.predict(X_test)
y_pred_svr = svr_model.predict(X_test)
# Plot the actual and predicted data from all models
plt.figure(figsize=(12, 6))
plt.scatter(X_test, y_test, color='blue', label='Actual Data')
plt.plot(X_test, y_pred_linear, color='red', linewidth=2, label='Linear Prediction')
plt.plot(X_test, y_pred_quadratic, color='green', linewidth=2, label='Quadratic Prediction')
plt.plot(X_test, y_pred_cubic, color='orange', linewidth=2, label='Cubic Prediction')
plt.plot(X_test, y_pred_svr, color='purple', linewidth=2, label='SVR Prediction')
# Include solar flux data as an additional line in the plot
plt.plot(X, flux_data, color='cyan', linestyle='dashed', label='Solar Flux')
plt.title('GOES XRS Space Weather Forecast')
plt.xlabel('Time (seconds since start)')
plt.ylabel('X-ray Flux / Solar Flux')
plt.legend()
# Save the image
plt.savefig('space_weather_forecast.png')
# Display the plot
#plt.show()
fig = plt.figure()
process_data()
with gr.Blocks(title="Space Weather Forecast", analytics_enabled=False) as spaceml:
gr.Markdown("# Space Weather Forecast")
gr.Markdown("Welcome to the Space Weather Forecast!")
with gr.Row():
with gr.Column(scale=1):
gradio_plot = gr.Image('space_weather_forecast.png')
spaceml.queue().launch(show_api=True, share=True)