CodingMaster24/SolarAnalysis
0
1import streamlit as st
2import pandas as pd
3from sklearn.model_selection import train_test_split
4from sklearn.linear_model import LinearRegression
5from sklearn.metrics import mean_absolute_error, mean_squared_error
6
7st.title("Linear Regression for Solar Energy Prediction")
8
9# File Upload for Generation Data
10uploaded_gen = st.file_uploader("Upload Generation Data CSV", type=["csv"], key="lr_gen")
11uploaded_weather = st.file_uploader("Upload Weather Sensor Data CSV", type=["csv"], key="lr_weather")
12
13def load_data(file):
14 if file is not None:
15 return pd.read_csv(file)
16 return None
17
18# Load Data Separately
19gen_data = load_data(uploaded_gen)
20weather_data = load_data(uploaded_weather)
21
22# Default Data (if no file is uploaded)
23default_gen_data = pd.read_csv('https://github.com/Sivatech24/Streamlit/raw/refs/heads/main/Plant_1_Generation_Data.csv')
24default_weather_data = pd.read_csv('https://github.com/Sivatech24/Streamlit/raw/refs/heads/main/Plant_1_Weather_Sensor_Data.csv')
25
26if gen_data is None:
27 gen_data = default_gen_data
28if weather_data is None:
29 weather_data = default_weather_data
30
31# Choose which dataset to use
32dataset_choice = st.radio("Select dataset:", ("Generation Data", "Weather Data"))
33
34if dataset_choice == "Generation Data":
35 df = gen_data
36 target_col = "DAILY_YIELD"
37elif dataset_choice == "Weather Data":
38 df = weather_data
39 target_col = "MODULE_TEMPERATURE"
40
41# Feature Selection
42features = [col for col in df.columns if col not in ["DATE_TIME", target_col, "SOURCE_KEY"]]
43st.write("Selected Features:", features)
44
45X = df[features]
46y = df[target_col]
47
48# Train-Test Split
49X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
50
51# Train Model
52model = LinearRegression()
53model.fit(X_train, y_train)
54
55# Predictions
56y_pred = model.predict(X_test)
57
58# Performance Metrics
59mae = mean_absolute_error(y_test, y_pred)
60mse = mean_squared_error(y_test, y_pred)
61
62# Display Results
63st.write(f"**Mean Absolute Error:** {mae:.4f}")
64st.write(f"**Mean Squared Error:** {mse:.4f}")
65st.line_chart(pd.DataFrame({"Actual": y_test.values, "Predicted": y_pred}))
66 