diff --git a/Job Satisfaction Analysis/DatasetLink.txt b/Job Satisfaction Analysis/DatasetLink.txt new file mode 100644 index 0000000..e6a3af2 --- /dev/null +++ b/Job Satisfaction Analysis/DatasetLink.txt @@ -0,0 +1 @@ +https://drive.google.com/file/d/1CnCnFGRt0LDJibsDuH2690gTPpcB-RJx/view?usp=sharing \ No newline at end of file diff --git a/Job Satisfaction Analysis/JobSatisfaction.ipynb b/Job Satisfaction Analysis/JobSatisfaction.ipynb new file mode 100644 index 0000000..47cd0b9 --- /dev/null +++ b/Job Satisfaction Analysis/JobSatisfaction.ipynb @@ -0,0 +1,644 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "eOEX0amSNBuA" + }, + "outputs": [], + "source": [ + "#imorting neccessory 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.preprocessing import StandardScaler, OneHotEncoder\n", + "from sklearn.compose import ColumnTransformer\n", + "from sklearn.pipeline import Pipeline\n", + "from sklearn.impute import SimpleImputer\n", + "from sklearn.ensemble import RandomForestClassifier\n", + "from sklearn.metrics import accuracy_score, confusion_matrix, classification_report" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "0FRoQw7_O5fu", + "outputId": "fbb15331-be13-4390-b5b9-b11ee41d173b" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n" + ] + } + ], + "source": [ + "from google.colab import drive\n", + "drive.mount('/content/drive')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "TklQk9bTOIv4", + "outputId": "c94f994c-119f-4707-f657-05e6690287dc" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":2: DtypeWarning: Columns (8,12,13,14,15,16,50,51,52,53,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128) have mixed types. Specify dtype option on import or set low_memory=False.\n", + " df = pd.read_csv('/content/drive/MyDrive/GirlsScriptOpenSource/StockOverflow/survey_results_public_2018.csv')\n" + ] + } + ], + "source": [ + "# Load the dataset\n", + "df = pd.read_csv('/content/drive/MyDrive/GirlsScriptOpenSource/StockOverflow/survey_results_public_2018.csv')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "3y-4rilZPa-4", + "outputId": "8d10e4d5-3240-4709-ec96-12c4031884db" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Respondent Hobby OpenSource Country Student \\\n", + "0 1 Yes No Kenya No \n", + "1 3 Yes Yes United Kingdom No \n", + "2 4 Yes Yes United States No \n", + "3 5 No No United States No \n", + "4 7 Yes No South Africa Yes, part-time \n", + "\n", + " Employment FormalEducation \\\n", + "0 Employed part-time Bachelor’s degree (BA, BS, B.Eng., etc.) \n", + "1 Employed full-time Bachelor’s degree (BA, BS, B.Eng., etc.) \n", + "2 Employed full-time Associate degree \n", + "3 Employed full-time Bachelor’s degree (BA, BS, B.Eng., etc.) \n", + "4 Employed full-time Some college/university study without earning ... \n", + "\n", + " UndergradMajor \\\n", + "0 Mathematics or statistics \n", + "1 A natural science (ex. biology, chemistry, phy... \n", + "2 Computer science, computer engineering, or sof... \n", + "3 Computer science, computer engineering, or sof... \n", + "4 Computer science, computer engineering, or sof... \n", + "\n", + " CompanySize \\\n", + "0 20 to 99 employees \n", + "1 10,000 or more employees \n", + "2 20 to 99 employees \n", + "3 100 to 499 employees \n", + "4 10,000 or more employees \n", + "\n", + " DevType ... \\\n", + "0 Full-stack developer ... \n", + "1 Database administrator;DevOps specialist;Full-... ... \n", + "2 Engineering manager;Full-stack developer ... \n", + "3 Full-stack developer ... \n", + "4 Data or business analyst;Desktop or enterprise... ... \n", + "\n", + " Exercise Gender SexualOrientation \\\n", + "0 3 - 4 times per week Male Straight or heterosexual \n", + "1 Daily or almost every day Male Straight or heterosexual \n", + "2 NaN NaN NaN \n", + "3 I don't typically exercise Male Straight or heterosexual \n", + "4 3 - 4 times per week Male Straight or heterosexual \n", + "\n", + " EducationParents \\\n", + "0 Bachelor’s degree (BA, BS, B.Eng., etc.) \n", + "1 Bachelor’s degree (BA, BS, B.Eng., etc.) \n", + "2 NaN \n", + "3 Some college/university study without earning ... \n", + "4 Some college/university study without earning ... \n", + "\n", + " RaceEthnicity Age Dependents MilitaryUS \\\n", + "0 Black or of African descent 25 - 34 years old Yes NaN \n", + "1 White or of European descent 35 - 44 years old Yes NaN \n", + "2 NaN NaN NaN NaN \n", + "3 White or of European descent 35 - 44 years old No No \n", + "4 White or of European descent 18 - 24 years old Yes NaN \n", + "\n", + " SurveyTooLong SurveyEasy \n", + "0 The survey was an appropriate length Very easy \n", + "1 The survey was an appropriate length Somewhat easy \n", + "2 NaN NaN \n", + "3 The survey was an appropriate length Somewhat easy \n", + "4 The survey was an appropriate length Somewhat easy \n", + "\n", + "[5 rows x 129 columns]\n" + ] + } + ], + "source": [ + "# Display the first few rows of the dataframe\n", + "print(df.head())\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "smR6ZcZ6OIzF", + "outputId": "89365fe3-5451-4578-de35-68c8d3ba8e4e" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Respondent AssessJob1 AssessJob2 AssessJob3 AssessJob4 \\\n", + "count 98855.000000 66985.000000 66985.000000 66985.000000 66985.000000 \n", + "mean 50822.971635 6.397089 6.673524 5.906875 4.065791 \n", + "std 29321.650410 2.788428 2.531202 2.642734 2.541196 \n", + "min 1.000000 1.000000 1.000000 1.000000 1.000000 \n", + "25% 25443.500000 4.000000 5.000000 4.000000 2.000000 \n", + "50% 50823.000000 7.000000 7.000000 6.000000 4.000000 \n", + "75% 76219.500000 9.000000 9.000000 8.000000 6.000000 \n", + "max 101592.000000 10.000000 10.000000 10.000000 10.000000 \n", + "\n", + " AssessJob5 AssessJob6 AssessJob7 AssessJob8 AssessJob9 \\\n", + "count 66985.000000 66985.000000 66985.000000 66985.000000 66985.000000 \n", + "mean 3.953243 4.407196 5.673181 4.225200 7.640009 \n", + "std 2.520499 2.502069 2.923998 2.507411 2.407457 \n", + "min 1.000000 1.000000 1.000000 1.000000 1.000000 \n", + "25% 2.000000 2.000000 3.000000 2.000000 6.000000 \n", + "50% 3.000000 4.000000 6.000000 4.000000 8.000000 \n", + "75% 6.000000 6.000000 8.000000 6.000000 10.000000 \n", + "max 10.000000 10.000000 10.000000 10.000000 10.000000 \n", + "\n", + " ... JobEmailPriorities6 JobEmailPriorities7 ConvertedSalary \\\n", + "count ... 46213.00000 46213.000000 4.770200e+04 \n", + "mean ... 4.97425 4.836388 9.578086e+04 \n", + "std ... 1.86063 1.659844 2.023482e+05 \n", + "min ... 1.00000 1.000000 0.000000e+00 \n", + "25% ... 4.00000 4.000000 2.384400e+04 \n", + "50% ... 5.00000 5.000000 5.507500e+04 \n", + "75% ... 7.00000 6.000000 9.300000e+04 \n", + "max ... 7.00000 7.000000 2.000000e+06 \n", + "\n", + " AdsPriorities1 AdsPriorities2 AdsPriorities3 AdsPriorities4 \\\n", + "count 60479.000000 60479.000000 60479.000000 60479.000000 \n", + "mean 2.726880 3.805784 3.340945 3.782470 \n", + "std 1.881078 1.821323 1.673485 1.844864 \n", + "min 1.000000 1.000000 1.000000 1.000000 \n", + "25% 1.000000 2.000000 2.000000 2.000000 \n", + "50% 2.000000 4.000000 3.000000 4.000000 \n", + "75% 4.000000 5.000000 5.000000 5.000000 \n", + "max 7.000000 7.000000 7.000000 7.000000 \n", + "\n", + " AdsPriorities5 AdsPriorities6 AdsPriorities7 \n", + "count 60479.000000 60479.000000 60479.000000 \n", + "mean 4.383604 5.138809 4.821459 \n", + "std 1.931746 1.853249 1.874895 \n", + "min 1.000000 1.000000 1.000000 \n", + "25% 3.000000 4.000000 3.000000 \n", + "50% 5.000000 6.000000 5.000000 \n", + "75% 6.000000 7.000000 7.000000 \n", + "max 7.000000 7.000000 7.000000 \n", + "\n", + "[8 rows x 42 columns]\n" + ] + } + ], + "source": [ + "# Summary statistics\n", + "print(df.describe())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "bvc8e8D7PfFC", + "outputId": "4f08b6d0-73ca-40cc-c70b-5a0b0b70fdb4" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Respondent 0\n", + "Hobby 0\n", + "OpenSource 0\n", + "Country 412\n", + "Student 3954\n", + " ... \n", + "Age 34281\n", + "Dependents 36259\n", + "MilitaryUS 83074\n", + "SurveyTooLong 32914\n", + "SurveyEasy 32976\n", + "Length: 129, dtype: int64\n" + ] + } + ], + "source": [ + "# Check for missing values\n", + "print(df.isnull().sum())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 564 + }, + "id": "9SdbszuTPfXT", + "outputId": "1d71f563-51e2-45fc-e154-0d925b9624f5" + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA3kAAAIjCAYAAAC+ktLwAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABw2klEQVR4nO3dZ3gV1eL+/Xun99BSJQbpvRgVAgIqJQgiKEoRJSCgNKXL4aiAeDwoqGBBPRbAAoqIoBSRDgqhCIROKAZRIYC0EEoCyXpe8GR+2aQQYjBh/t/PdeWCPbP2zJpZM7Pn3rNnjcMYYwQAAAAAsAWXoq4AAAAAAKDwEPIAAAAAwEYIeQAAAABgI4Q8AAAAALARQh4AAAAA2AghDwAAAABshJAHAAAAADZCyAMAAAAAGyHkAQAAAICNEPIAwAbGjBkjh8Ohv/76q6irck2Zdb1eR48e1SOPPKLSpUvL4XBo0qRJhV+5XBS0zkXh4MGDcjgcmjZt2g2f17Rp0+RwOHTw4EFrWLly5fTAAw/c8HlL0sqVK+VwOLRy5cp/ZH4AcLMg5AFAMZJ50vzLL7/84/OeN2+emjZtquDgYPn4+Kh8+fLq2LGjFi1adN3TOn/+vMaMGVOoJ9+DBw/Wjz/+qJEjR+rzzz9Xq1atCm3a0o2pc2FwOBzWn5ubm0qVKqWoqCgNHDhQu3btKrT5vPfee/9IMCyI4lw3ACiOHMYYU9SVAABcMW3aNPXo0UMbN27UHXfcke/3jRkzRi+99JKOHz+uMmXKXPd8X3/9dQ0fPlxNmzZVu3bt5OPjo/3792vp0qWqU6fOdZ9g//XXXwoKCtLo0aM1ZswYp3GXL1/W5cuX5eXldV3TDA0NVfPmzfXFF19c1/vy60bUuTA4HA61aNFC3bp1kzFGZ86c0datWzVr1iydO3dOr732moYMGWKVN8YoNTVV7u7ucnV1zfd8atasqTJlylxXyE1PT9elS5fk6elpXeksV66catasqfnz5+d7OgWtW0ZGhtLS0uTh4SEXF763BoBMbkVdAQBA0bp8+bJefvlltWjRQosXL842/tixY4U6Pzc3N7m5Xf/Hz7Fjx1SiRIlCrUt+FbTOhaVy5cp6/PHHnYa9+uqratu2rYYOHaqqVauqdevWkq6EwhsdRs+dOydfX1+5urpeV5AsbC4uLkUSvAGguONrLwAo5pYvX67GjRvL19dXJUqUULt27bR79+4cy/7111/q2LGjAgICVLp0aQ0cOFAXL17Mc/p//fWXkpOT1ahRoxzHBwcHW/9PS0vTqFGjFBUVpcDAQPn6+qpx48ZasWKFVebgwYMKCgqSJL300kvWTw0zr47ldH/bkiVLdPfdd6tEiRLy8/NTlSpV9O9//1vS//2E1RijyZMnW9OTpJMnT2rYsGGqVauW/Pz8FBAQoPvvv19bt27NthwXL17UmDFjVLlyZXl5eSksLEwPP/ywDhw4UKA6Z4bjChUqyNPTU+XKldO///1vpaamOpXLvEft559/1l133SUvLy+VL19en332WZ7tci2lS5fWV199JTc3N73yyivW8JzuyUtKSlKPHj1UtmxZeXp6KiwsTO3atbPupStXrpx27typVatWWct+zz33SPq/9b9q1Sr169dPwcHBKlu2rNO4rPfkZVq8eLHq1q0rLy8vVa9eXd9++63T+Nzuc7x6mnnVLbd78mbNmqWoqCh5e3urTJkyevzxx/Xnn386lenevbv8/Pz0559/qn379vLz81NQUJCGDRum9PT0a6x9ACjeuJIHAMXY0qVLdf/996t8+fIaM2aMLly4oHfeeUeNGjXS5s2bVa5cOafyHTt2VLly5TRu3DitW7dOb7/9tk6dOpVnoAgODpa3t7fmzZunZ555RqVKlcq1bHJysj7++GN16dJFvXv31tmzZ/XJJ58oJiZGGzZsUN26dRUUFKT3339fffv21UMPPaSHH35YklS7du0cp7lz50498MADql27tsaOHStPT0/t379fa9askSQ1adJEn3/+uZ544gnrZ4uZfv31V82dO1ePPvqobrvtNh09elT/+9//1LRpU+3atUvh4eGSrvys8IEHHtCyZcvUuXNnDRw4UGfPntWSJUu0Y8cONW/e/LrqLEm9evXSp59+qkceeURDhw7V+vXrNW7cOO3evVtz5sxxKrt//3498sgj6tmzp2JjYzVlyhR1795dUVFRqlGjRq7zuJZbb71VTZs21YoVK5ScnKyAgIAcy3Xo0EE7d+7UM888o3LlyunYsWNasmSJDh06pHLlymnSpEl65pln5Ofnp+eff16SFBIS4jSNfv36KSgoSKNGjdK5c+fyrNe+ffvUqVMn9enTR7GxsZo6daoeffRRLVq0SC1atLiuZcxP3bLK/MnznXfeqXHjxuno0aN66623tGbNGm3ZssXpanB6erpiYmJUv359vf7661q6dKneeOMNVahQQX379r2uegJAsWIAAMXG1KlTjSSzceNGY4wxdevWNcHBwebEiRNWma1btxoXFxfTrVs3a9jo0aONJPPggw86Ta9fv35Gktm6dWue8x01apSRZHx9fc39999vXnnlFbNp06Zs5S5fvmxSU1Odhp06dcqEhISYJ5980hp2/PhxI8mMHj062zQy65pp4sSJRpI5fvx4nnWUZPr37+807OLFiyY9Pd1pWGJiovH09DRjx461hk2ZMsVIMm+++Wa26WZkZFx3nePj440k06tXL6dyw4YNM5LM8uXLrWGRkZFGklm9erU17NixY8bT09MMHTo0z2XObbmzGjhwoFMbJyYmGklm6tSpxpgr7SPJTJgwIc/51KhRwzRt2jTb8Mxt8u677zaXL1/OcVxiYqI1LHN5Z8+ebQ07c+aMCQsLM/Xq1bOGXb1O85pmbnVbsWKFkWRWrFhhjDEmLS3NBAcHm5o1a5oLFy5Y5ebPn28kmVGjRlnDYmNjjSSn7cQYY+rVq2eioqKyzQsAbib8XBMAiqkjR44oPj5e3bt3d7q6Vrt2bbVo0UILFy7M9p7+/fs7vX7mmWckKceyWb300kuaMWOG6tWrpx9//FHPP/+8oqKidPvttzv9NNTV1VUeHh6SrnR6cfLkSV2+fFl33HGHNm/eXKDlzLyy8t133ykjI+O63uvp6Wl1uJGenq4TJ05YP/fMWp/Zs2erTJky1vrIqiCPRshcn1k7PJGkoUOHSpIWLFjgNLx69epq3Lix9TooKEhVqlTRr7/+et3zvpqfn58k6ezZszmO9/b2loeHh1auXKlTp04VeD69e/fO9/134eHheuihh6zXAQEB6tatm7Zs2aKkpKQC1+FafvnlFx07dkz9+vVzulevTZs2qlq1arZ2kaQ+ffo4vW7cuHGhtAsAFCVCHgAUU7/99pskqUqVKtnGVatWTX/99Ve2n81VqlTJ6XWFChXk4uKS4z1TV+vSpYt++uknnTp1SosXL9Zjjz2mLVu2qG3btk739X366aeqXbu2vLy8VLp0aQUFBWnBggU6c+ZMAZZS6tSpkxo1aqRevXopJCREnTt31tdff52vwJeRkaGJEyeqUqVK8vT0VJkyZRQUFKRt27Y51efAgQOqUqVKoXWe8ttvv8nFxUUVK1Z0Gh4aGqoSJUpYbZfp1ltvzTaNkiVL/q3QlSklJUWS5O/vn+N4T09Pvfbaa/rhhx8UEhKiJk2aaPz48dcdtm677bZ8l61YsWK28Fy5cmVJyte2WFB57TNVq1bN1i5eXl7WvZiZCqtdAKAoEfIAwMYKcpUqICBALVq00PTp0xUbG6sDBw5o/fr1kqQvvvhC3bt3V4UKFfTJJ59o0aJFWrJkie67777rvgqXydvbW6tXr9bSpUv1xBNPaNu2berUqZNatGhxzQ4w/vvf/2rIkCFq0qSJvvjiC/34449asmSJatSoUeD6XI/8rt/croCZQniK0Y4dO+Tq6ppnCBs0aJD27t2rcePGycvLSy+++KKqVaumLVu25Hs+3t7ef7uuWeW27v7JTk+KsmdQALiRCHkAUExFRkZKkhISErKN27Nnj8qUKSNfX1+n4fv27XN6vX//fmVkZGTroCW/Mp/Vd+TIEUnSN998o/Lly+vbb7/VE088oZiYGDVv3jxbD57XGy5dXFzUrFkzvfnmm9q1a5deeeUVLV++3KnXzpx88803uvfee/XJJ5+oc+fOatmypZo3b67Tp087latQoYISEhJ06dKlXKd1PXWOjIxURkZGtvV99OhRnT592mq7G+3QoUNatWqVoqOjc72Sl6lChQoaOnSoFi9erB07digtLU1vvPGGNb4gXwjkZv/+/dkC7N69eyXJ2hZLliwpSdna6uqrbddTt7z2mYSEhH+sXQCgqBHyAKCYCgsLU926dfXpp586nQjv2LFDixcvtp6LltXkyZOdXr/zzjuSpPvvvz/X+Zw/f15xcXE5jvvhhx8k/d/P3zKvfGQ9gV+/fn229/v4+EjKfgKfk5MnT2YbVrduXUnK9jiCq7m6umYLE7NmzcrWXX6HDh30119/6d133802jcz3X0+dM9f9pEmTnIa/+eabkq7cA3ajnTx5Ul26dFF6errV62ROzp8/ny2EV6hQQf7+/k7r19fXN1/Lnh+HDx926mE0OTlZn332merWravQ0FCrDpK0evVqq9y5c+f06aefZptefut2xx13KDg4WB988IHTsv3www/avXv3P9IuAFAc8AgFACjGJkyYoPvvv1/R0dHq2bOn9QiFwMBA6xluWSUmJurBBx9Uq1atFBcXpy+++EKPPfaY6tSpk+s8zp8/r4YNG6pBgwZq1aqVIiIidPr0ac2dO1c//fST2rdvr3r16kmSHnjgAX377bd66KGH1KZNGyUmJuqDDz5Q9erVrXvDpCs/7atevbpmzpypypUrq1SpUqpZs6Zq1qyZbf5jx47V6tWr1aZNG0VGRurYsWN67733VLZsWd199915rp8HHnhAY8eOVY8ePdSwYUNt375d06dPV/ny5Z3KdevWTZ999pmGDBmiDRs2qHHjxjp37pyWLl2qfv36qV27dtdV5zp16ig2NlYffvihTp8+raZNm2rDhg369NNP1b59e91777151vt67d27V1988YWMMUpOTtbWrVs1a9YspaSk6M0331SrVq3yfG+zZs3UsWNHVa9eXW5ubpozZ46OHj2qzp07W+WioqL0/vvv6z//+Y8qVqyo4OBg3XfffQWqb+XKldWzZ09t3LhRISEhmjJlio4ePaqpU6daZVq2bKlbb71VPXv21PDhw+Xq6qopU6YoKChIhw4dcppefuvm7u6u1157TT169FDTpk3VpUsX6xEK5cqV0+DBgwu0PABw0ynKrj0BAM4yu/rfvHmzNWzp0qWmUaNGxtvb2wQEBJi2bduaXbt2Ob0vszv6Xbt2mUceecT4+/ubkiVLmgEDBjh1JZ+TS5cumY8++si0b9/eREZGGk9PT+Pj42Pq1atnJkyY4PTIhIyMDPPf//7XKlevXj0zf/58ExsbayIjI52mu3btWhMVFWU8PDycHk1wddf5y5YtM+3atTPh4eHGw8PDhIeHmy5dupi9e/c6TU+5PEJh6NChJiwszHh7e5tGjRqZuLg407Rp02xd7p8/f948//zz5rbbbjPu7u4mNDTUPPLII+bAgQPXXefM9fbSSy9Z04uIiDAjR440Fy9edCoXGRlp2rRpk22951THnEiy/lxcXEyJEiVMvXr1zMCBA83OnTuzlb/6EQp//fWX6d+/v6latarx9fU1gYGBpn79+ubrr792el9SUpJp06aN8ff3N5Ksul39WI+scnuEQps2bcyPP/5oateubTw9PU3VqlXNrFmzsr1/06ZNpn79+sbDw8Pceuut5s0338xxmrnV7epHKGSaOXOmqVevnvH09DSlSpUyXbt2NX/88YdTmdjYWOPr65utTrk92gEAbiYOYwrhrm8AQKF4++23NXDgQO3fv9/6ORsAAMD14J48AChGNm7cKF9f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Krp06VK2cpcuXVKjRo2s1w6HQ3fddZe2b9+uAwcOaP78+dq7d6+1Hv7zn//o3LlzkqSEhATVrl1bO3bs0LRp0+Tn56chQ4ZIkvr166eMjAwlJiZa087afplmzpypRo0aKTQ0VH5+fnrhhReuuZxbt25VSkqKSpcu7dRGiYmJubZR9+7dtX//fq1bt07SlR7QOnbsKF9f3xzL7969WxEREU73ekRHR+dZr759++qrr75S3bp19dxzz2nt2rVO84+Pj1eVKlX07LPPavHixU7vXbp0qZo1a6ZbbrlF/v7+euKJJ3TixAmdP38+x3kFBQWpTZs2SklJ0YYNG9SmTRv16NFDGRkZmj17tnr37q0PP/wwW/u6uLjorrvu0u7duyVdaf/IyEin9frOO+9Ikm655Rb5+fnp7NmzWrt2rfz8/BQXF6dPPvlEMTExVvtmrpeibN+KFSvq3LlzWrdunV577TWtWLFCLVu2lJeXV7ZpT5s2TS+++KL27dsnT09P3XvvvcrIyNC+ffuscr///rvatm1r3eP4/PPPS1K2uvv7+1v/DwsLs/ax/fv3KzU1VRcvXlRAQIDc3d3l5eWV43Ekp/UmSdu3b1d6erpmzJih5cuXy9XVVe7u7lqxYoU1jd27d6tMmTJO287GjRtljMl128nJo48+qgsXLqh8+fLq3bu35syZo8uXL+f7/flps927d6t+/fpO77vWPpUp6zE8896czGP27t27nbZxSWrUqJG1jWfKbT1n2r17t9zc3BQVFWUNq1q1ap49Jea1X7/88ssKDw+Xn5+fUlNT9e233+r222/XtGnTJEmbNm2SJPXq1Uv+/v7q1KmTJOnIkSOSrmyDV7vrrrucXtesWVMOh0PNmzfXE088oenTp6tUqVLWurmW/fv3Kz093fqsatSokfz8/LRq1SpdunRJjz76aI7tds8998jd3V0xMTFq27at3nrrLave0pX75YYNG6Zq1aqpRIkS8vPz0+7du6/rM0yShgwZol69eql58+Z69dVXc93/c7N161aNHTvW2h5jY2Ot7bpZs2Zav3690tPTsx2Pc5OQkKA777zTadjVbSJJPj4+qlChgvU6LCws322SKTw8XG3atNGUKVMkSfPmzVNqaqoeffTRHMufOXNGR44ccWorNze3PLf7Fi1aKDIyUuXLl7e2n8zjxj9xnlKqVClVqFBBxhjdddddGjRokBYvXpzneePly5etz+Vz587pwIEDSkhI0OTJk53OUw4fPizpymdc7dq15eXlZZ3fvfvuu5Kkhg0b3jTnjQcOHFBaWppT+5YqVUpVqlTJdf3mdVzPq+0lad++ferSpYvKly+vgIAAlStXTlL2z8C8XGsbupb8rNe/87mSFSEvn3x9fVWxYkWnv6tv9M08+T158qROnjx5XdPOlJKSIklasGCBU6DctWuXvvnmG6f3Zb3B3uFwZLvh3uFwKCMj47qnm1WvXr2sD++pU6eqR48e1o2kV3N1ddWSJUv0ww8/qHr16nrnnXdUpUoVKxDFxsYqPj5eb731ltauXav4+HiVLl1aaWlp+VlNlsmTJyskJER//fWXUlNTVbly5XzvYJknq/Xq1VO7du2s9bBjxw6NHz/eqWxKSoqefvppxcfHa+bMmZKunNzv27fP6YPu6kAVFxenrl27qnXr1po/f762bNmi559//prLmZKSorCwsGxfJiQkJGj48OE5vic4OFht27bV1KlTdfToUf3www968skn87Uu8uv+++/Xb7/9psGDB+vw4cNq1qyZhg0bJkm6/fbblZiYqJdfflkXLlxQx44d9cgjj0i60p3zAw88oNq1a2v27NnatGmTJk+eLEl5rosnn3xSKSkp2rhxo5588klFRESoWbNmatCggby9vfXKK69IUo7hPieZ6zWz++WffvpJ8fHxKl++vHr06KH4+Hj5+/vr5Zdf1tatW4tV+3p5eSk0NFRTp061PvSOHz+e47Sffvppbd26Vdu2bdP777+vLl26qEyZMurdu7cuXbokY4w++OADBQQEaPr06ZKkkSNHSsq7PRwOh4wx1nwkacmSJZo2bZq6d++u4OBghYWF6ZNPPnF6X25fNKSkpMjV1VXx8fHavHmzJk6cqIcffli+vr7WFy2pqamaMWOG07bToUOHa9b1ahEREUpISNB7770nb29v9evXT02aNLnubed62ux6XH0Ml2Qds/Mrt/X8d+S1X0dERGjv3r2aMmWKGjZsqDNnzqh06dIaPXq0zp07p5iYGElXgszGjRv1v//9T5KuK1x7eXkpICBAX375pcLCwjRq1CgNHjzY2g6v5fz583J1dbWOOd7e3lq3bp2aNm2qjh07ysfHJ9f3+vj4KC4uTg0bNtTMmTNVuXJl60u0YcOGac6cOfrv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ZIzRr7/+qm+//Vaurq569913FRUVpRMnTmjv3r1KS0tTz549JV3Z3pOSkjR8+HD17NlTFSpU0EcffSTpys8ydu3aJR8fH/38888aMGCA2rVrp1GjRsnV1VUnT55UhQoVsoWKomrf4OBg/fnnn1b77ty5U2+//bZTmREjRqhBgwZq1qyZ7r77bt111136448/9PHHH8vb21uRkZFyc3OTq6ur3nnnHfXp00dBQUHWT2oyu57P7CZ6/vz5at26dbb909/fX+3atVPfvn2VmJioe+65Rz/88IPS09O1Z8+ePLejTJnfTrdr106xsbFq06aNTp8+rddee00lS5ZUiRIl9NRTT+nnn3/WQw89pGeffVaffvqpduzYkW0dp6SkaNmyZapTp458fHyyXQ2YNm2a0tPTVb9+ffn4+OiLL76w1kd+5KfNBg4cqO7du+uOO+5Qo0aNNH36dO3cudPpJ1AFMXz4cHXs2FH16tVT8+bNNW/ePH377bdaunTpdU2nSpUqatWqlZ5++mm9//77cnNz06BBg/Lskj+3/To9PV3VqlVTo0aNdP/996tMmTLWtvjAAw/o1ltvlYeHh9LS0pSUlKTvv//eurqQqV+/fvriiy/UrVs3vfjii9q7d6/1rX+m+Ph4paWlKT4+XiVLltTChQuzXTFyc3PTtm3blJCQoNKlSzt9qZr5k/5u3brpjTfeUPv27fWvf/1LJUuWtILqs88+q0aNGun1119Xu3bt9OOPP2rBggVKS0tTXFycwsPDlZCQoH379qlbt26Sruz73377rdq2bSuHw6EXX3wx25XXcuXKafXq1ercubM8PT2zfYFz4cIFDR8+XI888ohuu+02/fHHH9q4caN1pTo/Ro0aZa3v5s2ba+jQoYqKilJaWpr+/e9/69SpU3I4HPL29tbWrVuv+WiJp59+Wm+++aZGjBihnj17Kj4+3mqT67kCU65cOf34449Wm+TW7byrq6u6d++ukSNHqlKlStf8GdrAgQP16quvqlKlSqpatarefPPNPL+kmD9/vn799Vc1adLE2n4yMjJUpUqVf+w8ZdOmTfLz89PGjRutn162a9fOKTAOHjzYOm/csWOH3nrrLeu88aWXXlKfPn30/fff66GHHpKbm5v27dtnhdvM85TevXtr5MiRat++vT777DNJssLizXDe6Ofnp549e2r48OEqXbq0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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Visualize the distribution of Job Satisfaction\n", + "plt.figure(figsize=(10, 6))\n", + "sns.countplot(x='JobSatisfaction', data=df)\n", + "plt.title('Job Satisfaction Distribution')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "7x73vib8Obvk" + }, + "outputs": [], + "source": [ + "# Select relevant features for prediction , which are relatade to job\n", + "features = ['Hobby', 'OpenSource', 'Country', 'Student', 'Employment', 'FormalEducation',\n", + " 'UndergradMajor', 'CompanySize', 'DevType', 'YearsCoding', 'YearsCodingProf',\n", + " 'JobSatisfaction']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "5ivNFXwbO2Vl" + }, + "outputs": [], + "source": [ + "# Filter the dataset with selected features\n", + "df = df[features]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "5IC3YEsDObyf" + }, + "outputs": [], + "source": [ + "# Drop rows with missing target value\n", + "df = df.dropna(subset=['JobSatisfaction'])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "z7tM54s9Ob1I" + }, + "outputs": [], + "source": [ + "# Split features and target\n", + "X = df.drop('JobSatisfaction', axis=1)\n", + "y = df['JobSatisfaction']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "mb_yUbbWOb37" + }, + "outputs": [], + "source": [ + "# Define categorical and numerical features\n", + "categorical_features = X.select_dtypes(include=['object']).columns\n", + "numerical_features = X.select_dtypes(include=['int64', 'float64']).columns" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "5luiMUypOI3h" + }, + "outputs": [], + "source": [ + "# Preprocessing pipelines for numerical and categorical data\n", + "numerical_pipeline = Pipeline(steps=[\n", + " ('imputer', SimpleImputer(strategy='median')),\n", + " ('scaler', StandardScaler())\n", + "])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "wzSnaqicPyd8" + }, + "outputs": [], + "source": [ + "categorical_pipeline = Pipeline(steps=[\n", + " ('imputer', SimpleImputer(strategy='most_frequent')),\n", + " ('onehot', OneHotEncoder(handle_unknown='ignore'))\n", + "])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "GN5N9QGrPyg-" + }, + "outputs": [], + "source": [ + "# Combine preprocessing pipelines\n", + "preprocessor = ColumnTransformer(\n", + " transformers=[\n", + " ('num', numerical_pipeline, numerical_features),\n", + " ('cat', categorical_pipeline, categorical_features)\n", + " ]\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Hb2Osu0ZPykj" + }, + "outputs": [], + "source": [ + "# Split the data into training and testing sets\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "5oOnOyFaQTsA" + }, + "outputs": [], + "source": [ + "# Create and fit the pipeline\n", + "model = Pipeline(steps=[\n", + " ('preprocessor', preprocessor),\n", + " ('classifier', RandomForestClassifier(random_state=42))\n", + "])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "XOaOUYi1P2yA" + }, + "outputs": [], + "source": [ + "model.fit(X_train, y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "y6mT8lvLQbtg" + }, + "outputs": [], + "source": [ + "# Make predictions\n", + "y_pred = model.predict(X_test)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ZCSpSAuDdNgi" + }, + "outputs": [], + "source": [ + "import joblib" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true + }, + "id": "yksyXWGZdR4_", + "outputId": "3deaf8a9-8e7f-4d48-9562-60b99aa96e01" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['model.pkl']" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Save the model to a file\n", + "joblib.dump(model, 'model.pkl')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true + }, + "id": "fw6wBmNwQko4", + "outputId": "486c5704-db44-44db-8d00-c6928a43810e" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accuracy: 0.3393475750577367\n", + "Confusion Matrix:\n", + "[[ 6 52 9 382 8 14 26]\n", + " [ 3 298 37 1950 28 56 87]\n", + " [ 7 113 25 1006 14 46 67]\n", + " [ 15 466 88 4182 61 118 275]\n", + " [ 6 85 19 818 26 38 51]\n", + " [ 5 104 24 1107 21 60 85]\n", + " [ 12 181 37 1548 32 53 105]]\n", + "Classification Report:\n", + " precision recall f1-score support\n", + "\n", + " Extremely dissatisfied 0.11 0.01 0.02 497\n", + " Extremely satisfied 0.23 0.12 0.16 2459\n", + " Moderately dissatisfied 0.10 0.02 0.03 1278\n", + " Moderately satisfied 0.38 0.80 0.52 5205\n", + "Neither satisfied nor dissatisfied 0.14 0.02 0.04 1043\n", + " Slightly dissatisfied 0.16 0.04 0.07 1406\n", + " Slightly satisfied 0.15 0.05 0.08 1968\n", + "\n", + " accuracy 0.34 13856\n", + " macro avg 0.18 0.15 0.13 13856\n", + " weighted avg 0.24 0.34 0.25 13856\n", + "\n" + ] + } + ], + "source": [ + "# Evaluate the model\n", + "print('Accuracy:', accuracy_score(y_test, y_pred))\n", + "print('Confusion Matrix:')\n", + "print(confusion_matrix(y_test, y_pred))\n", + "print('Classification Report:')\n", + "print(classification_report(y_test, y_pred))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true + }, + "id": "huZqOC5mTaJm" + }, + "outputs": [], + "source": [ + "#Testing the Model\n", + "def predict_job_satisfaction(user_input):\n", + " # Convert user input to DataFrame\n", + " input_df = pd.DataFrame([user_input])\n", + "\n", + " # Ensure the input has the same columns as the training data\n", + " input_df = input_df[X.columns]\n", + "\n", + " # Make prediction\n", + " prediction = model.predict(input_df)\n", + "\n", + " return prediction[0]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true + }, + "id": "yHhyCWmNTi-Y" + }, + "outputs": [], + "source": [ + "# Example user input\n", + "user_input_example = {\n", + " 'Hobby': 'Yes',\n", + " 'OpenSource': 'Yes',\n", + " 'Country': 'United States',\n", + " 'Student': 'No',\n", + " 'Employment': 'Employed full-time',\n", + " 'FormalEducation': 'Bachelor’s degree (BA, BS, B.Eng., etc.)',\n", + " 'UndergradMajor': 'Computer science, computer engineering, or software engineering',\n", + " 'CompanySize': '100 to 499 employees',\n", + " 'DevType': 'Developer, back-end',\n", + " 'YearsCoding': '6-8 years',\n", + " 'YearsCodingProf': '3-5 years'\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true + }, + "id": "vvGywGhnTlRM", + "outputId": "f00c365e-1f2b-4c39-cee5-41a68383c64c" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Predicted Job Satisfaction: Slightly satisfied\n" + ] + } + ], + "source": [ + "# Predict job satisfaction for the example input\n", + "predicted_satisfaction = predict_job_satisfaction(user_input_example)\n", + "print(f'Predicted Job Satisfaction: {predicted_satisfaction}')" + ] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "gpuType": "T4", + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/Job Satisfaction Analysis/app.py b/Job Satisfaction Analysis/app.py new file mode 100644 index 0000000..290cc6e --- /dev/null +++ b/Job Satisfaction Analysis/app.py @@ -0,0 +1,61 @@ +import streamlit as st +import joblib +import pandas as pd + +# Load the model +model = joblib.load('model.pkl') + +# Define the feature columns used in the model +features = ['Hobby', 'OpenSource', 'Country', 'Student', 'Employment', 'FormalEducation', + 'UndergradMajor', 'CompanySize', 'DevType', 'YearsCoding', 'YearsCodingProf'] + +st.title('Job Satisfaction Prediction') + +# Create a form for user input +with st.form(key='prediction_form'): + Hobby = st.selectbox('Hobby:', ['Yes', 'No']) + OpenSource = st.selectbox('Open Source:', ['Yes', 'No']) + Country = st.selectbox('Country:', ['United States', 'India', 'Germany']) + Student = st.selectbox('Student:', ['Yes', 'No']) + Employment = st.selectbox('Employment:', ['Employed full-time', 'Employed part-time', 'Self-employed', 'Unemployed']) + FormalEducation = st.selectbox('Formal Education:', ["Bachelor’s degree (BA, BS, B.Eng., etc.)", + "Master’s degree (MA, MS, M.Eng., MBA, etc.)", + "Doctoral degree (PhD)"]) + UndergradMajor = st.selectbox('Undergrad Major:', ["Computer science, computer engineering, or software engineering", + "Information technology, networking, or system administration", + "Other engineering discipline"]) + CompanySize = st.selectbox('Company Size:', ['Fewer than 10 employees', '10 to 19 employees', '20 to 99 employees', + '100 to 499 employees', '500 to 999 employees', '1,000 to 4,999 employees']) + DevType = st.selectbox('Dev Type:', ['Developer, back-end', 'Developer, front-end', 'Developer, full-stack']) + YearsCoding = st.selectbox('Years Coding:', ['0-2 years', '3-5 years', '6-8 years', '9-11 years']) + YearsCodingProf = st.selectbox('Years Coding Professionally:', ['0-2 years', '3-5 years', '6-8 years', '9-11 years']) + + submit_button = st.form_submit_button(label='Get Prediction') + +if submit_button: + # Collect user input + input_data = { + 'Hobby': Hobby, + 'OpenSource': OpenSource, + 'Country': Country, + 'Student': Student, + 'Employment': Employment, + 'FormalEducation': FormalEducation, + 'UndergradMajor': UndergradMajor, + 'CompanySize': CompanySize, + 'DevType': DevType, + 'YearsCoding': YearsCoding, + 'YearsCodingProf': YearsCodingProf + } + + # Convert user input to DataFrame + input_df = pd.DataFrame([input_data]) + + # Ensure the input has the same columns as the training data + input_df = input_df[features] + + # Make prediction + prediction = model.predict(input_df) + + # Display the prediction + st.write(f'Predicted Job Satisfaction: {prediction[0]}') diff --git a/Job Satisfaction Analysis/requirement.txt b/Job Satisfaction Analysis/requirement.txt new file mode 100644 index 0000000..9685c69 --- /dev/null +++ b/Job Satisfaction Analysis/requirement.txt @@ -0,0 +1,12 @@ +here are requirement-> +import pandas as pd +import numpy as np +import matplotlib.pyplot as plt +import seaborn as sns +from sklearn.model_selection import train_test_split +from sklearn.preprocessing import StandardScaler, OneHotEncoder +from sklearn.compose import ColumnTransformer +from sklearn.pipeline import Pipeline +from sklearn.impute import SimpleImputer +from sklearn.ensemble import RandomForestClassifier +from sklearn.metrics import accuracy_score, confusion_matrix, classification_report \ No newline at end of file pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy