Spaces:
Running
Running
christianmaxmike
commited on
Commit
·
80e4666
1
Parent(s):
6d372bb
update README.md - added ipynbs
Browse files
README.md
CHANGED
@@ -46,5 +46,24 @@ python main.py -o config_files/options/baseline.json -a config_files/algorithm/<
|
|
46 |
For reference of possible keys and values for each step, please see `config_files/algorithm/experiment_test.json`.
|
47 |
To run the whole pipeline please create a new `.json` file, specifying all steps you want to run and specify desired keys and values for each step.
|
48 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
49 |
## References
|
50 |
The framework used by `GEDI` is taken directly from the original paper by [...]. If you would like to discuss the paper, or corresponding research questions on benchmarking process mining tasks please email the authors.
|
|
|
46 |
For reference of possible keys and values for each step, please see `config_files/algorithm/experiment_test.json`.
|
47 |
To run the whole pipeline please create a new `.json` file, specifying all steps you want to run and specify desired keys and values for each step.
|
48 |
|
49 |
+
## Result plotting
|
50 |
+
In the following, we describe the ipynb in the folder `\notebooks` to reproduce the illustrations from our paper.
|
51 |
+
|
52 |
+
|
53 |
+
### gedi_fig6_benchmark_boxplots.ipynb
|
54 |
+
This notebook is used to visualize the metric distribution of real event logs compared to the generated ones. It shows 5 different metrics on 3 various process discovery techniques. We use 'fitness,', 'precision', 'fscore', 'size', 'cfc' (control-flow complexity) as metrics and as 'heuristic miner', 'ilp' (integer linear programming), and 'imf' (inductive miner infrequent) as miners. The notebook outputs the visualization shown in Fig.6 in the paper.
|
55 |
+
|
56 |
+
### gedi_figs4and5_representativeness.ipynb
|
57 |
+
In order to visualize the coverage of the feasible meta feature space of synthesied event logs compared to existing real-world benchmark datasets, in this notebook, we condcut a principal compoentn analysis on the meta features of both settings. The first two principal components are utilized to visualize the coverage which is further highlighted by computing a convex hull of the 2D-mapping. Additionally, we visualize the distribution of each meta feature we used in the paper as a boxplot. Additional features can be extracted with FEEED. Therefore, the notebook contains the figures 4 and 5 in the paper.
|
58 |
+
|
59 |
+
### gedi_figs7and8_benchmarking_statisticalTests.ipynb
|
60 |
+
|
61 |
+
This notebook is used to ansewr the question if there is a statistical signifacnt relation between feature similarity and performance metrics for the downstream tasks of process discovery. For that, we compute the pearson coefficient, as well as the kendall's tau coefficient. This elucidates the correlation between the meta features with metric scores being used for process discovery. Each coefficuent is calculated for three different settings: i) real-world datasets; ii) synthesized event log data with real-world targets; iii) synthesized event log data with grid objectives. The figures 7 and 8 shown in the paper refer to this notebook.
|
62 |
+
|
63 |
+
### gedi_figs9and10_consistency.ipynb
|
64 |
+
Likewise to the evaluation on the statistical tests in notebook `gedi_figs7and8_benchmarking_statisticalTests.ipynb`, this notebook is used to compute the differences between two correlation matrices $\Delta C = C_1 - C_2$. This logic is employed to evaluate and visualize the distance of two correlation matrices. Furthermore, we show how significant scores are retained from the correlations being evaluated on real-world datasets coompared to synthesized event log datasets with real-world targets. In Fig. 9 and 10 in the paper, the results of the notebook are shown.
|
65 |
+
|
66 |
+
|
67 |
+
|
68 |
## References
|
69 |
The framework used by `GEDI` is taken directly from the original paper by [...]. If you would like to discuss the paper, or corresponding research questions on benchmarking process mining tasks please email the authors.
|
notebooks/gedi_fig6_benchmark_boxplots.ipynb
CHANGED
The diff for this file is too large to render.
See raw diff
|
|
notebooks/gedi_figs4and5_representativeness.ipynb
CHANGED
@@ -1,13 +1,19 @@
|
|
1 |
{
|
2 |
"cells": [
|
3 |
{
|
4 |
-
"cell_type": "
|
5 |
-
"
|
6 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7 |
"metadata": {},
|
8 |
-
"outputs": [],
|
9 |
"source": [
|
10 |
-
"
|
11 |
]
|
12 |
},
|
13 |
{
|
@@ -25,6 +31,8 @@
|
|
25 |
}
|
26 |
],
|
27 |
"source": [
|
|
|
|
|
28 |
"df = pd.read_csv(\"../data/BaselineED_feat.csv\")\n",
|
29 |
"gen =pd.read_csv(\"../data/GenED_feat.csv\")\n",
|
30 |
"\n",
|
@@ -195,6 +203,14 @@
|
|
195 |
"both_df.head()"
|
196 |
]
|
197 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
198 |
{
|
199 |
"cell_type": "code",
|
200 |
"execution_count": 4,
|
@@ -221,6 +237,14 @@
|
|
221 |
"print(\"After:\", len(imp_df.loc[:, imp_df.isna().any()].columns))"
|
222 |
]
|
223 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
224 |
{
|
225 |
"cell_type": "code",
|
226 |
"execution_count": 5,
|
@@ -276,6 +300,14 @@
|
|
276 |
"_ = plt.tight_layout()"
|
277 |
]
|
278 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
279 |
{
|
280 |
"cell_type": "code",
|
281 |
"execution_count": 6,
|
@@ -432,6 +464,14 @@
|
|
432 |
"plt.savefig(output_path, dpi=300, transparent=True)"
|
433 |
]
|
434 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
435 |
{
|
436 |
"cell_type": "code",
|
437 |
"execution_count": 8,
|
@@ -450,6 +490,14 @@
|
|
450 |
"from gedi.plotter import FeaturesPlotter"
|
451 |
]
|
452 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
453 |
{
|
454 |
"cell_type": "code",
|
455 |
"execution_count": 9,
|
@@ -491,21 +539,13 @@
|
|
491 |
"generated = gen.drop(['source'], axis=1)\n",
|
492 |
"FeaturesPlotter( generated, model_params)"
|
493 |
]
|
494 |
-
},
|
495 |
-
{
|
496 |
-
"cell_type": "code",
|
497 |
-
"execution_count": null,
|
498 |
-
"id": "53bdbc03",
|
499 |
-
"metadata": {},
|
500 |
-
"outputs": [],
|
501 |
-
"source": []
|
502 |
}
|
503 |
],
|
504 |
"metadata": {
|
505 |
"kernelspec": {
|
506 |
-
"display_name": "
|
507 |
"language": "python",
|
508 |
-
"name": "
|
509 |
},
|
510 |
"language_info": {
|
511 |
"codemirror_mode": {
|
@@ -517,7 +557,7 @@
|
|
517 |
"name": "python",
|
518 |
"nbconvert_exporter": "python",
|
519 |
"pygments_lexer": "ipython3",
|
520 |
-
"version": "3.9.
|
521 |
}
|
522 |
},
|
523 |
"nbformat": 4,
|
|
|
1 |
{
|
2 |
"cells": [
|
3 |
{
|
4 |
+
"cell_type": "markdown",
|
5 |
+
"id": "b2a7eff0-f134-4bfd-9729-604e312de968",
|
6 |
+
"metadata": {},
|
7 |
+
"source": [
|
8 |
+
"# Plot - Representativeness"
|
9 |
+
]
|
10 |
+
},
|
11 |
+
{
|
12 |
+
"cell_type": "markdown",
|
13 |
+
"id": "73a8e182-f75b-4254-9bfe-766d7a758448",
|
14 |
"metadata": {},
|
|
|
15 |
"source": [
|
16 |
+
"#### load data"
|
17 |
]
|
18 |
},
|
19 |
{
|
|
|
31 |
}
|
32 |
],
|
33 |
"source": [
|
34 |
+
"import pandas as pd\n",
|
35 |
+
"\n",
|
36 |
"df = pd.read_csv(\"../data/BaselineED_feat.csv\")\n",
|
37 |
"gen =pd.read_csv(\"../data/GenED_feat.csv\")\n",
|
38 |
"\n",
|
|
|
203 |
"both_df.head()"
|
204 |
]
|
205 |
},
|
206 |
+
{
|
207 |
+
"cell_type": "markdown",
|
208 |
+
"id": "789f649a-e2b7-415d-8b59-0253e2c968ed",
|
209 |
+
"metadata": {},
|
210 |
+
"source": [
|
211 |
+
"#### Data Preprocessing"
|
212 |
+
]
|
213 |
+
},
|
214 |
{
|
215 |
"cell_type": "code",
|
216 |
"execution_count": 4,
|
|
|
237 |
"print(\"After:\", len(imp_df.loc[:, imp_df.isna().any()].columns))"
|
238 |
]
|
239 |
},
|
240 |
+
{
|
241 |
+
"cell_type": "markdown",
|
242 |
+
"id": "99af2310-cfed-4668-83f2-8997a8dd4e2a",
|
243 |
+
"metadata": {},
|
244 |
+
"source": [
|
245 |
+
"#### Plot - Principal Component Analysis"
|
246 |
+
]
|
247 |
+
},
|
248 |
{
|
249 |
"cell_type": "code",
|
250 |
"execution_count": 5,
|
|
|
300 |
"_ = plt.tight_layout()"
|
301 |
]
|
302 |
},
|
303 |
+
{
|
304 |
+
"cell_type": "markdown",
|
305 |
+
"id": "f709c070-5c4b-4430-9a78-4e9c463708e4",
|
306 |
+
"metadata": {},
|
307 |
+
"source": [
|
308 |
+
"#### Plot - Convex hull of $1^{st}$ and $2^{nd}$ principal component"
|
309 |
+
]
|
310 |
+
},
|
311 |
{
|
312 |
"cell_type": "code",
|
313 |
"execution_count": 6,
|
|
|
464 |
"plt.savefig(output_path, dpi=300, transparent=True)"
|
465 |
]
|
466 |
},
|
467 |
+
{
|
468 |
+
"cell_type": "markdown",
|
469 |
+
"id": "328721e8-68a9-4df5-96b6-f92f6b4e1ec1",
|
470 |
+
"metadata": {},
|
471 |
+
"source": [
|
472 |
+
"#### Reload module FeaturePlotter"
|
473 |
+
]
|
474 |
+
},
|
475 |
{
|
476 |
"cell_type": "code",
|
477 |
"execution_count": 8,
|
|
|
490 |
"from gedi.plotter import FeaturesPlotter"
|
491 |
]
|
492 |
},
|
493 |
+
{
|
494 |
+
"cell_type": "markdown",
|
495 |
+
"id": "de942786-25e1-45cd-aa4e-553809a88692",
|
496 |
+
"metadata": {},
|
497 |
+
"source": [
|
498 |
+
"#### Plot - feature distribution of real vs. generated data"
|
499 |
+
]
|
500 |
+
},
|
501 |
{
|
502 |
"cell_type": "code",
|
503 |
"execution_count": 9,
|
|
|
539 |
"generated = gen.drop(['source'], axis=1)\n",
|
540 |
"FeaturesPlotter( generated, model_params)"
|
541 |
]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
542 |
}
|
543 |
],
|
544 |
"metadata": {
|
545 |
"kernelspec": {
|
546 |
+
"display_name": "Python 3 (ipykernel)",
|
547 |
"language": "python",
|
548 |
+
"name": "python3"
|
549 |
},
|
550 |
"language_info": {
|
551 |
"codemirror_mode": {
|
|
|
557 |
"name": "python",
|
558 |
"nbconvert_exporter": "python",
|
559 |
"pygments_lexer": "ipython3",
|
560 |
+
"version": "3.9.19"
|
561 |
}
|
562 |
},
|
563 |
"nbformat": 4,
|
notebooks/gedi_figs7and8_benchmarking_statisticalTests.ipynb
CHANGED
@@ -1,5 +1,21 @@
|
|
1 |
{
|
2 |
"cells": [
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
{
|
4 |
"cell_type": "code",
|
5 |
"execution_count": 8,
|
@@ -64,6 +80,14 @@
|
|
64 |
" return data"
|
65 |
]
|
66 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
67 |
{
|
68 |
"cell_type": "code",
|
69 |
"execution_count": 11,
|
@@ -110,7 +134,7 @@
|
|
110 |
"id": "07370d54",
|
111 |
"metadata": {},
|
112 |
"source": [
|
113 |
-
"
|
114 |
]
|
115 |
},
|
116 |
{
|
@@ -192,6 +216,14 @@
|
|
192 |
"#df_tmp = statistical_test(DATA_SOURCE+\"_feat\", \"Gen\"+DATA_SOURCE+\"_bench\", TEST, IMPUTE)"
|
193 |
]
|
194 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
195 |
{
|
196 |
"cell_type": "code",
|
197 |
"execution_count": 62,
|
@@ -466,37 +498,13 @@
|
|
466 |
" plot_stat_test(masked_results, data_source+\"_feat\", data_source+\"_bench\", test, IMPUTE, cbar=cbar, ylabels=ylabels)\n",
|
467 |
" plt.clf()"
|
468 |
]
|
469 |
-
},
|
470 |
-
{
|
471 |
-
"cell_type": "code",
|
472 |
-
"execution_count": null,
|
473 |
-
"id": "52c58c64",
|
474 |
-
"metadata": {},
|
475 |
-
"outputs": [],
|
476 |
-
"source": []
|
477 |
-
},
|
478 |
-
{
|
479 |
-
"cell_type": "code",
|
480 |
-
"execution_count": null,
|
481 |
-
"id": "3717a694",
|
482 |
-
"metadata": {},
|
483 |
-
"outputs": [],
|
484 |
-
"source": []
|
485 |
-
},
|
486 |
-
{
|
487 |
-
"cell_type": "code",
|
488 |
-
"execution_count": null,
|
489 |
-
"id": "c6afe4d9",
|
490 |
-
"metadata": {},
|
491 |
-
"outputs": [],
|
492 |
-
"source": []
|
493 |
}
|
494 |
],
|
495 |
"metadata": {
|
496 |
"kernelspec": {
|
497 |
-
"display_name": "
|
498 |
"language": "python",
|
499 |
-
"name": "
|
500 |
},
|
501 |
"language_info": {
|
502 |
"codemirror_mode": {
|
@@ -508,7 +516,7 @@
|
|
508 |
"name": "python",
|
509 |
"nbconvert_exporter": "python",
|
510 |
"pygments_lexer": "ipython3",
|
511 |
-
"version": "3.9.
|
512 |
}
|
513 |
},
|
514 |
"nbformat": 4,
|
|
|
1 |
{
|
2 |
"cells": [
|
3 |
+
{
|
4 |
+
"cell_type": "markdown",
|
5 |
+
"id": "32241302-7f73-4756-b8a5-27f752de0dea",
|
6 |
+
"metadata": {},
|
7 |
+
"source": [
|
8 |
+
"# Plot - Statistical Tests"
|
9 |
+
]
|
10 |
+
},
|
11 |
+
{
|
12 |
+
"cell_type": "markdown",
|
13 |
+
"id": "51cee5d6-2d4c-4bdd-bdbf-4b3a3b76e6d6",
|
14 |
+
"metadata": {},
|
15 |
+
"source": [
|
16 |
+
"#### load data"
|
17 |
+
]
|
18 |
+
},
|
19 |
{
|
20 |
"cell_type": "code",
|
21 |
"execution_count": 8,
|
|
|
80 |
" return data"
|
81 |
]
|
82 |
},
|
83 |
+
{
|
84 |
+
"cell_type": "markdown",
|
85 |
+
"id": "f0d6e731-5f46-4747-82f8-a2f308d150ee",
|
86 |
+
"metadata": {},
|
87 |
+
"source": [
|
88 |
+
"#### Data Preprocessing"
|
89 |
+
]
|
90 |
+
},
|
91 |
{
|
92 |
"cell_type": "code",
|
93 |
"execution_count": 11,
|
|
|
134 |
"id": "07370d54",
|
135 |
"metadata": {},
|
136 |
"source": [
|
137 |
+
"#### Statistical test: Is there a statistical significant relation between feature similarity and performance metrics?"
|
138 |
]
|
139 |
},
|
140 |
{
|
|
|
216 |
"#df_tmp = statistical_test(DATA_SOURCE+\"_feat\", \"Gen\"+DATA_SOURCE+\"_bench\", TEST, IMPUTE)"
|
217 |
]
|
218 |
},
|
219 |
+
{
|
220 |
+
"cell_type": "markdown",
|
221 |
+
"id": "5e6ecc81-c14d-4859-ab04-49bbf458f7eb",
|
222 |
+
"metadata": {},
|
223 |
+
"source": [
|
224 |
+
"#### Plot - statistical Test of features vs metrics"
|
225 |
+
]
|
226 |
+
},
|
227 |
{
|
228 |
"cell_type": "code",
|
229 |
"execution_count": 62,
|
|
|
498 |
" plot_stat_test(masked_results, data_source+\"_feat\", data_source+\"_bench\", test, IMPUTE, cbar=cbar, ylabels=ylabels)\n",
|
499 |
" plt.clf()"
|
500 |
]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
501 |
}
|
502 |
],
|
503 |
"metadata": {
|
504 |
"kernelspec": {
|
505 |
+
"display_name": "Python 3 (ipykernel)",
|
506 |
"language": "python",
|
507 |
+
"name": "python3"
|
508 |
},
|
509 |
"language_info": {
|
510 |
"codemirror_mode": {
|
|
|
516 |
"name": "python",
|
517 |
"nbconvert_exporter": "python",
|
518 |
"pygments_lexer": "ipython3",
|
519 |
+
"version": "3.9.19"
|
520 |
}
|
521 |
},
|
522 |
"nbformat": 4,
|
notebooks/gedi_figs9and10_consistency.ipynb
CHANGED
@@ -1,5 +1,21 @@
|
|
1 |
{
|
2 |
"cells": [
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
{
|
4 |
"cell_type": "code",
|
5 |
"execution_count": 1,
|
@@ -61,6 +77,14 @@
|
|
61 |
" return data"
|
62 |
]
|
63 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
64 |
{
|
65 |
"cell_type": "code",
|
66 |
"execution_count": 4,
|
@@ -107,7 +131,7 @@
|
|
107 |
"id": "07370d54",
|
108 |
"metadata": {},
|
109 |
"source": [
|
110 |
-
"
|
111 |
]
|
112 |
},
|
113 |
{
|
@@ -319,7 +343,7 @@
|
|
319 |
"id": "d0a9ddb2",
|
320 |
"metadata": {},
|
321 |
"source": [
|
322 |
-
"
|
323 |
]
|
324 |
},
|
325 |
{
|
@@ -405,7 +429,7 @@
|
|
405 |
"id": "962658c0",
|
406 |
"metadata": {},
|
407 |
"source": [
|
408 |
-
"
|
409 |
]
|
410 |
},
|
411 |
{
|
@@ -471,21 +495,13 @@
|
|
471 |
"remark6_masked = statistical_test(DATA_SOURCE+\"_feat\", \"Gen\"+DATA_SOURCE+\"_bench\", test, IMPUTE, p_thresh=0.05)\n",
|
472 |
"plot_stat_test(remark6_masked, DATA_SOURCE+\"_feat\", \"Gen\"+DATA_SOURCE+\"_bench\", test, IMPUTE, mask=True, cbar=True, ylabels=False, name_suffix=\"_filtered\") "
|
473 |
]
|
474 |
-
},
|
475 |
-
{
|
476 |
-
"cell_type": "code",
|
477 |
-
"execution_count": null,
|
478 |
-
"id": "a2080811",
|
479 |
-
"metadata": {},
|
480 |
-
"outputs": [],
|
481 |
-
"source": []
|
482 |
}
|
483 |
],
|
484 |
"metadata": {
|
485 |
"kernelspec": {
|
486 |
-
"display_name": "
|
487 |
"language": "python",
|
488 |
-
"name": "
|
489 |
},
|
490 |
"language_info": {
|
491 |
"codemirror_mode": {
|
@@ -497,7 +513,7 @@
|
|
497 |
"name": "python",
|
498 |
"nbconvert_exporter": "python",
|
499 |
"pygments_lexer": "ipython3",
|
500 |
-
"version": "3.9.
|
501 |
}
|
502 |
},
|
503 |
"nbformat": 4,
|
|
|
1 |
{
|
2 |
"cells": [
|
3 |
+
{
|
4 |
+
"cell_type": "markdown",
|
5 |
+
"id": "9c88600b-ccf7-4ed8-b2cc-094a7abb3e47",
|
6 |
+
"metadata": {},
|
7 |
+
"source": [
|
8 |
+
"# Plot - Consistency"
|
9 |
+
]
|
10 |
+
},
|
11 |
+
{
|
12 |
+
"cell_type": "markdown",
|
13 |
+
"id": "40e77246-8ff1-4685-995f-b4f5aa34664e",
|
14 |
+
"metadata": {},
|
15 |
+
"source": [
|
16 |
+
"#### Load Data"
|
17 |
+
]
|
18 |
+
},
|
19 |
{
|
20 |
"cell_type": "code",
|
21 |
"execution_count": 1,
|
|
|
77 |
" return data"
|
78 |
]
|
79 |
},
|
80 |
+
{
|
81 |
+
"cell_type": "markdown",
|
82 |
+
"id": "e7639ac5-865d-4a3e-ae75-627ec2fd31de",
|
83 |
+
"metadata": {},
|
84 |
+
"source": [
|
85 |
+
"#### Data Preprocessing"
|
86 |
+
]
|
87 |
+
},
|
88 |
{
|
89 |
"cell_type": "code",
|
90 |
"execution_count": 4,
|
|
|
131 |
"id": "07370d54",
|
132 |
"metadata": {},
|
133 |
"source": [
|
134 |
+
"#### Statistical test: Is there a statistical significant relation between feature similarity and performance metrics?"
|
135 |
]
|
136 |
},
|
137 |
{
|
|
|
343 |
"id": "d0a9ddb2",
|
344 |
"metadata": {},
|
345 |
"source": [
|
346 |
+
"#### Plot - Correlation differences (Figure 9)"
|
347 |
]
|
348 |
},
|
349 |
{
|
|
|
429 |
"id": "962658c0",
|
430 |
"metadata": {},
|
431 |
"source": [
|
432 |
+
"#### Plot - Limitations (Figure 10)"
|
433 |
]
|
434 |
},
|
435 |
{
|
|
|
495 |
"remark6_masked = statistical_test(DATA_SOURCE+\"_feat\", \"Gen\"+DATA_SOURCE+\"_bench\", test, IMPUTE, p_thresh=0.05)\n",
|
496 |
"plot_stat_test(remark6_masked, DATA_SOURCE+\"_feat\", \"Gen\"+DATA_SOURCE+\"_bench\", test, IMPUTE, mask=True, cbar=True, ylabels=False, name_suffix=\"_filtered\") "
|
497 |
]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
498 |
}
|
499 |
],
|
500 |
"metadata": {
|
501 |
"kernelspec": {
|
502 |
+
"display_name": "Python 3 (ipykernel)",
|
503 |
"language": "python",
|
504 |
+
"name": "python3"
|
505 |
},
|
506 |
"language_info": {
|
507 |
"codemirror_mode": {
|
|
|
513 |
"name": "python",
|
514 |
"nbconvert_exporter": "python",
|
515 |
"pygments_lexer": "ipython3",
|
516 |
+
"version": "3.9.19"
|
517 |
}
|
518 |
},
|
519 |
"nbformat": 4,
|