Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions AI projects/Requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
numpy>=1.22
pandas>=1.4
scikit-learn>=1.1
joblib>=1.2
3 changes: 3 additions & 0 deletions AI projects/Weather Predictor/Data/sample_weather.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
temp_prev , humidity_prev , wind_speed_prev , day_of_year , target_temp
25.0 , 60 , 5.2 , 100 , 26.3
24.5 , 63 , 6.1 , 101 , 25.7
20 changes: 20 additions & 0 deletions AI projects/Weather Predictor/Readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Weather Predictor (example AI project)

**Category:** Regression / machine learning
**Language:** Python

## Overview
A small example project that demonstrates how to build a simple temperature predictor using scikit-learn.

## Contents
- `weather_predictor.py` - main script with train/predict subcommands
- `data/sample_weather.csv` - small sample dataset
- `requirements.txt` - Python dependencies

## Setup
Create a virtual environment and install dependencies:

```bash
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
80 changes: 80 additions & 0 deletions AI projects/Weather Predictor/weather_predictor.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
"""
Weather Predictor - simple regression example using scikit-learn.

This script demonstrates:
- loading CSV data (features and target)
- splitting train/test
- training a simple RandomForestRegressor (or LinearRegression)
- saving the model with joblib
- making predictions from a CSV of new inputs
"""

import os
import argparse
import pandas as pd
import numpy as np
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
import joblib

DEFAULT_MODEL = "weather_model.joblib"

def load_data(csv_path):
"""
Expected CSV columns example:
temp_prev, humidity_prev, wind_speed_prev, day_of_year, target_temp
"""
df = pd.read_csv(csv_path)
# simple check
if 'target_temp' not in df.columns:
raise ValueError("CSV must contain a 'target_temp' column as target.")
X = df.drop(columns=['target_temp'])
y = df['target_temp']
return X, y

def train(csv_path, out_model=DEFAULT_MODEL):
X, y = load_data(csv_path)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model = RandomForestRegressor(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
preds = model.predict(X_test)
mse = mean_squared_error(y_test, preds)
print(f"Trained model. Test MSE: {mse:.4f}")
joblib.dump(model, out_model)
print(f"Saved model to: {out_model}")

def predict(model_path, inputs_csv, out_csv=None):
model = joblib.load(model_path)
X_new = pd.read_csv(inputs_csv)
preds = model.predict(X_new)
X_new['predicted_temp'] = preds
if out_csv:
X_new.to_csv(out_csv, index=False)
print(f"Saved predictions to: {out_csv}")
else:
print(X_new)

def main():
parser = argparse.ArgumentParser(description="Weather Predictor (simple example)")
sub = parser.add_subparsers(dest="cmd", required=True)

t = sub.add_parser("train", help="Train model from CSV")
t.add_argument("--data", required=True, help="CSV file with training data")
t.add_argument("--out", default=DEFAULT_MODEL, help="Output model path")

p = sub.add_parser("predict", help="Predict using trained model")
p.add_argument("--model", required=True, help="Path to trained model (.joblib)")
p.add_argument("--input", required=True, help="CSV file with feature rows to predict")
p.add_argument("--out", default=None, help="Optional output CSV for predictions")

args = parser.parse_args()
if args.cmd == "train":
train(args.data, args.out)
elif args.cmd == "predict":
predict(args.model, args.input, args.out)
else:
parser.print_help()

if __name__ == "__main__":
main()
1 change: 1 addition & 0 deletions PyVerse
Submodule PyVerse added at 62780b