Repository files navigation

Predicting the Understandability of Computational Notebooks through Code Metrics Analysis

This repository contains the source code for a code comprehension predictor service for computational notesbooks.

Usage

To run the code, install the requirements by executing the following command:

pip install -r requirements.txt

After installing the requirements, you can run the CLI or API and start using the service.

Data Requirements

To use the functionalities provided in this repository, you will need certain CSV files containing notebook code and markdown cell data. These files can be found here (DistilKaggle: a distilled dataset of Kaggle Jupyter notebooks) and here (A Predictive Model to Identify Effective Metrics for the Comprehension of Computational Notebooks).

Use below download links to get started

Folder Structure

  • src: Contains the main code that provides code comprehension prediction and metrics evaluation.
    • src/core: includes the main python files of the project. These classes and functions do the actual work behind the interfaces.
    • src/utils: helper files used to manage the project like config.py where we manage all the configurations.
    • src/notebooks: base notebook files that support the paper's results.
  • dataframes: Contains basic data of selected jupyter notebooks for training models. For example, code.csv that contains the source codes used in each notebook, and markdown.csv that has the markdown cells data.
  • metrics: Contains CSV files with metrics of selected Jupyter notebooks for training the models. For instance, code_cell_metrics.csv contains metrics of each code cell in the notebook, markdown_cell_metrics.csv contains markdown cell metrics of each notebook, and notebook_metrics.csv holds the aggregated metrics of all cells in the notebook.
  • notebooks: Stores the notebooks provided to be predicted by the code.
  • models: Stores the trained models.
  • logs: Keeps the log files.
  • cache: Is used for cached data.

CLI

First, cd to the src directory and then execute cli.py file and start your journey.

cd src
export PYTHONPATH="$(pwd)"
python cli.py --help

Use --help for each command to get further instructions. Some use cases are provided below.

python cli.py
python cli.py extract-dataframe-metrics --help
python cli.py extract-dataframe-metrics --chunk-size 100 --limit-chunk-count 5
python cli.py extract-dataframe-metrics ../dataframes/markdown.csv ../metrics/markdown_cell_metrics.csv --chunk-size 100 --limit-chunk-count 5 --file-type markdown
python cli.py aggregate-metrics --help
python cli.py aggregate-metrics ../metrics/code_cell_metrics.csv ../metrics/markdown_cell_metrics.csv ../metrics/notebook_metrics_lite.csv
python cli.py extract-notebook-metrics --help
python cli.py extract-notebook-metrics ../notebooks/file.ipynb ../notebooks/results.json
python cli.py extract-notebook-metrics ../notebooks/file.ipynb ../notebooks/results.csv
python cli.py predict ../notebooks/file.ipynb cat_boost ../models/catBoostClassifier.withOutPT.sf50.sr20.combined_score.v2.model python cli.py predict ../notebooks/file.ipynb cat_boost ../models/catBoostClassifier.withPT.sf50.sr20.combined_score.v2.model --pt-score 10

FastAPI

First, cd to the src directory and then execute main.py file and start your journey.

cd src
export PYTHONPATH="$(pwd)"
python main.py

after this you can see the documentation of the apis at http://localhost:8000/docs.

Docker

Use below command to build and run the image using docker compose

docker compose up --build

Citation

This work is published in the Empirical Software Engineering journal, under the title of "Predicting the understandability of computational notebooks through code metrics analysis".

Access the paper from: https://rdcu.be/ehKdi.

@article{ghahfarokhi2025predicting,title={Predictingtheunderstandabilityofcomputationalnotebooksthroughcodemetricsanalysis},author={Ghahfarokhi, MojtabaMostafaviandAsadi, AlirezaandAsgari, ArashandMohammadi, BardiaandHeydarnoori, Abbas},journal={EmpiricalSoftwareEngineering},volume={30},number={3},pages={98},year={2025},publisher={Springer}}

About

