{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "provenance": [] }, "kernelspec": { "name": "python3", "display_name": "Python 3" }, "language_info": { "name": "python" } }, "cells": [ { "cell_type": "code", "execution_count": 24, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "XQZJSSopDet9", "outputId": "d7fe7f2e-b030-4b8d-e574-0a6e896e824d" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Requirement already satisfied: pandas in /usr/local/lib/python3.12/dist-packages (2.2.2)\n", "Requirement already satisfied: numpy in /usr/local/lib/python3.12/dist-packages (2.0.2)\n", "Requirement already satisfied: matplotlib in /usr/local/lib/python3.12/dist-packages (3.10.0)\n", "Requirement already satisfied: scikit-learn in /usr/local/lib/python3.12/dist-packages (1.6.1)\n", "Requirement already satisfied: statsmodels in /usr/local/lib/python3.12/dist-packages (0.14.6)\n", "Requirement already satisfied: python-dateutil>=2.8.2 in /usr/local/lib/python3.12/dist-packages (from pandas) (2.9.0.post0)\n", "Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.12/dist-packages (from pandas) (2025.2)\n", "Requirement already satisfied: tzdata>=2022.7 in /usr/local/lib/python3.12/dist-packages (from pandas) (2026.1)\n", "Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.12/dist-packages (from matplotlib) (1.3.3)\n", "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.12/dist-packages (from matplotlib) (0.12.1)\n", "Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.12/dist-packages (from matplotlib) (4.62.1)\n", "Requirement already satisfied: kiwisolver>=1.3.1 in /usr/local/lib/python3.12/dist-packages (from matplotlib) (1.5.0)\n", "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.12/dist-packages (from matplotlib) (26.1)\n", "Requirement already satisfied: pillow>=8 in /usr/local/lib/python3.12/dist-packages (from matplotlib) (11.3.0)\n", "Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.12/dist-packages (from matplotlib) (3.3.2)\n", "Requirement already satisfied: scipy>=1.6.0 in /usr/local/lib/python3.12/dist-packages (from scikit-learn) (1.16.3)\n", "Requirement already satisfied: joblib>=1.2.0 in /usr/local/lib/python3.12/dist-packages (from scikit-learn) (1.5.3)\n", "Requirement already satisfied: threadpoolctl>=3.1.0 in /usr/local/lib/python3.12/dist-packages (from scikit-learn) (3.6.0)\n", "Requirement already satisfied: patsy>=0.5.6 in /usr/local/lib/python3.12/dist-packages (from statsmodels) (1.0.2)\n", "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.12/dist-packages (from python-dateutil>=2.8.2->pandas) (1.17.0)\n" ] } ], "source": [ "!pip install pandas numpy matplotlib scikit-learn statsmodels" ] }, { "cell_type": "code", "source": [ "import random\n", "import numpy as np\n", "import pandas as pd\n", "\n", "random.seed(42)\n", "np.random.seed(42)" ], "metadata": { "id": "yzXlo3jYDi0f" }, "execution_count": 25, "outputs": [] }, { "cell_type": "code", "source": [ "print(\"=\" * 50)\n", "print(\"STEP 1/2: Data Creation (real data + synthetic enrichment)\")\n", "print(\"=\" * 50)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "EL_CQaWsDkGw", "outputId": "105e7fb3-54f6-4717-f474-86c61bdaf485" }, "execution_count": 26, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "==================================================\n", "STEP 1/2: Data Creation (real data + synthetic enrichment)\n", "==================================================\n" ] } ] }, { "cell_type": "code", "source": [ "# ====================================================\n", "# GENERATE SYNTHETIC EU JOBS DATA\n", "# ====================================================\n", "import random\n", "from datetime import datetime, timedelta\n", "\n", "random.seed(42)\n", "\n", "DOMAINS = [\n", " \"Budget and Finances\", \"European Policy\", \"Crisis management and Internal security\",\n", " \"Law\", \"Defence\", \"Human Resources\", \"Information Technology\",\n", " \"Justice and human rights\", \"Economics, Finance and Statistics\",\n", " \"Transport\", \"Agriculture\", \"Environment, Climate change\", \"Public Health\",\n", " \"Education and Culture\", \"External Relations\", \"Trade\", \"Audit\",\n", " \"Communication\", \"Research and Innovation\", \"Statistics\", \"Energy\",\n", " \"Migration\", \"Digital Affairs\", \"Tax and Customs\",\n", "]\n", "TITLES = [\n", " \"Project Assistant\", \"Policy Officer\", \"Legal Officer\", \"Finance Agent\",\n", " \"Communications Officer\", \"Cybersecurity Expert\", \"IT Officer\",\n", " \"Senior Advisor\", \"Head of Unit\", \"Junior Analyst\", \"Senior Analyst\",\n", " \"Programme Manager\", \"Auditor\", \"HR Officer\", \"Translator\",\n", " \"Data Analyst\", \"Compliance Officer\", \"Procurement Officer\",\n", " \"Research Officer\", \"Liaison Officer\", \"Statistician\", \"Economist\",\n", " \"Risk Manager\", \"Operations Officer\", \"Coordinator\",\n", "]\n", "GRADES = [\"FG II\", \"FG III\", \"FG IV\", \"FG III, FG IV\", \"AD 5\", \"AD 6\", \"AD 7\", \"AD 8\", \"AD 10\", \"AD 12\", \"AD 14\"]\n", "GRADE_WEIGHTS = [3, 11, 17, 9, 4, 7, 5, 2, 2, 2, 3]\n", "CONTRACTS = [\"Contract staff\", \"Temporary staff\", \"Seconded national expert (SNE)\", \"Permanent official\"]\n", "CONTRACT_WEIGHTS = [46, 28, 24, 5]\n", "INSTITUTIONS = [\n", " \"EU institutions\", \"(EDA) European Defence Agency\", \"(EUSPA) European Union Agency for the Space Programme\",\n", " \"(FRONTEX) European Border and Coast Guard Agency\", \"(FRA) European Union Agency for Fundamental Rights\",\n", " \"(EASA) European Union Aviation Safety Agency\", \"(Europol) European Union Agency for Law Enforcement Cooperation\",\n", " \"(EFSA) European Food Safety Authority\", \"(ECB) European Central Bank\", \"(EMA) European Medicines Agency\",\n", " \"(EUAA) European Union Agency for Asylum\", \"(EIB) European Investment Bank\", \"(EEA) European Environment Agency\",\n", "]\n", "LOCATIONS = [\n", " \"Brussels (Belgium)\", \"Luxembourg (Luxembourg)\", \"The Hague (The Netherlands)\",\n", " \"Warsaw (Poland)\", \"Frankfurt (Germany)\", \"Cologne (Germany)\", \"Parma (Italy)\",\n", " \"Lisbon (Portugal)\", \"Paris (France)\", \"Vienna (Austria)\", \"Helsinki (Finland)\",\n", " \"Madrid (Spain)\", \"Dublin (Ireland)\", \"Stockholm (Sweden)\",\n", "]\n", "\n", "synthetic_rows = []\n", "for i in range(200):\n", " base = datetime(2026, 5, 1)\n", " deadline = base + timedelta(days=random.randint(1, 180))\n", " deadline_str = f\"{deadline.strftime('%d/%m/%Y')} - {random.choice(['13:00', '17:00', '23:59'])}\"\n", " title = random.choice(TITLES)\n", " inst = random.choice(INSTITUTIONS)\n", " inst_short = inst.split(\")\")[0].replace(\"(\", \"\").lower() if \"(\" in inst else \"eu\"\n", "\n", " synthetic_rows.append({\n", " \"ID\": 19800 + i,\n", " \"title\": title,\n", " \"Domain(s)\": random.choice(DOMAINS),\n", " \"Grade\": random.choices(GRADES, weights=GRADE_WEIGHTS, k=1)[0],\n", " \"Type of contract\": random.choices(CONTRACTS, weights=CONTRACT_WEIGHTS, k=1)[0],\n", " \"Institution(s) \": inst,\n", " \"Location(s)\": random.choice(LOCATIONS),\n", " \"Deadline \": deadline_str,\n", " \"Link to Content\": f\"https://eu-careers.europa.eu/en/job-opportunities/{title.lower().replace(' ', '-')}/{inst_short}-{19800+i}\",\n", " })\n", "\n", "synthetic_df = pd.DataFrame(synthetic_rows)\n", "print(f\"Generated {len(synthetic_df)} synthetic job postings\")\n", "synthetic_df.head()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 435 }, "id": "BQf2iEmtum_U", "outputId": "f01811d0-c4f5-435c-f86f-85c4f1c84bab" }, "execution_count": 27, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Generated 200 synthetic job postings\n" ] }, { "output_type": "execute_result", "data": { "text/plain": [ " ID title Domain(s) Grade \\\n", "0 19800 Project Assistant Economics, Finance and Statistics FG IV \n", "1 19801 Procurement Officer Research and Innovation FG IV \n", "2 19802 Liaison Officer Communication FG III \n", "3 19803 Translator Economics, Finance and Statistics AD 7 \n", "4 19804 HR Officer Economics, Finance and Statistics FG III \n", "\n", " Type of contract Institution(s) \\\n", "0 Contract staff (EIB) European Investment Bank \n", "1 Contract staff (EDA) European Defence Agency \n", "2 Temporary staff EU institutions \n", "3 Contract staff (EMA) European Medicines Agency \n", "4 Permanent official (EASA) European Union Aviation Safety Agency \n", "\n", " Location(s) Deadline \\\n", "0 Luxembourg (Luxembourg) 12/10/2026 - 13:00 \n", "1 Warsaw (Poland) 22/10/2026 - 23:59 \n", "2 Paris (France) 30/06/2026 - 23:59 \n", "3 Dublin (Ireland) 17/08/2026 - 13:00 \n", "4 Cologne (Germany) 11/06/2026 - 23:59 \n", "\n", " Link to Content \n", "0 https://eu-careers.europa.eu/en/job-opportunit... \n", "1 https://eu-careers.europa.eu/en/job-opportunit... \n", "2 https://eu-careers.europa.eu/en/job-opportunit... \n", "3 https://eu-careers.europa.eu/en/job-opportunit... \n", "4 https://eu-careers.europa.eu/en/job-opportunit... " ], "text/html": [ "\n", "
\n", "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
IDtitleDomain(s)GradeType of contractInstitution(s)Location(s)DeadlineLink to Content
019800Project AssistantEconomics, Finance and StatisticsFG IVContract staff(EIB) European Investment BankLuxembourg (Luxembourg)12/10/2026 - 13:00https://eu-careers.europa.eu/en/job-opportunit...
119801Procurement OfficerResearch and InnovationFG IVContract staff(EDA) European Defence AgencyWarsaw (Poland)22/10/2026 - 23:59https://eu-careers.europa.eu/en/job-opportunit...
219802Liaison OfficerCommunicationFG IIITemporary staffEU institutionsParis (France)30/06/2026 - 23:59https://eu-careers.europa.eu/en/job-opportunit...
319803TranslatorEconomics, Finance and StatisticsAD 7Contract staff(EMA) European Medicines AgencyDublin (Ireland)17/08/2026 - 13:00https://eu-careers.europa.eu/en/job-opportunit...
419804HR OfficerEconomics, Finance and StatisticsFG IIIPermanent official(EASA) European Union Aviation Safety AgencyCologne (Germany)11/06/2026 - 23:59https://eu-careers.europa.eu/en/job-opportunit...
\n", "
\n", "
\n", "\n", "
\n", " \n", "\n", " \n", "\n", " \n", "
\n", "\n", "\n", "
\n", "
\n" ], "application/vnd.google.colaboratory.intrinsic+json": { "type": "dataframe", "variable_name": "synthetic_df", "summary": "{\n \"name\": \"synthetic_df\",\n \"rows\": 200,\n \"fields\": [\n {\n \"column\": \"ID\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 57,\n \"min\": 19800,\n \"max\": 19999,\n \"num_unique_values\": 200,\n \"samples\": [\n 19895,\n 19815,\n 19830\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"title\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 25,\n \"samples\": [\n \"Statistician\",\n \"IT Officer\",\n \"Project Assistant\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Domain(s)\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 24,\n \"samples\": [\n \"Public Health\",\n \"Education and Culture\",\n \"Economics, Finance and Statistics\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Grade\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 11,\n \"samples\": [\n \"FG III, FG IV\",\n \"FG IV\",\n \"FG II\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Type of contract\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 4,\n \"samples\": [\n \"Temporary staff\",\n \"Seconded national expert (SNE)\",\n \"Contract staff\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Institution(s) \",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 13,\n \"samples\": [\n \"(FRA) European Union Agency for Fundamental Rights\",\n \"(EFSA) European Food Safety Authority\",\n \"(EIB) European Investment Bank\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Location(s)\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 14,\n \"samples\": [\n \"The Hague (The Netherlands)\",\n \"Brussels (Belgium)\",\n \"Luxembourg (Luxembourg)\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Deadline \",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 169,\n \"samples\": [\n \"31/07/2026 - 13:00\",\n \"25/09/2026 - 23:59\",\n \"15/07/2026 - 23:59\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Link to Content\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 200,\n \"samples\": [\n \"https://eu-careers.europa.eu/en/job-opportunities/policy-officer/easa-19895\",\n \"https://eu-careers.europa.eu/en/job-opportunities/programme-manager/frontex-19815\",\n \"https://eu-careers.europa.eu/en/job-opportunities/data-analyst/frontex-19830\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" } }, "metadata": {}, "execution_count": 27 } ] }, { "cell_type": "code", "source": [ "# Load the real data\n", "real_df = pd.read_csv(\"CSV-JOBS.csv\")\n", "print(f\"Real jobs loaded: {len(real_df)}\")\n", "\n", "# Combine real + synthetic into one dataset\n", "jobs_df = pd.concat([real_df, synthetic_df], ignore_index=True)\n", "\n", "print(f\"Total combined dataset: {len(jobs_df)} rows\")\n", "print(\"Columns:\", jobs_df.columns.tolist())\n", "\n", "display(jobs_df.head())" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 505 }, "id": "jyIW1KljDlXP", "outputId": "394d684c-df7c-45d8-bb3b-83d5b83f0c0e" }, "execution_count": 28, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Real jobs loaded: 103\n", "Total combined dataset: 303 rows\n", "Columns: ['ID', 'title', 'Domain(s)', 'Grade', 'Type of contract', 'Institution(s) ', 'Location(s)', 'Deadline ', 'Link to Content']\n" ] }, { "output_type": "display_data", "data": { "text/plain": [ " ID title \\\n", "0 19702 Project Assistant \n", "1 19703 Policy Officer \n", "2 19664 Senior Military Advisor to the Executive Director \n", "3 19665 Structures Expert \n", "4 19666 Certification Expert - Hydromechanical and Fli... \n", "\n", " Domain(s) Grade Type of contract \\\n", "0 Justice and human rights FG III Contract staff \n", "1 Justice and human rights FG IV Contract staff \n", "2 Transport AD 10 Temporary staff \n", "3 Transport AD 7 Temporary staff \n", "4 Transport AD 7 Temporary staff \n", "\n", " Institution(s) Location(s) \\\n", "0 (FRA) European Union Agency for Fundamental Ri... Vienna (Austria) \n", "1 (FRA) European Union Agency for Fundamental Ri... Vienna (Austria) \n", "2 (EASA) European Union Aviation Safety Agency Cologne (Germany) \n", "3 (EASA) European Union Aviation Safety Agency Cologne (Germany) \n", "4 (EASA) European Union Aviation Safety Agency Cologne (Germany) \n", "\n", " Deadline Link to Content \n", "0 30/04/2026 - 13:00 https://eu-careers.europa.eu/en/job-opportunit... \n", "1 30/04/2026 - 13:00 https://eu-careers.europa.eu/en/job-opportunit... \n", "2 30/04/2026 - 23:59 https://eu-careers.europa.eu/en/job-opportunit... \n", "3 30/04/2026 - 23:59 https://eu-careers.europa.eu/en/job-opportunit... \n", "4 30/04/2026 - 23:59 https://eu-careers.europa.eu/en/job-opportunit... " ], "text/html": [ "\n", "
\n", "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
IDtitleDomain(s)GradeType of contractInstitution(s)Location(s)DeadlineLink to Content
019702Project AssistantJustice and human rightsFG IIIContract staff(FRA) European Union Agency for Fundamental Ri...Vienna (Austria)30/04/2026 - 13:00https://eu-careers.europa.eu/en/job-opportunit...
119703Policy OfficerJustice and human rightsFG IVContract staff(FRA) European Union Agency for Fundamental Ri...Vienna (Austria)30/04/2026 - 13:00https://eu-careers.europa.eu/en/job-opportunit...
219664Senior Military Advisor to the Executive DirectorTransportAD 10Temporary staff(EASA) European Union Aviation Safety AgencyCologne (Germany)30/04/2026 - 23:59https://eu-careers.europa.eu/en/job-opportunit...
319665Structures ExpertTransportAD 7Temporary staff(EASA) European Union Aviation Safety AgencyCologne (Germany)30/04/2026 - 23:59https://eu-careers.europa.eu/en/job-opportunit...
419666Certification Expert - Hydromechanical and Fli...TransportAD 7Temporary staff(EASA) European Union Aviation Safety AgencyCologne (Germany)30/04/2026 - 23:59https://eu-careers.europa.eu/en/job-opportunit...
\n", "
\n", "
\n", "\n", "
\n", " \n", "\n", " \n", "\n", " \n", "
\n", "\n", "\n", "
\n", "
\n" ], "application/vnd.google.colaboratory.intrinsic+json": { "type": "dataframe", "summary": "{\n \"name\": \"display(jobs_df\",\n \"rows\": 5,\n \"fields\": [\n {\n \"column\": \"ID\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 20,\n \"min\": 19664,\n \"max\": 19703,\n \"num_unique_values\": 5,\n \"samples\": [\n 19703,\n 19666,\n 19664\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"title\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 5,\n \"samples\": [\n \"Policy Officer\",\n \"Certification Expert - Hydromechanical and Flight Control Systems\",\n \"Senior Military Advisor to the Executive Director\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Domain(s)\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"Transport\",\n \"Justice and human rights\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Grade\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 4,\n \"samples\": [\n \"FG IV\",\n \"AD 7\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Type of contract\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"Temporary staff\",\n \"Contract staff\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Institution(s) \",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"(EASA) European Union Aviation Safety Agency\",\n \"(FRA) European Union Agency for Fundamental Rights\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Location(s)\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"Cologne (Germany)\",\n \"Vienna (Austria)\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Deadline \",\n \"properties\": {\n \"dtype\": \"object\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"30/04/2026 - 23:59\",\n \"30/04/2026 - 13:00\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Link to Content\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 5,\n \"samples\": [\n \"https://eu-careers.europa.eu/en/job-opportunities/policy-officer/fra-ca-polof-fgiv-2026\",\n \"https://eu-careers.europa.eu/en/job-opportunities/certification-expert-hydromechanical-and-flight-control-systems/easa-ad-2026-997\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" } }, "metadata": {} } ] }, { "cell_type": "code", "source": [ "jobs_clean = jobs_df.copy()\n", "\n", "jobs_clean.columns = jobs_clean.columns.str.strip()\n", "jobs_clean[\"Deadline\"] = pd.to_datetime(jobs_clean[\"Deadline\"], errors=\"coerce\")\n", "\n", "jobs_clean = jobs_clean.dropna(subset=[\"title\", \"Domain(s)\", \"Type of contract\", \"Deadline\"])\n", "\n", "print(\"Cleaned shape:\", jobs_clean.shape)\n", "display(jobs_clean.head())" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 505 }, "id": "UgMfW50wDm1g", "outputId": "a288151f-da02-4fdf-d3ae-8ecf1c6be725" }, "execution_count": 29, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Cleaned shape: (299, 9)\n" ] }, { "output_type": "stream", "name": "stderr", "text": [ "/tmp/ipykernel_12223/2873856445.py:4: UserWarning: Parsing dates in %d/%m/%Y - %H:%M format when dayfirst=False (the default) was specified. Pass `dayfirst=True` or specify a format to silence this warning.\n", " jobs_clean[\"Deadline\"] = pd.to_datetime(jobs_clean[\"Deadline\"], errors=\"coerce\")\n" ] }, { "output_type": "display_data", "data": { "text/plain": [ " ID title \\\n", "0 19702 Project Assistant \n", "1 19703 Policy Officer \n", "2 19664 Senior Military Advisor to the Executive Director \n", "3 19665 Structures Expert \n", "4 19666 Certification Expert - Hydromechanical and Fli... \n", "\n", " Domain(s) Grade Type of contract \\\n", "0 Justice and human rights FG III Contract staff \n", "1 Justice and human rights FG IV Contract staff \n", "2 Transport AD 10 Temporary staff \n", "3 Transport AD 7 Temporary staff \n", "4 Transport AD 7 Temporary staff \n", "\n", " Institution(s) Location(s) \\\n", "0 (FRA) European Union Agency for Fundamental Ri... Vienna (Austria) \n", "1 (FRA) European Union Agency for Fundamental Ri... Vienna (Austria) \n", "2 (EASA) European Union Aviation Safety Agency Cologne (Germany) \n", "3 (EASA) European Union Aviation Safety Agency Cologne (Germany) \n", "4 (EASA) European Union Aviation Safety Agency Cologne (Germany) \n", "\n", " Deadline Link to Content \n", "0 2026-04-30 13:00:00 https://eu-careers.europa.eu/en/job-opportunit... \n", "1 2026-04-30 13:00:00 https://eu-careers.europa.eu/en/job-opportunit... \n", "2 2026-04-30 23:59:00 https://eu-careers.europa.eu/en/job-opportunit... \n", "3 2026-04-30 23:59:00 https://eu-careers.europa.eu/en/job-opportunit... \n", "4 2026-04-30 23:59:00 https://eu-careers.europa.eu/en/job-opportunit... " ], "text/html": [ "\n", "
\n", "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
IDtitleDomain(s)GradeType of contractInstitution(s)Location(s)DeadlineLink to Content
019702Project AssistantJustice and human rightsFG IIIContract staff(FRA) European Union Agency for Fundamental Ri...Vienna (Austria)2026-04-30 13:00:00https://eu-careers.europa.eu/en/job-opportunit...
119703Policy OfficerJustice and human rightsFG IVContract staff(FRA) European Union Agency for Fundamental Ri...Vienna (Austria)2026-04-30 13:00:00https://eu-careers.europa.eu/en/job-opportunit...
219664Senior Military Advisor to the Executive DirectorTransportAD 10Temporary staff(EASA) European Union Aviation Safety AgencyCologne (Germany)2026-04-30 23:59:00https://eu-careers.europa.eu/en/job-opportunit...
319665Structures ExpertTransportAD 7Temporary staff(EASA) European Union Aviation Safety AgencyCologne (Germany)2026-04-30 23:59:00https://eu-careers.europa.eu/en/job-opportunit...
419666Certification Expert - Hydromechanical and Fli...TransportAD 7Temporary staff(EASA) European Union Aviation Safety AgencyCologne (Germany)2026-04-30 23:59:00https://eu-careers.europa.eu/en/job-opportunit...
\n", "
\n", "
\n", "\n", "
\n", " \n", "\n", " \n", "\n", " \n", "
\n", "\n", "\n", "
\n", "
\n" ], "application/vnd.google.colaboratory.intrinsic+json": { "type": "dataframe", "summary": "{\n \"name\": \"display(jobs_clean\",\n \"rows\": 5,\n \"fields\": [\n {\n \"column\": \"ID\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 20,\n \"min\": 19664,\n \"max\": 19703,\n \"num_unique_values\": 5,\n \"samples\": [\n 19703,\n 19666,\n 19664\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"title\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 5,\n \"samples\": [\n \"Policy Officer\",\n \"Certification Expert - Hydromechanical and Flight Control Systems\",\n \"Senior Military Advisor to the Executive Director\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Domain(s)\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"Transport\",\n \"Justice and human rights\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Grade\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 4,\n \"samples\": [\n \"FG IV\",\n \"AD 7\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Type of contract\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"Temporary staff\",\n \"Contract staff\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Institution(s)\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"(EASA) European Union Aviation Safety Agency\",\n \"(FRA) European Union Agency for Fundamental Rights\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Location(s)\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"Cologne (Germany)\",\n \"Vienna (Austria)\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Deadline\",\n \"properties\": {\n \"dtype\": \"date\",\n \"min\": \"2026-04-30 13:00:00\",\n \"max\": \"2026-04-30 23:59:00\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"2026-04-30 23:59:00\",\n \"2026-04-30 13:00:00\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Link to Content\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 5,\n \"samples\": [\n \"https://eu-careers.europa.eu/en/job-opportunities/policy-officer/fra-ca-polof-fgiv-2026\",\n \"https://eu-careers.europa.eu/en/job-opportunities/certification-expert-hydromechanical-and-flight-control-systems/easa-ad-2026-997\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" } }, "metadata": {} } ] }, { "cell_type": "code", "source": [ "print(\"Unique domains:\", jobs_clean[\"Domain(s)\"].nunique())\n", "print(\"Unique contract types:\", jobs_clean[\"Type of contract\"].nunique())\n", "print(\"Unique institutions:\", jobs_clean[\"Institution(s)\"].nunique())\n", "print(\"Unique locations:\", jobs_clean[\"Location(s)\"].nunique())" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "wN8LLnbqDo5H", "outputId": "157bd26d-0dee-44ed-9b65-bbdf4547d43a" }, "execution_count": 30, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Unique domains: 44\n", "Unique contract types: 5\n", "Unique institutions: 40\n", "Unique locations: 33\n" ] } ] }, { "cell_type": "code", "source": [ "comments_by_demand = {\n", " \"high\": [\n", " \"This role appears to be in strong demand across institutions.\",\n", " \"The labor market for this profile looks highly competitive.\",\n", " \"This posting suggests strong employment opportunities.\",\n", " \"Demand for this skill set appears to be growing.\",\n", " \"This category seems to attract significant hiring activity.\"\n", " ],\n", " \"stable\": [\n", " \"This role appears to have steady demand.\",\n", " \"The market for this profile looks relatively balanced.\",\n", " \"This posting suggests moderate but stable opportunities.\",\n", " \"Demand appears consistent across institutions.\",\n", " \"This category seems to have regular hiring activity.\"\n", " ],\n", " \"low\": [\n", " \"This role appears to have weaker demand.\",\n", " \"The market for this profile looks more limited.\",\n", " \"This posting suggests fewer employment opportunities.\",\n", " \"Demand for this skill set appears relatively low.\",\n", " \"This category seems to have less hiring activity.\"\n", " ]\n", "}" ], "metadata": { "id": "HHqueIqZDqVe" }, "execution_count": 31, "outputs": [] }, { "cell_type": "code", "source": [ "jobs_enriched = jobs_clean.copy()\n", "\n", "today = pd.Timestamp.today().normalize()\n", "jobs_enriched[\"days_to_deadline\"] = (jobs_enriched[\"Deadline\"] - today).dt.days\n", "\n", "def urgency_from_days(days):\n", " if pd.isna(days):\n", " return random.randint(3, 6)\n", " if days <= 7:\n", " return random.randint(8, 10)\n", " elif days <= 21:\n", " return random.randint(5, 8)\n", " else:\n", " return random.randint(2, 6)\n", "\n", "jobs_enriched[\"urgency_score\"] = jobs_enriched[\"days_to_deadline\"].apply(urgency_from_days)\n", "\n", "def demand_from_urgency(score):\n", " if score >= 8:\n", " return random.randint(7, 10)\n", " elif score >= 5:\n", " return random.randint(4, 7)\n", " else:\n", " return random.randint(2, 5)\n", "\n", "jobs_enriched[\"job_demand_score\"] = jobs_enriched[\"urgency_score\"].apply(demand_from_urgency)\n", "\n", "def demand_label(score):\n", " if score <= 3:\n", " return \"low\"\n", " elif score <= 6:\n", " return \"stable\"\n", " else:\n", " return \"high\"\n", "\n", "jobs_enriched[\"demand_label\"] = jobs_enriched[\"job_demand_score\"].apply(demand_label)\n", "\n", "jobs_enriched[\"estimated_salary\"] = np.random.randint(35000, 95000, len(jobs_enriched))\n", "\n", "jobs_enriched[\"automation_risk\"] = np.random.choice(\n", " [\"low\", \"medium\", \"high\"],\n", " size=len(jobs_enriched),\n", " p=[0.35, 0.45, 0.20]\n", ")\n", "\n", "jobs_enriched[\"estimated_applications\"] = np.random.randint(20, 250, len(jobs_enriched))\n", "\n", "jobs_enriched[\"job_comment\"] = jobs_enriched[\"demand_label\"].apply(\n", " lambda x: random.choice(comments_by_demand[x])\n", ")\n", "\n", "display(jobs_enriched.head())" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 521 }, "id": "l6PBz502Dr3a", "outputId": "401257dc-e7ea-4481-eb1b-15688fbcc6b2" }, "execution_count": 32, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ " ID title \\\n", "0 19702 Project Assistant \n", "1 19703 Policy Officer \n", "2 19664 Senior Military Advisor to the Executive Director \n", "3 19665 Structures Expert \n", "4 19666 Certification Expert - Hydromechanical and Fli... \n", "\n", " Domain(s) Grade Type of contract \\\n", "0 Justice and human rights FG III Contract staff \n", "1 Justice and human rights FG IV Contract staff \n", "2 Transport AD 10 Temporary staff \n", "3 Transport AD 7 Temporary staff \n", "4 Transport AD 7 Temporary staff \n", "\n", " Institution(s) Location(s) \\\n", "0 (FRA) European Union Agency for Fundamental Ri... Vienna (Austria) \n", "1 (FRA) European Union Agency for Fundamental Ri... Vienna (Austria) \n", "2 (EASA) European Union Aviation Safety Agency Cologne (Germany) \n", "3 (EASA) European Union Aviation Safety Agency Cologne (Germany) \n", "4 (EASA) European Union Aviation Safety Agency Cologne (Germany) \n", "\n", " Deadline Link to Content \\\n", "0 2026-04-30 13:00:00 https://eu-careers.europa.eu/en/job-opportunit... \n", "1 2026-04-30 13:00:00 https://eu-careers.europa.eu/en/job-opportunit... \n", "2 2026-04-30 23:59:00 https://eu-careers.europa.eu/en/job-opportunit... \n", "3 2026-04-30 23:59:00 https://eu-careers.europa.eu/en/job-opportunit... \n", "4 2026-04-30 23:59:00 https://eu-careers.europa.eu/en/job-opportunit... \n", "\n", " days_to_deadline urgency_score job_demand_score demand_label \\\n", "0 0 9 9 high \n", "1 0 8 8 high \n", "2 0 8 10 high \n", "3 0 9 8 high \n", "4 0 9 7 high \n", "\n", " estimated_salary automation_risk estimated_applications \\\n", "0 91422 low 75 \n", "1 50795 medium 180 \n", "2 35860 medium 185 \n", "3 73158 low 136 \n", "4 89343 medium 153 \n", "\n", " job_comment \n", "0 The labor market for this profile looks highly... \n", "1 Demand for this skill set appears to be growing. \n", "2 This category seems to attract significant hir... \n", "3 This posting suggests strong employment opport... \n", "4 This category seems to attract significant hir... " ], "text/html": [ "\n", "
\n", "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
IDtitleDomain(s)GradeType of contractInstitution(s)Location(s)DeadlineLink to Contentdays_to_deadlineurgency_scorejob_demand_scoredemand_labelestimated_salaryautomation_riskestimated_applicationsjob_comment
019702Project AssistantJustice and human rightsFG IIIContract staff(FRA) European Union Agency for Fundamental Ri...Vienna (Austria)2026-04-30 13:00:00https://eu-careers.europa.eu/en/job-opportunit...099high91422low75The labor market for this profile looks highly...
119703Policy OfficerJustice and human rightsFG IVContract staff(FRA) European Union Agency for Fundamental Ri...Vienna (Austria)2026-04-30 13:00:00https://eu-careers.europa.eu/en/job-opportunit...088high50795medium180Demand for this skill set appears to be growing.
219664Senior Military Advisor to the Executive DirectorTransportAD 10Temporary staff(EASA) European Union Aviation Safety AgencyCologne (Germany)2026-04-30 23:59:00https://eu-careers.europa.eu/en/job-opportunit...0810high35860medium185This category seems to attract significant hir...
319665Structures ExpertTransportAD 7Temporary staff(EASA) European Union Aviation Safety AgencyCologne (Germany)2026-04-30 23:59:00https://eu-careers.europa.eu/en/job-opportunit...098high73158low136This posting suggests strong employment opport...
419666Certification Expert - Hydromechanical and Fli...TransportAD 7Temporary staff(EASA) European Union Aviation Safety AgencyCologne (Germany)2026-04-30 23:59:00https://eu-careers.europa.eu/en/job-opportunit...097high89343medium153This category seems to attract significant hir...
\n", "
\n", "
\n", "\n", "
\n", " \n", "\n", " \n", "\n", " \n", "
\n", "\n", "\n", "
\n", "
\n" ], "application/vnd.google.colaboratory.intrinsic+json": { "type": "dataframe", "summary": "{\n \"name\": \"display(jobs_enriched\",\n \"rows\": 5,\n \"fields\": [\n {\n \"column\": \"ID\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 20,\n \"min\": 19664,\n \"max\": 19703,\n \"num_unique_values\": 5,\n \"samples\": [\n 19703,\n 19666,\n 19664\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"title\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 5,\n \"samples\": [\n \"Policy Officer\",\n \"Certification Expert - Hydromechanical and Flight Control Systems\",\n \"Senior Military Advisor to the Executive Director\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Domain(s)\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"Transport\",\n \"Justice and human rights\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Grade\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 4,\n \"samples\": [\n \"FG IV\",\n \"AD 7\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Type of contract\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"Temporary staff\",\n \"Contract staff\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Institution(s)\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"(EASA) European Union Aviation Safety Agency\",\n \"(FRA) European Union Agency for Fundamental Rights\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Location(s)\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"Cologne (Germany)\",\n \"Vienna (Austria)\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Deadline\",\n \"properties\": {\n \"dtype\": \"date\",\n \"min\": \"2026-04-30 13:00:00\",\n \"max\": \"2026-04-30 23:59:00\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"2026-04-30 23:59:00\",\n \"2026-04-30 13:00:00\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Link to Content\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 5,\n \"samples\": [\n \"https://eu-careers.europa.eu/en/job-opportunities/policy-officer/fra-ca-polof-fgiv-2026\",\n \"https://eu-careers.europa.eu/en/job-opportunities/certification-expert-hydromechanical-and-flight-control-systems/easa-ad-2026-997\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"days_to_deadline\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0,\n \"min\": 0,\n \"max\": 0,\n \"num_unique_values\": 1,\n \"samples\": [\n 0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"urgency_score\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0,\n \"min\": 8,\n \"max\": 9,\n \"num_unique_values\": 2,\n \"samples\": [\n 8\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"job_demand_score\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1,\n \"min\": 7,\n \"max\": 10,\n \"num_unique_values\": 4,\n \"samples\": [\n 8\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"demand_label\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 1,\n \"samples\": [\n \"high\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"estimated_salary\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 24288,\n \"min\": 35860,\n \"max\": 91422,\n \"num_unique_values\": 5,\n \"samples\": [\n 50795\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"automation_risk\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"medium\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"estimated_applications\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 44,\n \"min\": 75,\n \"max\": 185,\n \"num_unique_values\": 5,\n \"samples\": [\n 180\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"job_comment\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 4,\n \"samples\": [\n \"Demand for this skill set appears to be growing.\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" } }, "metadata": {} } ] }, { "cell_type": "code", "source": [ "jobs_enriched.to_csv(\"jobs_enriched.csv\", index=False)\n", "print(\"Saved: jobs_enriched.csv\")" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "s00SIZBsDtd-", "outputId": "e87d8cc4-4a9c-4263-ddd1-9ddc8d02cbc9" }, "execution_count": 33, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Saved: jobs_enriched.csv\n" ] } ] }, { "cell_type": "code", "source": [ "jobs_enriched[\"deadline_month\"] = jobs_enriched[\"Deadline\"].dt.to_period(\"M\").astype(str)\n", "\n", "monthly_openings = (\n", " jobs_enriched\n", " .groupby([\"deadline_month\", \"Domain(s)\"], as_index=False)\n", " .agg(\n", " postings=(\"title\", \"count\"),\n", " avg_salary=(\"estimated_salary\", \"mean\"),\n", " avg_demand_score=(\"job_demand_score\", \"mean\"),\n", " avg_applications=(\"estimated_applications\", \"mean\")\n", " )\n", ")\n", "\n", "display(monthly_openings.head())\n", "print(\"Shape:\", monthly_openings.shape)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 241 }, "id": "3NtBDh8ODvLW", "outputId": "aad6702c-076b-47cd-b398-1cf215d10268" }, "execution_count": 34, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ " deadline_month Domain(s) postings avg_salary \\\n", "0 2026-04 Data protection 1 79732.000000 \n", "1 2026-04 Economics, Finance and Statistics 1 46284.000000 \n", "2 2026-04 Human Resources 1 89886.000000 \n", "3 2026-04 Justice and human rights 2 71108.500000 \n", "4 2026-04 Transport 3 66120.333333 \n", "\n", " avg_demand_score avg_applications \n", "0 9.000000 77.0 \n", "1 7.000000 63.0 \n", "2 7.000000 192.0 \n", "3 8.500000 127.5 \n", "4 8.333333 158.0 " ], "text/html": [ "\n", "
\n", "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
deadline_monthDomain(s)postingsavg_salaryavg_demand_scoreavg_applications
02026-04Data protection179732.0000009.00000077.0
12026-04Economics, Finance and Statistics146284.0000007.00000063.0
22026-04Human Resources189886.0000007.000000192.0
32026-04Justice and human rights271108.5000008.500000127.5
42026-04Transport366120.3333338.333333158.0
\n", "
\n", "
\n", "\n", "
\n", " \n", "\n", " \n", "\n", " \n", "
\n", "\n", "\n", "
\n", "
\n" ], "application/vnd.google.colaboratory.intrinsic+json": { "type": "dataframe", "summary": "{\n \"name\": \"print(\\\"Shape:\\\", monthly_openings\",\n \"rows\": 5,\n \"fields\": [\n {\n \"column\": \"deadline_month\",\n \"properties\": {\n \"dtype\": \"object\",\n \"num_unique_values\": 1,\n \"samples\": [\n \"2026-04\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Domain(s)\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 5,\n \"samples\": [\n \"Economics, Finance and Statistics\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"postings\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0,\n \"min\": 1,\n \"max\": 3,\n \"num_unique_values\": 3,\n \"samples\": [\n 1\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"avg_salary\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 16331.975065972749,\n \"min\": 46284.0,\n \"max\": 89886.0,\n \"num_unique_values\": 5,\n \"samples\": [\n 46284.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"avg_demand_score\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.9159087776022724,\n \"min\": 7.0,\n \"max\": 9.0,\n \"num_unique_values\": 4,\n \"samples\": [\n 7.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"avg_applications\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 54.13178363955875,\n \"min\": 63.0,\n \"max\": 192.0,\n \"num_unique_values\": 5,\n \"samples\": [\n 63.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" } }, "metadata": {} }, { "output_type": "stream", "name": "stdout", "text": [ "Shape: (138, 6)\n" ] } ] }, { "cell_type": "code", "source": [ "monthly_openings.to_csv(\"jobs_monthly_openings.csv\", index=False)\n", "print(\"Saved: jobs_monthly_openings.csv\")" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "_WpGUgWSDxDr", "outputId": "569af645-b25b-40f8-f70b-522e5c8be3de" }, "execution_count": 35, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Saved: jobs_monthly_openings.csv\n" ] } ] } ] }