Hey everyone, welcome back! If you’ve been following along with my YouTube channel, you’ll know that in the last video I gave a quick demo of a Mental Health Predictor Machine Learning Project. Today, we’re taking it from idea to code — step by step.
Grab a cup of coffee, fire up your code editor (VS Code in my case), and let’s dive in.
Project Setup
We’ll start by creating a folder for our project. I named mine:
MHP-ML
Inside this folder, we’ll also set up a requirements.txt
file to track our dependencies.
On Linux/Mac, you’d usually use the touch
command to create files.
On Windows, you can use:
New-Item requirements.txt
Installing Dependencies
Here’s what we’ll need for this project:
-
FastAPI – our backend framework (
0.105.4.1
) -
Uvicorn – the ASGI server to run FastAPI (
0.24.0
) - Streamlit – for the front-end interface
-
Pandas – data handling (
1.3.x
) -
Scikit-learn – machine learning (
1.3.2
) - NumPy – numerical computations
- SQLAlchemy – ORM for database handling
- SQLite – lightweight database for storage
- Python-multipart – for form data handling in FastAPI
Once the requirements.txt
is ready, we’ll install everything inside a virtual environment.
Why a virtual environment?
It isolates the project dependencies so they don’t conflict with other Python projects on your machine. In JavaScript, this happens automatically withnode_modules
, but in Python we handle it explicitly.
To activate the environment with pipenv
:
pipenv shell
pipenv install -r requirements.txt
Project Structure
Here’s a clean project layout:
MHP-ML/
│── requirements.txt
│── main.py
│── models.py
│── source/
│── app.py # FastAPI backend
│── frontend.py # Streamlit frontend
-
main.py
→ Entry point for the app, runs the FastAPI server -
models.py
→ Database models with SQLAlchemy -
app.py
→ FastAPI routes (backend logic) -
frontend.py
→ Streamlit interface
main.py (Entry Point)
This file is short and simple. We run our FastAPI application with Uvicorn:
import uvicorn
if __name__ == "__main__":
uvicorn.run("source.app:app", host="0.0.0.0", port=8000, reload=True)
Here’s what happens:
-
"source.app:app"
→ Tells Uvicorn to look forapp
insidesource/app.py
-
host="0.0.0.0"
→ Makes it accessible from your network -
port=8000
→ Default port -
reload=True
→ Auto-restarts the server on code changes (great for development)
Setting Up the Database (models.py)
We’ll use SQLAlchemy + SQLite for simplicity. This will allow us to store both user inputs and the predictions generated by our ML model.
from sqlalchemy import Column, Integer, String, DateTime, create_engine
from sqlalchemy.orm import declarative_base, sessionmaker
from datetime import datetime
# Base class for our models
Base = declarative_base()
# Database engine (SQLite local file)
engine = create_engine("sqlite:///health_predictions.db")
# Session maker
SessionLocal = sessionmaker(bind=engine, autocommit=False, autoflush=False)
# Example table
class HealthData(Base):
__tablename__ = "health_data"
id = Column(Integer, primary_key=True, index=True)
user_input = Column(String, nullable=False)
prediction = Column(String, nullable=False)
created_at = Column(DateTime, default=datetime.utcnow)
This sets up:
- A
health_data
table - Primary key
id
-
user_input
andprediction
columns - A timestamp for when the record was created
Next Steps
With the foundation laid out:
- Backend (FastAPI) will handle API requests
- Frontend (Streamlit) will let users interact with the model
- Machine Learning model will be integrated using Scikit-learn
In the next part, we’ll connect the dots: load a trained ML model, pass inputs from Streamlit to FastAPI, and store predictions in the database.
GitHub Repo
The full code for this tutorial is available on https://github.com/BekBrace/ML-MentalHealth-Predicator . Feel free to clone it, experiment, and customize it however you like.
Final Thoughts
This project combines multiple layers of modern Python development:
- Web APIs with FastAPI
- Interactive dashboards with Streamlit
- Databases with SQLAlchemy + SQLite
- Machine learning with Scikit-learn
It’s a practical way to learn how all these pieces fit together into a real-world application.
Top comments (1)
Why use a ML library for it and not a LLM api? Just curious.