yujinahn commited on
Commit
c8f1473
·
verified ·
1 Parent(s): 8e53ae5

Delete datacreation.ipynb

Browse files
Files changed (1) hide show
  1. datacreation.ipynb +0 -1300
datacreation.ipynb DELETED
@@ -1,1300 +0,0 @@
1
- {
2
- "nbformat": 4,
3
- "nbformat_minor": 0,
4
- "metadata": {
5
- "colab": {
6
- "provenance": []
7
- },
8
- "kernelspec": {
9
- "name": "python3",
10
- "display_name": "Python 3"
11
- },
12
- "language_info": {
13
- "name": "python"
14
- }
15
- },
16
- "cells": [
17
- {
18
- "cell_type": "code",
19
- "execution_count": 5,
20
- "metadata": {
21
- "colab": {
22
- "base_uri": "https://localhost:8080/"
23
- },
24
- "id": "XQZJSSopDet9",
25
- "outputId": "61ea737f-4653-41ba-964f-f4c88e7a0738"
26
- },
27
- "outputs": [
28
- {
29
- "output_type": "stream",
30
- "name": "stdout",
31
- "text": [
32
- "Requirement already satisfied: pandas in /usr/local/lib/python3.12/dist-packages (2.2.2)\n",
33
- "Requirement already satisfied: numpy in /usr/local/lib/python3.12/dist-packages (2.0.2)\n",
34
- "Requirement already satisfied: matplotlib in /usr/local/lib/python3.12/dist-packages (3.10.0)\n",
35
- "Requirement already satisfied: scikit-learn in /usr/local/lib/python3.12/dist-packages (1.6.1)\n",
36
- "Requirement already satisfied: statsmodels in /usr/local/lib/python3.12/dist-packages (0.14.6)\n",
37
- "Requirement already satisfied: python-dateutil>=2.8.2 in /usr/local/lib/python3.12/dist-packages (from pandas) (2.9.0.post0)\n",
38
- "Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.12/dist-packages (from pandas) (2025.2)\n",
39
- "Requirement already satisfied: tzdata>=2022.7 in /usr/local/lib/python3.12/dist-packages (from pandas) (2026.1)\n",
40
- "Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.12/dist-packages (from matplotlib) (1.3.3)\n",
41
- "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.12/dist-packages (from matplotlib) (0.12.1)\n",
42
- "Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.12/dist-packages (from matplotlib) (4.62.1)\n",
43
- "Requirement already satisfied: kiwisolver>=1.3.1 in /usr/local/lib/python3.12/dist-packages (from matplotlib) (1.5.0)\n",
44
- "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.12/dist-packages (from matplotlib) (26.1)\n",
45
- "Requirement already satisfied: pillow>=8 in /usr/local/lib/python3.12/dist-packages (from matplotlib) (11.3.0)\n",
46
- "Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.12/dist-packages (from matplotlib) (3.3.2)\n",
47
- "Requirement already satisfied: scipy>=1.6.0 in /usr/local/lib/python3.12/dist-packages (from scikit-learn) (1.16.3)\n",
48
- "Requirement already satisfied: joblib>=1.2.0 in /usr/local/lib/python3.12/dist-packages (from scikit-learn) (1.5.3)\n",
49
- "Requirement already satisfied: threadpoolctl>=3.1.0 in /usr/local/lib/python3.12/dist-packages (from scikit-learn) (3.6.0)\n",
50
- "Requirement already satisfied: patsy>=0.5.6 in /usr/local/lib/python3.12/dist-packages (from statsmodels) (1.0.2)\n",
51
- "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"
52
- ]
53
- }
54
- ],
55
- "source": [
56
- "!pip install pandas numpy matplotlib scikit-learn statsmodels"
57
- ]
58
- },
59
- {
60
- "cell_type": "code",
61
- "source": [
62
- "import random\n",
63
- "import numpy as np\n",
64
- "import pandas as pd\n",
65
- "\n",
66
- "random.seed(42)\n",
67
- "np.random.seed(42)"
68
- ],
69
- "metadata": {
70
- "id": "yzXlo3jYDi0f"
71
- },
72
- "execution_count": 6,
73
- "outputs": []
74
- },
75
- {
76
- "cell_type": "code",
77
- "source": [
78
- "print(\"=\" * 50)\n",
79
- "print(\"STEP 1/2: Data Creation (real data + synthetic enrichment)\")\n",
80
- "print(\"=\" * 50)"
81
- ],
82
- "metadata": {
83
- "colab": {
84
- "base_uri": "https://localhost:8080/"
85
- },
86
- "id": "EL_CQaWsDkGw",
87
- "outputId": "793b948a-a315-43d5-d2bc-6b8589dcb4b4"
88
- },
89
- "execution_count": 7,
90
- "outputs": [
91
- {
92
- "output_type": "stream",
93
- "name": "stdout",
94
- "text": [
95
- "==================================================\n",
96
- "STEP 1/2: Data Creation (real data + synthetic enrichment)\n",
97
- "==================================================\n"
98
- ]
99
- }
100
- ]
101
- },
102
- {
103
- "cell_type": "code",
104
- "source": [
105
- "jobs_df = pd.read_csv(\"CSV-JOBS.csv\")\n",
106
- "\n",
107
- "print(\"Shape:\", jobs_df.shape)\n",
108
- "print(\"Columns:\")\n",
109
- "print(jobs_df.columns.tolist())\n",
110
- "\n",
111
- "display(jobs_df.head())"
112
- ],
113
- "metadata": {
114
- "colab": {
115
- "base_uri": "https://localhost:8080/",
116
- "height": 505
117
- },
118
- "id": "jyIW1KljDlXP",
119
- "outputId": "ea7ebc0a-bf5f-4923-b855-2d35cbd83968"
120
- },
121
- "execution_count": 8,
122
- "outputs": [
123
- {
124
- "output_type": "stream",
125
- "name": "stdout",
126
- "text": [
127
- "Shape: (103, 9)\n",
128
- "Columns:\n",
129
- "['ID', 'title', 'Domain(s)', 'Grade', 'Type of contract', 'Institution(s) ', 'Location(s)', 'Deadline ', 'Link to Content']\n"
130
- ]
131
- },
132
- {
133
- "output_type": "display_data",
134
- "data": {
135
- "text/plain": [
136
- " ID title \\\n",
137
- "0 19702 Project Assistant \n",
138
- "1 19703 Policy Officer \n",
139
- "2 19664 Senior Military Advisor to the Executive Director \n",
140
- "3 19665 Structures Expert \n",
141
- "4 19666 Certification Expert - Hydromechanical and Fli... \n",
142
- "\n",
143
- " Domain(s) Grade Type of contract \\\n",
144
- "0 Justice and human rights FG III Contract staff \n",
145
- "1 Justice and human rights FG IV Contract staff \n",
146
- "2 Transport AD 10 Temporary staff \n",
147
- "3 Transport AD 7 Temporary staff \n",
148
- "4 Transport AD 7 Temporary staff \n",
149
- "\n",
150
- " Institution(s) Location(s) \\\n",
151
- "0 (FRA) European Union Agency for Fundamental Ri... Vienna (Austria) \n",
152
- "1 (FRA) European Union Agency for Fundamental Ri... Vienna (Austria) \n",
153
- "2 (EASA) European Union Aviation Safety Agency Cologne (Germany) \n",
154
- "3 (EASA) European Union Aviation Safety Agency Cologne (Germany) \n",
155
- "4 (EASA) European Union Aviation Safety Agency Cologne (Germany) \n",
156
- "\n",
157
- " Deadline Link to Content \n",
158
- "0 30/04/2026 - 13:00 https://eu-careers.europa.eu/en/job-opportunit... \n",
159
- "1 30/04/2026 - 13:00 https://eu-careers.europa.eu/en/job-opportunit... \n",
160
- "2 30/04/2026 - 23:59 https://eu-careers.europa.eu/en/job-opportunit... \n",
161
- "3 30/04/2026 - 23:59 https://eu-careers.europa.eu/en/job-opportunit... \n",
162
- "4 30/04/2026 - 23:59 https://eu-careers.europa.eu/en/job-opportunit... "
163
- ],
164
- "text/html": [
165
- "\n",
166
- " <div id=\"df-94849428-3ad1-4840-b983-058c86036565\" class=\"colab-df-container\">\n",
167
- " <div>\n",
168
- "<style scoped>\n",
169
- " .dataframe tbody tr th:only-of-type {\n",
170
- " vertical-align: middle;\n",
171
- " }\n",
172
- "\n",
173
- " .dataframe tbody tr th {\n",
174
- " vertical-align: top;\n",
175
- " }\n",
176
- "\n",
177
- " .dataframe thead th {\n",
178
- " text-align: right;\n",
179
- " }\n",
180
- "</style>\n",
181
- "<table border=\"1\" class=\"dataframe\">\n",
182
- " <thead>\n",
183
- " <tr style=\"text-align: right;\">\n",
184
- " <th></th>\n",
185
- " <th>ID</th>\n",
186
- " <th>title</th>\n",
187
- " <th>Domain(s)</th>\n",
188
- " <th>Grade</th>\n",
189
- " <th>Type of contract</th>\n",
190
- " <th>Institution(s)</th>\n",
191
- " <th>Location(s)</th>\n",
192
- " <th>Deadline</th>\n",
193
- " <th>Link to Content</th>\n",
194
- " </tr>\n",
195
- " </thead>\n",
196
- " <tbody>\n",
197
- " <tr>\n",
198
- " <th>0</th>\n",
199
- " <td>19702</td>\n",
200
- " <td>Project Assistant</td>\n",
201
- " <td>Justice and human rights</td>\n",
202
- " <td>FG III</td>\n",
203
- " <td>Contract staff</td>\n",
204
- " <td>(FRA) European Union Agency for Fundamental Ri...</td>\n",
205
- " <td>Vienna (Austria)</td>\n",
206
- " <td>30/04/2026 - 13:00</td>\n",
207
- " <td>https://eu-careers.europa.eu/en/job-opportunit...</td>\n",
208
- " </tr>\n",
209
- " <tr>\n",
210
- " <th>1</th>\n",
211
- " <td>19703</td>\n",
212
- " <td>Policy Officer</td>\n",
213
- " <td>Justice and human rights</td>\n",
214
- " <td>FG IV</td>\n",
215
- " <td>Contract staff</td>\n",
216
- " <td>(FRA) European Union Agency for Fundamental Ri...</td>\n",
217
- " <td>Vienna (Austria)</td>\n",
218
- " <td>30/04/2026 - 13:00</td>\n",
219
- " <td>https://eu-careers.europa.eu/en/job-opportunit...</td>\n",
220
- " </tr>\n",
221
- " <tr>\n",
222
- " <th>2</th>\n",
223
- " <td>19664</td>\n",
224
- " <td>Senior Military Advisor to the Executive Director</td>\n",
225
- " <td>Transport</td>\n",
226
- " <td>AD 10</td>\n",
227
- " <td>Temporary staff</td>\n",
228
- " <td>(EASA) European Union Aviation Safety Agency</td>\n",
229
- " <td>Cologne (Germany)</td>\n",
230
- " <td>30/04/2026 - 23:59</td>\n",
231
- " <td>https://eu-careers.europa.eu/en/job-opportunit...</td>\n",
232
- " </tr>\n",
233
- " <tr>\n",
234
- " <th>3</th>\n",
235
- " <td>19665</td>\n",
236
- " <td>Structures Expert</td>\n",
237
- " <td>Transport</td>\n",
238
- " <td>AD 7</td>\n",
239
- " <td>Temporary staff</td>\n",
240
- " <td>(EASA) European Union Aviation Safety Agency</td>\n",
241
- " <td>Cologne (Germany)</td>\n",
242
- " <td>30/04/2026 - 23:59</td>\n",
243
- " <td>https://eu-careers.europa.eu/en/job-opportunit...</td>\n",
244
- " </tr>\n",
245
- " <tr>\n",
246
- " <th>4</th>\n",
247
- " <td>19666</td>\n",
248
- " <td>Certification Expert - Hydromechanical and Fli...</td>\n",
249
- " <td>Transport</td>\n",
250
- " <td>AD 7</td>\n",
251
- " <td>Temporary staff</td>\n",
252
- " <td>(EASA) European Union Aviation Safety Agency</td>\n",
253
- " <td>Cologne (Germany)</td>\n",
254
- " <td>30/04/2026 - 23:59</td>\n",
255
- " <td>https://eu-careers.europa.eu/en/job-opportunit...</td>\n",
256
- " </tr>\n",
257
- " </tbody>\n",
258
- "</table>\n",
259
- "</div>\n",
260
- " <div class=\"colab-df-buttons\">\n",
261
- "\n",
262
- " <div class=\"colab-df-container\">\n",
263
- " <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-94849428-3ad1-4840-b983-058c86036565')\"\n",
264
- " title=\"Convert this dataframe to an interactive table.\"\n",
265
- " style=\"display:none;\">\n",
266
- "\n",
267
- " <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
268
- " <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
269
- " </svg>\n",
270
- " </button>\n",
271
- "\n",
272
- " <style>\n",
273
- " .colab-df-container {\n",
274
- " display:flex;\n",
275
- " gap: 12px;\n",
276
- " }\n",
277
- "\n",
278
- " .colab-df-convert {\n",
279
- " background-color: #E8F0FE;\n",
280
- " border: none;\n",
281
- " border-radius: 50%;\n",
282
- " cursor: pointer;\n",
283
- " display: none;\n",
284
- " fill: #1967D2;\n",
285
- " height: 32px;\n",
286
- " padding: 0 0 0 0;\n",
287
- " width: 32px;\n",
288
- " }\n",
289
- "\n",
290
- " .colab-df-convert:hover {\n",
291
- " background-color: #E2EBFA;\n",
292
- " box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
293
- " fill: #174EA6;\n",
294
- " }\n",
295
- "\n",
296
- " .colab-df-buttons div {\n",
297
- " margin-bottom: 4px;\n",
298
- " }\n",
299
- "\n",
300
- " [theme=dark] .colab-df-convert {\n",
301
- " background-color: #3B4455;\n",
302
- " fill: #D2E3FC;\n",
303
- " }\n",
304
- "\n",
305
- " [theme=dark] .colab-df-convert:hover {\n",
306
- " background-color: #434B5C;\n",
307
- " box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
308
- " filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
309
- " fill: #FFFFFF;\n",
310
- " }\n",
311
- " </style>\n",
312
- "\n",
313
- " <script>\n",
314
- " const buttonEl =\n",
315
- " document.querySelector('#df-94849428-3ad1-4840-b983-058c86036565 button.colab-df-convert');\n",
316
- " buttonEl.style.display =\n",
317
- " google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
318
- "\n",
319
- " async function convertToInteractive(key) {\n",
320
- " const element = document.querySelector('#df-94849428-3ad1-4840-b983-058c86036565');\n",
321
- " const dataTable =\n",
322
- " await google.colab.kernel.invokeFunction('convertToInteractive',\n",
323
- " [key], {});\n",
324
- " if (!dataTable) return;\n",
325
- "\n",
326
- " const docLinkHtml = 'Like what you see? Visit the ' +\n",
327
- " '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
328
- " + ' to learn more about interactive tables.';\n",
329
- " element.innerHTML = '';\n",
330
- " dataTable['output_type'] = 'display_data';\n",
331
- " await google.colab.output.renderOutput(dataTable, element);\n",
332
- " const docLink = document.createElement('div');\n",
333
- " docLink.innerHTML = docLinkHtml;\n",
334
- " element.appendChild(docLink);\n",
335
- " }\n",
336
- " </script>\n",
337
- " </div>\n",
338
- "\n",
339
- "\n",
340
- " </div>\n",
341
- " </div>\n"
342
- ],
343
- "application/vnd.google.colaboratory.intrinsic+json": {
344
- "type": "dataframe",
345
- "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}"
346
- }
347
- },
348
- "metadata": {}
349
- }
350
- ]
351
- },
352
- {
353
- "cell_type": "code",
354
- "source": [
355
- "jobs_clean = jobs_df.copy()\n",
356
- "\n",
357
- "jobs_clean.columns = jobs_clean.columns.str.strip()\n",
358
- "jobs_clean[\"Deadline\"] = pd.to_datetime(jobs_clean[\"Deadline\"], errors=\"coerce\")\n",
359
- "\n",
360
- "jobs_clean = jobs_clean.dropna(subset=[\"title\", \"Domain(s)\", \"Type of contract\", \"Deadline\"])\n",
361
- "\n",
362
- "print(\"Cleaned shape:\", jobs_clean.shape)\n",
363
- "display(jobs_clean.head())"
364
- ],
365
- "metadata": {
366
- "colab": {
367
- "base_uri": "https://localhost:8080/",
368
- "height": 505
369
- },
370
- "id": "UgMfW50wDm1g",
371
- "outputId": "4b88a153-aa33-44db-87ae-28013ca4ac56"
372
- },
373
- "execution_count": 9,
374
- "outputs": [
375
- {
376
- "output_type": "stream",
377
- "name": "stdout",
378
- "text": [
379
- "Cleaned shape: (99, 9)\n"
380
- ]
381
- },
382
- {
383
- "output_type": "stream",
384
- "name": "stderr",
385
- "text": [
386
- "/tmp/ipykernel_25014/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",
387
- " jobs_clean[\"Deadline\"] = pd.to_datetime(jobs_clean[\"Deadline\"], errors=\"coerce\")\n"
388
- ]
389
- },
390
- {
391
- "output_type": "display_data",
392
- "data": {
393
- "text/plain": [
394
- " ID title \\\n",
395
- "0 19702 Project Assistant \n",
396
- "1 19703 Policy Officer \n",
397
- "2 19664 Senior Military Advisor to the Executive Director \n",
398
- "3 19665 Structures Expert \n",
399
- "4 19666 Certification Expert - Hydromechanical and Fli... \n",
400
- "\n",
401
- " Domain(s) Grade Type of contract \\\n",
402
- "0 Justice and human rights FG III Contract staff \n",
403
- "1 Justice and human rights FG IV Contract staff \n",
404
- "2 Transport AD 10 Temporary staff \n",
405
- "3 Transport AD 7 Temporary staff \n",
406
- "4 Transport AD 7 Temporary staff \n",
407
- "\n",
408
- " Institution(s) Location(s) \\\n",
409
- "0 (FRA) European Union Agency for Fundamental Ri... Vienna (Austria) \n",
410
- "1 (FRA) European Union Agency for Fundamental Ri... Vienna (Austria) \n",
411
- "2 (EASA) European Union Aviation Safety Agency Cologne (Germany) \n",
412
- "3 (EASA) European Union Aviation Safety Agency Cologne (Germany) \n",
413
- "4 (EASA) European Union Aviation Safety Agency Cologne (Germany) \n",
414
- "\n",
415
- " Deadline Link to Content \n",
416
- "0 2026-04-30 13:00:00 https://eu-careers.europa.eu/en/job-opportunit... \n",
417
- "1 2026-04-30 13:00:00 https://eu-careers.europa.eu/en/job-opportunit... \n",
418
- "2 2026-04-30 23:59:00 https://eu-careers.europa.eu/en/job-opportunit... \n",
419
- "3 2026-04-30 23:59:00 https://eu-careers.europa.eu/en/job-opportunit... \n",
420
- "4 2026-04-30 23:59:00 https://eu-careers.europa.eu/en/job-opportunit... "
421
- ],
422
- "text/html": [
423
- "\n",
424
- " <div id=\"df-f0935762-8470-4529-94a0-87eee82320e7\" class=\"colab-df-container\">\n",
425
- " <div>\n",
426
- "<style scoped>\n",
427
- " .dataframe tbody tr th:only-of-type {\n",
428
- " vertical-align: middle;\n",
429
- " }\n",
430
- "\n",
431
- " .dataframe tbody tr th {\n",
432
- " vertical-align: top;\n",
433
- " }\n",
434
- "\n",
435
- " .dataframe thead th {\n",
436
- " text-align: right;\n",
437
- " }\n",
438
- "</style>\n",
439
- "<table border=\"1\" class=\"dataframe\">\n",
440
- " <thead>\n",
441
- " <tr style=\"text-align: right;\">\n",
442
- " <th></th>\n",
443
- " <th>ID</th>\n",
444
- " <th>title</th>\n",
445
- " <th>Domain(s)</th>\n",
446
- " <th>Grade</th>\n",
447
- " <th>Type of contract</th>\n",
448
- " <th>Institution(s)</th>\n",
449
- " <th>Location(s)</th>\n",
450
- " <th>Deadline</th>\n",
451
- " <th>Link to Content</th>\n",
452
- " </tr>\n",
453
- " </thead>\n",
454
- " <tbody>\n",
455
- " <tr>\n",
456
- " <th>0</th>\n",
457
- " <td>19702</td>\n",
458
- " <td>Project Assistant</td>\n",
459
- " <td>Justice and human rights</td>\n",
460
- " <td>FG III</td>\n",
461
- " <td>Contract staff</td>\n",
462
- " <td>(FRA) European Union Agency for Fundamental Ri...</td>\n",
463
- " <td>Vienna (Austria)</td>\n",
464
- " <td>2026-04-30 13:00:00</td>\n",
465
- " <td>https://eu-careers.europa.eu/en/job-opportunit...</td>\n",
466
- " </tr>\n",
467
- " <tr>\n",
468
- " <th>1</th>\n",
469
- " <td>19703</td>\n",
470
- " <td>Policy Officer</td>\n",
471
- " <td>Justice and human rights</td>\n",
472
- " <td>FG IV</td>\n",
473
- " <td>Contract staff</td>\n",
474
- " <td>(FRA) European Union Agency for Fundamental Ri...</td>\n",
475
- " <td>Vienna (Austria)</td>\n",
476
- " <td>2026-04-30 13:00:00</td>\n",
477
- " <td>https://eu-careers.europa.eu/en/job-opportunit...</td>\n",
478
- " </tr>\n",
479
- " <tr>\n",
480
- " <th>2</th>\n",
481
- " <td>19664</td>\n",
482
- " <td>Senior Military Advisor to the Executive Director</td>\n",
483
- " <td>Transport</td>\n",
484
- " <td>AD 10</td>\n",
485
- " <td>Temporary staff</td>\n",
486
- " <td>(EASA) European Union Aviation Safety Agency</td>\n",
487
- " <td>Cologne (Germany)</td>\n",
488
- " <td>2026-04-30 23:59:00</td>\n",
489
- " <td>https://eu-careers.europa.eu/en/job-opportunit...</td>\n",
490
- " </tr>\n",
491
- " <tr>\n",
492
- " <th>3</th>\n",
493
- " <td>19665</td>\n",
494
- " <td>Structures Expert</td>\n",
495
- " <td>Transport</td>\n",
496
- " <td>AD 7</td>\n",
497
- " <td>Temporary staff</td>\n",
498
- " <td>(EASA) European Union Aviation Safety Agency</td>\n",
499
- " <td>Cologne (Germany)</td>\n",
500
- " <td>2026-04-30 23:59:00</td>\n",
501
- " <td>https://eu-careers.europa.eu/en/job-opportunit...</td>\n",
502
- " </tr>\n",
503
- " <tr>\n",
504
- " <th>4</th>\n",
505
- " <td>19666</td>\n",
506
- " <td>Certification Expert - Hydromechanical and Fli...</td>\n",
507
- " <td>Transport</td>\n",
508
- " <td>AD 7</td>\n",
509
- " <td>Temporary staff</td>\n",
510
- " <td>(EASA) European Union Aviation Safety Agency</td>\n",
511
- " <td>Cologne (Germany)</td>\n",
512
- " <td>2026-04-30 23:59:00</td>\n",
513
- " <td>https://eu-careers.europa.eu/en/job-opportunit...</td>\n",
514
- " </tr>\n",
515
- " </tbody>\n",
516
- "</table>\n",
517
- "</div>\n",
518
- " <div class=\"colab-df-buttons\">\n",
519
- "\n",
520
- " <div class=\"colab-df-container\">\n",
521
- " <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-f0935762-8470-4529-94a0-87eee82320e7')\"\n",
522
- " title=\"Convert this dataframe to an interactive table.\"\n",
523
- " style=\"display:none;\">\n",
524
- "\n",
525
- " <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
526
- " <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
527
- " </svg>\n",
528
- " </button>\n",
529
- "\n",
530
- " <style>\n",
531
- " .colab-df-container {\n",
532
- " display:flex;\n",
533
- " gap: 12px;\n",
534
- " }\n",
535
- "\n",
536
- " .colab-df-convert {\n",
537
- " background-color: #E8F0FE;\n",
538
- " border: none;\n",
539
- " border-radius: 50%;\n",
540
- " cursor: pointer;\n",
541
- " display: none;\n",
542
- " fill: #1967D2;\n",
543
- " height: 32px;\n",
544
- " padding: 0 0 0 0;\n",
545
- " width: 32px;\n",
546
- " }\n",
547
- "\n",
548
- " .colab-df-convert:hover {\n",
549
- " background-color: #E2EBFA;\n",
550
- " box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
551
- " fill: #174EA6;\n",
552
- " }\n",
553
- "\n",
554
- " .colab-df-buttons div {\n",
555
- " margin-bottom: 4px;\n",
556
- " }\n",
557
- "\n",
558
- " [theme=dark] .colab-df-convert {\n",
559
- " background-color: #3B4455;\n",
560
- " fill: #D2E3FC;\n",
561
- " }\n",
562
- "\n",
563
- " [theme=dark] .colab-df-convert:hover {\n",
564
- " background-color: #434B5C;\n",
565
- " box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
566
- " filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
567
- " fill: #FFFFFF;\n",
568
- " }\n",
569
- " </style>\n",
570
- "\n",
571
- " <script>\n",
572
- " const buttonEl =\n",
573
- " document.querySelector('#df-f0935762-8470-4529-94a0-87eee82320e7 button.colab-df-convert');\n",
574
- " buttonEl.style.display =\n",
575
- " google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
576
- "\n",
577
- " async function convertToInteractive(key) {\n",
578
- " const element = document.querySelector('#df-f0935762-8470-4529-94a0-87eee82320e7');\n",
579
- " const dataTable =\n",
580
- " await google.colab.kernel.invokeFunction('convertToInteractive',\n",
581
- " [key], {});\n",
582
- " if (!dataTable) return;\n",
583
- "\n",
584
- " const docLinkHtml = 'Like what you see? Visit the ' +\n",
585
- " '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
586
- " + ' to learn more about interactive tables.';\n",
587
- " element.innerHTML = '';\n",
588
- " dataTable['output_type'] = 'display_data';\n",
589
- " await google.colab.output.renderOutput(dataTable, element);\n",
590
- " const docLink = document.createElement('div');\n",
591
- " docLink.innerHTML = docLinkHtml;\n",
592
- " element.appendChild(docLink);\n",
593
- " }\n",
594
- " </script>\n",
595
- " </div>\n",
596
- "\n",
597
- "\n",
598
- " </div>\n",
599
- " </div>\n"
600
- ],
601
- "application/vnd.google.colaboratory.intrinsic+json": {
602
- "type": "dataframe",
603
- "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}"
604
- }
605
- },
606
- "metadata": {}
607
- }
608
- ]
609
- },
610
- {
611
- "cell_type": "code",
612
- "source": [
613
- "print(\"Unique domains:\", jobs_clean[\"Domain(s)\"].nunique())\n",
614
- "print(\"Unique contract types:\", jobs_clean[\"Type of contract\"].nunique())\n",
615
- "print(\"Unique institutions:\", jobs_clean[\"Institution(s)\"].nunique())\n",
616
- "print(\"Unique locations:\", jobs_clean[\"Location(s)\"].nunique())"
617
- ],
618
- "metadata": {
619
- "colab": {
620
- "base_uri": "https://localhost:8080/"
621
- },
622
- "id": "wN8LLnbqDo5H",
623
- "outputId": "1230b9e7-4d0b-44da-bf73-61a5a39d0ab9"
624
- },
625
- "execution_count": 10,
626
- "outputs": [
627
- {
628
- "output_type": "stream",
629
- "name": "stdout",
630
- "text": [
631
- "Unique domains: 35\n",
632
- "Unique contract types: 5\n",
633
- "Unique institutions: 38\n",
634
- "Unique locations: 31\n"
635
- ]
636
- }
637
- ]
638
- },
639
- {
640
- "cell_type": "code",
641
- "source": [
642
- "comments_by_demand = {\n",
643
- " \"high\": [\n",
644
- " \"This role appears to be in strong demand across institutions.\",\n",
645
- " \"The labor market for this profile looks highly competitive.\",\n",
646
- " \"This posting suggests strong employment opportunities.\",\n",
647
- " \"Demand for this skill set appears to be growing.\",\n",
648
- " \"This category seems to attract significant hiring activity.\"\n",
649
- " ],\n",
650
- " \"stable\": [\n",
651
- " \"This role appears to have steady demand.\",\n",
652
- " \"The market for this profile looks relatively balanced.\",\n",
653
- " \"This posting suggests moderate but stable opportunities.\",\n",
654
- " \"Demand appears consistent across institutions.\",\n",
655
- " \"This category seems to have regular hiring activity.\"\n",
656
- " ],\n",
657
- " \"low\": [\n",
658
- " \"This role appears to have weaker demand.\",\n",
659
- " \"The market for this profile looks more limited.\",\n",
660
- " \"This posting suggests fewer employment opportunities.\",\n",
661
- " \"Demand for this skill set appears relatively low.\",\n",
662
- " \"This category seems to have less hiring activity.\"\n",
663
- " ]\n",
664
- "}"
665
- ],
666
- "metadata": {
667
- "id": "HHqueIqZDqVe"
668
- },
669
- "execution_count": 11,
670
- "outputs": []
671
- },
672
- {
673
- "cell_type": "code",
674
- "source": [
675
- "jobs_enriched = jobs_clean.copy()\n",
676
- "\n",
677
- "today = pd.Timestamp.today().normalize()\n",
678
- "jobs_enriched[\"days_to_deadline\"] = (jobs_enriched[\"Deadline\"] - today).dt.days\n",
679
- "\n",
680
- "def urgency_from_days(days):\n",
681
- " if pd.isna(days):\n",
682
- " return random.randint(3, 6)\n",
683
- " if days <= 7:\n",
684
- " return random.randint(8, 10)\n",
685
- " elif days <= 21:\n",
686
- " return random.randint(5, 8)\n",
687
- " else:\n",
688
- " return random.randint(2, 6)\n",
689
- "\n",
690
- "jobs_enriched[\"urgency_score\"] = jobs_enriched[\"days_to_deadline\"].apply(urgency_from_days)\n",
691
- "\n",
692
- "def demand_from_urgency(score):\n",
693
- " if score >= 8:\n",
694
- " return random.randint(7, 10)\n",
695
- " elif score >= 5:\n",
696
- " return random.randint(4, 7)\n",
697
- " else:\n",
698
- " return random.randint(2, 5)\n",
699
- "\n",
700
- "jobs_enriched[\"job_demand_score\"] = jobs_enriched[\"urgency_score\"].apply(demand_from_urgency)\n",
701
- "\n",
702
- "def demand_label(score):\n",
703
- " if score <= 3:\n",
704
- " return \"low\"\n",
705
- " elif score <= 6:\n",
706
- " return \"stable\"\n",
707
- " else:\n",
708
- " return \"high\"\n",
709
- "\n",
710
- "jobs_enriched[\"demand_label\"] = jobs_enriched[\"job_demand_score\"].apply(demand_label)\n",
711
- "\n",
712
- "jobs_enriched[\"estimated_salary\"] = np.random.randint(35000, 95000, len(jobs_enriched))\n",
713
- "\n",
714
- "jobs_enriched[\"automation_risk\"] = np.random.choice(\n",
715
- " [\"low\", \"medium\", \"high\"],\n",
716
- " size=len(jobs_enriched),\n",
717
- " p=[0.35, 0.45, 0.20]\n",
718
- ")\n",
719
- "\n",
720
- "jobs_enriched[\"estimated_applications\"] = np.random.randint(20, 250, len(jobs_enriched))\n",
721
- "\n",
722
- "jobs_enriched[\"job_comment\"] = jobs_enriched[\"demand_label\"].apply(\n",
723
- " lambda x: random.choice(comments_by_demand[x])\n",
724
- ")\n",
725
- "\n",
726
- "display(jobs_enriched.head())"
727
- ],
728
- "metadata": {
729
- "colab": {
730
- "base_uri": "https://localhost:8080/",
731
- "height": 539
732
- },
733
- "id": "l6PBz502Dr3a",
734
- "outputId": "1f359396-203b-4d7a-8671-d58ccee2df1a"
735
- },
736
- "execution_count": 12,
737
- "outputs": [
738
- {
739
- "output_type": "display_data",
740
- "data": {
741
- "text/plain": [
742
- " ID title \\\n",
743
- "0 19702 Project Assistant \n",
744
- "1 19703 Policy Officer \n",
745
- "2 19664 Senior Military Advisor to the Executive Director \n",
746
- "3 19665 Structures Expert \n",
747
- "4 19666 Certification Expert - Hydromechanical and Fli... \n",
748
- "\n",
749
- " Domain(s) Grade Type of contract \\\n",
750
- "0 Justice and human rights FG III Contract staff \n",
751
- "1 Justice and human rights FG IV Contract staff \n",
752
- "2 Transport AD 10 Temporary staff \n",
753
- "3 Transport AD 7 Temporary staff \n",
754
- "4 Transport AD 7 Temporary staff \n",
755
- "\n",
756
- " Institution(s) Location(s) \\\n",
757
- "0 (FRA) European Union Agency for Fundamental Ri... Vienna (Austria) \n",
758
- "1 (FRA) European Union Agency for Fundamental Ri... Vienna (Austria) \n",
759
- "2 (EASA) European Union Aviation Safety Agency Cologne (Germany) \n",
760
- "3 (EASA) European Union Aviation Safety Agency Cologne (Germany) \n",
761
- "4 (EASA) European Union Aviation Safety Agency Cologne (Germany) \n",
762
- "\n",
763
- " Deadline Link to Content \\\n",
764
- "0 2026-04-30 13:00:00 https://eu-careers.europa.eu/en/job-opportunit... \n",
765
- "1 2026-04-30 13:00:00 https://eu-careers.europa.eu/en/job-opportunit... \n",
766
- "2 2026-04-30 23:59:00 https://eu-careers.europa.eu/en/job-opportunit... \n",
767
- "3 2026-04-30 23:59:00 https://eu-careers.europa.eu/en/job-opportunit... \n",
768
- "4 2026-04-30 23:59:00 https://eu-careers.europa.eu/en/job-opportunit... \n",
769
- "\n",
770
- " days_to_deadline urgency_score job_demand_score demand_label \\\n",
771
- "0 1 10 9 high \n",
772
- "1 1 8 10 high \n",
773
- "2 1 8 10 high \n",
774
- "3 1 10 9 high \n",
775
- "4 1 9 8 high \n",
776
- "\n",
777
- " estimated_salary automation_risk estimated_applications \\\n",
778
- "0 91422 low 87 \n",
779
- "1 50795 low 202 \n",
780
- "2 35860 low 222 \n",
781
- "3 73158 medium 203 \n",
782
- "4 89343 low 142 \n",
783
- "\n",
784
- " job_comment \n",
785
- "0 Demand for this skill set appears to be growing. \n",
786
- "1 This posting suggests strong employment opport... \n",
787
- "2 This role appears to be in strong demand acros... \n",
788
- "3 The labor market for this profile looks highly... \n",
789
- "4 The labor market for this profile looks highly... "
790
- ],
791
- "text/html": [
792
- "\n",
793
- " <div id=\"df-a517b793-a4f6-427d-970a-3326feaef8c4\" class=\"colab-df-container\">\n",
794
- " <div>\n",
795
- "<style scoped>\n",
796
- " .dataframe tbody tr th:only-of-type {\n",
797
- " vertical-align: middle;\n",
798
- " }\n",
799
- "\n",
800
- " .dataframe tbody tr th {\n",
801
- " vertical-align: top;\n",
802
- " }\n",
803
- "\n",
804
- " .dataframe thead th {\n",
805
- " text-align: right;\n",
806
- " }\n",
807
- "</style>\n",
808
- "<table border=\"1\" class=\"dataframe\">\n",
809
- " <thead>\n",
810
- " <tr style=\"text-align: right;\">\n",
811
- " <th></th>\n",
812
- " <th>ID</th>\n",
813
- " <th>title</th>\n",
814
- " <th>Domain(s)</th>\n",
815
- " <th>Grade</th>\n",
816
- " <th>Type of contract</th>\n",
817
- " <th>Institution(s)</th>\n",
818
- " <th>Location(s)</th>\n",
819
- " <th>Deadline</th>\n",
820
- " <th>Link to Content</th>\n",
821
- " <th>days_to_deadline</th>\n",
822
- " <th>urgency_score</th>\n",
823
- " <th>job_demand_score</th>\n",
824
- " <th>demand_label</th>\n",
825
- " <th>estimated_salary</th>\n",
826
- " <th>automation_risk</th>\n",
827
- " <th>estimated_applications</th>\n",
828
- " <th>job_comment</th>\n",
829
- " </tr>\n",
830
- " </thead>\n",
831
- " <tbody>\n",
832
- " <tr>\n",
833
- " <th>0</th>\n",
834
- " <td>19702</td>\n",
835
- " <td>Project Assistant</td>\n",
836
- " <td>Justice and human rights</td>\n",
837
- " <td>FG III</td>\n",
838
- " <td>Contract staff</td>\n",
839
- " <td>(FRA) European Union Agency for Fundamental Ri...</td>\n",
840
- " <td>Vienna (Austria)</td>\n",
841
- " <td>2026-04-30 13:00:00</td>\n",
842
- " <td>https://eu-careers.europa.eu/en/job-opportunit...</td>\n",
843
- " <td>1</td>\n",
844
- " <td>10</td>\n",
845
- " <td>9</td>\n",
846
- " <td>high</td>\n",
847
- " <td>91422</td>\n",
848
- " <td>low</td>\n",
849
- " <td>87</td>\n",
850
- " <td>Demand for this skill set appears to be growing.</td>\n",
851
- " </tr>\n",
852
- " <tr>\n",
853
- " <th>1</th>\n",
854
- " <td>19703</td>\n",
855
- " <td>Policy Officer</td>\n",
856
- " <td>Justice and human rights</td>\n",
857
- " <td>FG IV</td>\n",
858
- " <td>Contract staff</td>\n",
859
- " <td>(FRA) European Union Agency for Fundamental Ri...</td>\n",
860
- " <td>Vienna (Austria)</td>\n",
861
- " <td>2026-04-30 13:00:00</td>\n",
862
- " <td>https://eu-careers.europa.eu/en/job-opportunit...</td>\n",
863
- " <td>1</td>\n",
864
- " <td>8</td>\n",
865
- " <td>10</td>\n",
866
- " <td>high</td>\n",
867
- " <td>50795</td>\n",
868
- " <td>low</td>\n",
869
- " <td>202</td>\n",
870
- " <td>This posting suggests strong employment opport...</td>\n",
871
- " </tr>\n",
872
- " <tr>\n",
873
- " <th>2</th>\n",
874
- " <td>19664</td>\n",
875
- " <td>Senior Military Advisor to the Executive Director</td>\n",
876
- " <td>Transport</td>\n",
877
- " <td>AD 10</td>\n",
878
- " <td>Temporary staff</td>\n",
879
- " <td>(EASA) European Union Aviation Safety Agency</td>\n",
880
- " <td>Cologne (Germany)</td>\n",
881
- " <td>2026-04-30 23:59:00</td>\n",
882
- " <td>https://eu-careers.europa.eu/en/job-opportunit...</td>\n",
883
- " <td>1</td>\n",
884
- " <td>8</td>\n",
885
- " <td>10</td>\n",
886
- " <td>high</td>\n",
887
- " <td>35860</td>\n",
888
- " <td>low</td>\n",
889
- " <td>222</td>\n",
890
- " <td>This role appears to be in strong demand acros...</td>\n",
891
- " </tr>\n",
892
- " <tr>\n",
893
- " <th>3</th>\n",
894
- " <td>19665</td>\n",
895
- " <td>Structures Expert</td>\n",
896
- " <td>Transport</td>\n",
897
- " <td>AD 7</td>\n",
898
- " <td>Temporary staff</td>\n",
899
- " <td>(EASA) European Union Aviation Safety Agency</td>\n",
900
- " <td>Cologne (Germany)</td>\n",
901
- " <td>2026-04-30 23:59:00</td>\n",
902
- " <td>https://eu-careers.europa.eu/en/job-opportunit...</td>\n",
903
- " <td>1</td>\n",
904
- " <td>10</td>\n",
905
- " <td>9</td>\n",
906
- " <td>high</td>\n",
907
- " <td>73158</td>\n",
908
- " <td>medium</td>\n",
909
- " <td>203</td>\n",
910
- " <td>The labor market for this profile looks highly...</td>\n",
911
- " </tr>\n",
912
- " <tr>\n",
913
- " <th>4</th>\n",
914
- " <td>19666</td>\n",
915
- " <td>Certification Expert - Hydromechanical and Fli...</td>\n",
916
- " <td>Transport</td>\n",
917
- " <td>AD 7</td>\n",
918
- " <td>Temporary staff</td>\n",
919
- " <td>(EASA) European Union Aviation Safety Agency</td>\n",
920
- " <td>Cologne (Germany)</td>\n",
921
- " <td>2026-04-30 23:59:00</td>\n",
922
- " <td>https://eu-careers.europa.eu/en/job-opportunit...</td>\n",
923
- " <td>1</td>\n",
924
- " <td>9</td>\n",
925
- " <td>8</td>\n",
926
- " <td>high</td>\n",
927
- " <td>89343</td>\n",
928
- " <td>low</td>\n",
929
- " <td>142</td>\n",
930
- " <td>The labor market for this profile looks highly...</td>\n",
931
- " </tr>\n",
932
- " </tbody>\n",
933
- "</table>\n",
934
- "</div>\n",
935
- " <div class=\"colab-df-buttons\">\n",
936
- "\n",
937
- " <div class=\"colab-df-container\">\n",
938
- " <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-a517b793-a4f6-427d-970a-3326feaef8c4')\"\n",
939
- " title=\"Convert this dataframe to an interactive table.\"\n",
940
- " style=\"display:none;\">\n",
941
- "\n",
942
- " <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
943
- " <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
944
- " </svg>\n",
945
- " </button>\n",
946
- "\n",
947
- " <style>\n",
948
- " .colab-df-container {\n",
949
- " display:flex;\n",
950
- " gap: 12px;\n",
951
- " }\n",
952
- "\n",
953
- " .colab-df-convert {\n",
954
- " background-color: #E8F0FE;\n",
955
- " border: none;\n",
956
- " border-radius: 50%;\n",
957
- " cursor: pointer;\n",
958
- " display: none;\n",
959
- " fill: #1967D2;\n",
960
- " height: 32px;\n",
961
- " padding: 0 0 0 0;\n",
962
- " width: 32px;\n",
963
- " }\n",
964
- "\n",
965
- " .colab-df-convert:hover {\n",
966
- " background-color: #E2EBFA;\n",
967
- " box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
968
- " fill: #174EA6;\n",
969
- " }\n",
970
- "\n",
971
- " .colab-df-buttons div {\n",
972
- " margin-bottom: 4px;\n",
973
- " }\n",
974
- "\n",
975
- " [theme=dark] .colab-df-convert {\n",
976
- " background-color: #3B4455;\n",
977
- " fill: #D2E3FC;\n",
978
- " }\n",
979
- "\n",
980
- " [theme=dark] .colab-df-convert:hover {\n",
981
- " background-color: #434B5C;\n",
982
- " box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
983
- " filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
984
- " fill: #FFFFFF;\n",
985
- " }\n",
986
- " </style>\n",
987
- "\n",
988
- " <script>\n",
989
- " const buttonEl =\n",
990
- " document.querySelector('#df-a517b793-a4f6-427d-970a-3326feaef8c4 button.colab-df-convert');\n",
991
- " buttonEl.style.display =\n",
992
- " google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
993
- "\n",
994
- " async function convertToInteractive(key) {\n",
995
- " const element = document.querySelector('#df-a517b793-a4f6-427d-970a-3326feaef8c4');\n",
996
- " const dataTable =\n",
997
- " await google.colab.kernel.invokeFunction('convertToInteractive',\n",
998
- " [key], {});\n",
999
- " if (!dataTable) return;\n",
1000
- "\n",
1001
- " const docLinkHtml = 'Like what you see? Visit the ' +\n",
1002
- " '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
1003
- " + ' to learn more about interactive tables.';\n",
1004
- " element.innerHTML = '';\n",
1005
- " dataTable['output_type'] = 'display_data';\n",
1006
- " await google.colab.output.renderOutput(dataTable, element);\n",
1007
- " const docLink = document.createElement('div');\n",
1008
- " docLink.innerHTML = docLinkHtml;\n",
1009
- " element.appendChild(docLink);\n",
1010
- " }\n",
1011
- " </script>\n",
1012
- " </div>\n",
1013
- "\n",
1014
- "\n",
1015
- " </div>\n",
1016
- " </div>\n"
1017
- ],
1018
- "application/vnd.google.colaboratory.intrinsic+json": {
1019
- "type": "dataframe",
1020
- "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\": 1,\n \"max\": 1,\n \"num_unique_values\": 1,\n \"samples\": [\n 1\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"urgency_score\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1,\n \"min\": 8,\n \"max\": 10,\n \"num_unique_values\": 3,\n \"samples\": [\n 10\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"job_demand_score\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0,\n \"min\": 8,\n \"max\": 10,\n \"num_unique_values\": 3,\n \"samples\": [\n 9\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\": 55,\n \"min\": 87,\n \"max\": 222,\n \"num_unique_values\": 5,\n \"samples\": [\n 202\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 \"This posting suggests strong employment opportunities.\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}"
1021
- }
1022
- },
1023
- "metadata": {}
1024
- }
1025
- ]
1026
- },
1027
- {
1028
- "cell_type": "code",
1029
- "source": [
1030
- "jobs_enriched.to_csv(\"jobs_enriched.csv\", index=False)\n",
1031
- "print(\"Saved: jobs_enriched.csv\")"
1032
- ],
1033
- "metadata": {
1034
- "colab": {
1035
- "base_uri": "https://localhost:8080/"
1036
- },
1037
- "id": "s00SIZBsDtd-",
1038
- "outputId": "e5dbe4a5-e76a-48b2-ac18-866a964dfe3d"
1039
- },
1040
- "execution_count": 13,
1041
- "outputs": [
1042
- {
1043
- "output_type": "stream",
1044
- "name": "stdout",
1045
- "text": [
1046
- "Saved: jobs_enriched.csv\n"
1047
- ]
1048
- }
1049
- ]
1050
- },
1051
- {
1052
- "cell_type": "code",
1053
- "source": [
1054
- "jobs_enriched[\"deadline_month\"] = jobs_enriched[\"Deadline\"].dt.to_period(\"M\").astype(str)\n",
1055
- "\n",
1056
- "monthly_openings = (\n",
1057
- " jobs_enriched\n",
1058
- " .groupby([\"deadline_month\", \"Domain(s)\"], as_index=False)\n",
1059
- " .agg(\n",
1060
- " postings=(\"title\", \"count\"),\n",
1061
- " avg_salary=(\"estimated_salary\", \"mean\"),\n",
1062
- " avg_demand_score=(\"job_demand_score\", \"mean\"),\n",
1063
- " avg_applications=(\"estimated_applications\", \"mean\")\n",
1064
- " )\n",
1065
- ")\n",
1066
- "\n",
1067
- "display(monthly_openings.head())\n",
1068
- "print(\"Shape:\", monthly_openings.shape)"
1069
- ],
1070
- "metadata": {
1071
- "colab": {
1072
- "base_uri": "https://localhost:8080/",
1073
- "height": 241
1074
- },
1075
- "id": "3NtBDh8ODvLW",
1076
- "outputId": "f2fab0c5-a09f-4276-a1c7-f171375ac23b"
1077
- },
1078
- "execution_count": 14,
1079
- "outputs": [
1080
- {
1081
- "output_type": "display_data",
1082
- "data": {
1083
- "text/plain": [
1084
- " deadline_month Domain(s) postings avg_salary \\\n",
1085
- "0 2026-04 Data protection 1 79732.000000 \n",
1086
- "1 2026-04 Economics, Finance and Statistics 1 46284.000000 \n",
1087
- "2 2026-04 Human Resources 1 89886.000000 \n",
1088
- "3 2026-04 Justice and human rights 2 71108.500000 \n",
1089
- "4 2026-04 Transport 3 66120.333333 \n",
1090
- "\n",
1091
- " avg_demand_score avg_applications \n",
1092
- "0 8.0 164.0 \n",
1093
- "1 10.0 57.0 \n",
1094
- "2 7.0 43.0 \n",
1095
- "3 9.5 144.5 \n",
1096
- "4 9.0 189.0 "
1097
- ],
1098
- "text/html": [
1099
- "\n",
1100
- " <div id=\"df-8cae9ab8-ac0a-4995-90c7-0321e6dabc74\" class=\"colab-df-container\">\n",
1101
- " <div>\n",
1102
- "<style scoped>\n",
1103
- " .dataframe tbody tr th:only-of-type {\n",
1104
- " vertical-align: middle;\n",
1105
- " }\n",
1106
- "\n",
1107
- " .dataframe tbody tr th {\n",
1108
- " vertical-align: top;\n",
1109
- " }\n",
1110
- "\n",
1111
- " .dataframe thead th {\n",
1112
- " text-align: right;\n",
1113
- " }\n",
1114
- "</style>\n",
1115
- "<table border=\"1\" class=\"dataframe\">\n",
1116
- " <thead>\n",
1117
- " <tr style=\"text-align: right;\">\n",
1118
- " <th></th>\n",
1119
- " <th>deadline_month</th>\n",
1120
- " <th>Domain(s)</th>\n",
1121
- " <th>postings</th>\n",
1122
- " <th>avg_salary</th>\n",
1123
- " <th>avg_demand_score</th>\n",
1124
- " <th>avg_applications</th>\n",
1125
- " </tr>\n",
1126
- " </thead>\n",
1127
- " <tbody>\n",
1128
- " <tr>\n",
1129
- " <th>0</th>\n",
1130
- " <td>2026-04</td>\n",
1131
- " <td>Data protection</td>\n",
1132
- " <td>1</td>\n",
1133
- " <td>79732.000000</td>\n",
1134
- " <td>8.0</td>\n",
1135
- " <td>164.0</td>\n",
1136
- " </tr>\n",
1137
- " <tr>\n",
1138
- " <th>1</th>\n",
1139
- " <td>2026-04</td>\n",
1140
- " <td>Economics, Finance and Statistics</td>\n",
1141
- " <td>1</td>\n",
1142
- " <td>46284.000000</td>\n",
1143
- " <td>10.0</td>\n",
1144
- " <td>57.0</td>\n",
1145
- " </tr>\n",
1146
- " <tr>\n",
1147
- " <th>2</th>\n",
1148
- " <td>2026-04</td>\n",
1149
- " <td>Human Resources</td>\n",
1150
- " <td>1</td>\n",
1151
- " <td>89886.000000</td>\n",
1152
- " <td>7.0</td>\n",
1153
- " <td>43.0</td>\n",
1154
- " </tr>\n",
1155
- " <tr>\n",
1156
- " <th>3</th>\n",
1157
- " <td>2026-04</td>\n",
1158
- " <td>Justice and human rights</td>\n",
1159
- " <td>2</td>\n",
1160
- " <td>71108.500000</td>\n",
1161
- " <td>9.5</td>\n",
1162
- " <td>144.5</td>\n",
1163
- " </tr>\n",
1164
- " <tr>\n",
1165
- " <th>4</th>\n",
1166
- " <td>2026-04</td>\n",
1167
- " <td>Transport</td>\n",
1168
- " <td>3</td>\n",
1169
- " <td>66120.333333</td>\n",
1170
- " <td>9.0</td>\n",
1171
- " <td>189.0</td>\n",
1172
- " </tr>\n",
1173
- " </tbody>\n",
1174
- "</table>\n",
1175
- "</div>\n",
1176
- " <div class=\"colab-df-buttons\">\n",
1177
- "\n",
1178
- " <div class=\"colab-df-container\">\n",
1179
- " <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-8cae9ab8-ac0a-4995-90c7-0321e6dabc74')\"\n",
1180
- " title=\"Convert this dataframe to an interactive table.\"\n",
1181
- " style=\"display:none;\">\n",
1182
- "\n",
1183
- " <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
1184
- " <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
1185
- " </svg>\n",
1186
- " </button>\n",
1187
- "\n",
1188
- " <style>\n",
1189
- " .colab-df-container {\n",
1190
- " display:flex;\n",
1191
- " gap: 12px;\n",
1192
- " }\n",
1193
- "\n",
1194
- " .colab-df-convert {\n",
1195
- " background-color: #E8F0FE;\n",
1196
- " border: none;\n",
1197
- " border-radius: 50%;\n",
1198
- " cursor: pointer;\n",
1199
- " display: none;\n",
1200
- " fill: #1967D2;\n",
1201
- " height: 32px;\n",
1202
- " padding: 0 0 0 0;\n",
1203
- " width: 32px;\n",
1204
- " }\n",
1205
- "\n",
1206
- " .colab-df-convert:hover {\n",
1207
- " background-color: #E2EBFA;\n",
1208
- " box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
1209
- " fill: #174EA6;\n",
1210
- " }\n",
1211
- "\n",
1212
- " .colab-df-buttons div {\n",
1213
- " margin-bottom: 4px;\n",
1214
- " }\n",
1215
- "\n",
1216
- " [theme=dark] .colab-df-convert {\n",
1217
- " background-color: #3B4455;\n",
1218
- " fill: #D2E3FC;\n",
1219
- " }\n",
1220
- "\n",
1221
- " [theme=dark] .colab-df-convert:hover {\n",
1222
- " background-color: #434B5C;\n",
1223
- " box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
1224
- " filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
1225
- " fill: #FFFFFF;\n",
1226
- " }\n",
1227
- " </style>\n",
1228
- "\n",
1229
- " <script>\n",
1230
- " const buttonEl =\n",
1231
- " document.querySelector('#df-8cae9ab8-ac0a-4995-90c7-0321e6dabc74 button.colab-df-convert');\n",
1232
- " buttonEl.style.display =\n",
1233
- " google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
1234
- "\n",
1235
- " async function convertToInteractive(key) {\n",
1236
- " const element = document.querySelector('#df-8cae9ab8-ac0a-4995-90c7-0321e6dabc74');\n",
1237
- " const dataTable =\n",
1238
- " await google.colab.kernel.invokeFunction('convertToInteractive',\n",
1239
- " [key], {});\n",
1240
- " if (!dataTable) return;\n",
1241
- "\n",
1242
- " const docLinkHtml = 'Like what you see? Visit the ' +\n",
1243
- " '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
1244
- " + ' to learn more about interactive tables.';\n",
1245
- " element.innerHTML = '';\n",
1246
- " dataTable['output_type'] = 'display_data';\n",
1247
- " await google.colab.output.renderOutput(dataTable, element);\n",
1248
- " const docLink = document.createElement('div');\n",
1249
- " docLink.innerHTML = docLinkHtml;\n",
1250
- " element.appendChild(docLink);\n",
1251
- " }\n",
1252
- " </script>\n",
1253
- " </div>\n",
1254
- "\n",
1255
- "\n",
1256
- " </div>\n",
1257
- " </div>\n"
1258
- ],
1259
- "application/vnd.google.colaboratory.intrinsic+json": {
1260
- "type": "dataframe",
1261
- "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\": 1.2041594578792296,\n \"min\": 7.0,\n \"max\": 10.0,\n \"num_unique_values\": 5,\n \"samples\": [\n 10.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"avg_applications\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 65.56294685262401,\n \"min\": 43.0,\n \"max\": 189.0,\n \"num_unique_values\": 5,\n \"samples\": [\n 57.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}"
1262
- }
1263
- },
1264
- "metadata": {}
1265
- },
1266
- {
1267
- "output_type": "stream",
1268
- "name": "stdout",
1269
- "text": [
1270
- "Shape: (51, 6)\n"
1271
- ]
1272
- }
1273
- ]
1274
- },
1275
- {
1276
- "cell_type": "code",
1277
- "source": [
1278
- "monthly_openings.to_csv(\"jobs_monthly_openings.csv\", index=False)\n",
1279
- "print(\"Saved: jobs_monthly_openings.csv\")"
1280
- ],
1281
- "metadata": {
1282
- "colab": {
1283
- "base_uri": "https://localhost:8080/"
1284
- },
1285
- "id": "_WpGUgWSDxDr",
1286
- "outputId": "3214fc49-8b8f-4810-eed9-6befe196b7df"
1287
- },
1288
- "execution_count": 15,
1289
- "outputs": [
1290
- {
1291
- "output_type": "stream",
1292
- "name": "stdout",
1293
- "text": [
1294
- "Saved: jobs_monthly_openings.csv\n"
1295
- ]
1296
- }
1297
- ]
1298
- }
1299
- ]
1300
- }