commit b6f9a2d18408efce3bd039348ad992ed9365f4b8 Author: Tara Menon Date: Fri May 29 23:17:47 2026 +0530 feat: initial FDP content - Data Science Pipeline with Colab notebook diff --git a/README.md b/README.md new file mode 100644 index 0000000..8944de5 --- /dev/null +++ b/README.md @@ -0,0 +1,38 @@ +# FDP - Data Science Pipeline: End-to-End Workflow + +**Topic:** Data Science Pipeline | **Host:** Jodhpur Institute of Engineering & Technology (JIET) + +## ๐Ÿ“‚ Contents + +| File | Description | +|------|-------------| +| `fdp-colab-content/student_stress_data.csv` | Synthetic dataset of 300 student records for stress level prediction | +| `fdp-colab-content/FDP_Student_Stress_Prediction.ipynb` | Google Colab notebook โ€” zero setup required | +| `fdp-colab-content/FDP_PreRead_StudentStress.pdf` | Pre-read material for FDP attendees | +| `fdp-colab-content/generate_dataset.py` | Dataset generator script | +| `fdp-colab-content/pre_read.html` | Pre-read material source (HTML) | + +## ๐ŸŽฏ Dataset Overview + +**300 student records ร— 8 columns** +- **Target:** `Stress_Level` (0 = Not Stressed, 1 = Stressed) +- **Features:** Department, Attendance_Level, Favorite_Color, Weekly_Study_Hours, Assignment_Submission_Pct, Backlogs_Count + +## ๐Ÿš€ Using the Colab Notebook + +1. Open the notebook in [Google Colab](https://colab.research.google.com/) +2. Run all cells โ€” no installation needed +3. Dataset auto-loads from raw GitHub URL + +## ๐Ÿ“Š Pipeline Steps + +1. Data Loading +2. Exploratory Data Analysis +3. One-Hot Encoding (Department, Attendance_Level, Favorite_Color) +4. Random Forest Classification +5. Model Evaluation +6. Feature Importance Visualization + +--- + +*Part of Gyannetra's FDP workshop series* diff --git a/fdp-colab-content/FDP_PreRead_StudentStress.pdf b/fdp-colab-content/FDP_PreRead_StudentStress.pdf new file mode 100644 index 0000000..4d7eb60 Binary files /dev/null and b/fdp-colab-content/FDP_PreRead_StudentStress.pdf differ diff --git a/fdp-colab-content/FDP_Student_Stress_Prediction.ipynb b/fdp-colab-content/FDP_Student_Stress_Prediction.ipynb new file mode 100644 index 0000000..469da05 --- /dev/null +++ b/fdp-colab-content/FDP_Student_Stress_Prediction.ipynb @@ -0,0 +1,486 @@ +{ + "nbformat": 4, + "nbformat_minor": 5, + "metadata": { + "name": "FDP_Student_Stress_Prediction", + "kernelspec": { "name": "python3", "display_name": "Python 3" }, + "language_info": { "name": "python", "version": "3.10.0" }, + "accelerator": "CPU", + "colab": { "provenance": [] } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# ๐ŸŽ“ FDP: Student Stress Level Prediction\n", + "## Data Science Pipeline โ€” Hands-on with Google Colab\n", + "\n", + "**Speaker:** Kapil Panwar | **Gyannetra Pvt Ltd**\n", + "\n", + "---\n", + "### ๐Ÿ” What We'll Do Today:\n", + "1. Load & explore a college student dataset\n", + "2. Handle categorical data using **One-Hot Encoding** (including Favorite Colors! ๐ŸŒˆ)\n", + "3. Train a Machine Learning model to predict student stress\n", + "4. Evaluate how accurate our model is\n", + "5. Interpret results\n", + "\n", + "> **No installation needed. Just press Shift+Enter on each cell!**" + ] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "# Cell 1: Import Libraries\n", + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.ensemble import RandomForestClassifier\n", + "from sklearn.metrics import accuracy_score, classification_report, confusion_matrix\n", + "\n", + "print(\"โœ… All libraries loaded successfully!\")\n", + "print(f\"pandas: {pd.__version__}\")\n", + "print(f\"numpy: {np.__version__}\")" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "## Step 1: Load the Dataset ๐Ÿ“‚\n", + "\n", + "We're using a dataset of **300 college students**. It contains information about their department,\n", + "attendance, favorite color, study habits, and whether they have high stress or not." + ] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "# Cell 2: Load Data\n", + "# Option A: From GitHub (recommended)\n", + "url = \"https://raw.githubusercontent.com/gnpl_admin/fdp-data-science-pipeline/main/fdp-colab-content/student_stress_data.csv\"\n", + "\n", + "# Option B: If you have the file locally (upload to Colab)\n", + "# from google.colab import files\n", + "# uploaded = files.upload()\n", + "# df = pd.read_csv('student_stress_data.csv')\n", + "\n", + "df = pd.read_csv(url)\n", + "print(f\"โœ… Dataset loaded! Shape: {df.shape[0]} rows ร— {df.shape[1]} columns\")\n", + "df.head(10)" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### ๐Ÿ“Š What does each column mean?\n", + "\n", + "| Column | Type | Description |\n", + "|--------|------|-------------|\n", + "| Student_ID | ID | Unique student identifier |\n", + "| Department | Categorical | Science, Commerce, Arts, Engineering |\n", + "| Attendance_Level | Categorical | Regular, Irregular, Borderline |\n", + "| Favorite_Color | Categorical | Red, Blue, Green, Yellow, Purple, Orange |\n", + "| Weekly_Study_Hours | Numerical | Hours studied per week (2-25) |\n", + "| Assignment_Submission_Pct | Numerical | Assignment submission rate (40-100%) |\n", + "| Backlogs_Count | Numerical | Number of pending backlogs (0-5) |\n", + "| Stress_Level | **Target** | 0 = Low Stress, 1 = High Stress |" + ] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "# Cell 3: Explore Data Types & Missing Values\n", + "print(\"๐Ÿ“‹ Data Info:\")\n", + "print(\"-\" * 40)\n", + "df.info()\n", + "print()\n", + "print(\"๐Ÿ“Š Missing values:\")\n", + "print(df.isnull().sum())\n", + "print()\n", + "print(\"โœ… No missing values! Clean data.\")" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "# Cell 4: Statistical Summary\n", + "print(\"๐Ÿ“ˆ Statistical Summary (Numerical Columns):\")\n", + "print(\"-\" * 40)\n", + "df.describe()" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "## Step 2: Exploratory Data Analysis (EDA) ๐Ÿ”\n", + "\n", + "Let's understand our data before building a model." + ] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "# Cell 5: Target Distribution\n", + "stress_counts = df['Stress_Level'].value_counts()\n", + "print(\"๐ŸŽฏ Stress Level Distribution:\")\n", + "print(f\"Low Stress (0): {stress_counts[0]} students\")\n", + "print(f\"High Stress (1): {stress_counts[1]} students\")\n", + "print()\n", + "\n", + "# Simple bar chart\n", + "plt.figure(figsize=(6, 4))\n", + "colors = ['#4CAF50', '#F44336']\n", + "bars = plt.bar(['Low Stress (0)', 'High Stress (1)'], [stress_counts[0], stress_counts[1]], color=colors)\n", + "plt.title('Student Stress Level Distribution', fontsize=14, fontweight='bold')\n", + "plt.ylabel('Number of Students')\n", + "for bar in bars:\n", + " height = bar.get_height()\n", + " plt.text(bar.get_x() + bar.get_width()/2, height, f'{int(height)}', ha='center', va='bottom')\n", + "plt.show()" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "# Cell 6: Favorite Color Distribution\n", + "print(\"๐ŸŒˆ Favorite Color Distribution:\")\n", + "color_counts = df['Favorite_Color'].value_counts()\n", + "print(color_counts)\n", + "print()\n", + "\n", + "# Bar chart with actual colors\n", + "plt.figure(figsize=(8, 4))\n", + "color_map = {'Red': '#FF0000', 'Blue': '#2196F3', 'Green': '#4CAF50',\n", + " 'Yellow': '#FFEB3B', 'Purple': '#9C27B0', 'Orange': '#FF9800'}\n", + "bar_colors = [color_map[c] for c in color_counts.index]\n", + "bars = plt.bar(color_counts.index, color_counts.values, color=bar_colors, edgecolor='black', linewidth=0.5)\n", + "plt.title('Favorite Color Distribution', fontsize=14, fontweight='bold')\n", + "plt.ylabel('Number of Students')\n", + "for bar in bars:\n", + " height = bar.get_height()\n", + " plt.text(bar.get_x() + bar.get_width()/2, height, f'{int(height)}', ha='center', va='bottom')\n", + "plt.show()" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "# Cell 7: Department vs Stress Level\n", + "print(\"๐Ÿซ Stress by Department:\")\n", + "dept_stress = pd.crosstab(df['Department'], df['Stress_Level'])\n", + "print(dept_stress)\n", + "print()\n", + "\n", + "# Stacked bar chart\n", + "dept_stress.plot(kind='bar', stacked=True, color=['#4CAF50', '#F44336'], figsize=(8, 4))\n", + "plt.title('Stress Level by Department', fontsize=14, fontweight='bold')\n", + "plt.xlabel('Department')\n", + "plt.ylabel('Number of Students')\n", + "plt.legend(['Low Stress', 'High Stress'])\n", + "plt.xticks(rotation=0)\n", + "plt.show()" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "## Step 3: Feature Engineering โ€” One-Hot Encoding ๐Ÿ”„\n", + "\n", + "### ๐ŸŽฏ Why Do We Need This?\n", + "\n", + "Machine learning models understand **numbers**, not words like \"Red\" or \"Science\".\n", + "But we can't just assign Red=1, Blue=2 because that implies an order (Blue > Red).\n", + "\n", + "### โœ… Solution: One-Hot Encoding\n", + "\n", + "Creates a separate column for each category with 0 or 1.\n", + "\n", + "**Example โ€” Favorite Color encoding:**\n", + "\n", + "| Original | Red | Blue | Green | Yellow | Purple | Orange |\n", + "|----------|-----|------|-------|--------|--------|--------|\n", + "| Red | 1 | 0 | 0 | 0 | 0 | 0 |\n", + "| Blue | 0 | 1 | 0 | 0 | 0 | 0 |\n", + "| Green | 0 | 0 | 1 | 0 | 0 | 0 |\n", + "\n", + "**Think of it like a light switch panel** โ€” each color has its own switch, exactly one is ON!" + ] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "# Cell 8: One-Hot Encode Categorical Columns\n", + "print(\"๐Ÿ”„ Before One-Hot Encoding โ€” Categorical columns:\")\n", + "print(df[['Department', 'Attendance_Level', 'Favorite_Color']].head())\n", + "print()\n", + "\n", + "# Apply one-hot encoding\n", + "categorical_cols = ['Department', 'Attendance_Level', 'Favorite_Color']\n", + "df_encoded = pd.get_dummies(df, columns=categorical_cols, drop_first=False)\n", + "\n", + "print(f\"โœ… After encoding: {df_encoded.shape[1]} columns (was {df.shape[1]})\")\n", + "print()\n", + "\n", + "# Show the new columns that start with 'Favorite_Color'\n", + "color_cols = [c for c in df_encoded.columns if c.startswith('Favorite_Color')]\n", + "print(f\"๐ŸŒˆ New one-hot columns for Favorite_Color ({len(color_cols)} total):\")\n", + "print(color_cols)\n", + "print()\n", + "\n", + "# Show a sample of the encoded color columns\n", + "print(\"Sample of one-hot encoded colors:\")\n", + "df_encoded[['Student_ID', 'Favorite_Color_Red', 'Favorite_Color_Blue', \n", + " 'Favorite_Color_Green', 'Favorite_Color_Yellow',\n", + " 'Favorite_Color_Purple', 'Favorite_Color_Orange']].head(10)" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "# Cell 9: Visualize One-Hot Encoding\n", + "print(\"๐ŸŽฏ Let's see which colors have more stressed students:\")\n", + "\n", + "# Create a cross-tabulation\n", + "color_stress = pd.crosstab(df['Favorite_Color'], df['Stress_Level'])\n", + "color_stress['Stress_Rate'] = (color_stress[1] / (color_stress[0] + color_stress[1]) * 100).round(1)\n", + "color_stress = color_stress.sort_values('Stress_Rate', ascending=False)\n", + "print(color_stress)\n", + "print()\n", + "\n", + "# Bar chart\n", + "plt.figure(figsize=(8, 4))\n", + "ax = color_stress['Stress_Rate'].plot(kind='bar', color=['#FF0000', '#2196F3', '#4CAF50', '#FFEB3B', '#9C27B0', '#FF9800'],\n", + " edgecolor='black', linewidth=0.5)\n", + "plt.title('Stress Rate by Favorite Color', fontsize=14, fontweight='bold')\n", + "plt.xlabel('Favorite Color')\n", + "plt.ylabel('Stress Rate (%)')\n", + "plt.xticks(rotation=0)\n", + "for i, v in enumerate(color_stress['Stress_Rate']):\n", + " plt.text(i, v + 0.5, f'{v}%', ha='center', fontweight='bold')\n", + "plt.ylim(0, 100)\n", + "plt.show()" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "## Step 4: Train a Machine Learning Model ๐Ÿค–\n", + "\n", + "We'll use a **Random Forest Classifier** โ€” it's like asking 100 mini-experts to vote, then taking the majority decision. Easy to understand and very powerful!" + ] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "# Cell 10: Prepare Features & Target\n", + "# Drop Student_ID (not useful) and Stress_Level (our target)\n", + "X = df_encoded.drop(['Student_ID', 'Stress_Level'], axis=1)\n", + "y = df_encoded['Stress_Level']\n", + "\n", + "print(f\"Features (X): {X.shape[1]} columns, {X.shape[0]} rows\")\n", + "print(f\"Target (y): {y.shape[0]} values\")\n", + "print(f\"\\nFeature columns: {list(X.columns)[:10]}... (+ {len(X.columns)-10} more)\")\n", + "print(f\"\\nTarget distribution:\\n{y.value_counts().to_string()}\")" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "# Cell 11: Split Data into Train & Test\n", + "X_train, X_test, y_train, y_test = train_test_split(\n", + " X, y, test_size=0.3, random_state=42, stratify=y\n", + ")\n", + "\n", + "print(f\"๐Ÿ“š Training set: {X_train.shape[0]} students ({X_train.shape[0]/len(df)*100:.0f}%)\")\n", + "print(f\"๐Ÿงช Test set: {X_test.shape[0]} students ({X_test.shape[0]/len(df)*100:.0f}%)\")\n", + "print()\n", + "print(\"โœ… Training target distribution:\")\n", + "print(y_train.value_counts().to_string())\n", + "print()\n", + "print(\"โœ… Test target distribution:\")\n", + "print(y_test.value_counts().to_string())" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "# Cell 12: Train Random Forest Model\n", + "model = RandomForestClassifier(n_estimators=100, random_state=42)\n", + "model.fit(X_train, y_train)\n", + "\n", + "print(\"๐ŸŒฒโœ… Model trained successfully!\")\n", + "print(f\"Using {model.n_estimators} decision trees\")" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "## Step 5: Evaluate the Model ๐Ÿ“Š" + ] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "# Cell 13: Make Predictions\n", + "y_pred = model.predict(X_test)\n", + "accuracy = accuracy_score(y_test, y_pred)\n", + "\n", + "print(f\"๐ŸŽฏ Model Accuracy: {accuracy*100:.1f}%\")\n", + "print()\n", + "print(\"๐Ÿ“‹ Classification Report:\")\n", + "print(classification_report(y_test, y_pred, target_names=['Low Stress', 'High Stress']))" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "# Cell 14: Confusion Matrix\n", + "cm = confusion_matrix(y_test, y_pred)\n", + "\n", + "plt.figure(figsize=(6, 5))\n", + "sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', \n", + " xticklabels=['Low Stress', 'High Stress'],\n", + " yticklabels=['Low Stress', 'High Stress'])\n", + "plt.title('Confusion Matrix', fontsize=14, fontweight='bold')\n", + "plt.xlabel('Predicted')\n", + "plt.ylabel('Actual')\n", + "plt.show()\n", + "\n", + "print(\"๐Ÿ“Š Confusion Matrix Breakdown:\")\n", + "print(f\"โœ… True Low Stress: {cm[0][0]} students correctly predicted\")\n", + "print(f\"โŒ False High Stress: {cm[0][1]} low-stress students predicted as high\")\n", + "print(f\"โŒ False Low Stress: {cm[1][0]} high-stress students predicted as low\")\n", + "print(f\"โœ… True High Stress: {cm[1][1]} students correctly predicted\")" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "## Step 6: Feature Importance ๐Ÿ”‘\n", + "\n", + "What factors most influence student stress? Let's find out!" + ] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "# Cell 15: Feature Importance\n", + "importance = pd.DataFrame({\n", + " 'Feature': X.columns,\n", + " 'Importance': model.feature_importances_\n", + "}).sort_values('Importance', ascending=False)\n", + "\n", + "print(\"๐Ÿ”‘ Top 10 Most Important Factors:\")\n", + "print(\"-\" * 40)\n", + "for i, row in importance.head(10).iterrows():\n", + " bar = 'โ–ˆ' * int(row['Importance'] * 50)\n", + " print(f\"{row['Feature']:40s} {bar} {row['Importance']*100:.1f}%\")\n", + "print()\n", + "\n", + "# Plot top 10\n", + "plt.figure(figsize=(10, 6))\n", + "top10 = importance.head(10)\n", + "bars = plt.barh(range(len(top10)), top10['Importance'].values, color='#8ab4f8')\n", + "plt.yticks(range(len(top10)), top10['Feature'].values)\n", + "plt.xlabel('Importance Score')\n", + "plt.title('Top 10 Features Influencing Student Stress', fontsize=14, fontweight='bold')\n", + "plt.gca().invert_yaxis()\n", + "for i, v in enumerate(top10['Importance']):\n", + " plt.text(v + 0.005, i, f'{v*100:.1f}%', va='center', fontweight='bold')\n", + "plt.tight_layout()\n", + "plt.show()" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "## ๐ŸŽฏ Summary โ€” What We Learned Today\n", + "\n", + "| Step | What We Did | Key Takeaway |\n", + "|------|-------------|--------------|\n", + "| 1 | Loaded data | CSV files are the standard format |\n", + "| 2 | EDA | Visualized patterns before modeling |\n", + "| 3 | **One-Hot Encoding** | Converted colors (Red/Blue/Green) to numbers ๐Ÿ“Œ |\n", + "| 4 | Trained model | Random Forest โ€” simple yet powerful |\n", + "| 5 | Evaluated | Measured accuracy & confusion matrix |\n", + "| 6 | Interpreted | Found most influential factors |\n", + "\n", + "### ๐Ÿ“Œ Key Concept: One-Hot Encoding\n", + "- Categorical data (like **Favorite Color**) cannot directly go into ML models\n", + "- One-hot encoding creates **separate 0/1 columns** for each category\n", + "- In pandas: pd.get_dummies(df['Favorite_Color'])\n", + "- Think of it as a **light switch panel** โ€” one switch per color!\n", + "\n", + "---\n", + "### ๐Ÿ™ Thank You!\n", + "\n", + "**Kapil Panwar** \n", + "Gyannetra Pvt Ltd, Pune, Maharashtra \n", + "*India's Premier AI Consultancy*" + ] + } + ] +} \ No newline at end of file diff --git a/fdp-colab-content/generate_dataset.py b/fdp-colab-content/generate_dataset.py new file mode 100644 index 0000000..b63924c --- /dev/null +++ b/fdp-colab-content/generate_dataset.py @@ -0,0 +1,42 @@ +import pandas as pd +import numpy as np + +np.random.seed(42) +n = 300 + +departments = np.random.choice(["Science", "Commerce", "Arts", "Engineering"], n) +attendance = np.random.choice(["Regular", "Irregular", "Borderline"], n, p=[0.4, 0.3, 0.3]) +fav_colors = np.random.choice(["Red", "Blue", "Green", "Yellow", "Purple", "Orange"], n) +study_hours = np.round(np.random.uniform(2, 25, n), 1) +assign_sub = np.round(np.random.uniform(40, 100, n), 0) +backlogs = np.random.randint(0, 6, n) + +# Stress logic +# High if: irregular attendance OR backlogs>=3 OR study_hours<5 OR assign_sub<55 +stress = ((attendance == "Irregular") | + (backlogs >= 3) | + (study_hours < 5) | + (assign_sub < 55)).astype(int) + +# Add some noise so it's not 100% predictable +flip = np.random.choice([0, 1], n, p=[0.9, 0.1]) +stress = stress ^ flip # XOR flip 10% + +df = pd.DataFrame({ + "Student_ID": ["S{:03d}".format(i+1) for i in range(n)], + "Department": departments, + "Attendance_Level": attendance, + "Favorite_Color": fav_colors, + "Weekly_Study_Hours": study_hours, + "Assignment_Submission_Pct": assign_sub.astype(int), + "Backlogs_Count": backlogs, + "Stress_Level": stress +}) + +df.to_csv("/root/fdp-workshop/fdp-colab-content/student_stress_data.csv", index=False) +print("Dataset generated: {} rows, {} cols".format(len(df), len(df.columns))) +print("Stress distribution:") +print(df["Stress_Level"].value_counts().to_string()) +print("\nSample:") +print(df.head(3).to_string()) +print("\nUnique colors: {}".format(df["Favorite_Color"].unique())) diff --git a/fdp-colab-content/pre_read.html b/fdp-colab-content/pre_read.html new file mode 100644 index 0000000..4cb3966 --- /dev/null +++ b/fdp-colab-content/pre_read.html @@ -0,0 +1,396 @@ + + + + + + + + + +
+

FDP Pre-Read Material

+

Data Science Pipeline — Hands-on with Google Colab

+
+

+ Speaker: Kapil Panwar
+ Organization: Gyannetra Pvt Ltd, Pune
+ Date: 30 May 2026
+ Venue: JIET, Jodhpur +

+ +
+ + +
+
FDP Pre-Read • Data Science Pipeline
+ +

1. Introduction

+ +

+ Welcome to the Data Science Pipeline Faculty Development Program session! + This pre-read document will prepare you for a completely hands-on, no-installation-needed workshop. +

+ +
+ Good News: You do not need to install Python, Docker, or any software on your laptop. + Everything runs in your browser via Google Colab. +
+ +

What is a Data Science Pipeline?

+

+ A Data Science Pipeline is the end-to-end process of taking raw data and transforming it into + actionable insights. The standard pipeline has these stages: +

+
    +
  1. Data Collection – Gathering data from CSV, databases, APIs, etc.
  2. +
  3. Data Cleaning & Preprocessing – Handling missing values, fixing data types
  4. +
  5. Feature Engineering – Creating new features, encoding categorical variables
  6. +
  7. Exploratory Data Analysis (EDA) – Visualizing patterns and relationships
  8. +
  9. Model Training – Applying machine learning algorithms
  10. +
  11. Evaluation – Measuring how well the model performs
  12. +
  13. Interpretation – Understanding what the model tells us
  14. +