Predicting the Understandability of Computational Notebooks through Code Metrics Analysis (EMSE'30:3, 2025)

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Predicting the Understandability of Computational Notebooks through Code Metrics Analysis

This repository contains the source code for a code comprehension predictor service for computational notesbooks.

Usage

To run the code, install the requirements by executing the following command:

pip install -r requirements.txt

After installing the requirements, you can run the CLI or API and start using the service.

Data Requirements

To use the functionalities provided in this repository, you will need certain CSV files containing notebook code and markdown cell data. These files can be found here (DistilKaggle: a distilled dataset of Kaggle Jupyter notebooks) and here (A Predictive Model to Identify Effective Metrics for the Comprehension of Computational Notebooks).

Use below download links to get started

Folder Structure

  • src: Contains the main code that provides code comprehension prediction and metrics evaluation.
    • src/core: includes the main python files of the project. These classes and functions do the actual work behind the interfaces.
    • src/utils: helper files used to manage the project like config.py where we manage all the configurations.
    • src/notebooks: base notebook files that support the paper's results.
  • dataframes: Contains basic data of selected jupyter notebooks for training models. For example, code.csv that contains the source codes used in each notebook, and markdown.csv that has the markdown cells data.
  • metrics: Contains CSV files with metrics of selected Jupyter notebooks for training the models. For instance, code_cell_metrics.csv contains metrics of each code cell in the notebook, markdown_cell_metrics.csv contains markdown cell metrics of each notebook, and notebook_metrics.csv holds the aggregated metrics of all cells in the notebook.
  • notebooks: Stores the notebooks provided to be predicted by the code.
  • models: Stores the trained models.
  • logs: Keeps the log files.
  • cache: Is used for cached data.

CLI

First, cd to the src directory and then execute cli.py file and start your journey.

cd src
export PYTHONPATH="$(pwd)"
python cli.py --help

Use --help for each command to get further instructions. Some use cases are provided below.

python cli.py
python cli.py extract-dataframe-metrics --help
python cli.py extract-dataframe-metrics --chunk-size 100 --limit-chunk-count 5
python cli.py extract-dataframe-metrics ../dataframes/markdown.csv ../metrics/markdown_cell_metrics.csv --chunk-size 100 --limit-chunk-count 5 --file-type markdown
python cli.py aggregate-metrics --help
python cli.py aggregate-metrics ../metrics/code_cell_metrics.csv ../metrics/markdown_cell_metrics.csv ../metrics/notebook_metrics_lite.csv
python cli.py extract-notebook-metrics --help
python cli.py extract-notebook-metrics ../notebooks/file.ipynb ../notebooks/results.json
python cli.py extract-notebook-metrics ../notebooks/file.ipynb ../notebooks/results.csv
python cli.py predict ../notebooks/file.ipynb cat_boost ../models/catBoostClassifier.withOutPT.sf50.sr20.combined_score.v2.model python cli.py predict ../notebooks/file.ipynb cat_boost ../models/catBoostClassifier.withPT.sf50.sr20.combined_score.v2.model --pt-score 10

FastAPI

First, cd to the src directory and then execute main.py file and start your journey.

cd src
export PYTHONPATH="$(pwd)"
python main.py

after this you can see the documentation of the apis at http://localhost:8000/docs.

Docker

Use below command to build and run the image using docker compose

docker compose up --build

Citation

This work is published in the Empirical Software Engineering journal, under the title of "Predicting the understandability of computational notebooks through code metrics analysis".

Access the paper from: https://rdcu.be/ehKdi.

@article{ghahfarokhi2025predicting,title={Predictingtheunderstandabilityofcomputationalnotebooksthroughcodemetricsanalysis},author={Ghahfarokhi, MojtabaMostafaviandAsadi, AlirezaandAsgari, ArashandMohammadi, BardiaandHeydarnoori, Abbas},journal={EmpiricalSoftwareEngineering},volume={30},number={3},pages={98},year={2025},publisher={Springer}}

About

Predicting the Understandability of Computational Notebooks through Code Metrics Analysis (EMSE'30:3, 2025)

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Predicting the Understandability of Computational Notebooks through Code Metrics Analysis

This repository contains the source code for a code comprehension predictor service for computational notesbooks.

Usage

To run the code, install the requirements by executing the following command:

pip install -r requirements.txt

After installing the requirements, you can run the CLI or API and start using the service.

Data Requirements

To use the functionalities provided in this repository, you will need certain CSV files containing notebook code and markdown cell data. These files can be found here (DistilKaggle: a distilled dataset of Kaggle Jupyter notebooks) and here (A Predictive Model to Identify Effective Metrics for the Comprehension of Computational Notebooks).

Use below download links to get started

Folder Structure

  • src: Contains the main code that provides code comprehension prediction and metrics evaluation.
    • src/core: includes the main python files of the project. These classes and functions do the actual work behind the interfaces.
    • src/utils: helper files used to manage the project like config.py where we manage all the configurations.
    • src/notebooks: base notebook files that support the paper's results.
  • dataframes: Contains basic data of selected jupyter notebooks for training models. For example, code.csv that contains the source codes used in each notebook, and markdown.csv that has the markdown cells data.
  • metrics: Contains CSV files with metrics of selected Jupyter notebooks for training the models. For instance, code_cell_metrics.csv contains metrics of each code cell in the notebook, markdown_cell_metrics.csv contains markdown cell metrics of each notebook, and notebook_metrics.csv holds the aggregated metrics of all cells in the notebook.
  • notebooks: Stores the notebooks provided to be predicted by the code.
  • models: Stores the trained models.
  • logs: Keeps the log files.
  • cache: Is used for cached data.

CLI

First, cd to the src directory and then execute cli.py file and start your journey.

cd src
export PYTHONPATH="$(pwd)"
python cli.py --help

Use --help for each command to get further instructions. Some use cases are provided below.

python cli.py
python cli.py extract-dataframe-metrics --help
python cli.py extract-dataframe-metrics --chunk-size 100 --limit-chunk-count 5
python cli.py extract-dataframe-metrics ../dataframes/markdown.csv ../metrics/markdown_cell_metrics.csv --chunk-size 100 --limit-chunk-count 5 --file-type markdown
python cli.py aggregate-metrics --help
python cli.py aggregate-metrics ../metrics/code_cell_metrics.csv ../metrics/markdown_cell_metrics.csv ../metrics/notebook_metrics_lite.csv
python cli.py extract-notebook-metrics --help
python cli.py extract-notebook-metrics ../notebooks/file.ipynb ../notebooks/results.json
python cli.py extract-notebook-metrics ../notebooks/file.ipynb ../notebooks/results.csv
python cli.py predict ../notebooks/file.ipynb cat_boost ../models/catBoostClassifier.withOutPT.sf50.sr20.combined_score.v2.model python cli.py predict ../notebooks/file.ipynb cat_boost ../models/catBoostClassifier.withPT.sf50.sr20.combined_score.v2.model --pt-score 10

FastAPI

First, cd to the src directory and then execute main.py file and start your journey.

cd src
export PYTHONPATH="$(pwd)"
python main.py

after this you can see the documentation of the apis at http://localhost:8000/docs.

Docker

Use below command to build and run the image using docker compose

docker compose up --build

Citation

This work is published in the Empirical Software Engineering journal, under the title of "Predicting the understandability of computational notebooks through code metrics analysis".

Access the paper from: https://rdcu.be/ehKdi.

@article{ghahfarokhi2025predicting,title={Predictingtheunderstandabilityofcomputationalnotebooksthroughcodemetricsanalysis},author={Ghahfarokhi, MojtabaMostafaviandAsadi, AlirezaandAsgari, ArashandMohammadi, BardiaandHeydarnoori, Abbas},journal={EmpiricalSoftwareEngineering},volume={30},number={3},pages={98},year={2025},publisher={Springer}}

About

Predicting the Understandability of Computational Notebooks through Code Metrics Analysis (EMSE'30:3, 2025)

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Predicting the Understandability of Computational Notebooks through Code Metrics Analysis

This repository contains the source code for a code comprehension predictor service for computational notesbooks.

Usage

To run the code, install the requirements by executing the following command:

pip install -r requirements.txt

After installing the requirements, you can run the CLI or API and start using the service.

Data Requirements

To use the functionalities provided in this repository, you will need certain CSV files containing notebook code and markdown cell data. These files can be found here (DistilKaggle: a distilled dataset of Kaggle Jupyter notebooks) and here (A Predictive Model to Identify Effective Metrics for the Comprehension of Computational Notebooks).

Use below download links to get started

Folder Structure

  • src: Contains the main code that provides code comprehension prediction and metrics evaluation.
    • src/core: includes the main python files of the project. These classes and functions do the actual work behind the interfaces.
    • src/utils: helper files used to manage the project like config.py where we manage all the configurations.
    • src/notebooks: base notebook files that support the paper's results.
  • dataframes: Contains basic data of selected jupyter notebooks for training models. For example, code.csv that contains the source codes used in each notebook, and markdown.csv that has the markdown cells data.
  • metrics: Contains CSV files with metrics of selected Jupyter notebooks for training the models. For instance, code_cell_metrics.csv contains metrics of each code cell in the notebook, markdown_cell_metrics.csv contains markdown cell metrics of each notebook, and notebook_metrics.csv holds the aggregated metrics of all cells in the notebook.
  • notebooks: Stores the notebooks provided to be predicted by the code.
  • models: Stores the trained models.
  • logs: Keeps the log files.
  • cache: Is used for cached data.

CLI

First, cd to the src directory and then execute cli.py file and start your journey.

cd src
export PYTHONPATH="$(pwd)"
python cli.py --help

Use --help for each command to get further instructions. Some use cases are provided below.

python cli.py
python cli.py extract-dataframe-metrics --help
python cli.py extract-dataframe-metrics --chunk-size 100 --limit-chunk-count 5
python cli.py extract-dataframe-metrics ../dataframes/markdown.csv ../metrics/markdown_cell_metrics.csv --chunk-size 100 --limit-chunk-count 5 --file-type markdown
python cli.py aggregate-metrics --help
python cli.py aggregate-metrics ../metrics/code_cell_metrics.csv ../metrics/markdown_cell_metrics.csv ../metrics/notebook_metrics_lite.csv
python cli.py extract-notebook-metrics --help
python cli.py extract-notebook-metrics ../notebooks/file.ipynb ../notebooks/results.json
python cli.py extract-notebook-metrics ../notebooks/file.ipynb ../notebooks/results.csv
python cli.py predict ../notebooks/file.ipynb cat_boost ../models/catBoostClassifier.withOutPT.sf50.sr20.combined_score.v2.model python cli.py predict ../notebooks/file.ipynb cat_boost ../models/catBoostClassifier.withPT.sf50.sr20.combined_score.v2.model --pt-score 10

FastAPI

First, cd to the src directory and then execute main.py file and start your journey.

cd src
export PYTHONPATH="$(pwd)"
python main.py

after this you can see the documentation of the apis at http://localhost:8000/docs.

Docker

Use below command to build and run the image using docker compose

docker compose up --build

Citation

This work is published in the Empirical Software Engineering journal, under the title of "Predicting the understandability of computational notebooks through code metrics analysis".

Access the paper from: https://rdcu.be/ehKdi.

@article{ghahfarokhi2025predicting,title={Predictingtheunderstandabilityofcomputationalnotebooksthroughcodemetricsanalysis},author={Ghahfarokhi, MojtabaMostafaviandAsadi, AlirezaandAsgari, ArashandMohammadi, BardiaandHeydarnoori, Abbas},journal={EmpiricalSoftwareEngineering},volume={30},number={3},pages={98},year={2025},publisher={Springer}}

About

Predicting the Understandability of Computational Notebooks through Code Metrics Analysis (EMSE'30:3, 2025)

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Predicting the Understandability of Computational Notebooks through Code Metrics Analysis

This repository contains the source code for a code comprehension predictor service for computational notesbooks.

Usage

To run the code, install the requirements by executing the following command:

pip install -r requirements.txt

After installing the requirements, you can run the CLI or API and start using the service.

Data Requirements

To use the functionalities provided in this repository, you will need certain CSV files containing notebook code and markdown cell data. These files can be found here (DistilKaggle: a distilled dataset of Kaggle Jupyter notebooks) and here (A Predictive Model to Identify Effective Metrics for the Comprehension of Computational Notebooks).

Use below download links to get started

Folder Structure

  • src: Contains the main code that provides code comprehension prediction and metrics evaluation.
    • src/core: includes the main python files of the project. These classes and functions do the actual work behind the interfaces.
    • src/utils: helper files used to manage the project like config.py where we manage all the configurations.
    • src/notebooks: base notebook files that support the paper's results.
  • dataframes: Contains basic data of selected jupyter notebooks for training models. For example, code.csv that contains the source codes used in each notebook, and markdown.csv that has the markdown cells data.
  • metrics: Contains CSV files with metrics of selected Jupyter notebooks for training the models. For instance, code_cell_metrics.csv contains metrics of each code cell in the notebook, markdown_cell_metrics.csv contains markdown cell metrics of each notebook, and notebook_metrics.csv holds the aggregated metrics of all cells in the notebook.
  • notebooks: Stores the notebooks provided to be predicted by the code.
  • models: Stores the trained models.
  • logs: Keeps the log files.
  • cache: Is used for cached data.

CLI

First, cd to the src directory and then execute cli.py file and start your journey.

cd src
export PYTHONPATH="$(pwd)"
python cli.py --help

Use --help for each command to get further instructions. Some use cases are provided below.

python cli.py
python cli.py extract-dataframe-metrics --help
python cli.py extract-dataframe-metrics --chunk-size 100 --limit-chunk-count 5
python cli.py extract-dataframe-metrics ../dataframes/markdown.csv ../metrics/markdown_cell_metrics.csv --chunk-size 100 --limit-chunk-count 5 --file-type markdown
python cli.py aggregate-metrics --help
python cli.py aggregate-metrics ../metrics/code_cell_metrics.csv ../metrics/markdown_cell_metrics.csv ../metrics/notebook_metrics_lite.csv
python cli.py extract-notebook-metrics --help
python cli.py extract-notebook-metrics ../notebooks/file.ipynb ../notebooks/results.json
python cli.py extract-notebook-metrics ../notebooks/file.ipynb ../notebooks/results.csv
python cli.py predict ../notebooks/file.ipynb cat_boost ../models/catBoostClassifier.withOutPT.sf50.sr20.combined_score.v2.model python cli.py predict ../notebooks/file.ipynb cat_boost ../models/catBoostClassifier.withPT.sf50.sr20.combined_score.v2.model --pt-score 10

FastAPI

First, cd to the src directory and then execute main.py file and start your journey.

cd src
export PYTHONPATH="$(pwd)"
python main.py

after this you can see the documentation of the apis at http://localhost:8000/docs.

Docker

Use below command to build and run the image using docker compose

docker compose up --build

Citation

This work is published in the Empirical Software Engineering journal, under the title of "Predicting the understandability of computational notebooks through code metrics analysis".

Access the paper from: https://rdcu.be/ehKdi.

@article{ghahfarokhi2025predicting,title={Predictingtheunderstandabilityofcomputationalnotebooksthroughcodemetricsanalysis},author={Ghahfarokhi, MojtabaMostafaviandAsadi, AlirezaandAsgari, ArashandMohammadi, BardiaandHeydarnoori, Abbas},journal={EmpiricalSoftwareEngineering},volume={30},number={3},pages={98},year={2025},publisher={Springer}}

About

Predicting the Understandability of Computational Notebooks through Code Metrics Analysis (EMSE'30:3, 2025)

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Predicting the Understandability of Computational Notebooks through Code Metrics Analysis

This repository contains the source code for a code comprehension predictor service for computational notesbooks.

Usage

To run the code, install the requirements by executing the following command:

pip install -r requirements.txt

After installing the requirements, you can run the CLI or API and start using the service.

Data Requirements

To use the functionalities provided in this repository, you will need certain CSV files containing notebook code and markdown cell data. These files can be found here (DistilKaggle: a distilled dataset of Kaggle Jupyter notebooks) and here (A Predictive Model to Identify Effective Metrics for the Comprehension of Computational Notebooks).

Use below download links to get started

Folder Structure

  • src: Contains the main code that provides code comprehension prediction and metrics evaluation.
    • src/core: includes the main python files of the project. These classes and functions do the actual work behind the interfaces.
    • src/utils: helper files used to manage the project like config.py where we manage all the configurations.
    • src/notebooks: base notebook files that support the paper's results.
  • dataframes: Contains basic data of selected jupyter notebooks for training models. For example, code.csv that contains the source codes used in each notebook, and markdown.csv that has the markdown cells data.
  • metrics: Contains CSV files with metrics of selected Jupyter notebooks for training the models. For instance, code_cell_metrics.csv contains metrics of each code cell in the notebook, markdown_cell_metrics.csv contains markdown cell metrics of each notebook, and notebook_metrics.csv holds the aggregated metrics of all cells in the notebook.
  • notebooks: Stores the notebooks provided to be predicted by the code.
  • models: Stores the trained models.
  • logs: Keeps the log files.
  • cache: Is used for cached data.

CLI

First, cd to the src directory and then execute cli.py file and start your journey.

cd src
export PYTHONPATH="$(pwd)"
python cli.py --help

Use --help for each command to get further instructions. Some use cases are provided below.

python cli.py
python cli.py extract-dataframe-metrics --help
python cli.py extract-dataframe-metrics --chunk-size 100 --limit-chunk-count 5
python cli.py extract-dataframe-metrics ../dataframes/markdown.csv ../metrics/markdown_cell_metrics.csv --chunk-size 100 --limit-chunk-count 5 --file-type markdown
python cli.py aggregate-metrics --help
python cli.py aggregate-metrics ../metrics/code_cell_metrics.csv ../metrics/markdown_cell_metrics.csv ../metrics/notebook_metrics_lite.csv
python cli.py extract-notebook-metrics --help
python cli.py extract-notebook-metrics ../notebooks/file.ipynb ../notebooks/results.json
python cli.py extract-notebook-metrics ../notebooks/file.ipynb ../notebooks/results.csv
python cli.py predict ../notebooks/file.ipynb cat_boost ../models/catBoostClassifier.withOutPT.sf50.sr20.combined_score.v2.model python cli.py predict ../notebooks/file.ipynb cat_boost ../models/catBoostClassifier.withPT.sf50.sr20.combined_score.v2.model --pt-score 10

FastAPI

First, cd to the src directory and then execute main.py file and start your journey.

cd src
export PYTHONPATH="$(pwd)"
python main.py

after this you can see the documentation of the apis at http://localhost:8000/docs.

Docker

Use below command to build and run the image using docker compose

docker compose up --build

Citation

This work is published in the Empirical Software Engineering journal, under the title of "Predicting the understandability of computational notebooks through code metrics analysis".

Access the paper from: https://rdcu.be/ehKdi.

@article{ghahfarokhi2025predicting,title={Predictingtheunderstandabilityofcomputationalnotebooksthroughcodemetricsanalysis},author={Ghahfarokhi, MojtabaMostafaviandAsadi, AlirezaandAsgari, ArashandMohammadi, BardiaandHeydarnoori, Abbas},journal={EmpiricalSoftwareEngineering},volume={30},number={3},pages={98},year={2025},publisher={Springer}}

About

Predicting the Understandability of Computational Notebooks through Code Metrics Analysis (EMSE'30:3, 2025)

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Predicting the Understandability of Computational Notebooks through Code Metrics Analysis

This repository contains the source code for a code comprehension predictor service for computational notesbooks.

Usage

To run the code, install the requirements by executing the following command:

pip install -r requirements.txt

After installing the requirements, you can run the CLI or API and start using the service.

Data Requirements

To use the functionalities provided in this repository, you will need certain CSV files containing notebook code and markdown cell data. These files can be found here (DistilKaggle: a distilled dataset of Kaggle Jupyter notebooks) and here (A Predictive Model to Identify Effective Metrics for the Comprehension of Computational Notebooks).

Use below download links to get started

Folder Structure

  • src: Contains the main code that provides code comprehension prediction and metrics evaluation.
    • src/core: includes the main python files of the project. These classes and functions do the actual work behind the interfaces.
    • src/utils: helper files used to manage the project like config.py where we manage all the configurations.
    • src/notebooks: base notebook files that support the paper's results.
  • dataframes: Contains basic data of selected jupyter notebooks for training models. For example, code.csv that contains the source codes used in each notebook, and markdown.csv that has the markdown cells data.
  • metrics: Contains CSV files with metrics of selected Jupyter notebooks for training the models. For instance, code_cell_metrics.csv contains metrics of each code cell in the notebook, markdown_cell_metrics.csv contains markdown cell metrics of each notebook, and notebook_metrics.csv holds the aggregated metrics of all cells in the notebook.
  • notebooks: Stores the notebooks provided to be predicted by the code.
  • models: Stores the trained models.
  • logs: Keeps the log files.
  • cache: Is used for cached data.

CLI

First, cd to the src directory and then execute cli.py file and start your journey.

cd src
export PYTHONPATH="$(pwd)"
python cli.py --help

Use --help for each command to get further instructions. Some use cases are provided below.

python cli.py
python cli.py extract-dataframe-metrics --help
python cli.py extract-dataframe-metrics --chunk-size 100 --limit-chunk-count 5
python cli.py extract-dataframe-metrics ../dataframes/markdown.csv ../metrics/markdown_cell_metrics.csv --chunk-size 100 --limit-chunk-count 5 --file-type markdown
python cli.py aggregate-metrics --help
python cli.py aggregate-metrics ../metrics/code_cell_metrics.csv ../metrics/markdown_cell_metrics.csv ../metrics/notebook_metrics_lite.csv
python cli.py extract-notebook-metrics --help
python cli.py extract-notebook-metrics ../notebooks/file.ipynb ../notebooks/results.json
python cli.py extract-notebook-metrics ../notebooks/file.ipynb ../notebooks/results.csv
python cli.py predict ../notebooks/file.ipynb cat_boost ../models/catBoostClassifier.withOutPT.sf50.sr20.combined_score.v2.model python cli.py predict ../notebooks/file.ipynb cat_boost ../models/catBoostClassifier.withPT.sf50.sr20.combined_score.v2.model --pt-score 10

FastAPI

First, cd to the src directory and then execute main.py file and start your journey.

cd src
export PYTHONPATH="$(pwd)"
python main.py

after this you can see the documentation of the apis at http://localhost:8000/docs.

Docker

Use below command to build and run the image using docker compose

docker compose up --build

Citation

This work is published in the Empirical Software Engineering journal, under the title of "Predicting the understandability of computational notebooks through code metrics analysis".

Access the paper from: https://rdcu.be/ehKdi.

@article{ghahfarokhi2025predicting,title={Predictingtheunderstandabilityofcomputationalnotebooksthroughcodemetricsanalysis},author={Ghahfarokhi, MojtabaMostafaviandAsadi, AlirezaandAsgari, ArashandMohammadi, BardiaandHeydarnoori, Abbas},journal={EmpiricalSoftwareEngineering},volume={30},number={3},pages={98},year={2025},publisher={Springer}}

About

Predicting the Understandability of Computational Notebooks through Code Metrics Analysis (EMSE'30:3, 2025)

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Predicting the Understandability of Computational Notebooks through Code Metrics Analysis

This repository contains the source code for a code comprehension predictor service for computational notesbooks.

Usage

To run the code, install the requirements by executing the following command:

pip install -r requirements.txt

After installing the requirements, you can run the CLI or API and start using the service.

Data Requirements

To use the functionalities provided in this repository, you will need certain CSV files containing notebook code and markdown cell data. These files can be found here (DistilKaggle: a distilled dataset of Kaggle Jupyter notebooks) and here (A Predictive Model to Identify Effective Metrics for the Comprehension of Computational Notebooks).

Use below download links to get started

Folder Structure

  • src: Contains the main code that provides code comprehension prediction and metrics evaluation.
    • src/core: includes the main python files of the project. These classes and functions do the actual work behind the interfaces.
    • src/utils: helper files used to manage the project like config.py where we manage all the configurations.
    • src/notebooks: base notebook files that support the paper's results.
  • dataframes: Contains basic data of selected jupyter notebooks for training models. For example, code.csv that contains the source codes used in each notebook, and markdown.csv that has the markdown cells data.
  • metrics: Contains CSV files with metrics of selected Jupyter notebooks for training the models. For instance, code_cell_metrics.csv contains metrics of each code cell in the notebook, markdown_cell_metrics.csv contains markdown cell metrics of each notebook, and notebook_metrics.csv holds the aggregated metrics of all cells in the notebook.
  • notebooks: Stores the notebooks provided to be predicted by the code.
  • models: Stores the trained models.
  • logs: Keeps the log files.
  • cache: Is used for cached data.

CLI

First, cd to the src directory and then execute cli.py file and start your journey.

cd src
export PYTHONPATH="$(pwd)"
python cli.py --help

Use --help for each command to get further instructions. Some use cases are provided below.

python cli.py
python cli.py extract-dataframe-metrics --help
python cli.py extract-dataframe-metrics --chunk-size 100 --limit-chunk-count 5
python cli.py extract-dataframe-metrics ../dataframes/markdown.csv ../metrics/markdown_cell_metrics.csv --chunk-size 100 --limit-chunk-count 5 --file-type markdown
python cli.py aggregate-metrics --help
python cli.py aggregate-metrics ../metrics/code_cell_metrics.csv ../metrics/markdown_cell_metrics.csv ../metrics/notebook_metrics_lite.csv
python cli.py extract-notebook-metrics --help
python cli.py extract-notebook-metrics ../notebooks/file.ipynb ../notebooks/results.json
python cli.py extract-notebook-metrics ../notebooks/file.ipynb ../notebooks/results.csv
python cli.py predict ../notebooks/file.ipynb cat_boost ../models/catBoostClassifier.withOutPT.sf50.sr20.combined_score.v2.model python cli.py predict ../notebooks/file.ipynb cat_boost ../models/catBoostClassifier.withPT.sf50.sr20.combined_score.v2.model --pt-score 10

FastAPI

First, cd to the src directory and then execute main.py file and start your journey.

cd src
export PYTHONPATH="$(pwd)"
python main.py

after this you can see the documentation of the apis at http://localhost:8000/docs.

Docker

Use below command to build and run the image using docker compose

docker compose up --build

Citation

This work is published in the Empirical Software Engineering journal, under the title of "Predicting the understandability of computational notebooks through code metrics analysis".

Access the paper from: https://rdcu.be/ehKdi.

@article{ghahfarokhi2025predicting,title={Predictingtheunderstandabilityofcomputationalnotebooksthroughcodemetricsanalysis},author={Ghahfarokhi, MojtabaMostafaviandAsadi, AlirezaandAsgari, ArashandMohammadi, BardiaandHeydarnoori, Abbas},journal={EmpiricalSoftwareEngineering},volume={30},number={3},pages={98},year={2025},publisher={Springer}}

About

Predicting the Understandability of Computational Notebooks through Code Metrics Analysis (EMSE'30:3, 2025)

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages