AMRITSAR GROUP OF COLLEGES
Autonomous status conferred by UGC under UGC act-1956, (2f), NAAC-A Grade,
(Formerly Known as Amritsar College of Engineering & Technology | Amritsar
Pharmacy College)
Data Science Report
On
‘College Student Placement Dataset’
Submitted in the Partial fulfilment of the requirement for the Award of Degree of
Bachelor of Technology
In
COMPUTER SCIENCE & ENGINEERING
Batch (2022-26)
Submitted To: Submitted By:
Department of CSE Pratham Kumar (2233689)
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING
Amritsar Group of Colleges, Amritsar.
DECLARATION
I Pratham kumar, hereby declare that the report work entitled “College Student Placement
Dataset” is an authentic record of my own work carried out as per the requirements of “Data
Science Labs” for the award of degree of [Link] (CSE), Amritsar Group of Colleges,
Amritsar.
I affirm that this report represents my own ideas, thoughts, and efforts in preparing the report.
Any sources of information used, including books, research papers, websites, or any other
references, have been duly acknowledged.
I acknowledge that the preparation of this report have contributed to my learning and
understanding of various aspects of Computer Science and Engineering. I take full
responsibility for the content presented in this report, and I am prepared to provide any further
clarification or additional information if required.
Name: Pratham Kumar
University Roll No.:2233689
i
ACKNOWLEDGEMENT
It is my proud privilege to express my gratitude to several persons who helped us directly or
indirectly to conduct this Project Work. We express our heartfelt thanks and owe a deep sense
of gratitude to my teacher and guide for his guidance and inspiration in completing this
project.
I am extremely thankful to the Er. Bhuvnesh Kumar, Assistant Professor and all faculty
members of Computer Science and Engineering Department at Amritsar group of colleges,
Amritsar for their co-operation and kind guidance and encouragement to complete this
report.
I also thank my all friends who have more or less contribute to the preparation of this Project
Report, we will always be indebted to them.
This report completion has indeed help me explore more knowledge avenues related to Data
Science and I am sure it will help in future too.
ii
TABLE OF CONTENT
S. No. Content Page No.
1. Introduction 1
2. Problem Definition and Objectives 2-3
3. Data Collection and Preparation 4
4. Clean and preprocess Data 5-7
5. Exploratory Data Analysis (EDA) 8-10
6. Model Building and Evaluation 11-13
7. Source Code 14-17
iii
INTRODUCTION
The dataset used in this analysis represents a collection of detailed student profiles and their
performance records related to career readiness and placement. It includes several important
quantitative and qualitative parameters such as IQ, CGPA, Academic Performance Score,
Communication Skills, and Projects Completed, along with a critical binary target
indicator—Placement Status.
Each row in the dataset represents an individual student’s academic and skill profile, capturing
essential features that influence their likelihood of securing a job placement.
However, similar to real-world educational datasets, this one may contain data quality issues
that are common in student analytics:
Missing or incomplete academic or extracurricular records.
Variations in measurement scales (e.g., scores vs. CGPA).
Outliers in student performance metrics due to exceptional or poor results.
Incorrect or mixed data types (e.g., converting 'Internship_Experience' from text to
numerical format).
The primary motivation for working with this dataset is to understand the factors affecting
successful student placement and to develop a predictive system that can estimate a student's
career readiness. By analyzing the relationship between features such as CGPA, Projects
Completed, and Academic Performance Score, we can gain valuable insights for career
counseling and institutional guidance.
Depending on the formulation of the problem, several analyses can be performed:
Exploratory and Correlation Analysis: To study how academic parameters such as
CGPA or project output relate to Placement success.
Classification Modeling (Current Task): To predict whether a student achieves a
Placement (Yes/No).
Predictive Regression Modeling (Alternative): To estimate continuous variables such as
the Academic Performance Score based on other student indicators.
1
PROBLEM DEFINITION & OBJECTIVES
The College Student Placement Dataset consists of structured academic, extracurricular, and
professional profile data for individual students, each characterized by various variables
relevant to placement success and career readiness. Each record represents a student and
includes attributes such as CollegeID, IQ, Previous Semester Result, CGPA, Academic
Performance, Internship Experience, Extra Curricular Score, Communication Skills, Projects
Completed, and Placement status.
This dataset provides insight into how diverse academic and extracurricular factors impact
student employability, internship acquisition, and ultimate success in on-campus placements.
Analyzing the correlation between academic scores, internships, and soft skills enables
educational institutions to formulate strategies for improving placement rates and tailoring
professional development programs. Like most real-world educational datasets, this file
contains possible data quality issues, including missing or inconsistent values, outliers in
student scores, and variations in numerical and categorical encoding. Cleaning and
preprocessing steps are crucial before any meaningful analysis or predictive modeling can be
conducted.
Problem Definition
The dataset includes a binary target column—Placement (Yes = student placed, No = not
placed), which makes it suitable for a classification approach. This method is useful for
academic learning as well as practical institutional applications. Predicting placement
outcomes or internship acquisition can contribute to:
Early identification of students at risk of not securing placements and targeting
personalized intervention.
Understanding the relative contributions of academic and extracurricular factors to
student employability.
Assisting career services and faculty in preparing data-driven recommendations and
support for students.
Enhancing the effectiveness of training and development programs by focusing on
key predictive features.
Improving institutional placement statistics and reputation through informed
decision-making
2
Objective
This work aims specifically to:
Clean and preprocess the placement dataset by handling missing or
inconsistent data.
Perform Exploratory Data Analysis (EDA) to identify key correlations between
student attributes and placement outcomes.
Implement a classification model (e.g., Logistic Regression or Decision Tree
Classifier) to predict Placement status.
Evaluate model performance using metrics such as Accuracy, Precision,
Recall, F1-Score, and Confusion Matrix.
Target Variable
The dataset contains one key target variable:
Placement → Indicates whether the student was offered a campus placement.
Yes → Student Placed
No → Not Placed
Input Features
The following independent variables serve as predictors for placement status:
CollegeID – Unique student identifier.
IQ – Student’s intelligence quotient score.
PrevSemResult – Previous semester examination results.
CGPA – Cumulative Grade Point Average.
AcademicPerformance – Composite academic performance score.
InternshipExperience – Indicates presence/absence of internship experience.
ExtraCurricularScore – Score for extracurricular involvement.
CommunicationSkills – Evaluated communication skills score.
ProjectsCompleted – Number of academic/career projects completed.
3
DATA COLLECTION AND PREPERATION
The dataset used in this study is the College Student Placement Dataset, which contains
academic and career-related records of students to help in analyzing placement readiness and
outcomes. It includes various academic, extracurricular, and professional attributes such as:
College_ID
IQ
Previous Semester Result (Prev_Sem_Result)
Cumulative Grade Point Average (CGPA)
Academic Performance
Internship Experience
Extra Curricular Score
Communication Skills
Projects Completed
Placement Status (target variable)
The dataset was stored in a .csv file and loaded using Pandas in Python for preprocessing and
analysis. Data cleaning steps included handling missing values, encoding categorical features
(like Internship Experience and Placement Status), and normalizing numerical attributes to
prepare the data for model building
Import Libraries and Load the Data
import pandas as pd
# Load the dataset
dataset = pd.read_csv("/content/college_student_placement_dataset.csv")
# Display the first few rows
print([Link]())
4
CLEAN AND PREPROCESS DATA
Data preprocessing is an essential step to ensure that the dataset is clean, consistent, and ready
for analysis or model training. It includes handling missing values, converting data types, and
encoding categorical features.
A) Handle “?” and Missing Values
import numpy as np
for col in [Link]:
dataset[col] = dataset[col].replace('?', [Link])
print("###### Dataset After Replacing '?' with NaN ######\n")
print([Link]())
B) Convert Numeric Columns to Proper Types
numeric_cols = ['College_ID', 'IQ', 'Prev_Sem_Result', 'CGPA',
'Academic_Performance']
for col in numeric_cols:
dataset[col] = pd.to_numeric(dataset[col], errors='coerce')
print("###### Dataset After Converting Numeric Columns ######\n")
print(dataset[numeric_cols].head())
5
C) Handle missing values (fill numeric with mean)
dataset[numeric_cols] = dataset[numeric_cols].fillna(dataset[numeric_cols].mean())
print("###### Dataset After Handling Missing Values ######\n")
print([Link]())
D) Convert categorical columns to numeric
from [Link] import LabelEncoder
le = LabelEncoder()
categorical_cols = ['Diabetes', 'Hypertension', 'CKD_Status', 'Dialysis_Needed']
for col in categorical_cols:
dataset[col] = le.fit_transform(dataset[col])
print("###### Dataset After Label Encoding ######\n")
print([Link]())
6
E) Final dataset summary
print("\n###### Final Dataset Summary ######\n")
print([Link]())
7
EXPLORATORY DATA ANALYSIS (EDA)
Exploratory Data Analysis (EDA) is a crucial step in understanding the underlying structure,
patterns, and relationships in the dataset.
A) Distribution of Target Classes
import seaborn as sns
import [Link] as plt
# Distribution of Internship Experience
[Link](x='Internship_Experience', data=dataset)
[Link]("Distribution In ternship Experience(0=No, 1=Yes)")
[Link]()
# Distribution of Placement
[Link](x='Placement', data=dataset)
[Link]("Distribution of Placement (0=No, 1=Yes)")
[Link]()
8
B) Feature Distributions
# Histogram for Age
[Link](dataset['IQ'], bins=20, kde=True)
[Link]("IQ distribution of Students")
[Link]()
# Histogram for Academic Performance
[Link](dataset['Academic_Performance'], bins=20, kde=True)
[Link]("Acedemic Performance")
[Link]()
# Histogram for CGPA
[Link](dataset['CGPA'], bins=20, kde=True)
[Link]("CGPA")
[Link]()
9
C) Correlation Heatmap
# Compute the correlation matrix (only numeric columns are
included)
corr = [Link]()
# Plot the heatmap of the correlation matrix
[Link](figsize=(10, 8))
[Link](corr, annot=True, fmt=".2f", cmap='coolwarm')
[Link]("Correlation Matrix of Placement Dataset Features")
[Link]()
10
MODEL BUILDING & EVALUATION
Model Building and Evaluation is a crucial step in analyzing the data and reporting insights,
especially when working with real-world datasets.
A) Define features and targets
# Define Features (X) and Target (y)
feature_columns = [
'IQ',
'Prev_Sem_Result',
'CGPA',
'Academic_Performance',
'Internship_Experience',
'Extra_Curricular_Score',
'Communication_Skills',
'Projects_Completed'
]
X = df[feature_columns]
y = df['Placement']
B) Train-test split
print("--- A) Performing Train-Test Split (80% Train, 20% Test) ---")
X_train, X_test, y_train, y_test = train_test_split(
X_imputed, y,
test_size=0.2,
random_state=42,
# Stratify is essential for balanced binary classification to ensure
# both train and test sets have the same proportion of 'Placement' (1/0)
stratify=y
)
print(f"Training samples: {len(X_train)}, Testing samples: {len(X_test)}\n")
11
C) Model selection
# Using Decision Tree Classifier for binary classification (Placement: Yes/No)
print("--- B) Training Decision Tree Classifier Model ---")
# Decision Trees are non-linear models that can often capture complex relationships.
model = DecisionTreeClassifier(random_state=42) # Replaced LogisticRegression with
DecisionTreeClassifier
[Link](X_train, y_train)
y_pred = [Link](X_test)
print("Model training complete.\n")
D) Evaluate performance
print("--- C) Evaluating Model Performance ---")
# Ensure precision, recall, and f1 are calculated for the positive class (Placement=1)
print("###### Confusion Matrix (Actual vs. Predicted) ######\n")
print(confusion_matrix(y_test, y_pred), "\n")
print("###### Classification Report ######\n")
print(classification_report(y_test, y_pred, target_names=['No Placement', 'Placement']))
print("Accuracy (Overall Correct Predictions):", accuracy_score(y_test, y_pred))
# Precision is the ability of the classifier not to label as positive a sample that is negative (For
'Placement'=1)
print("Precision (Placement=1):", precision_score(y_test, y_pred, pos_label=1))
# Recall is the ability of the classifier to find all the positive samples (For 'Placement'=1)
print("Recall (Placement=1):", recall_score(y_test, y_pred, pos_label=1))
print("F1 Score (Placement=1):", f1_score(y_test, y_pred, pos_label=1))
# Optional: Print feature importances
print("\n###### Feature Importances (from Decision Tree) ######")
feature_importances = [Link](model.feature_importances_,
index=[Link]).sort_values(ascending=False)
print(feature_importances)
12
13
Source Code
import numpy as np
import pandas as pd
import seaborn as sns
import [Link] as plt
from sklearn.model_selection import train_test_split
from [Link] import SimpleImputer
from [Link] import LabelEncoder
from sklearn.linear_model import LogisticRegression
from [Link] import confusion_matrix, classification_report, accuracy_score,
precision_score, recall_score, f1_score
# --- 1. Data Loading ---
# Load the college placement dataset
DATASET_PATH = "college_student_placement_dataset.csv"
dataset = pd.read_csv(DATASET_PATH)
print("###### Initial Dataset Head ######\n")
print([Link]())
print("\n" + "-"*50 + "\n")
# --- 2. Data Cleaning and Preprocessing ---
# Identify and replace common missing value representations with NaN
for col in [Link]:
# Use [Link]() and replace() for robust handling of '?' or 'unknown'
dataset[col] = dataset[col].replace(['?', 'unknown', 'Unknown', 'N/A', 'na', ' '], [Link])
print("###### Dataset After Replacing Custom Missing Values with NaN ######\n")
print([Link]())
print("\n" + "-"*50 + "\n")
# Define numeric and categorical columns for the new dataset
NUMERIC_COLS = [
'IQ', 'Prev_Sem_Result', 'CGPA', 'Academic_Performance',
14
'Extra_Curricular_Score', 'Communication_Skills', 'Projects_Completed'
]
CATEGORICAL_COLS = ['Internship_Experience', 'Placement']
# Convert identified columns to numeric types, coercing non-convertible values to NaN
for col in NUMERIC_COLS:
dataset[col] = pd.to_numeric(dataset[col], errors='coerce')
print("###### Dataset After Converting Numeric Columns (Coerced Errors to NaN)
######\n")
print(dataset[NUMERIC_COLS].head())
print("\n" + "-"*50 + "\n")
# Impute missing values in numeric columns with the mean of the column
# This step handles any NaNs generated during the coerce step above
imputer_mean = SimpleImputer(strategy='mean')
dataset[NUMERIC_COLS] = imputer_mean.fit_transform(dataset[NUMERIC_COLS])
print("###### Dataset After Imputing Missing Numeric Values with Mean ######\n")
print(dataset[NUMERIC_COLS].head())
print("\n" + "-"*50 + "\n")
# Apply Label Encoding to the categorical columns
le = LabelEncoder()
for col in CATEGORICAL_COLS:
# Handle NaNs in categorical columns if any (though imputation on numerics should cover
most)
# Fill any remaining NaNs with a placeholder string before encoding
dataset[col] = dataset[col].fillna('Missing').astype(str)
dataset[col] = le.fit_transform(dataset[col])
# Note: After encoding, 'Placement' will be 0 or 1 (e.g., 0=No, 1=Yes, depending on
alphabetical order)
print("###### Dataset After Label Encoding (Categorical Features & Target) ######\n")
print([Link]())
print("\n###### Final Dataset Summary (Ready for Modeling) ######\n")
print([Link]())
15
print("\n" + "-"*50 + "\n")
# --- 3. Exploratory Data Analysis (EDA) ---
# Distribution of the Target Variable: Placement
[Link](figsize=(6, 4))
[Link](x='Placement', data=dataset)
[Link]("Distribution of Placement Status (0=No, 1=Yes/Placed)")
[Link]()
# Distribution of key numeric features (CGPA)
[Link](figsize=(6, 4))
[Link](dataset['CGPA'], bins=15, kde=True, color='teal')
[Link]("CGPA Distribution of Students")
[Link]()
# Distribution of IQ
[Link](figsize=(6, 4))
[Link](dataset['IQ'], bins=15, kde=True, color='purple')
[Link]("IQ Distribution of Students")
[Link]()
# Correlation Matrix
corr = dataset[NUMERIC_COLS + CATEGORICAL_COLS].corr()
[Link](figsize=(10, 8))
[Link](corr, annot=True, fmt=".2f", cmap='coolwarm')
[Link]("Correlation Matrix of Placement Features")
[Link]()
# --- 4. Model Preparation and Training ---
# Define Features (X) and Target (y)
# Exclude 'College_ID' as it is an identifier
FEATURE_COLS = NUMERIC_COLS + ['Internship_Experience'] # All cleaned features
16
X = dataset[FEATURE_COLS]
y = dataset['Placement']
# Split the data into training and testing sets, ensuring balanced classes (stratify)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y
)
# Train the Logistic Regression Model
model = LogisticRegression(max_iter=1000, solver='liblinear')
[Link](X_train, y_train)
# Make Predictions
y_pred = [Link](X_test)
# --- 5. Model Evaluation ---
print("###### Model Evaluation (Logistic Regression) ######\n")
print("###### Confusion Matrix ######\n", confusion_matrix(y_test, y_pred), "\n")
print("###### Classification Report ######\n", classification_report(y_test, y_pred))
# Print key metrics
print(f"Accuracy: {accuracy_score(y_test, y_pred):.4f}")
print(f"Precision: {precision_score(y_test, y_pred, zero_division=0):.4f}")
print(f"Recall: {recall_score(y_test, y_pred, zero_division=0):.4f}")
print(f"F1 Score: {f1_score(y_test, y_pred, zero_division=0):.4f}")
17