Data Science
Restaurant Ranking and Recommendation Engine for Food Delivery Search
A two-stage learning-to-rank engine over real Bengaluru restaurant data, judged by NDCG — not by vibes
- Python
- pandas
- scikit-learn
- +4
A data-quality-gated pipeline from NREGA progress reports to a decision-ready warehouse and dashboard
Mapped to your syllabusVTU 2022 Scheme (OBE/CBCS) · BCS685 Major Project Phase-I · Semester 6MGNREGA Employment Analytics is a data-engineering project that turns the Mahatma Gandhi National Rural Employment Guarantee Scheme's public progress reports into a clean, queryable data warehouse and an interactive dashboard. MGNREGA guarantees up to 100 days of paid work per rural household every year, and the Ministry of Rural Development publishes monthly progress data — person-days generated, households demanded and worked, wages paid, works taken up — for every state, district and financial year through its NIC public data portal.
The catch is that the reports are published for humans, not for analysis: one file per state × district × financial-year × indicator combination, with merged headers, Indian digit grouping, - and NA placeholders, lakh/crore units and district names that change over time. Answering a simple question — which districts met less than half of the work demanded last year? — takes days of clicking and pasting into spreadsheets.
This project builds a three-stage pipeline: an ingestion layer that registers report extracts downloaded from the portal; a quality layer whose data-quality gates (schema, type, completeness, referential and outlier checks) quarantine bad rows with reasons; and a MySQL warehouse in a star schema at district-month-indicator grain. A Streamlit dashboard (an industry-standard Python dashboarding extra on top of the VTU-taught Python/MySQL stack) gives state and district drilldowns, and a scikit-learn linear-regression module forecasts next-quarter person-days. Four team members each own one module end to end.
Syllabus alignment
MGNREGA's performance data is public, but it is not usable: it lives in hundreds of separately downloaded portal reports that each need manual cleaning, and every analyst rebuilds that cleaning from scratch in personal spreadsheets. Indian number formats, -/NA placeholders, unit columns and renamed districts make silent errors easy — a wrong sum can turn a performing district into a failing one, and nothing records which rows were altered or dropped.
There is a need for a reproducible data pipeline that ingests the raw report extracts exactly as downloaded, applies explicit and documented data-quality gates before any analysis, keeps rejected rows in a quarantine with reasons, loads a properly modelled warehouse at district-month grain, and answers real questions — demand met, person-day trends, wage outflow, seasonal patterns, next-quarter forecast — through a dashboard any stakeholder can open.
This project designs and builds an end-to-end analytics pipeline for MGNREGA, India's largest public works programme. The pipeline extracts progress reports from the Ministry of Rural Development's public data portal, cleans and validates them through a catalogue of data-quality gates, loads a MySQL star-schema warehouse, and presents the results in a Streamlit dashboard with a lightweight forecasting module. The deliverable is a reproducible system: one command refreshes the warehouse from raw files, and a data-quality scorecard reports exactly how much of the source data passed each gate.
MGNREGA generates more than 250 crore person-days of employment every year across all states. Researchers, journalists, district officials and students who want to study its performance must work with the NIC public data portal, which lets users generate and download progress reports for any state, district and financial year. The data is complete and authoritative — but it is fragmented into hundreds of downloadable report combinations, and every file needs manual cleaning before it can be compared with another.
12,345, 12,345.67, -, NA), and district renames (e.g. after bifurcation) silently split a district's time series into two.fact_employment at the district × month × indicator grain, with dim_state, dim_district (with validity dates to handle renames), dim_date and dim_indicator.In scope
Out of scope (v1)
The project follows the Incremental SDLC model, mapped onto VTU's two-phase Major Project: Phase-I (BCS685, Sem 6) delivers analysis and design; Phase-II (BCS786, Sem 7) delivers the working, tested system. Each increment ends with something runnable to show the guide.
| Phase | Weeks | Activities | Deliverable |
|---|---|---|---|
| Phase-I: study | 1–2 | Literature survey (data warehousing, data-quality frameworks, MGNREGA studies); portal walkthrough; indicator catalogue | Survey notes, problem statement |
| Phase-I: design | 3–5 | Requirements; star-schema design; DQ rule catalogue; wireframes; Phase-I report | BCS685 report + schema |
| Increment 1 | 6–8 | Ingestion module + raw inventory; sample extracts collected | Files registered end to end |
| Increment 2 | 9–10 | DQ gate engine + quarantine + scorecard; warehouse schema and loaders | Clean warehouse for 1 state |
| Increment 3 | 11–12 | Full load (5 states, 3 FYs); dashboard views; forecast module | Working dashboard |
| Testing & docs | 13–14 | pytest reconciliation tests, UAT with sample questions, final report and demo prep | BCS786 submission |
Testing approach: reconciliation tests that sum warehouse facts and compare against the original portal report totals; unit tests for each gate (bad file in → expected quarantine reason); boundary tests for number parsing; a small UAT script of ten analysis questions the dashboard must answer correctly.
The system is a layered batch-analytics architecture.
raw_files inventory (path, financial year, report type, checksum) and copies it into an immutable raw zone.flowchart TD
A["MGNREGA public data portal<br/>(dynamic reports, CSV/Excel extracts)"] --> B["Ingestion layer<br/>register + checksum + raw zone"]
B --> C["Parser + normaliser<br/>Indian numbers, units, month columns"]
C --> D{"Data-quality gates<br/>schema · type · completeness · referential · outlier"}
D -->|pass| E["Clean zone"]
D -->|fail| Q["Quarantine store<br/>row + reason code"]
E --> F[("MySQL warehouse<br/>star schema")]
Q --> S["DQ scorecard report"]
F --> G["SQL views + aggregations"]
G --> H["Streamlit dashboard<br/>drilldowns, league tables, CSV export"]
G --> I["Forecast module<br/>linear regression, MAE report"]erDiagram
DIM_STATE ||--o{ DIM_DISTRICT : contains
DIM_DISTRICT ||--o{ FACT_EMPLOYMENT : "is measured for"
DIM_DATE ||--o{ FACT_EMPLOYMENT : "keys"
DIM_INDICATOR ||--o{ FACT_EMPLOYMENT : "keys"
RAW_FILE ||--o{ DQ_CHECK_LOG : "is checked by"
FACT_EMPLOYMENT {
int sk_district FK
int sk_date FK
int sk_indicator FK
int raw_file_id FK
decimal value
string unit
}
DIM_DISTRICT {
int sk_district PK
string district_name
int sk_state FK
date valid_from
date valid_to
}
DIM_INDICATOR {
int sk_indicator PK
string indicator_name
string unit
}
DQ_CHECK_LOG {
int check_id PK
int raw_file_id FK
string gate_name
string status
string reason_code
}The grain of fact_employment is one indicator value for one district in one month of one financial year. Every fact row carries the raw_file_id it came from, so any number on the dashboard can be traced back to the exact downloaded report — the audit trail the spreadsheet workflow never had.
Module 01
Owns everything between the portal download and the raw zone: a connector that reads CSV/Excel extracts saved from the NIC portal, detects the report layout, extracts metadata (state, district level, financial year, indicator set), computes a checksum, stores the file immutably and registers it in the raw-file inventory table. Re-downloads and duplicates are detected via checksum, so the warehouse never double-counts a report.
Module 02
Owns parsing and validation: normalises Indian digit grouping, -/NA placeholders and unit columns into typed values, then applies the five gates — schema, type, completeness (reject files above a null threshold), referential (district belongs to state; month exists in dim_date) and outlier (range checks such as person-days per household ≤ 365). Failed rows go to quarantine with a reason code; the module also generates the per-file DQ scorecard that the report and viva use as evidence.
Module 03
Owns the MySQL design and loaders: creates the star schema (fact_employment, dim_state, dim_district with validity dates for renamed districts, dim_date, dim_indicator), implements idempotent load procedures keyed on file checksum, builds indexes and the aggregate SQL views used by the dashboard, and writes the reconciliation queries that prove warehouse totals match the original portal reports.
Module 04
Owns the Streamlit application and the scikit-learn forecast: state and district selector pages, demand-met ratio and person-day trend charts in Plotly, a district league table with search, CSV export of any filtered view, and a linear-regression forecast of monthly person-days per selected district with a train/test split and reported MAE. Also owns the forecast evaluation notebook shown in the viva.
Slide 1
MGNREGA Employment Analytics
Slide 2
Context: MGNREGA and its open data
Slide 3
Problem Statement
Slide 4
Existing vs Proposed System
Slide 5
Objectives
Slide 6
Technology Stack
Slide 7
System Architecture
Slide 8
Warehouse Design (Star Schema)
Slide 9
Data-Quality Gates
Slide 10
Modules & Individual Contribution
Slide 11
Testing & Results
Slide 12
Demo
Slide 13
Conclusion & Future Scope
Bullets, speaker notes and the .pptx · ₹2,000
Read each answer, close it, and say it in your own words. Your viva will ask. Now you'll know.
A database is optimised for day-to-day transactions on current records, while a warehouse is optimised for read-heavy analysis over historical, aggregated data. Our workload is analytical — comparing districts and years across many indicators — so we model a star schema in MySQL with a fact table and dimensions, which makes comparisons fast and queries simple instead of joining many normalised tables every time.
ETL is Extract, Transform, Load. We extract report extracts saved from the NIC portal into an immutable raw zone, transform them in the quality layer — parsing Indian number formats, unit columns, placeholder values and applying the five data-quality gates — and then load the clean rows into the MySQL star schema. The transformation logic lives entirely in the gate engine, so it is testable and documented in one place.
A data-quality gate is an explicit, named validation rule that every row must pass before entering the warehouse, with failures recorded rather than silently fixed. Cleaning with pandas is invisible — no one later knows which rows were changed or dropped. Our gates (schema, type, completeness, referential, outlier) produce a quarantine table with reason codes and a scorecard, so the cleaning itself becomes auditable evidence in the report.
+13 more questions, with answers
Unlocks with the project · ₹2,000
Unlock for ₹2,000What to change before it goes anywhere near a submission. Skipping it is how the demo fails live.
Unlocks with the project · ₹2,000
Unlock for ₹2,000How to study it, adapt it and walk your examiner through it, step by step.
Unlocks with the project · ₹2,000
Unlock for ₹2,000OnlyProjects. (2026). MGNREGA Employment Analytics: ETL, Data Warehouse and Dashboard: B.Tech / B.E. Data Science project bundle [Educational resource]. https://onlyprojects.online/projects/btech-ds-mgnrega-employment-data-warehouse
Keep browsing
Same degree, same syllabus slot, different idea. Pick the one your guide will actually approve.
Data Science
A two-stage learning-to-rank engine over real Bengaluru restaurant data, judged by NDCG — not by vibes
Data Science
From NPCI's monthly tables to growth curves, seasonality and a trend forecast — one clean dataset, done properly
Cyber Security
Flows, top talkers and scan indicators for the lab's own network — headers only, no blocking, full history
Mechanical Engineering
A human-powered spiked-roller dehusker for small coconut growers around Pollachi — designed, fabricated and tested for ₹ under 20,000
Aerospace / Aeronautical
Build a subsonic test tunnel on a student budget, then trace lift and drag on a 3D-printed NACA 0012 against theory
Agricultural Engineering
Irrigates vegetable beds by soil-moisture thresholds instead of habit, and proves every litre with a flow meter