From 0776a63670b7b0138c75e15834e0e7d765ffddab Mon Sep 17 00:00:00 2001 From: Mehmet Can Ay Date: Mon, 11 Nov 2024 14:24:00 +0100 Subject: [PATCH 1/4] add: example t-SNE plot --- docs/tsne_plot.png | Bin 0 -> 42341 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/tsne_plot.png diff --git a/docs/tsne_plot.png b/docs/tsne_plot.png new file mode 100644 index 0000000000000000000000000000000000000000..02400c490b82390fcb3772689f0bf394f14826e4 GIT binary patch literal 42341 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 M_VcPfe(CPN0X+APbpQYW literal 0 HcmV?d00001 From 59c78ddd4854836b517222e4c1a92032bc54ba4d Mon Sep 17 00:00:00 2001 From: Mehmet Can Ay Date: Mon, 11 Nov 2024 14:24:13 +0100 Subject: [PATCH 2/4] add: example t-SNE visualization code snippet --- datastew/scripts/tsne_visualization.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 datastew/scripts/tsne_visualization.py diff --git a/datastew/scripts/tsne_visualization.py b/datastew/scripts/tsne_visualization.py new file mode 100644 index 0000000..0e89e14 --- /dev/null +++ b/datastew/scripts/tsne_visualization.py @@ -0,0 +1,16 @@ +from datastew.embedding import MPNetAdapter +from datastew.process.parsing import DataDictionarySource +from datastew.visualisation import plot_embeddings + +# Variable and description refer to the corresponding column names in your excel sheet +data_dictionary_source_1 = DataDictionarySource( + "source1.xlsx", variable_field="var", description_field="desc" +) +data_dictionary_source_2 = DataDictionarySource( + "source2.xlsx", variable_field="var", description_field="desc" +) + +mpnet_adapter = MPNetAdapter() +plot_embeddings( + [data_dictionary_source_1, data_dictionary_source_2], embedding_model=mpnet_adapter +) From 51d3c83db21f9a24b4901ffb393ba22c698ac5ad Mon Sep 17 00:00:00 2001 From: Mehmet Can Ay Date: Mon, 11 Nov 2024 14:24:29 +0100 Subject: [PATCH 3/4] docs: extend with t-SNE visualization --- README.md | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 028ac20..37ec4f2 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ pip install datastew ### Harmonizing excel/csv resources You can directly import common data models, terminology sources or data dictionaries for harmonization directly from a -csv, tsv or excel file. An example how to match two seperate variable descriptions is shown in +csv, tsv or excel file. An example how to match two separate variable descriptions is shown in [datastew/scripts/mapping_excel_example.py](datastew/scripts/mapping_excel_example.py): ```python @@ -44,7 +44,7 @@ embedding_model = GPT4Adapter(key="your_api_key") df = map_dictionary_to_dictionary(source, target, embedding_model=embedding_model) ``` -You can also retrieve embeddings from data dictionaries and visualize them in form of an interactive scatterplot to +You can also retrieve embeddings from data dictionaries and visualize them in form of an interactive scatter plot to explore sematic neighborhoods: ```python @@ -101,3 +101,31 @@ Similarity: 0.20031612264852067 -> Concept ID: 73211009 : Hypertension (disorder You can also import data from file sources (csv, tsv, xlsx) or from a public API like OLS. An example script to download & compute embeddings for SNOMED from ebi OLS can be found in [datastew/scripts/ols_snomed_retrieval.py](datastew/scripts/ols_snomed_retrieval.py). + +### t-SNE visualization + +You can visualize the embedding space of multiple data dictionary sources with t-SNE plots utilizing different +language models. An example how to generate a t-sne plot is shown in +[datastew/scripts/tsne_visualization.py](datastew/scripts/tsne_visualization.py): + +```python +from datastew.embedding import MPNetAdapter +from datastew.process.parsing import DataDictionarySource +from datastew.visualisation import plot_embeddings + +# Variable and description refer to the corresponding column names in your excel sheet +data_dictionary_source_1 = DataDictionarySource( + "source1.xlsx", variable_field="var", description_field="desc" +) +data_dictionary_source_2 = DataDictionarySource( + "source2.xlsx", variable_field="var", description_field="desc" +) + +mpnet_adapter = MPNetAdapter() +plot_embeddings( + [data_dictionary_source_1, data_dictionary_source_2], embedding_model=mpnet_adapter +) +``` + +An exemplary t-SNE plot: +![t-SNE plot](./docs/tsne_plot.png) From 331f16e52fd46c823b7c28e5c5bcb2f345f4c3ba Mon Sep 17 00:00:00 2001 From: Tim Adams Date: Tue, 12 Nov 2024 09:21:12 +0100 Subject: [PATCH 4/4] Update README.md --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index 37ec4f2..3dcd741 100644 --- a/README.md +++ b/README.md @@ -102,7 +102,7 @@ You can also import data from file sources (csv, tsv, xlsx) or from a public API download & compute embeddings for SNOMED from ebi OLS can be found in [datastew/scripts/ols_snomed_retrieval.py](datastew/scripts/ols_snomed_retrieval.py). -### t-SNE visualization +### Embedding visualization You can visualize the embedding space of multiple data dictionary sources with t-SNE plots utilizing different language models. An example how to generate a t-sne plot is shown in @@ -126,6 +126,4 @@ plot_embeddings( [data_dictionary_source_1, data_dictionary_source_2], embedding_model=mpnet_adapter ) ``` - -An exemplary t-SNE plot: ![t-SNE plot](./docs/tsne_plot.png)