+ +
+ Session Tip: Don't worry if some terms feel new. The session is designed for + beginners. Just bring curiosity and a working internet connection. +
+ + +
+ + +
+
FDP Pre-Read • Data Science Pipeline
+ +

2. Google Colab — Your Browser-Based Lab

+ +

+ Google Colaboratory (Colab) is a free, cloud-based Jupyter notebook environment + that runs entirely in your browser. No installation. No setup. +

+ +

Why Colab for this FDP?

+ + +

How to Open a Colab Notebook

+
    +
  1. Open your browser (Chrome / Firefox recommended)
  2. +
  3. Go to colab.research.google.com
  4. +
  5. Click File → Upload Notebook
  6. +
  7. Select the .ipynb file we share during the session
  8. +
+ +
+ Shortcut: We will also share a direct Colab link — just click and it opens + automatically. No upload needed. +
+ +

Colab Cell Types

+ + + + +
Cell TypeUseExample
Code CellRuns Python codeprint("Hello")
Text CellMarkdown documentationExplanations, headings
+ + +
+ + +
+
FDP Pre-Read • Data Science Pipeline
+ +

3. Categorical Data & One-Hot Encoding

+ +

What is Categorical Data?

+

+ Categorical data represents groups or categories rather than numbers. Examples: Department + (Science, Commerce), Gender (Male, Female), or Favorite Color (Red, Blue, Green). +

+

+ Machine learning models understand only numbers. So we must convert text categories to + numbers. This is called encoding. +

+ +

The Problem with Simple Numbering

+

+ If we encode Red=1, Blue=2, Green=3, the model might think Green > Blue > Red (i.e., + order/ranking). But colors have no inherent order. This is why we use one-hot encoding. +

+ +

How One-Hot Encoding Works

+

+ One-hot encoding creates a separate column for each category, with 1 (present) or 0 (absent). +

+ + + + + + + +
OriginalRedBlueGreenYellow
Red1000
Blue0100
Green0010
Yellow0001
+ +

In Python with pandas, it's just one line:

+
import pandas as pd
+encoded = pd.get_dummies(df['Favorite_Color'], prefix='Color')
+ +
+ Visual Memory Aid: Think of one-hot like a light switch panel — + each color has its own switch, and exactly one switch is ON at a time. +
+ + +
+ + +
+
FDP Pre-Read • Data Science Pipeline
+ +

4. Session Dataset — Student Stress Prediction

+ +

+ During the session, we will use a dataset about college student stress levels. + This dataset is specially designed to be relatable for faculty members. +

+ + + + + + + + + + +
FeatureTypeDescriptionExample
DepartmentCategoricalStudent's departmentScience, Arts, Commerce, Engineering
Attendance LevelCategoricalAttendance categoryRegular, Irregular, Borderline
Favorite ColorCategoricalSelf-reported favorite color ๐ŸŒˆRed, Blue, Green, Yellow, Purple, Orange
Weekly Study HoursNumericalHours studied per week2 – 25 hours
Assignment Submission %NumericalAssignment submission rate40% – 100%
Backlogs CountNumericalNumber of pending backlogs0 – 5
Stress LevelBinary (Target)0 = Low Stress, 1 = High Stress0 or 1
+ +

