Beginner friendly3 weeks

College placement analytics

Clean messy student records and show placement rates by branch, skill and company.

Tools: Python, pandas, SQL, A dashboard tool such as Streamlit or Power BI

Why interviewers like it

Everyone in your viva has an opinion on placements, so the questions are easy to follow and the answers are easy to check. It is also the quickest way to show cleaning, grouping and a dashboard in one project.

The problem

A placement cell keeps records in several spreadsheets with different spellings and missing values. They want to know which branches place best, how CGPA relates to placement and which skills the hired students had. You will clean the records, load them into tables and build a report.

How the data moves

  1. Spreadsheets
  2. Clean with pandas
  3. Tables
  4. Summary queries
  5. Dashboard

The data

Use a public placement dataset from Kaggle, or generate fake students with a script. Do not use real student names or ids, and check the dataset's licence before sharing a copy.

Week by week

  1. Week 1Load the files, list every problem (spelling of branches, blanks, duplicates) and fix each with a written rule.
  2. Week 2Load clean data into tables and write the summary queries: rate by branch, by CGPA band, by skill.
  3. Week 3Build the dashboard and write the README. State clearly what the data can and cannot tell you.

Starter code

Placement rate by branch. Run it first, then grow it into the real project.

PythonPlacement rate by branch
import pandas as pd

students = pd.DataFrame({
    "branch": ["CSE", "CSE", "CSE", "ECE", "ECE", "MECH"],
    "cgpa": [8.4, 7.1, 9.0, 7.8, 6.9, 7.5],
    "placed": [1, 0, 1, 1, 0, 0],
})

by_branch = (
    students.groupby("branch")
    .agg(students=("placed", "size"), placed=("placed", "sum"), avg_cgpa=("cgpa", "mean"))
    .assign(placement_rate=lambda d: (100 * d["placed"] / d["students"]).round(1))
    .sort_values("placement_rate", ascending=False)
)
print(by_branch.round(2))
        students  placed  avg_cgpa  placement_rate
branch
CSE            3       2      8.17            66.7
ECE            2       1      7.35            50.0
MECH           1       0      7.50             0.0

With six rows the rates mean little. On the real file, always show the number of students next to each rate.

What to hand in

  • A cleaning script with every rule written down
  • Clean tables and the summary queries
  • A dashboard with three charts
  • A README that explains the limits of the data

Viva and interview questions

Practise saying each answer out loud. Short and honest beats long and vague.

What problems did you find in the raw data?

Branch names spelled several ways, blank CGPA values and repeated students. I wrote one rule per problem and counted how many rows each rule changed.

How did you handle missing CGPA?

I did not guess. I kept the rows, marked the CGPA as unknown, and left them out of CGPA averages while still counting them in placement rates.

Does a high CGPA cause placement?

The data shows a link, not a cause. Students with high CGPA may also have more projects and practice. I said this in the README.

Why show student counts next to rates?

A rate of 100 percent from two students is not the same as from two hundred. Counts stop people from reading too much into small groups.

How would you keep it updated each year?

Put the cleaning in a script that takes a file as input, so next year's data goes through the same steps and the same checks.

How to stand out

  • Add a skills table and show which skills appear most among placed students
  • Add data quality checks that run before the dashboard refreshes
  • Compare year over year with one chart

Put it on your CV

OutputResume bullet
Built a placement analytics project in Python and SQL that cleans multi-source student records with documented rules and reports placement rates by branch, CGPA band and skill on an interactive dashboard.

README outline

  1. The question
  2. Data and cleaning rules
  3. Tables
  4. Findings
  5. Limits of the data
  6. How to run it

Learn the pieces