Portrait of Maryam Esmaeili

Maryam Esmaeili

Data scientist in Utrecht. MSc in Data Science for Life Sciences, and a background in Python development before that.

  • Utrecht, Netherlands
  • Python · R · SQL
  • Available now

About me

I came to data science from software. I worked as a freelance Python developer, building web tools and Power BI reports for small businesses. Then I went back to university and did an MSc in Data Science for Life Sciences at Hanze in Groningen.

My two biggest projects are below. One is my thesis with UMCG on Crohn's disease and the microbiome. The other is a literature-mining project for a paint company, which ended with the company taking three compounds from our list into the lab. Both taught me that a good model score is only the start. What matters is whether someone can actually use the result.

I live in Utrecht, I'm learning Dutch, and I'm looking for a data scientist or data analyst job.

Projects

Can oral samples tell us about Crohn's disease in the gut?

MSc thesis · UMCG, Groningen · Jul–Dec 2025

The question
Fecal samples are unpleasant to give and slow to process. Oral samples are easy to collect. Could a model built on oral microbiome data help spot Crohn's disease, and does a model trained on one body site still work on the other?
What I did
I built a Snakemake pipeline in Python and R for 256 oral and fecal metagenomic profiles from three cohorts (UMCG, Dutch Microbiome Project, Human Microbiome Project). It covers filtering, CLR transformation, diversity analysis, differential abundance adjusted for medication and other covariates, and four classifiers with nested cross-validation.
What I found
Within one body site the models scored almost perfectly (AUC close to 1.0). I don't trust that number much, because patients and controls came from different cohorts. The more useful result came from training on fecal samples and testing on oral samples. Only regularised logistic regression carried over (AUC 0.88), and the tree models dropped below chance. After adjustment, 204 fecal taxa still differed between patients and controls, and no oral taxa did.
So what
Oral samples alone are unlikely to replace fecal samples for Crohn's screening. For me the bigger lesson was that a high AUC is not enough: checking for cohort effects and testing on other data is what tells you whether a model can be used.
ROC curves for within-site fecal classification
Fecal only, nested CV
ROC curves for fecal-to-oral transfer
Trained on fecal, tested on oral
Snakemakescikit-learnXGBoostR / veganStatistics
Code and README →

Patient data is covered by data-use agreements, so the repository only has the pipeline and aggregate results.

Natural preservatives for water-based paint

Industry project with Wydo NBD · team of two students · Nov 2024 – Feb 2025

The question
Water-based paints spoil easily, and the chemical biocides that protect them are being restricted. Wydo wanted natural alternatives. The evidence exists, but it is spread over millions of papers.
What we did
We wrote a Python pipeline that links PubMed abstracts to compounds and to the microorganisms that spoil paint, using a text-mining API. It then pulls chemical data from PubChem and filters out compounds by molecular weight, EU/NL biocide lists, hazard data and known antifungal agents. The remaining structures were clustered (Morgan fingerprints, Butina) and labelled natural or synthetic with the COCONUT database and the ChemBERTa language model.
Result
From 11,102 candidates we got to 603, and then to a shortlist of 126 natural compounds, including thymol, gallic acid and quercetin. ChemBERTa caught natural compounds that the database lookup missed. It also had real weaknesses, which we documented: it needs fine-tuning on labelled data, and our rule-based chemistry patterns misclassified over 100 fatty acids.
What happened next
When we presented the work, the company told us they had taken the top three compounds from our list into their own lab tests. What made it useful was that it replaced a slow, manual literature search with a repeatable process.
Workflow diagram: PubMed search, concept extraction, compound–microorganism relations, chemical filters, structure analysis, clustering and natural/synthetic classification
Pipeline overview (click to enlarge)
Text miningPubChemRDKitChemBERTaClustering
Related code →

Company data isn't public. The linked repository is a related natural-vs-synthetic compound pipeline from my studies.

Grouping clinical notes without labels

Clinical NLP · 2024

The question
Clinical free text has no labels. Which unsupervised method gives topics a clinician would recognise?
What I did
I built TF-IDF features, then compared LDA, NMF and K-Means, and used UMAP to look at the clusters.
Result
NMF gave the clearest topics (silhouette score 0.76).
NLPTF-IDFNMF / LDAUMAP
Code →

Smaller projects

Vital signs dashboard

Streamlit · VitalDB open data

An interactive dashboard for browsing vital signs recorded during surgery.

Code →

Pump sensor anomalies

Python · time series

Flags unusual sensor behaviour and processes new data files automatically as they arrive.

Code →

What makes countries happy?

Regression · World Happiness Report

An OLS model across 133 countries (R² 0.77). Social support and GDP mattered most.

Code →

Skills

Code

Python (pandas, scikit-learn, statsmodels, RDKit), R, SQL, Git, Snakemake

Modelling

Logistic regression, SVM, random forest, XGBoost, nested cross-validation, clustering, PCA/UMAP

Statistics

Regression with covariates, non-parametric tests, multiple-testing correction, PERMANOVA

Text

TF-IDF, topic modelling, ChemBERTa, PubMed mining

Reporting

Power BI, Streamlit, Matplotlib, Seaborn

Languages

English (professional), Persian (native), Dutch (A1, in class twice a week)

Background