Session Outline (Hands-On)

+
    +
  1. Open Colab & Load Data — 5 min
  2. +
  3. Explore the Data (EDA) — 10 min
  4. +
  5. One-Hot Encode Categorical Columns — 10 min
  6. +
  7. Train a Machine Learning Model — 10 min
  8. +
  9. Evaluate & Interpret Results — 10 min
  10. +
  11. Q&A / Open Discussion — 10 min
  12. +
+

Total: ~55 minutes

+ +
+ No prior coding experience needed. All code is pre-written. + You just click "Run" and watch the magic happen. +
+ +

What You Will Learn

+ + + +
+ + +
+
FDP Pre-Read • Data Science Pipeline
+ +

5. Quick Reference — Python & Colab Cheatsheet

+ +

Common Colab Shortcuts

+ + + + + + + +
ActionShortcut
Run current cellShift + Enter
Add a code cellClick + Code button
Add a text cellClick + Text button
Delete a cellClick cell → Trash icon (top-right)
Toggle cell outputDouble-click output area
+ +

Key Python Commands We'll Use

+ + + + + + + + + + +
CommandWhat it does
df.head()Show first 5 rows of data
df.info()Show data types and missing values
df.describe()Show statistical summary
df['col'].value_counts()Count unique values in a column
pd.get_dummies()One-hot encode categorical columns
train_test_split()Split data into train/test
RandomForestClassifier()Create a Random Forest model
accuracy_score()Calculate model accuracy
+ +

Before the Session, Please:

+ + +
+ See you at the session! If you have questions beforehand, please reach out + via the FDP coordination team. We're here to help. +
+ + +
+ + +
+

See You at the Session!

+

+ Data Science Pipeline • 30 May 2026 • JIET Jodhpur +

+

+ Kapil Panwar
+ Gyannetra Pvt Ltd, Pune, Maharashtra
+ Gyannetra — India's Premier AI Consultancy +

+
+ + + diff --git a/fdp-colab-content/student_stress_data.csv b/fdp-colab-content/student_stress_data.csv new file mode 100644 index 0000000..6117c28 --- /dev/null +++ b/fdp-colab-content/student_stress_data.csv @@ -0,0 +1,301 @@ +Student_ID,Department,Attendance_Level,Favorite_Color,Weekly_Study_Hours,Assignment_Submission_Pct,Backlogs_Count,Stress_Level +S001,Arts,Borderline,Purple,22.5,41,2,1 +S002,Engineering,Regular,Yellow,15.7,48,4,1 +S003,Science,Regular,Orange,17.6,94,3,1 +S004,Arts,Irregular,Green,20.2,92,4,1 +S005,Arts,Borderline,Blue,13.5,76,3,1 +S006,Engineering,Regular,Blue,4.0,76,1,1 +S007,Science,Irregular,Green,14.4,80,2,1 +S008,Science,Borderline,Orange,15.5,51,3,0 +S009,Arts,Regular,Green,19.1,95,5,1 +S010,Commerce,Borderline,Purple,11.9,65,0,0 +S011,Arts,Regular,Purple,4.9,63,5,1 +S012,Arts,Irregular,Blue,8.5,71,5,1 +S013,Arts,Irregular,Yellow,10.4,43,0,1 +S014,Arts,Irregular,Orange,16.9,50,5,1 +S015,Engineering,Regular,Blue,15.1,84,3,0 +S016,Science,Borderline,Yellow,10.2,45,3,1 +S017,Engineering,Regular,Yellow,24.7,76,3,1 +S018,Engineering,Regular,Purple,15.9,55,0,0 +S019,Engineering,Regular,Red,7.5,63,5,1 +S020,Arts,Irregular,Red,4.3,57,0,1 +S021,Commerce,Irregular,Green,5.5,61,3,1 +S022,Science,Regular,Purple,7.7,83,5,1 +S023,Commerce,Irregular,Yellow,5.7,58,5,1 +S024,Engineering,Regular,Orange,6.3,74,4,0 +S025,Engineering,Irregular,Red,8.6,69,4,1 +S026,Commerce,Regular,Yellow,6.0,80,1,1 +S027,Commerce,Irregular,Red,22.6,96,2,1 +S028,Commerce,Regular,Red,3.8,84,4,1 +S029,Engineering,Borderline,Red,14.1,53,0,1 +S030,Engineering,Regular,Orange,11.4,42,4,1 +S031,Science,Regular,Purple,24.6,56,1,0 +S032,Science,Regular,Orange,4.6,76,5,1 +S033,Engineering,Borderline,Blue,11.2,43,1,1 +S034,Commerce,Borderline,Yellow,24.3,70,5,1 +S035,Commerce,Regular,Purple,21.9,76,5,1 +S036,Science,Irregular,Purple,20.8,60,2,1 +S037,Engineering,Borderline,Purple,7.9,86,4,1 +S038,Science,Irregular,Purple,5.9,46,0,1 +S039,Science,Irregular,Orange,17.4,45,0,1 +S040,Arts,Regular,Purple,23.4,84,3,1 +S041,Arts,Regular,Green,14.8,70,5,1 +S042,Arts,Borderline,Yellow,15.1,81,0,0 +S043,Commerce,Borderline,Purple,8.4,66,2,0 +S044,Engineering,Irregular,Yellow,19.7,55,5,1 +S045,Engineering,Regular,Green,6.3,89,2,0 +S046,Engineering,Regular,Green,9.4,88,0,0 +S047,Engineering,Borderline,Yellow,11.8,82,0,0 +S048,Arts,Borderline,Red,13.7,56,3,1 +S049,Commerce,Borderline,Blue,7.6,75,0,0 +S050,Commerce,Borderline,Red,4.6,62,5,1 +S051,Arts,Irregular,Red,16.0,45,5,1 +S052,Commerce,Regular,Orange,8.6,95,5,1 +S053,Arts,Regular,Red,15.4,48,3,1 +S054,Engineering,Borderline,Purple,5.6,97,3,1 +S055,Arts,Irregular,Orange,13.1,67,0,1 +S056,Engineering,Regular,Orange,14.2,51,1,1 +S057,Engineering,Regular,Green,3.2,73,1,1 +S058,Science,Irregular,Red,9.7,92,3,1 +S059,Arts,Regular,Green,5.1,84,0,0 +S060,Science,Regular,Yellow,3.5,88,1,1 +S061,Arts,Irregular,Blue,24.8,80,0,1 +S062,Arts,Irregular,Orange,9.4,82,0,1 +S063,Science,Irregular,Yellow,20.6,91,0,1 +S064,Science,Regular,Yellow,7.9,55,4,1 +S065,Arts,Borderline,Purple,17.7,69,5,1 +S066,Commerce,Regular,Blue,19.5,53,0,1 +S067,Engineering,Regular,Yellow,15.7,99,4,1 +S068,Science,Borderline,Yellow,12.8,97,3,1 +S069,Engineering,Irregular,Blue,11.5,42,1,1 +S070,Commerce,Borderline,Blue,10.0,82,5,1 +S071,Commerce,Irregular,Yellow,23.4,96,1,1 +S072,Commerce,Irregular,Blue,21.1,51,5,0 +S073,Science,Regular,Yellow,24.2,74,1,0 +S074,Commerce,Regular,Yellow,4.9,95,5,1 +S075,Science,Regular,Purple,18.8,42,1,1 +S076,Commerce,Regular,Red,23.6,82,1,0 +S077,Engineering,Borderline,Yellow,6.2,58,1,0 +S078,Engineering,Regular,Green,3.5,95,1,1 +S079,Arts,Borderline,Orange,19.0,98,3,0 +S080,Engineering,Irregular,Red,15.2,97,0,1 +S081,Arts,Borderline,Red,21.4,68,2,1 +S082,Engineering,Irregular,Red,5.2,92,4,1 +S083,Science,Irregular,Purple,20.3,91,2,1 +S084,Engineering,Irregular,Yellow,6.6,59,2,1 +S085,Arts,Regular,Purple,5.8,90,5,1 +S086,Arts,Borderline,Yellow,5.8,42,0,1 +S087,Commerce,Regular,Purple,20.7,76,5,1 +S088,Science,Regular,Purple,17.3,54,0,1 +S089,Engineering,Irregular,Orange,14.0,47,0,1 +S090,Commerce,Regular,Green,10.3,45,1,1 +S091,Engineering,Borderline,Purple,22.2,82,3,1 +S092,Engineering,Borderline,Orange,11.0,60,1,0 +S093,Commerce,Borderline,Blue,20.8,83,3,1 +S094,Commerce,Regular,Green,12.1,44,5,1 +S095,Commerce,Regular,Purple,10.7,59,3,1 +S096,Commerce,Borderline,Red,12.6,72,5,1 +S097,Commerce,Irregular,Blue,8.9,87,2,1 +S098,Engineering,Borderline,Blue,19.2,59,2,0 +S099,Commerce,Borderline,Orange,13.6,78,3,1 +S100,Science,Borderline,Blue,7.3,93,3,1 +S101,Arts,Regular,Green,22.7,77,5,1 +S102,Commerce,Regular,Purple,10.8,54,1,1 +S103,Commerce,Borderline,Purple,14.5,41,5,1 +S104,Engineering,Regular,Red,22.8,92,1,1 +S105,Commerce,Regular,Orange,16.4,41,2,1 +S106,Commerce,Irregular,Red,4.7,92,0,1 +S107,Commerce,Borderline,Blue,23.6,72,3,1 +S108,Engineering,Irregular,Red,16.4,96,1,1 +S109,Commerce,Irregular,Green,9.7,88,5,1 +S110,Arts,Regular,Purple,5.2,100,2,1 +S111,Engineering,Irregular,Blue,20.3,61,1,1 +S112,Arts,Borderline,Red,16.3,86,5,1 +S113,Engineering,Regular,Orange,14.3,64,3,1 +S114,Commerce,Irregular,Green,22.6,69,3,1 +S115,Arts,Borderline,Green,20.1,78,4,1 +S116,Engineering,Borderline,Red,5.5,92,0,0 +S117,Science,Irregular,Purple,9.2,99,4,1 +S118,Commerce,Borderline,Red,7.7,86,2,0 +S119,Engineering,Regular,Blue,19.1,65,1,1 +S120,Science,Regular,Red,2.8,65,2,1 +S121,Engineering,Borderline,Green,15.1,84,5,1 +S122,Science,Borderline,Red,19.5,54,3,1 +S123,Commerce,Borderline,Purple,22.2,47,4,1 +S124,Arts,Borderline,Orange,9.9,61,4,1 +S125,Science,Irregular,Yellow,20.9,57,4,1 +S126,Engineering,Irregular,Red,4.5,58,2,1 +S127,Commerce,Borderline,Purple,21.5,54,3,1 +S128,Science,Irregular,Purple,4.9,43,1,1 +S129,Engineering,Borderline,Orange,11.1,41,5,1 +S130,Engineering,Borderline,Green,20.3,99,1,0 +S131,Engineering,Borderline,Purple,5.4,66,2,0 +S132,Science,Regular,Purple,7.3,63,5,1 +S133,Science,Regular,Purple,18.6,81,4,1 +S134,Science,Regular,Purple,18.6,53,0,1 +S135,Arts,Irregular,Blue,16.7,97,2,1 +S136,Science,Regular,Blue,18.0,87,2,0 +S137,Science,Irregular,Green,14.5,45,3,1 +S138,Science,Irregular,Red,7.8,65,1,1 +S139,Arts,Regular,Purple,10.0,93,2,0 +S140,Science,Irregular,Orange,6.2,97,2,1 +S141,Engineering,Regular,Red,22.9,68,4,1 +S142,Science,Regular,Orange,15.4,77,4,1 +S143,Engineering,Borderline,Red,11.2,50,5,1 +S144,Engineering,Regular,Green,12.6,99,0,1 +S145,Engineering,Regular,Purple,23.8,54,3,1 +S146,Arts,Irregular,Purple,5.5,97,0,1 +S147,Arts,Borderline,Yellow,15.5,79,5,1 +S148,Arts,Regular,Orange,13.6,76,4,1 +S149,Science,Irregular,Red,16.1,71,1,1 +S150,Engineering,Regular,Red,2.4,54,4,1 +S151,Arts,Regular,Blue,22.1,51,3,0 +S152,Arts,Irregular,Yellow,23.4,53,4,1 +S153,Science,Irregular,Blue,15.0,51,3,1 +S154,Arts,Irregular,Blue,18.0,87,3,1 +S155,Science,Borderline,Blue,23.2,61,3,1 +S156,Commerce,Borderline,Orange,18.3,43,5,1 +S157,Arts,Irregular,Orange,5.5,98,3,1 +S158,Commerce,Regular,Green,15.3,93,3,1 +S159,Science,Borderline,Green,16.0,96,1,0 +S160,Engineering,Regular,Blue,11.8,100,0,0 +S161,Arts,Irregular,Yellow,18.9,50,2,1 +S162,Science,Regular,Red,23.5,64,0,0 +S163,Engineering,Regular,Orange,23.3,85,3,1 +S164,Engineering,Borderline,Yellow,12.4,82,1,0 +S165,Commerce,Borderline,Purple,4.6,49,4,1 +S166,Science,Irregular,Orange,24.7,89,1,1 +S167,Engineering,Irregular,Orange,21.3,53,3,1 +S168,Arts,Regular,Green,4.9,53,1,1 +S169,Arts,Regular,Red,23.2,72,1,0 +S170,Commerce,Regular,Red,22.0,76,3,1 +S171,Engineering,Irregular,Purple,13.9,75,5,1 +S172,Science,Borderline,Purple,15.6,45,1,1 +S173,Arts,Irregular,Orange,11.2,93,2,1 +S174,Engineering,Regular,Blue,3.3,56,2,1 +S175,Engineering,Borderline,Green,9.7,48,1,1 +S176,Commerce,Borderline,Green,20.5,93,5,0 +S177,Arts,Irregular,Orange,2.1,97,4,1 +S178,Arts,Irregular,Yellow,9.7,92,3,1 +S179,Science,Irregular,Blue,11.2,89,2,1 +S180,Arts,Regular,Orange,14.4,79,4,1 +S181,Science,Regular,Blue,23.2,73,1,0 +S182,Arts,Borderline,Blue,10.0,45,4,1 +S183,Commerce,Regular,Blue,10.0,65,0,1 +S184,Arts,Regular,Orange,19.0,62,2,0 +S185,Science,Regular,Green,12.4,56,1,0 +S186,Science,Regular,Green,7.2,83,3,1 +S187,Commerce,Borderline,Blue,12.4,70,5,1 +S188,Arts,Borderline,Yellow,5.2,45,1,1 +S189,Arts,Irregular,Red,6.1,53,3,1 +S190,Commerce,Regular,Orange,13.5,81,5,1 +S191,Arts,Irregular,Red,11.6,45,5,1 +S192,Arts,Irregular,Yellow,23.0,91,1,1 +S193,Science,Regular,Orange,10.3,70,4,1 +S194,Arts,Irregular,Blue,15.4,69,4,0 +S195,Arts,Regular,Green,16.5,76,5,1 +S196,Commerce,Irregular,Red,2.3,89,4,1 +S197,Commerce,Irregular,Purple,17.3,61,0,1 +S198,Engineering,Regular,Purple,6.1,81,5,0 +S199,Science,Regular,Yellow,24.1,74,5,0 +S200,Arts,Irregular,Blue,5.4,56,3,1 +S201,Arts,Irregular,Red,11.5,93,4,1 +S202,Engineering,Borderline,Blue,4.0,88,5,1 +S203,Arts,Irregular,Red,24.9,80,0,1 +S204,Science,Regular,Yellow,13.6,91,3,1 +S205,Engineering,Regular,Yellow,15.7,92,1,0 +S206,Science,Irregular,Purple,3.5,83,5,1 +S207,Engineering,Regular,Blue,19.2,90,0,0 +S208,Engineering,Irregular,Orange,6.8,82,2,1 +S209,Commerce,Borderline,Purple,22.7,81,0,0 +S210,Science,Irregular,Blue,6.7,77,0,1 +S211,Arts,Regular,Purple,6.4,85,3,1 +S212,Arts,Irregular,Orange,2.8,50,1,1 +S213,Science,Irregular,Green,12.9,93,2,1 +S214,Arts,Irregular,Green,15.0,92,4,1 +S215,Arts,Borderline,Green,3.5,42,4,0 +S216,Science,Regular,Green,19.8,90,0,0 +S217,Engineering,Borderline,Red,12.4,48,3,1 +S218,Science,Borderline,Green,14.1,60,3,1 +S219,Engineering,Regular,Orange,12.1,85,4,1 +S220,Arts,Regular,Yellow,11.2,50,2,1 +S221,Arts,Regular,Yellow,14.9,89,1,0 +S222,Arts,Regular,Red,5.6,90,2,1 +S223,Commerce,Regular,Green,6.2,70,5,1 +S224,Engineering,Irregular,Green,21.8,40,5,0 +S225,Commerce,Regular,Green,23.8,57,1,0 +S226,Commerce,Regular,Purple,10.6,77,4,1 +S227,Science,Borderline,Blue,8.2,99,1,1 +S228,Commerce,Regular,Purple,16.8,78,3,1 +S229,Science,Borderline,Blue,11.4,56,5,1 +S230,Science,Regular,Green,2.6,78,0,1 +S231,Commerce,Regular,Green,5.6,72,0,0 +S232,Engineering,Irregular,Purple,18.5,87,4,1 +S233,Engineering,Irregular,Purple,17.2,46,3,1 +S234,Engineering,Borderline,Blue,2.6,86,2,1 +S235,Engineering,Borderline,Yellow,7.1,72,3,1 +S236,Engineering,Borderline,Blue,7.3,98,0,0 +S237,Commerce,Regular,Purple,17.5,61,0,0 +S238,Commerce,Regular,Orange,2.5,78,5,1 +S239,Arts,Borderline,Purple,4.4,96,3,1 +S240,Engineering,Borderline,Orange,20.4,46,3,1 +S241,Commerce,Borderline,Red,6.1,96,0,1 +S242,Arts,Irregular,Purple,17.0,81,2,1 +S243,Engineering,Regular,Red,7.5,44,4,1 +S244,Science,Borderline,Yellow,4.3,58,4,1 +S245,Arts,Regular,Blue,7.6,82,3,1 +S246,Commerce,Borderline,Orange,18.6,44,4,0 +S247,Science,Borderline,Blue,21.7,75,0,0 +S248,Science,Irregular,Red,21.1,61,0,1 +S249,Science,Borderline,Orange,11.1,77,3,1 +S250,Arts,Borderline,Blue,17.4,43,3,1 +S251,Commerce,Regular,Purple,6.7,92,5,1 +S252,Science,Borderline,Green,8.7,98,3,1 +S253,Engineering,Irregular,Red,22.6,98,2,1 +S254,Science,Borderline,Blue,2.3,85,4,1 +S255,Science,Regular,Red,4.0,48,3,1 +S256,Arts,Borderline,Red,6.8,85,1,0 +S257,Arts,Regular,Orange,2.6,41,5,1 +S258,Commerce,Regular,Orange,6.2,41,1,0 +S259,Engineering,Borderline,Green,15.4,59,0,0 +S260,Arts,Regular,Purple,11.7,69,4,0 +S261,Science,Regular,Red,22.5,86,3,1 +S262,Commerce,Borderline,Blue,20.8,81,1,0 +S263,Science,Borderline,Yellow,9.9,67,4,1 +S264,Science,Irregular,Red,8.0,56,0,1 +S265,Arts,Irregular,Red,10.7,100,2,1 +S266,Commerce,Irregular,Green,15.6,66,5,1 +S267,Engineering,Regular,Purple,8.2,67,4,1 +S268,Engineering,Regular,Yellow,16.4,50,4,1 +S269,Arts,Irregular,Orange,11.4,88,2,1 +S270,Arts,Borderline,Orange,14.7,82,4,1 +S271,Commerce,Borderline,Blue,12.0,53,0,1 +S272,Engineering,Borderline,Yellow,8.8,45,0,1 +S273,Engineering,Regular,Orange,23.8,81,2,0 +S274,Engineering,Irregular,Blue,19.6,79,5,1 +S275,Science,Regular,Purple,5.2,56,3,0 +S276,Engineering,Irregular,Blue,22.0,97,1,1 +S277,Science,Irregular,Orange,13.2,49,3,1 +S278,Commerce,Borderline,Green,22.6,66,4,0 +S279,Science,Regular,Green,20.4,97,1,0 +S280,Commerce,Regular,Green,11.8,65,2,0 +S281,Engineering,Regular,Orange,2.5,78,2,1 +S282,Engineering,Borderline,Green,8.2,64,5,1 +S283,Commerce,Irregular,Yellow,14.5,56,1,1 +S284,Arts,Regular,Purple,16.6,99,0,0 +S285,Commerce,Regular,Blue,7.9,65,1,0 +S286,Arts,Borderline,Blue,5.2,94,4,1 +S287,Science,Regular,Orange,21.2,54,0,0 +S288,Science,Borderline,Green,24.6,53,2,1 +S289,Science,Borderline,Green,14.1,42,1,1 +S290,Engineering,Regular,Red,5.9,79,3,1 +S291,Science,Regular,Purple,8.3,62,5,1 +S292,Arts,Borderline,Yellow,2.4,92,3,1 +S293,Science,Regular,Blue,23.0,68,5,1 +S294,Commerce,Regular,Red,4.7,98,4,1 +S295,Commerce,Borderline,Red,15.3,51,3,1 +S296,Engineering,Borderline,Orange,8.3,92,1,0 +S297,Commerce,Borderline,Blue,14.7,87,1,0 +S298,Arts,Borderline,Orange,17.0,86,3,1 +S299,Science,Regular,Yellow,21.1,91,1,0 +S300,Engineering,Regular,Red,6.7,86,4,1