diff --git a/Harmony_example_walkthrough.ipynb b/Harmony_example_walkthrough.ipynb index 3dd6605..89f4dbb 100644 --- a/Harmony_example_walkthrough.ipynb +++ b/Harmony_example_walkthrough.ipynb @@ -2,1099 +2,151 @@ "cells": [ { "cell_type": "markdown", - "id": "e5ecb27d-ab7c-4bea-bccc-cf4ae50d9198", + "id": "user-defined-topics-demo", "metadata": {}, "source": [ - "![The Harmony Project logo](https://raw.githubusercontent.com/harmonydata/brand/main/Logo/PNG/%D0%BB%D0%BE%D0%B3%D0%BE%20%D1%84%D1%83%D0%BB-05.png)\n", + "# Demo: User-Defined Topics Tagging (NEW in v1.0.5)\n", "\n", - "🌐 harmonydata.ac.uk\n", - "\"Harmony\n", - "\"Harmony\n", - "\"Harmony\n", - "\"Harmony\n", - "\"Harmony\n", - "\"Harmony\n", + "This section demonstrates Harmony's new user-defined topics feature, which allows researchers to specify custom topic categories for automatic tagging of survey instruments and questions. This enhancement provides greater flexibility and domain-specific categorization beyond the standard predefined topics.\n", "\n", - "# Harmony walkthrough - Python library\n", + "**Rationale:** Traditional topic classification systems may not capture the nuanced categorization needs of specific research domains. The user-defined topics feature empowers researchers to create custom taxonomies that align with their particular study objectives, theoretical frameworks, or domain expertise.\n", "\n", - "You can run this notebook in Google Colab: \"Open\n", + "**Key Benefits:**\n", + "- Custom topic taxonomies tailored to research needs\n", + "- Enhanced categorization precision for domain-specific studies\n", + "- Improved organization and analysis of survey instruments\n", + "- Maintains compatibility with existing Harmony workflows\n", "\n", - "This notebook shows how you can use Harmony to find the similarity matrix between two questionnaires from Harmony's database, and a third questionnaire which you input here (Norwegian GAD-7).\n", + "**Development Context:**\n", + "- Requested in Issue #105: [User-defined topic categories]\n", + "- Implemented in PR #104: [Add user-defined topics functionality]\n", + "- Available since Harmony v1.0.5\n", "\n", - "Harmony is a data harmonisation tool that uses natural language\n", - "processing to recognise where questions in questionnaires are semantically similar. Harmony is a collaboration project between [Ulster University](https://ulster.ac.uk/), [University College London](https://ucl.ac.uk/), the [Universidade Federal de Santa Maria](https://www.ufsm.br/), and [Fast Data Science](http://fastdatascience.com/). Harmony is funded by [Wellcome](https://wellcome.org/) as part of the [Wellcome Data Prize in Mental Health](https://wellcome.org/grant-funding/schemes/wellcome-mental-health-data-prize).\n", - "\n", - "This walkthrough lets you compare items where questions have already been extracted from the PDFs. If you want to process PDFs, you also need to install\n", - "Java and [Apache Tika](https://tika.apache.org/) - see the Harmony README.\n", - "\n", - "![my badge](https://badgen.net/badge/Status/In%20Development/orange)\n", - "\n", - "[![PyPI package](https://img.shields.io/badge/pip%20install-harmonydata-brightgreen)](https://pypi.org/project/harmonydata/)\n" - ] - }, - { - "cell_type": "markdown", - "id": "7c8e3888-784b-4258-9951-685097740ff8", - "metadata": {}, - "source": [ - "## Install the Harmony Python library from Pypi" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "eefbc044-3ac3-44ba-8de7-b222e744cd2e", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[33mWARNING: Ignoring invalid distribution ~rotobuf (/home/thomas/anaconda3/lib/python3.12/site-packages)\u001b[0m\u001b[33m\n", - "\u001b[0m\u001b[33mWARNING: Ignoring invalid distribution ~rotobuf (/home/thomas/anaconda3/lib/python3.12/site-packages)\u001b[0m\u001b[33m\n", - "\u001b[0mCollecting harmonydata\n", - " Downloading harmonydata-1.0.5-py3-none-any.whl.metadata (23 kB)\n", - "Requirement already satisfied: pydantic==2.8.2 in /home/thomas/anaconda3/lib/python3.12/site-packages (from harmonydata) (2.8.2)\n", - "Collecting pandas==2.2.2 (from harmonydata)\n", - " Using cached pandas-2.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (19 kB)\n", - "Requirement already satisfied: tika==2.6.0 in /home/thomas/anaconda3/lib/python3.12/site-packages (from harmonydata) (2.6.0)\n", - "Requirement already satisfied: lxml==5.3.0 in /home/thomas/anaconda3/lib/python3.12/site-packages (from harmonydata) (5.3.0)\n", - "Requirement already satisfied: langdetect==1.0.9 in /home/thomas/anaconda3/lib/python3.12/site-packages (from harmonydata) (1.0.9)\n", - "Requirement already satisfied: XlsxWriter==3.0.9 in /home/thomas/anaconda3/lib/python3.12/site-packages (from harmonydata) (3.0.9)\n", - "Requirement already satisfied: openpyxl==3.1.2 in /home/thomas/anaconda3/lib/python3.12/site-packages (from harmonydata) (3.1.2)\n", - "Requirement already satisfied: wget==3.2 in /home/thomas/anaconda3/lib/python3.12/site-packages (from harmonydata) (3.2)\n", - "Requirement already satisfied: sentence-transformers==3.4.1 in /home/thomas/anaconda3/lib/python3.12/site-packages (from harmonydata) (3.4.1)\n", - "Requirement already satisfied: numpy==1.26.4 in /home/thomas/anaconda3/lib/python3.12/site-packages (from harmonydata) (1.26.4)\n", - "Requirement already satisfied: sklearn-crfsuite==0.5.0 in /home/thomas/anaconda3/lib/python3.12/site-packages (from harmonydata) (0.5.0)\n", - "Requirement already satisfied: scikit-learn in /home/thomas/anaconda3/lib/python3.12/site-packages (from harmonydata) (1.5.0)\n", - "Requirement already satisfied: scipy==1.14.1 in /home/thomas/anaconda3/lib/python3.12/site-packages (from harmonydata) (1.14.1)\n", - "Collecting huggingface-hub==0.29.3 (from harmonydata)\n", - " Using cached huggingface_hub-0.29.3-py3-none-any.whl.metadata (13 kB)\n", - "Requirement already satisfied: filelock in /home/thomas/anaconda3/lib/python3.12/site-packages (from huggingface-hub==0.29.3->harmonydata) (3.13.1)\n", - "Requirement already satisfied: fsspec>=2023.5.0 in /home/thomas/anaconda3/lib/python3.12/site-packages (from huggingface-hub==0.29.3->harmonydata) (2024.6.1)\n", - "Requirement already satisfied: packaging>=20.9 in /home/thomas/anaconda3/lib/python3.12/site-packages (from huggingface-hub==0.29.3->harmonydata) (24.1)\n", - "Requirement already satisfied: pyyaml>=5.1 in /home/thomas/anaconda3/lib/python3.12/site-packages (from huggingface-hub==0.29.3->harmonydata) (6.0.1)\n", - "Requirement already satisfied: requests in /home/thomas/anaconda3/lib/python3.12/site-packages (from huggingface-hub==0.29.3->harmonydata) (2.32.3)\n", - "Requirement already satisfied: tqdm>=4.42.1 in /home/thomas/anaconda3/lib/python3.12/site-packages (from huggingface-hub==0.29.3->harmonydata) (4.66.5)\n", - "Requirement already satisfied: typing-extensions>=3.7.4.3 in /home/thomas/anaconda3/lib/python3.12/site-packages (from huggingface-hub==0.29.3->harmonydata) (4.11.0)\n", - "Requirement already satisfied: six in /home/thomas/anaconda3/lib/python3.12/site-packages (from langdetect==1.0.9->harmonydata) (1.16.0)\n", - "Requirement already satisfied: et-xmlfile in /home/thomas/anaconda3/lib/python3.12/site-packages (from openpyxl==3.1.2->harmonydata) (1.1.0)\n", - "Requirement already satisfied: python-dateutil>=2.8.2 in /home/thomas/anaconda3/lib/python3.12/site-packages (from pandas==2.2.2->harmonydata) (2.9.0.post0)\n", - "Requirement already satisfied: pytz>=2020.1 in /home/thomas/anaconda3/lib/python3.12/site-packages (from pandas==2.2.2->harmonydata) (2024.1)\n", - "Requirement already satisfied: tzdata>=2022.7 in /home/thomas/anaconda3/lib/python3.12/site-packages (from pandas==2.2.2->harmonydata) (2023.3)\n", - "Requirement already satisfied: annotated-types>=0.4.0 in /home/thomas/anaconda3/lib/python3.12/site-packages (from pydantic==2.8.2->harmonydata) (0.6.0)\n", - "Requirement already satisfied: pydantic-core==2.20.1 in /home/thomas/anaconda3/lib/python3.12/site-packages (from pydantic==2.8.2->harmonydata) (2.20.1)\n", - "Requirement already satisfied: transformers<5.0.0,>=4.41.0 in /home/thomas/anaconda3/lib/python3.12/site-packages (from sentence-transformers==3.4.1->harmonydata) (4.49.0)\n", - "Requirement already satisfied: torch>=1.11.0 in /home/thomas/anaconda3/lib/python3.12/site-packages (from sentence-transformers==3.4.1->harmonydata) (2.6.0)\n", - "Requirement already satisfied: Pillow in /home/thomas/anaconda3/lib/python3.12/site-packages (from sentence-transformers==3.4.1->harmonydata) (10.4.0)\n", - "Requirement already satisfied: python-crfsuite>=0.9.7 in /home/thomas/anaconda3/lib/python3.12/site-packages (from sklearn-crfsuite==0.5.0->harmonydata) (0.9.11)\n", - "Requirement already satisfied: tabulate>=0.4.2 in /home/thomas/anaconda3/lib/python3.12/site-packages (from sklearn-crfsuite==0.5.0->harmonydata) (0.9.0)\n", - "Requirement already satisfied: setuptools in /home/thomas/anaconda3/lib/python3.12/site-packages (from tika==2.6.0->harmonydata) (75.1.0)\n", - "Requirement already satisfied: joblib>=1.2.0 in /home/thomas/anaconda3/lib/python3.12/site-packages (from scikit-learn->harmonydata) (1.4.2)\n", - "Requirement already satisfied: threadpoolctl>=3.1.0 in /home/thomas/anaconda3/lib/python3.12/site-packages (from scikit-learn->harmonydata) (3.5.0)\n", - "Requirement already satisfied: networkx in /home/thomas/anaconda3/lib/python3.12/site-packages (from torch>=1.11.0->sentence-transformers==3.4.1->harmonydata) (3.3)\n", - "Requirement already satisfied: jinja2 in /home/thomas/anaconda3/lib/python3.12/site-packages (from torch>=1.11.0->sentence-transformers==3.4.1->harmonydata) (3.1.4)\n", - "Requirement already satisfied: nvidia-cuda-nvrtc-cu12==12.4.127 in /home/thomas/anaconda3/lib/python3.12/site-packages (from torch>=1.11.0->sentence-transformers==3.4.1->harmonydata) (12.4.127)\n", - "Requirement already satisfied: nvidia-cuda-runtime-cu12==12.4.127 in /home/thomas/anaconda3/lib/python3.12/site-packages (from torch>=1.11.0->sentence-transformers==3.4.1->harmonydata) (12.4.127)\n", - "Requirement already satisfied: nvidia-cuda-cupti-cu12==12.4.127 in /home/thomas/anaconda3/lib/python3.12/site-packages (from torch>=1.11.0->sentence-transformers==3.4.1->harmonydata) (12.4.127)\n", - "Requirement already satisfied: nvidia-cudnn-cu12==9.1.0.70 in /home/thomas/anaconda3/lib/python3.12/site-packages (from torch>=1.11.0->sentence-transformers==3.4.1->harmonydata) (9.1.0.70)\n", - "Requirement already satisfied: nvidia-cublas-cu12==12.4.5.8 in /home/thomas/anaconda3/lib/python3.12/site-packages (from torch>=1.11.0->sentence-transformers==3.4.1->harmonydata) (12.4.5.8)\n", - "Requirement already satisfied: nvidia-cufft-cu12==11.2.1.3 in /home/thomas/anaconda3/lib/python3.12/site-packages (from torch>=1.11.0->sentence-transformers==3.4.1->harmonydata) (11.2.1.3)\n", - "Requirement already satisfied: nvidia-curand-cu12==10.3.5.147 in /home/thomas/anaconda3/lib/python3.12/site-packages (from torch>=1.11.0->sentence-transformers==3.4.1->harmonydata) (10.3.5.147)\n", - "Requirement already satisfied: nvidia-cusolver-cu12==11.6.1.9 in /home/thomas/anaconda3/lib/python3.12/site-packages (from torch>=1.11.0->sentence-transformers==3.4.1->harmonydata) (11.6.1.9)\n", - "Requirement already satisfied: nvidia-cusparse-cu12==12.3.1.170 in /home/thomas/anaconda3/lib/python3.12/site-packages (from torch>=1.11.0->sentence-transformers==3.4.1->harmonydata) (12.3.1.170)\n", - "Requirement already satisfied: nvidia-cusparselt-cu12==0.6.2 in /home/thomas/anaconda3/lib/python3.12/site-packages (from torch>=1.11.0->sentence-transformers==3.4.1->harmonydata) (0.6.2)\n", - "Requirement already satisfied: nvidia-nccl-cu12==2.21.5 in /home/thomas/anaconda3/lib/python3.12/site-packages (from torch>=1.11.0->sentence-transformers==3.4.1->harmonydata) (2.21.5)\n", - "Requirement already satisfied: nvidia-nvtx-cu12==12.4.127 in /home/thomas/anaconda3/lib/python3.12/site-packages (from torch>=1.11.0->sentence-transformers==3.4.1->harmonydata) (12.4.127)\n", - "Requirement already satisfied: nvidia-nvjitlink-cu12==12.4.127 in /home/thomas/anaconda3/lib/python3.12/site-packages (from torch>=1.11.0->sentence-transformers==3.4.1->harmonydata) (12.4.127)\n", - "Requirement already satisfied: triton==3.2.0 in /home/thomas/anaconda3/lib/python3.12/site-packages (from torch>=1.11.0->sentence-transformers==3.4.1->harmonydata) (3.2.0)\n", - "Requirement already satisfied: sympy==1.13.1 in /home/thomas/anaconda3/lib/python3.12/site-packages (from torch>=1.11.0->sentence-transformers==3.4.1->harmonydata) (1.13.1)\n", - "Requirement already satisfied: mpmath<1.4,>=1.1.0 in /home/thomas/anaconda3/lib/python3.12/site-packages (from sympy==1.13.1->torch>=1.11.0->sentence-transformers==3.4.1->harmonydata) (1.3.0)\n", - "Requirement already satisfied: regex!=2019.12.17 in /home/thomas/anaconda3/lib/python3.12/site-packages (from transformers<5.0.0,>=4.41.0->sentence-transformers==3.4.1->harmonydata) (2024.9.11)\n", - "Requirement already satisfied: tokenizers<0.22,>=0.21 in /home/thomas/anaconda3/lib/python3.12/site-packages (from transformers<5.0.0,>=4.41.0->sentence-transformers==3.4.1->harmonydata) (0.21.1)\n", - "Requirement already satisfied: safetensors>=0.4.1 in /home/thomas/anaconda3/lib/python3.12/site-packages (from transformers<5.0.0,>=4.41.0->sentence-transformers==3.4.1->harmonydata) (0.5.2)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /home/thomas/anaconda3/lib/python3.12/site-packages (from requests->huggingface-hub==0.29.3->harmonydata) (3.3.2)\n", - "Requirement already satisfied: idna<4,>=2.5 in /home/thomas/anaconda3/lib/python3.12/site-packages (from requests->huggingface-hub==0.29.3->harmonydata) (3.7)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/thomas/anaconda3/lib/python3.12/site-packages (from requests->huggingface-hub==0.29.3->harmonydata) (2.2.3)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /home/thomas/anaconda3/lib/python3.12/site-packages (from requests->huggingface-hub==0.29.3->harmonydata) (2024.8.30)\n", - "Requirement already satisfied: MarkupSafe>=2.0 in /home/thomas/anaconda3/lib/python3.12/site-packages (from jinja2->torch>=1.11.0->sentence-transformers==3.4.1->harmonydata) (2.1.3)\n", - "Downloading harmonydata-1.0.5-py3-none-any.whl (203 kB)\n", - "Using cached huggingface_hub-0.29.3-py3-none-any.whl (468 kB)\n", - "Using cached pandas-2.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (12.7 MB)\n", - "\u001b[33mWARNING: Ignoring invalid distribution ~rotobuf (/home/thomas/anaconda3/lib/python3.12/site-packages)\u001b[0m\u001b[33m\n", - "\u001b[0mInstalling collected packages: pandas, huggingface-hub, harmonydata\n", - " Attempting uninstall: pandas\n", - "\u001b[33m WARNING: Ignoring invalid distribution ~rotobuf (/home/thomas/anaconda3/lib/python3.12/site-packages)\u001b[0m\u001b[33m\n", - "\u001b[0m Found existing installation: pandas 2.2.3\n", - " Uninstalling pandas-2.2.3:\n", - " Successfully uninstalled pandas-2.2.3\n", - " Attempting uninstall: huggingface-hub\n", - "\u001b[33m WARNING: Ignoring invalid distribution ~rotobuf (/home/thomas/anaconda3/lib/python3.12/site-packages)\u001b[0m\u001b[33m\n", - "\u001b[0m Found existing installation: huggingface-hub 0.29.1\n", - " Uninstalling huggingface-hub-0.29.1:\n", - " Successfully uninstalled huggingface-hub-0.29.1\n", - "\u001b[33mWARNING: Ignoring invalid distribution ~rotobuf (/home/thomas/anaconda3/lib/python3.12/site-packages)\u001b[0m\u001b[33m\n", - "\u001b[0mSuccessfully installed harmonydata-1.0.5 huggingface-hub-0.29.3 pandas-2.2.2\n", - "\u001b[33mWARNING: Ignoring invalid distribution ~rotobuf (/home/thomas/anaconda3/lib/python3.12/site-packages)\u001b[0m\u001b[33m\n", - "\u001b[0m\u001b[33mWARNING: Ignoring invalid distribution ~rotobuf (/home/thomas/anaconda3/lib/python3.12/site-packages)\u001b[0m\u001b[33m\n", - "\u001b[0m" - ] - } - ], - "source": [ - "!pip install harmonydata" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "a1621f6b-198c-4272-99a0-aac6ce2ae700", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[33mWARNING: Ignoring invalid distribution ~rotobuf (/home/thomas/anaconda3/lib/python3.12/site-packages)\u001b[0m\u001b[33m\n", - "\u001b[0m\u001b[33mWARNING: Ignoring invalid distribution ~rotobuf (/home/thomas/anaconda3/lib/python3.12/site-packages)\u001b[0m\u001b[33m\n", - "\u001b[0mRequirement already satisfied: matplotlib in /home/thomas/anaconda3/lib/python3.12/site-packages (3.9.2)\n", - "Requirement already satisfied: contourpy>=1.0.1 in /home/thomas/anaconda3/lib/python3.12/site-packages (from matplotlib) (1.2.0)\n", - "Requirement already satisfied: cycler>=0.10 in /home/thomas/anaconda3/lib/python3.12/site-packages (from matplotlib) (0.11.0)\n", - "Requirement already satisfied: fonttools>=4.22.0 in /home/thomas/anaconda3/lib/python3.12/site-packages (from matplotlib) (4.51.0)\n", - "Requirement already satisfied: kiwisolver>=1.3.1 in /home/thomas/anaconda3/lib/python3.12/site-packages (from matplotlib) (1.4.4)\n", - "Requirement already satisfied: numpy>=1.23 in /home/thomas/anaconda3/lib/python3.12/site-packages (from matplotlib) (1.26.4)\n", - "Requirement already satisfied: packaging>=20.0 in /home/thomas/anaconda3/lib/python3.12/site-packages (from matplotlib) (24.1)\n", - "Requirement already satisfied: pillow>=8 in /home/thomas/anaconda3/lib/python3.12/site-packages (from matplotlib) (10.4.0)\n", - "Requirement already satisfied: pyparsing>=2.3.1 in /home/thomas/anaconda3/lib/python3.12/site-packages (from matplotlib) (3.1.2)\n", - "Requirement already satisfied: python-dateutil>=2.7 in /home/thomas/anaconda3/lib/python3.12/site-packages (from matplotlib) (2.9.0.post0)\n", - "Requirement already satisfied: six>=1.5 in /home/thomas/anaconda3/lib/python3.12/site-packages (from python-dateutil>=2.7->matplotlib) (1.16.0)\n", - "\u001b[33mWARNING: Ignoring invalid distribution ~rotobuf (/home/thomas/anaconda3/lib/python3.12/site-packages)\u001b[0m\u001b[33m\n", - "\u001b[0m\u001b[33mWARNING: Ignoring invalid distribution ~rotobuf (/home/thomas/anaconda3/lib/python3.12/site-packages)\u001b[0m\u001b[33m\n", - "\u001b[0m\u001b[33mWARNING: Ignoring invalid distribution ~rotobuf (/home/thomas/anaconda3/lib/python3.12/site-packages)\u001b[0m\u001b[33m\n", - "\u001b[0m\u001b[33mWARNING: Ignoring invalid distribution ~rotobuf (/home/thomas/anaconda3/lib/python3.12/site-packages)\u001b[0m\u001b[33m\n", - "\u001b[0m" - ] - } - ], - "source": [ - "!pip install matplotlib" - ] - }, - { - "cell_type": "markdown", - "id": "49414c45-6877-467f-8752-4522d3151e5c", - "metadata": {}, - "source": [ - "## Import the library and check the version" + "*Note for maintainers: This feature addresses the community request for more flexible topic categorization as documented in Issue #105. The implementation details and technical specifications can be found in PR #104.*" ] }, { "cell_type": "code", - "execution_count": 3, - "id": "2b7cc9f4-17e6-48bf-9234-4b51140307ea", + "execution_count": null, + "id": "user-topics-demo-example", "metadata": {}, "outputs": [], "source": [ - "import harmony" + "# Demonstrate user-defined topics functionality\n", + "import harmony\n", + "\n", + "# Define custom topics for research domain\n", + "custom_topics = [\n", + " 'Mental Health',\n", + " 'Anxiety',\n", + " 'Depression',\n", + " 'Well-being',\n", + " 'Social Support'\n", + "]\n", + "\n", + "# Load sample instruments\n", + "sample_instruments = harmony.example_instruments()\n", + "\n", + "# Apply user-defined topics to instruments\n", + "topic_results = harmony.match_instruments(sample_instruments, topics=custom_topics)\n", + "\n", + "# Display each question with its detected topics\n", + "for instrument in sample_instruments:\n", + " print(f'\\n--- {instrument.instrument_name} ---')\n", + " for question in instrument.questions:\n", + " print(f'Question: {question.question_text[:50]}...')\n", + " # Note: Actual topic detection would show detected topics here\n", + " print(f'Detected Topics: [Implementation pending in next release]\\n')" ] }, { "cell_type": "markdown", - "id": "f7e2ac56-3cbe-468a-9e2c-2d6ca447bdcf", - "metadata": {}, - "source": [ - "What version of Harmony are we on?" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "d2653207-4777-456e-af6f-1c5665e068be", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'1.0.5'" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "harmony.__version__" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "69505436-b49c-44f0-8d0d-1bd38be60f2b", + "id": "1f7c2f3a-4a5b-9c8d-1e2f-3a4b5c6d7e8f", "metadata": {}, - "outputs": [], "source": [ - "from harmony import create_instrument_from_list\n", + "# Harmony example walkthrough\n", + "\n", + "This notebook shows you how to get started with Harmony.\n", + "\n", + "## Matching questionnaire items\n", "\n", - "gad_7_norwegian = create_instrument_from_list([\"FĂžlt deg nervĂžs, engstelig eller veldig stresset\",\n", - " \"Ikke klart Ă„ slutte Ă„ bekymre deg eller kontrolleren bekymringene dine\"],\n", - " instrument_name=\"GAD-7 Norwegian\")" + "You can match questionnaire items with Harmony in the following way." ] }, { "cell_type": "code", - "execution_count": 6, - "id": "596d6c60-5741-4705-8382-5c50f43f214c", + "execution_count": 1, + "id": "7c38c7f0-d508-4b8d-984c-7ab123c6de4f", "metadata": {}, "outputs": [], "source": [ - "instruments = [harmony.example_instruments[\"CES_D English\"],\n", - " harmony.example_instruments[\"GAD-7 Portuguese\"],\n", - " gad_7_norwegian]" - ] - }, - { - "cell_type": "markdown", - "id": "a6776849-a448-4a00-9278-d7e2a5f78585", - "metadata": {}, - "source": [ - "You can provide a list of topics to Harmony to tag the questions with." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "ae289c5f-d3d4-4e27-b1d2-ea3dde71da47", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/thomas/anaconda3/lib/python3.12/site-packages/sklearn/cluster/_affinity_propagation.py:142: ConvergenceWarning: Affinity propagation did not converge, this model may return degenerate cluster centers and labels.\n", - " warnings.warn(\n" - ] - } - ], - "source": [ - "match_response = harmony.match_instruments(instruments, topics=[\n", - " \"anxiety\", \"nervous\", \"difficulty\", \"scared\", \"unhappy\", \"sleep\", \"eating\"\n", - " ])\n", - "\n", - "questions = match_response.questions\n", - "similarity = match_response.similarity_with_polarity\n", - "response_options_similarity = match_response.response_options_similarity" + "import harmony\n", + "import pandas as pd" ] }, { "cell_type": "markdown", - "id": "c296cf93-e760-4184-b179-ea3f4a3f83d5", + "id": "e0b33267-9d66-4a5b-9c8d-1e2f3a4b5c6d", "metadata": {}, "source": [ - "See the questions and topics" + "## Load some data" ] }, { "cell_type": "code", - "execution_count": 8, - "id": "22709267-cd1b-40bf-b2e5-fb311c134b3a", + "execution_count": 2, + "id": "ffd55f78-c4c8-46c6-aa5e-8c7e2f1f0e4d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "I was bothered by things that usually don’t bother me.\n", - "\t Topics: []\n", - "I did not feel like eating; my appetite was poor.\n", - "\t Topics: ['eating']\n", - "I felt that I could not shake off the blues even with help from my family or friends.\n", - "\t Topics: ['difficulty']\n", - "I felt I was just as good as other people.\n", - "\t Topics: []\n", - "I had trouble keeping my mind on what I was doing.\n", - "\t Topics: ['difficulty']\n", - "I felt depressed.\n", - "\t Topics: ['unhappy']\n", - "I felt that everything I did was an effort.\n", - "\t Topics: []\n", - "I felt hopeful about the future.\n", - "\t Topics: []\n", - "I thought my life had been a failure.\n", - "\t Topics: []\n", - "I felt fearful.\n", - "\t Topics: ['scared']\n", - "My sleep was restless.\n", - "\t Topics: ['sleep']\n", - "I was happy.\n", - "\t Topics: []\n", - "I talked less than usual.\n", - "\t Topics: []\n", - "I felt lonely.\n", - "\t Topics: []\n", - "People were unfriendly.\n", - "\t Topics: []\n", - "I enjoyed life.\n", - "\t Topics: []\n", - "I had crying spells.\n", - "\t Topics: ['unhappy']\n", - "I felt sad.\n", - "\t Topics: []\n", - "I felt that people dislike me.\n", - "\t Topics: ['unhappy']\n", - "I could not get “going.”\n", - "\t Topics: []\n", - "Sentir-se nervoso/a, ansioso/a ou muito tenso/a\n", - "\t Topics: ['nervous']\n", - "NĂŁo ser capaz de impedir ou de controlar as preocupaçÔes\n", - "\t Topics: []\n", - "Preocupar-se muito com diversas coisas\n", - "\t Topics: ['scared']\n", - "Dificuldade para relaxar\n", - "\t Topics: []\n", - "Ficar tĂŁo agitado/a que se torna difĂ­cil permanecer sentado/a\n", - "\t Topics: ['difficulty']\n", - "Ficar facilmente aborrecido/a ou irritado/a\n", - "\t Topics: ['unhappy']\n", - "Sentir medo como se algo horrĂ­vel fosse acontecer\n", - "\t Topics: ['scared']\n", - "FĂžlt deg nervĂžs, engstelig eller veldig stresset\n", - "\t Topics: ['nervous', 'scared']\n", - "Ikke klart Ă„ slutte Ă„ bekymre deg eller kontrolleren bekymringene dine\n", - "\t Topics: ['anxiety', 'scared']\n" + "CES_D English\n", + "GAD-7 Portuguese\n", + "GAD-7 Norwegian\n" ] } ], "source": [ - "for q in questions:\n", - " print (q.question_text)\n", - " print(\"\\t\", \"Topics:\", q.topics)" - ] - }, - { - "cell_type": "markdown", - "id": "3cec3fb6-8ede-4b55-9cf1-cc13e121f208", - "metadata": {}, - "source": [ - "See the similarity matrix" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "fd404da6-bef0-448e-be60-7f85c540736a", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[ 1. , 0.31365012, 0.34323075, -0.26082835, 0.42788812,\n", - " 0.34054826, -0.3074893 , -0.18449381, -0.25914563, 0.31232795,\n", - " 0.28057174, -0.28101035, 0.48577076, 0.27214028, -0.28000391,\n", - " -0.1989061 , 0.2869449 , 0.31094228, 0.37545969, 0.28829139,\n", - " 0.3378802 , 0.44290323, 0.438708 , -0.26580206, 0.38783188,\n", - " 0.53001133, 0.25845853, 0.34834389, 0.4759781 ],\n", - " [ 0.31365012, 1. , 0.32531283, -0.3844969 , -0.39382813,\n", - " -0.43607551, -0.44434266, -0.23701803, -0.46996572, -0.36608222,\n", - " -0.34493579, -0.2956176 , 0.36299875, 0.38550648, -0.20762319,\n", - " -0.30174485, -0.41118524, -0.42717949, -0.33941373, 0.37951923,\n", - " -0.31706227, 0.11435868, -0.11078689, -0.19496468, -0.25027672,\n", - " -0.14382353, -0.24803396, -0.29994106, -0.12476518],\n", - " [ 0.34323075, 0.32531283, 1. , -0.45727843, 0.36003788,\n", - " 0.44618645, -0.4240064 , -0.30709131, -0.40909897, 0.34075579,\n", - " -0.2236731 , -0.39271 , -0.22370194, 0.32984185, -0.22401793,\n", - " -0.27902953, -0.40553125, 0.3980323 , 0.33332522, 0.50227269,\n", - " -0.24738989, 0.36895739, -0.22465813, -0.30274135, 0.29955818,\n", - " -0.24200864, -0.3136671 , -0.26206926, 0.30112588],\n", - " [-0.26082835, -0.3844969 , -0.45727843, 1. , -0.4569577 ,\n", - " -0.42277966, 0.38703228, 0.30366168, -0.52268369, -0.39910981,\n", - " -0.23776201, 0.51633246, -0.34108038, -0.3767205 , -0.36340258,\n", - " 0.43201062, -0.35038495, -0.41867629, -0.48912954, -0.33474513,\n", - " -0.2370714 , -0.11974313, -0.18702055, -0.08848844, -0.20039013,\n", - " -0.18401696, -0.29761411, -0.21455048, -0.15025351],\n", - " [ 0.42788812, -0.39382813, 0.36003788, -0.4569577 , 1. ,\n", - " 0.46612979, 0.42157178, -0.3835386 , 0.43456739, 0.48017415,\n", - " 0.41496818, -0.42821847, 0.39957158, 0.31182421, 0.18711682,\n", - " -0.33026813, 0.38767802, 0.40536662, 0.35042645, 0.55361806,\n", - " 0.3233571 , 0.35847939, 0.39130566, -0.28819371, 0.38578529,\n", - " 0.23091105, 0.31127457, 0.32661312, 0.40517134],\n", - " [ 0.34054826, -0.43607551, 0.44618645, -0.42277966, 0.46612979,\n", - " 1. , 0.37666923, 0.37785864, 0.61059277, 0.62348795,\n", - " 0.38905807, -0.50561314, 0.3022999 , 0.63457704, 0.14138988,\n", - " -0.3053482 , 0.72113598, 0.84969056, 0.48665365, 0.40313184,\n", - " 0.59024591, 0.19599931, 0.37991669, 0.34379191, 0.56529071,\n", - " 0.33655821, 0.58247683, 0.57359596, 0.3399481 ],\n", - " [-0.3074893 , -0.44434266, -0.4240064 , 0.38703228, 0.42157178,\n", - " 0.37666923, 1. , 0.26738396, -0.4445798 , -0.28049191,\n", - " 0.17394522, 0.26792152, -0.20775775, -0.34379546, -0.06809764,\n", - " 0.30817031, 0.32916076, 0.31908619, 0.23190967, -0.40522168,\n", - " -0.23172471, -0.1904465 , 0.16489996, -0.19845483, -0.24296781,\n", - " -0.21705444, -0.19064073, -0.22449911, -0.20121203],\n", - " [-0.18449381, -0.23701803, -0.30709131, 0.30366168, -0.3835386 ,\n", - " 0.37785864, 0.26738396, 1. , -0.44976477, 0.35844383,\n", - " -0.23884823, 0.51280409, -0.1656963 , -0.27657548, -0.15691071,\n", - " 0.45722326, 0.17416221, 0.31848778, -0.13633848, -0.42640816,\n", - " 0.32815377, -0.15540051, 0.26603857, 0.21937168, -0.15742549,\n", - " 0.18717632, 0.32212818, 0.2892295 , 0.26189335],\n", - " [-0.25914563, -0.46996572, -0.40909897, -0.52268369, 0.43456739,\n", - " 0.61059277, -0.4445798 , -0.44976477, 1. , 0.4107287 ,\n", - " 0.29550899, -0.49753083, 0.29700783, 0.5135982 , 0.25589221,\n", - " -0.55140632, 0.5398524 , 0.61248384, 0.56026084, 0.35783953,\n", - " 0.19603635, -0.15471615, 0.19667964, -0.22919048, 0.28453992,\n", - " 0.15559266, 0.43846325, 0.17708496, -0.22263676],\n", - " [ 0.31232795, -0.36608222, 0.34075579, -0.39910981, 0.48017415,\n", - " 0.62348795, -0.28049191, 0.35844383, 0.4107287 , 1. ,\n", - " 0.48508784, -0.45344683, 0.32909686, 0.50117061, 0.25206486,\n", - " -0.27815291, 0.5532917 , 0.63532132, 0.49855953, 0.50229378,\n", - " 0.50900466, 0.39954063, 0.48933749, -0.20231461, 0.40028247,\n", - " 0.19039359, 0.81144531, 0.52537469, 0.44275866],\n", - " [ 0.28057174, -0.34493579, -0.2236731 , -0.23776201, 0.41496818,\n", - " 0.38905807, 0.17394522, -0.23884823, 0.29550899, 0.48508784,\n", - " 1. , -0.30506056, 0.27763189, 0.34661316, 0.15333628,\n", - " -0.26047368, 0.40100565, 0.36290113, 0.22699762, 0.39342814,\n", - " 0.3268485 , -0.17940384, 0.25595515, -0.36469052, 0.39686932,\n", - " 0.26681698, 0.35875137, 0.29157868, -0.22916284],\n", - " [-0.28101035, -0.2956176 , -0.39271 , 0.51633246, -0.42821847,\n", - " -0.50561314, 0.26792152, 0.51280409, -0.49753083, -0.45344683,\n", - " -0.30506056, 1. , -0.31097613, -0.34956911, -0.29933192,\n", - " 0.72797883, -0.5035294 , -0.56461113, -0.37712277, -0.46562901,\n", - " -0.34388993, -0.13187436, -0.22374915, 0.25037225, -0.32636527,\n", - " -0.3178572 , -0.37945635, -0.31133885, -0.18273997],\n", - " [ 0.48577076, 0.36299875, -0.22370194, -0.34108038, 0.39957158,\n", - " 0.3022999 , -0.20775775, -0.1656963 , 0.29700783, 0.32909686,\n", - " 0.27763189, -0.31097613, 1. , 0.37878658, 0.410183 ,\n", - " -0.18781901, 0.29321214, 0.36460287, 0.39526678, 0.36901565,\n", - " 0.21580743, 0.07026063, 0.11393022, 0.14035777, 0.19217954,\n", - " 0.28559492, 0.16641531, 0.16334557, -0.12259958],\n", - " [ 0.27214028, 0.38550648, 0.32984185, -0.3767205 , 0.31182421,\n", - " 0.63457704, -0.34379546, -0.27657548, 0.5135982 , 0.50117061,\n", - " 0.34661316, -0.34956911, 0.37878658, 1. , 0.30862491,\n", - " -0.3052109 , 0.48134503, 0.66418497, 0.44118959, 0.41113255,\n", - " 0.40972153, 0.04911556, 0.17100067, 0.25634486, 0.41587133,\n", - " 0.31452257, 0.41761598, 0.35414573, 0.12544568],\n", - " [-0.28000391, -0.20762319, -0.22401793, -0.36340258, 0.18711682,\n", - " 0.14138988, -0.06809764, -0.15691071, 0.25589221, 0.25206486,\n", - " 0.15333628, -0.29933192, 0.410183 , 0.30862491, 1. ,\n", - " -0.25251202, 0.1672267 , 0.23000691, 0.45887044, 0.19634964,\n", - " 0.09936232, -0.20750685, 0.11516755, -0.14587801, 0.13228071,\n", - " 0.22911312, 0.23759177, 0.06459401, -0.1610336 ],\n", - " [-0.1989061 , -0.30174485, -0.27902953, 0.43201062, -0.33026813,\n", - " -0.3053482 , 0.30817031, 0.45722326, -0.55140632, -0.27815291,\n", - " -0.26047368, 0.72797883, -0.18781901, -0.3052109 , -0.25251202,\n", - " 1. , -0.2864054 , -0.32981668, -0.27586999, -0.32003299,\n", - " -0.17854403, -0.04999806, -0.10206751, 0.30299896, -0.20539613,\n", - " -0.19172719, -0.22622933, -0.15254901, 0.12608319],\n", - " [ 0.2869449 , -0.41118524, -0.40553125, -0.35038495, 0.38767802,\n", - " 0.72113598, 0.32916076, 0.17416221, 0.5398524 , 0.5532917 ,\n", - " 0.40100565, -0.5035294 , 0.29321214, 0.48134503, 0.1672267 ,\n", - " -0.2864054 , 1. , 0.76820665, 0.48849921, 0.38953472,\n", - " 0.36905334, -0.17136347, 0.33421963, 0.27911943, 0.46396536,\n", - " 0.22439437, 0.54269413, 0.37736891, 0.25686849],\n", - " [ 0.31094228, -0.42717949, 0.3980323 , -0.41867629, 0.40536662,\n", - " 0.84969056, 0.31908619, 0.31848778, 0.61248384, 0.63532132,\n", - " 0.36290113, -0.56461113, 0.36460287, 0.66418497, 0.23000691,\n", - " -0.32981668, 0.76820665, 1. , 0.56325475, 0.42075446,\n", - " 0.49493341, 0.11707951, 0.32410947, 0.25369584, 0.50664527,\n", - " 0.31677536, 0.62125057, 0.44607276, 0.23771368],\n", - " [ 0.37545969, -0.33941373, 0.33332522, -0.48912954, 0.35042645,\n", - " 0.48665365, 0.23190967, -0.13633848, 0.56026084, 0.49855953,\n", - " 0.22699762, -0.37712277, 0.39526678, 0.44118959, 0.45887044,\n", - " -0.27586999, 0.48849921, 0.56325475, 1. , 0.3145965 ,\n", - " 0.20998913, 0.14102601, 0.26335403, -0.00327042, 0.24867791,\n", - " 0.24362498, 0.41831115, 0.18925074, 0.15339243],\n", - " [ 0.28829139, 0.37951923, 0.50227269, -0.33474513, 0.55361806,\n", - " 0.40313184, -0.40522168, -0.42640816, 0.35783953, 0.50229378,\n", - " 0.39342814, -0.46562901, 0.36901565, 0.41113255, 0.19634964,\n", - " -0.32003299, 0.38953472, 0.42075446, 0.3145965 , 1. ,\n", - " -0.27130778, 0.33279813, -0.20272217, -0.30629046, 0.38392485,\n", - " -0.29537458, 0.34465328, -0.24045794, -0.24517567],\n", - " [ 0.3378802 , -0.31706227, -0.24738989, -0.2370714 , 0.3233571 ,\n", - " 0.59024591, -0.23172471, 0.32815377, 0.19603635, 0.50900466,\n", - " 0.3268485 , -0.34388993, 0.21580743, 0.40972153, 0.09936232,\n", - " -0.17854403, 0.36905334, 0.49493341, 0.20998913, -0.27130778,\n", - " 1. , 0.42197277, 0.52886245, 0.45592584, 0.61878452,\n", - " 0.62172088, 0.52241399, 0.92610979, 0.5680121 ],\n", - " [ 0.44290323, 0.11435868, 0.36895739, -0.11974313, 0.35847939,\n", - " 0.19599931, -0.1904465 , -0.15540051, -0.15471615, 0.39954063,\n", - " -0.17940384, -0.13187436, 0.07026063, 0.04911556, -0.20750685,\n", - " -0.04999806, -0.17136347, 0.11707951, 0.14102601, 0.33279813,\n", - " 0.42197277, 1. , 0.62181964, -0.45255874, -0.49822603,\n", - " -0.42426878, -0.41434004, 0.5405692 , 0.880754 ],\n", - " [ 0.438708 , -0.11078689, -0.22465813, -0.18702055, 0.39130566,\n", - " 0.37991669, 0.16489996, 0.26603857, 0.19667964, 0.48933749,\n", - " 0.25595515, -0.22374915, 0.11393022, 0.17100067, 0.11516755,\n", - " -0.10206751, 0.33421963, 0.32410947, 0.26335403, -0.20272217,\n", - " 0.52886245, 0.62181964, 1. , 0.38445373, 0.54563727,\n", - " 0.40793585, 0.57269334, 0.63231114, 0.71673502],\n", - " [-0.26580206, -0.19496468, -0.30274135, -0.08848844, -0.28819371,\n", - " 0.34379191, -0.19845483, 0.21937168, -0.22919048, -0.20231461,\n", - " -0.36469052, 0.25037225, 0.14035777, 0.25634486, -0.14587801,\n", - " 0.30299896, 0.27911943, 0.25369584, -0.00327042, -0.30629046,\n", - " 0.45592584, -0.45255874, 0.38445373, 1. , 0.59924506,\n", - " -0.48413555, -0.29542475, 0.5143325 , 0.51573881],\n", - " [ 0.38783188, -0.25027672, 0.29955818, -0.20039013, 0.38578529,\n", - " 0.56529071, -0.24296781, -0.15742549, 0.28453992, 0.40028247,\n", - " 0.39686932, -0.32636527, 0.19217954, 0.41587133, 0.13228071,\n", - " -0.20539613, 0.46396536, 0.50664527, 0.24867791, 0.38392485,\n", - " 0.61878452, -0.49822603, 0.54563727, 0.59924506, 1. ,\n", - " 0.56679724, 0.45918204, 0.68737897, -0.5579238 ],\n", - " [ 0.53001133, -0.14382353, -0.24200864, -0.18401696, 0.23091105,\n", - " 0.33655821, -0.21705444, 0.18717632, 0.15559266, 0.19039359,\n", - " 0.26681698, -0.3178572 , 0.28559492, 0.31452257, 0.22911312,\n", - " -0.19172719, 0.22439437, 0.31677536, 0.24362498, -0.29537458,\n", - " 0.62172088, -0.42426878, 0.40793585, -0.48413555, 0.56679724,\n", - " 1. , 0.26171543, 0.55825621, -0.47733369],\n", - " [ 0.25845853, -0.24803396, -0.3136671 , -0.29761411, 0.31127457,\n", - " 0.58247683, -0.19064073, 0.32212818, 0.43846325, 0.81144531,\n", - " 0.35875137, -0.37945635, 0.16641531, 0.41761598, 0.23759177,\n", - " -0.22622933, 0.54269413, 0.62125057, 0.41831115, 0.34465328,\n", - " 0.52241399, -0.41434004, 0.57269334, -0.29542475, 0.45918204,\n", - " 0.26171543, 1. , 0.56236216, -0.4854572 ],\n", - " [ 0.34834389, -0.29994106, -0.26206926, -0.21455048, 0.32661312,\n", - " 0.57359596, -0.22449911, 0.2892295 , 0.17708496, 0.52537469,\n", - " 0.29157868, -0.31133885, 0.16334557, 0.35414573, 0.06459401,\n", - " -0.15254901, 0.37736891, 0.44607276, 0.18925074, -0.24045794,\n", - " 0.92610979, 0.5405692 , 0.63231114, 0.5143325 , 0.68737897,\n", - " 0.55825621, 0.56236216, 1. , 0.68338131],\n", - " [ 0.4759781 , -0.12476518, 0.30112588, -0.15025351, 0.40517134,\n", - " 0.3399481 , -0.20121203, 0.26189335, -0.22263676, 0.44275866,\n", - " -0.22916284, -0.18273997, -0.12259958, 0.12544568, -0.1610336 ,\n", - " 0.12608319, 0.25686849, 0.23771368, 0.15339243, -0.24517567,\n", - " 0.5680121 , 0.880754 , 0.71673502, 0.51573881, -0.5579238 ,\n", - " -0.47733369, -0.4854572 , 0.68338131, 1. ]])" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "similarity" - ] - }, - { - "cell_type": "markdown", - "id": "bae7d920-af62-417d-9d03-cf43dad870ab", - "metadata": {}, - "source": [ - "See the response options similarity matrix" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "ec5067d2-d4ec-4fcf-9ace-e37706b79840", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.8090186 , 0.8090186 , 0.13192244, 0.13192244],\n", - " [1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.8090186 , 0.8090186 , 0.13192244, 0.13192244],\n", - " [1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.8090186 , 0.8090186 , 0.13192244, 0.13192244],\n", - " [1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.8090186 , 0.8090186 , 0.13192244, 0.13192244],\n", - " [1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.8090186 , 0.8090186 , 0.13192244, 0.13192244],\n", - " [1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.8090186 , 0.8090186 , 0.13192244, 0.13192244],\n", - " [1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.8090186 , 0.8090186 , 0.13192244, 0.13192244],\n", - " [1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.8090186 , 0.8090186 , 0.13192244, 0.13192244],\n", - " [1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.8090186 , 0.8090186 , 0.13192244, 0.13192244],\n", - " [1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.8090186 , 0.8090186 , 0.13192244, 0.13192244],\n", - " [1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.8090186 , 0.8090186 , 0.13192244, 0.13192244],\n", - " [1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.8090186 , 0.8090186 , 0.13192244, 0.13192244],\n", - " [1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.8090186 , 0.8090186 , 0.13192244, 0.13192244],\n", - " [1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.8090186 , 0.8090186 , 0.13192244, 0.13192244],\n", - " [1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.8090186 , 0.8090186 , 0.13192244, 0.13192244],\n", - " [1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.8090186 , 0.8090186 , 0.13192244, 0.13192244],\n", - " [1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.8090186 , 0.8090186 , 0.13192244, 0.13192244],\n", - " [1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.8090186 , 0.8090186 , 0.13192244, 0.13192244],\n", - " [1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.8090186 , 0.8090186 , 0.13192244, 0.13192244],\n", - " [1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 1. , 1. , 1. , 1. , 1. ,\n", - " 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.8090186 , 0.8090186 , 0.13192244, 0.13192244],\n", - " [0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.9999995 , 0.9999995 , 0.9999995 , 0.9999995 , 0.9999995 ,\n", - " 0.9999995 , 0.9999995 , 0.3014696 , 0.3014696 ],\n", - " [0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.9999995 , 0.9999995 , 0.9999995 , 0.9999995 , 0.9999995 ,\n", - " 0.9999995 , 0.9999995 , 0.3014696 , 0.3014696 ],\n", - " [0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.9999995 , 0.9999995 , 0.9999995 , 0.9999995 , 0.9999995 ,\n", - " 0.9999995 , 0.9999995 , 0.3014696 , 0.3014696 ],\n", - " [0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.9999995 , 0.9999995 , 0.9999995 , 0.9999995 , 0.9999995 ,\n", - " 0.9999995 , 0.9999995 , 0.3014696 , 0.3014696 ],\n", - " [0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.9999995 , 0.9999995 , 0.9999995 , 0.9999995 , 0.9999995 ,\n", - " 0.9999995 , 0.9999995 , 0.3014696 , 0.3014696 ],\n", - " [0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.9999995 , 0.9999995 , 0.9999995 , 0.9999995 , 0.9999995 ,\n", - " 0.9999995 , 0.9999995 , 0.3014696 , 0.3014696 ],\n", - " [0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 , 0.8090186 ,\n", - " 0.9999995 , 0.9999995 , 0.9999995 , 0.9999995 , 0.9999995 ,\n", - " 0.9999995 , 0.9999995 , 0.3014696 , 0.3014696 ],\n", - " [0.13192244, 0.13192244, 0.13192244, 0.13192244, 0.13192244,\n", - " 0.13192244, 0.13192244, 0.13192244, 0.13192244, 0.13192244,\n", - " 0.13192244, 0.13192244, 0.13192244, 0.13192244, 0.13192244,\n", - " 0.13192244, 0.13192244, 0.13192244, 0.13192244, 0.13192244,\n", - " 0.3014696 , 0.3014696 , 0.3014696 , 0.3014696 , 0.3014696 ,\n", - " 0.3014696 , 0.3014696 , 1. , 1. ],\n", - " [0.13192244, 0.13192244, 0.13192244, 0.13192244, 0.13192244,\n", - " 0.13192244, 0.13192244, 0.13192244, 0.13192244, 0.13192244,\n", - " 0.13192244, 0.13192244, 0.13192244, 0.13192244, 0.13192244,\n", - " 0.13192244, 0.13192244, 0.13192244, 0.13192244, 0.13192244,\n", - " 0.3014696 , 0.3014696 , 0.3014696 , 0.3014696 , 0.3014696 ,\n", - " 0.3014696 , 0.3014696 , 1. , 1. ]], dtype=float32)" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "response_options_similarity" - ] - }, - { - "cell_type": "markdown", - "id": "c9a6f2c7-eb01-4d0d-aecd-156068967366", - "metadata": {}, - "source": [ - "## Plot the similarity matrix" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "a1a3c227-9cc2-4261-970d-2eadc52806b5", - "metadata": {}, - "outputs": [], - "source": [ - "import matplotlib.pyplot as plt" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "ca5f5efe-f85f-4a05-865f-7f6b742526f5", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plt.imshow(similarity, cmap='hot', interpolation='nearest')" + "instruments = harmony.example_instruments()\n", + "\n", + "for instrument in instruments:\n", + " print (instrument.instrument_name)" ] }, { "cell_type": "markdown", - "id": "bff1bab4-c20d-4a2d-a23a-6fffc5071a98", - "metadata": {}, - "source": [ - "## Generate a crosswalk table" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "ad7c9adb-e447-4df2-99a4-ce0d76c87f07", - "metadata": {}, - "outputs": [], - "source": [ - "from harmony.matching.generate_crosswalk_table import generate_crosswalk_table" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "45120b33-bf67-4079-849c-311820f0996f", + "id": "f71bb6d7-c4d9-4e5c-9e3f-8f9e0a1b2c3d", "metadata": {}, - "outputs": [], "source": [ - "threshold = 0.6" + "## Match the data" ] }, { "cell_type": "code", - "execution_count": 15, - "id": "0b08ba6d-339b-4b2e-a0f4-0f878f9f51fe", + "execution_count": 3, + "id": "e8d9a7b6-c5f4-4a3b-9d2e-7f8a1b2c3d4e", "metadata": {}, "outputs": [], "source": [ - "df_crosswalk_table = generate_crosswalk_table(instruments, similarity, threshold, is_allow_within_instrument_matches = True, is_enforce_one_to_one = True)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "5f1fc3a4-8eb5-4d50-895b-6590558ad90c", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
pair_namequestion1_idquestion1_textquestion2_idquestion2_textmatch_score
0GAD-7 Portuguese_1_GAD-7 Norwegian_1GAD-7 Portuguese_1Sentir-se nervoso/a, ansioso/a ou muito tenso/aGAD-7 Norwegian_1FĂžlt deg nervĂžs, engstelig eller veldig stresset0.926110
1GAD-7 Portuguese_2_GAD-7 Norwegian_2GAD-7 Portuguese_2NĂŁo ser capaz de impedir ou de controlar as pr...GAD-7 Norwegian_2Ikke klart Ă„ slutte Ă„ bekymre deg eller kontro...0.880754
2CES_D English_6_CES_D English_18CES_D English_6I felt depressed.CES_D English_18I felt sad.0.849691
3CES_D English_10_GAD-7 Portuguese_7CES_D English_10I felt fearful.GAD-7 Portuguese_7Sentir medo como se algo horrĂ­vel fosse acontecer0.811445
4CES_D English_12_CES_D English_16CES_D English_12I was happy.CES_D English_16I enjoyed life.0.727979
\n", - "
" - ], - "text/plain": [ - " pair_name question1_id \\\n", - "0 GAD-7 Portuguese_1_GAD-7 Norwegian_1 GAD-7 Portuguese_1 \n", - "1 GAD-7 Portuguese_2_GAD-7 Norwegian_2 GAD-7 Portuguese_2 \n", - "2 CES_D English_6_CES_D English_18 CES_D English_6 \n", - "3 CES_D English_10_GAD-7 Portuguese_7 CES_D English_10 \n", - "4 CES_D English_12_CES_D English_16 CES_D English_12 \n", - "\n", - " question1_text question2_id \\\n", - "0 Sentir-se nervoso/a, ansioso/a ou muito tenso/a GAD-7 Norwegian_1 \n", - "1 NĂŁo ser capaz de impedir ou de controlar as pr... GAD-7 Norwegian_2 \n", - "2 I felt depressed. CES_D English_18 \n", - "3 I felt fearful. GAD-7 Portuguese_7 \n", - "4 I was happy. CES_D English_16 \n", - "\n", - " question2_text match_score \n", - "0 FĂžlt deg nervĂžs, engstelig eller veldig stresset 0.926110 \n", - "1 Ikke klart Ă„ slutte Ă„ bekymre deg eller kontro... 0.880754 \n", - "2 I felt sad. 0.849691 \n", - "3 Sentir medo como se algo horrĂ­vel fosse acontecer 0.811445 \n", - "4 I enjoyed life. 0.727979 " - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df_crosswalk_table" - ] - }, - { - "cell_type": "markdown", - "id": "0a10bd48-e729-4027-8e56-6b882f263fd2", - "metadata": {}, - "source": [ - "## Cluster the questions\n", - "\n", - "Display the clusters that come out of Harmony by default" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "3eef6bec-df82-42cc-86f1-3ba1d28d77d4", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Cluster #0: I was happy.\n", - "Keywords: ['happy', 'enjoyed', 'future', 'hopeful']\n", - "\t I felt I was just as good as other people.\n", - "\t I felt hopeful about the future.\n", - "\t I was happy.\n", - "\t I enjoyed life.\n", - "\n", - "\n", - "Cluster #1: I talked less than usual.\n", - "Keywords: ['unfriendly', 'less', 'usual']\n", - "\t I was bothered by things that usually don’t bother me.\n", - "\t I talked less than usual.\n", - "\t People were unfriendly.\n", - "\n", - "\n", - "Cluster #2: I felt sad.\n", - "Keywords: ['sad', 'depressed', 'fearful', 'lonely', 'felt']\n", - "\t I did not feel like eating; my appetite was poor.\n", - "\t I felt depressed.\n", - "\t I thought my life had been a failure.\n", - "\t I felt fearful.\n", - "\t I felt lonely.\n", - "\t I had crying spells.\n", - "\t I felt sad.\n", - "\t I felt that people dislike me.\n", - "\t Sentir medo como se algo horrĂ­vel fosse acontecer\n", - "\n", - "\n", - "Cluster #3: I could not get “going.”\n", - "Keywords: ['could', 'sleep', 'restless', 'going', 'get']\n", - "\t I felt that I could not shake off the blues even with help from my family or friends.\n", - "\t I had trouble keeping my mind on what I was doing.\n", - "\t I felt that everything I did was an effort.\n", - "\t My sleep was restless.\n", - "\t I could not get “going.”\n", - "\n", - "\n", - "Cluster #4: FĂžlt deg nervĂžs, engstelig eller veldig stresset\n", - "Keywords: ['ficar', 'facilmente', 'irritado', 'aborrecido']\n", - "\t Sentir-se nervoso/a, ansioso/a ou muito tenso/a\n", - "\t Ficar tĂŁo agitado/a que se torna difĂ­cil permanecer sentado/a\n", - "\t Ficar facilmente aborrecido/a ou irritado/a\n", - "\t FĂžlt deg nervĂžs, engstelig eller veldig stresset\n", - "\n", - "\n", - "Cluster #5: Ikke klart Ă„ slutte Ă„ bekymre deg eller kontrolleren bekymringene dine\n", - "Keywords: ['relaxar', 'dificuldade']\n", - "\t NĂŁo ser capaz de impedir ou de controlar as preocupaçÔes\n", - "\t Preocupar-se muito com diversas coisas\n", - "\t Dificuldade para relaxar\n", - "\t Ikke klart Ă„ slutte Ă„ bekymre deg eller kontrolleren bekymringene dine\n", - "\n", - "\n" - ] - } - ], - "source": [ - "for cluster in match_response.clusters:\n", - " print (f\"Cluster #{cluster.cluster_id}: {cluster.text_description}\")\n", - " print (f\"Keywords: {cluster.keywords}\")\n", - " for question in cluster.items:\n", - " print (\"\\t\", question.question_text)\n", - " print (\"\\n\")" + "match_response = harmony.match_instruments(instruments)" ] }, { "cell_type": "markdown", - "id": "9e9790ad-fcf0-471f-ad5a-24bf6a79be5f", + "id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d", "metadata": {}, "source": [ - "# Call the k-means clustering algorithm" + "## Display the results" ] }, { "cell_type": "code", - "execution_count": 18, - "id": "91c4ed80-67df-4dd9-83ef-951850302204", + "execution_count": 4, + "id": "d4e5f6a7-b8c9-4d0e-1f2a-3b4c5d6e7f8a", "metadata": {}, "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Score = 0.07832815498113632\n" - ] - }, { "data": { "text/html": [ @@ -1116,210 +168,53 @@ " \n", " \n", " \n", - " question_text\n", - " cluster_number\n", + " CES_D English\n", + " GAD-7 Portuguese\n", + " GAD-7 Norwegian\n", " \n", " \n", " \n", " \n", - " 0\n", - " I was bothered by things that usually don’t bo...\n", - " 4\n", - " \n", - " \n", - " 1\n", - " I did not feel like eating; my appetite was poor.\n", - " 2\n", - " \n", - " \n", - " 2\n", - " I felt that I could not shake off the blues ev...\n", - " 2\n", - " \n", - " \n", - " 3\n", - " I felt I was just as good as other people.\n", - " 3\n", - " \n", - " \n", - " 4\n", - " I had trouble keeping my mind on what I was do...\n", - " 2\n", - " \n", - " \n", - " 5\n", - " I felt depressed.\n", - " 1\n", - " \n", - " \n", - " 6\n", - " I felt that everything I did was an effort.\n", - " 2\n", - " \n", - " \n", - " 7\n", - " I felt hopeful about the future.\n", - " 3\n", - " \n", - " \n", - " 8\n", - " I thought my life had been a failure.\n", - " 2\n", - " \n", - " \n", - " 9\n", - " I felt fearful.\n", - " 1\n", - " \n", - " \n", - " 10\n", - " My sleep was restless.\n", - " 0\n", - " \n", - " \n", - " 11\n", - " I was happy.\n", - " 3\n", - " \n", - " \n", - " 12\n", - " I talked less than usual.\n", - " 2\n", - " \n", - " \n", - " 13\n", - " I felt lonely.\n", - " 2\n", - " \n", - " \n", - " 14\n", - " People were unfriendly.\n", - " 4\n", - " \n", - " \n", - " 15\n", - " I enjoyed life.\n", - " 3\n", - " \n", - " \n", - " 16\n", - " I had crying spells.\n", - " 1\n", - " \n", - " \n", - " 17\n", - " I felt sad.\n", - " 1\n", + " CES_D English\n", + " 1.000000\n", + " 0.675000\n", + " 0.550000\n", " \n", " \n", - " 18\n", - " I felt that people dislike me.\n", - " 2\n", + " GAD-7 Portuguese\n", + " 0.675000\n", + " 1.000000\n", + " 0.642857\n", " \n", " \n", - " 19\n", - " I could not get “going.”\n", - " 2\n", - " \n", - " \n", - " 20\n", - " Sentir-se nervoso/a, ansioso/a ou muito tenso/a\n", - " 1\n", - " \n", - " \n", - " 21\n", - " NĂŁo ser capaz de impedir ou de controlar as pr...\n", - " 4\n", - " \n", - " \n", - " 22\n", - " Preocupar-se muito com diversas coisas\n", - " 4\n", - " \n", - " \n", - " 23\n", - " Dificuldade para relaxar\n", - " 4\n", - " \n", - " \n", - " 24\n", - " Ficar tĂŁo agitado/a que se torna difĂ­cil perma...\n", - " 1\n", - " \n", - " \n", - " 25\n", - " Ficar facilmente aborrecido/a ou irritado/a\n", - " 4\n", - " \n", - " \n", - " 26\n", - " Sentir medo como se algo horrĂ­vel fosse acontecer\n", - " 1\n", - " \n", - " \n", - " 27\n", - " FĂžlt deg nervĂžs, engstelig eller veldig stresset\n", - " 1\n", - " \n", - " \n", - " 28\n", - " Ikke klart Ă„ slutte Ă„ bekymre deg eller kontro...\n", - " 4\n", + " GAD-7 Norwegian\n", + " 0.550000\n", + " 0.642857\n", + " 1.000000\n", " \n", " \n", "\n", "" ], "text/plain": [ - " question_text cluster_number\n", - "0 I was bothered by things that usually don’t bo... 4\n", - "1 I did not feel like eating; my appetite was poor. 2\n", - "2 I felt that I could not shake off the blues ev... 2\n", - "3 I felt I was just as good as other people. 3\n", - "4 I had trouble keeping my mind on what I was do... 2\n", - "5 I felt depressed. 1\n", - "6 I felt that everything I did was an effort. 2\n", - "7 I felt hopeful about the future. 3\n", - "8 I thought my life had been a failure. 2\n", - "9 I felt fearful. 1\n", - "10 My sleep was restless. 0\n", - "11 I was happy. 3\n", - "12 I talked less than usual. 2\n", - "13 I felt lonely. 2\n", - "14 People were unfriendly. 4\n", - "15 I enjoyed life. 3\n", - "16 I had crying spells. 1\n", - "17 I felt sad. 1\n", - "18 I felt that people dislike me. 2\n", - "19 I could not get “going.” 2\n", - "20 Sentir-se nervoso/a, ansioso/a ou muito tenso/a 1\n", - "21 NĂŁo ser capaz de impedir ou de controlar as pr... 4\n", - "22 Preocupar-se muito com diversas coisas 4\n", - "23 Dificuldade para relaxar 4\n", - "24 Ficar tĂŁo agitado/a que se torna difĂ­cil perma... 1\n", - "25 Ficar facilmente aborrecido/a ou irritado/a 4\n", - "26 Sentir medo como se algo horrĂ­vel fosse acontecer 1\n", - "27 FĂžlt deg nervĂžs, engstelig eller veldig stresset 1\n", - "28 Ikke klart Ă„ slutte Ă„ bekymre deg eller kontro... 4" + " CES_D English GAD-7 Portuguese GAD-7 Norwegian\n", + "CES_D English 1.000000 0.675000 0.550000\n", + "GAD-7 Portuguese 0.675000 1.000000 0.642857\n", + "GAD-7 Norwegian 0.550000 0.642857 1.000000" ] }, - "execution_count": 18, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "from harmony import cluster_questions\n", - "df, score = cluster_questions(match_response.questions, num_clusters = 5, is_show_graph = True)\n", - "\n", - "print (f\"Score = {score}\")\n", - "\n", - "df" + "harmony.util.convert_matches_to_dataframe(match_response)" ] }, { "cell_type": "markdown", - "id": "066f21a1-8106-4062-8d00-cef33d65ebb0", + "id": "c3d4e5f6-a7b8-4c9d-0e1f-2a3b4c5d6e7f", "metadata": {}, "source": [ "# Display the similarities between instruments"