A lightweight Flask application for searching Udemy courses by keyword and exploring dataset insights via an interactive dashboard. The app uses pandas for data wrangling and Chart.js for visualisations.
- Overview
- Features
- Tech Stack
- Architecture
- Dataset
- Quick Start
- Project Structure
- Usage
- Testing
- Configuration
- Screenshots
- Roadmap
- Troubleshooting
- Contributing
- License
The application has two main surfaces:
-
Home β Keyword search across
course_title(case-insensitive, literal match). -
Dashboard β Descriptive statistics, including:
- Number of Subscribers Domain (Subject) Wise
- Number of Courses Level Wise
- Subscribers Year Wise
- Profit Year Wise
- Profit Month Wise
- Subscribers Month Wise
The repo includes a ready-to-use CSV (UdemyCleanedTitle.csv) and simple Flask views that render Bootstrap-powered templates.
- π Fast keyword search over course titles
- π Interactive charts (Chart.js) for quick insights
- π§Ή Robust CSV handling (column normalisation, safe parsing)
- π§© Modular dashboard helpers (clean Pandas groupbys)
- π§ͺ Test-ready structure with
pytestexamples (optional)
- Backend: Flask (Python)
- Data: pandas, numpy
- ML/Text utils: scikit-learn (optional TF-IDF), neattext
- Frontend: Bootstrap 4, Chart.js
-
app.py/(Home): reads CSV, performs keyword search incourse_title, rendersindex.html/dashboard: computes aggregates viadashboard.py, rendersdashboard.html
-
dashboard.py- Pure-Python helpers that return dictionaries used by the charts
-
templates/index.htmlβ search form + results listdashboard.htmlβ six charts driven by injected dictionaries
-
File:
UdemyCleanedTitle.csv -
Required columns:
course_title,url,price,num_subscribers,level,published_timestamp,subject -
Notes:
priceis coerced to numeric (non-numeric like βFree/TRUEβ become 0)published_timestampparsed as date (YYYY-MM-DD fromYYYY-MM-DDTHH:MM:SSZ)
git clone https://github.com/AAdewunmi/Online-Course-Recommendation-App-Project.git
cd Online-Course-Recommendation-App-Projectpython3 -m venv venv
source venv/bin/activate # macOS/Linux
# .\venv\Scripts\activate # Windows (PowerShell)pip install --upgrade pip
pip install -r requirements.txtIf you donβt have a requirements.txt, install the essentials:
pip install flask pandas numpy scikit-learn neattextexport FLASK_APP=app.py # macOS/Linux
export FLASK_ENV=development
flask run
# or simply
python app.pyOpen: http://127.0.0.1:5000/
Online-Course-Recommendation-App-Project/
ββ app.py
ββ dashboard.py
ββ UdemyCleanedTitle.csv
ββ templates/
β ββ index.html
β ββ dashboard.html
ββ static/ # (optional)
ββ requirements.txt # (recommended)
ββ tests/
ββ test_app_routes.py
ββ test_dashboard_helpers.py
ββ conftest.py
- Navigate to
/ - Enter keywords (e.g. βexcelβ, βpythonβ, βfinanceβ)
- Results show course titles with a View Course button linking to
url
-
Navigate to
/dashboard -
Six charts render using aggregated dictionaries injected by Flask:
valuecounts,levelcounts,subjectsperlevelyearwiseprofitmap,subscriberscountmapprofitmonthwise,monthwisesub
Run tests:
pytest -qNo environment variables are required for basic usage. Place UdemyCleanedTitle.csv in the repository root (or update the path in app.py).
Add your screenshots/gifs here once the app is running locally.
- Home (Search)
- Dashboard (Charts)
- TF-IDFβbased βSimilar Coursesβ recommendations as a secondary mode
- Search over additional fields (e.g., subject, level)
- Pagination / client-side filtering for large result sets
- Dockerfile + Compose for one-command setup
- GitHub Actions for CI (
pytest, lint)
- Black & white charts: ensure youβre using the latest
dashboard.htmlwith color palette (Chart.js datasetbackgroundColor/borderColorexplicitly set). - KeyError on columns: confirm the CSV contains required columns:
course_title, url, price, num_subscribers, level, published_timestamp, subject - Unicode/CSV errors: try
encoding="utf-8"inpd.read_csvor clean the CSV.
Pull requests are welcome. For major changes, please open an issue to discuss what youβd like to change. If you add dependencies, update requirements.txt.
Suggested workflow
- Fork the repo
- Create a feature branch:
git checkout -b feat/something - Commit changes with clear messages
- Add/Update tests
- Open a PR
This project is licensed under the MIT License. See LICENSE for details.