{"id":23053166,"url":"https://github.com/fairdataihub/sparclink","last_synced_at":"2025-10-24T07:51:18.398Z","repository":{"id":39576245,"uuid":"408677680","full_name":"fairdataihub/SPARClink","owner":"fairdataihub","description":"SPARClink: Visualizing the Impact of SPARC","archived":false,"fork":false,"pushed_at":"2025-07-23T02:48:35.000Z","size":79249,"stargazers_count":2,"open_issues_count":13,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-07-23T04:25:13.413Z","etag":null,"topics":["citations","d3js","fair","hackathon","keyword-extraction","machine-learning","nlp","python","topic-modeling","visualization"],"latest_commit_sha":null,"homepage":"https://fairdataihub.org/sparclink","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fairdataihub.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"docs/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"docs/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-09-21T03:39:55.000Z","updated_at":"2024-08-05T20:53:49.000Z","dependencies_parsed_at":"2024-02-26T05:28:44.027Z","dependency_job_id":"82576d8c-d49d-48d9-be29-4e523ac9f3e2","html_url":"https://github.com/fairdataihub/SPARClink","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/fairdataihub/SPARClink","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fairdataihub%2FSPARClink","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fairdataihub%2FSPARClink/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fairdataihub%2FSPARClink/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fairdataihub%2FSPARClink/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fairdataihub","download_url":"https://codeload.github.com/fairdataihub/SPARClink/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fairdataihub%2FSPARClink/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268017043,"owners_count":24181659,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-31T02:00:08.723Z","response_time":66,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["citations","d3js","fair","hackathon","keyword-extraction","machine-learning","nlp","python","topic-modeling","visualization"],"created_at":"2024-12-16T00:16:45.398Z","updated_at":"2025-10-24T07:51:13.357Z","avatar_url":"https://github.com/fairdataihub.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cbr/\u003e \u003cbr/\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/SPARC-FAIR-Codeathon/SPARClink\"\u003e\n    \u003cimg src=\"https://github.com/SPARC-FAIR-Codeathon/SPARClink/blob/main/docs/images/logo.svg\" alt=\"SPARC link logo\" height=\"150\"\u003e\n  \u003c/a\u003e\n  \u003cbr/\u003e\n  \u003ch3 align=\"center\"\u003e\n    Visualizing the Impact of SPARC\n  \u003c/h3\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/SPARC-FAIR-Codeathon/SPARClink/blob/main/LICENSE\" alt=\"GitHub license\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/license/SPARC-FAIR-Codeathon/SPARClink\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/SPARC-FAIR-Codeathon/SPARClink/stargazers\" alt=\"GitHub stars\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/stars/SPARC-FAIR-Codeathon/SPARClink\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/SPARC-FAIR-Codeathon/SPARClink/network\" alt=\"GitHub forks\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/forks/SPARC-FAIR-Codeathon/SPARClink\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/SPARC-FAIR-Codeathon/SPARClink/issues\" alt=\"GitHub issues\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/issues/SPARC-FAIR-Codeathon/SPARClink\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/SPARC-FAIR-Codeathon/SPARClink/graphs/contributors\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/contributors/SPARC-FAIR-Codeathon/SPARClink\" alt=\"GitHub contributors\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"#\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/last-commit/SPARC-FAIR-Codeathon/SPARClink\" alt=\"GitHub last commit\"\u003e\n  \u003c/a\u003e\n\u003c!--   \u003ca href=\"#\"\u003e\n    \u003cimg src=\"https://img.shields.io/tokei/lines/github/SPARC-FAIR-Codeathon/SPARClink\" alt=\"Lines of code\"\u003e\n  \u003c/a\u003e --\u003e\n  \u003ca href=\"#\"\u003e\n    \u003cimg src=\"https://badgen.net/badge/Open%20Source%20%3F/Yes%21/blue?icon=github\" alt=\"Open Source? Yes!\"\u003e\n  \u003c/a\u003e\n  \u003cbr/\u003e \n\u003c/p\u003e\n \u003cbr/\u003e \u003cbr/\u003e\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/SPARC-FAIR-Codeathon/SPARClink/blob/main/docs/images/2021-07-25%2013-47-30.gif\"/\u003e\n\u003c/p\u003e\n\u003cbr/\u003e \u003cbr/\u003e\n \n \n## Table of content\n- [What is SPARClink?](#what-is-sparclink)\n  - [NIH SPARC](#nih-sparc)\n  - [FAIR Data](#fair-data)\n  - [Defining Impact](#defining-impact)\n  - [Origin Story](#origin-story)\n  - [Goal](#goal)\n- [How it works](#how-it-works)\n- [Run the project](#run-the-project)\n  - [Testing](#testing)\n  - [Firebase Backend Implementation](#firebase-backend-implementation)\n  - [Visualization Web App](#visualization-web-app)\n- [Maintainers](#maintainers)\n- [Contributing](#contributing)\n- [License](#license)\n- [Further Reading](#further-reading)\n\n## What is SPARClink?\n### NIH SPARC\nThe NIH Common Fund’s Stimulating Peripheral Activity to Relieve Conditions (SPARC) program aims to transform our understanding of nerve-organ interactions with the intent of advancing bioelectronic medicine towards treatments that change lives. [Learn more about SPARC](https://sparc.science/about)\n\n### FAIR Data\nBy employing a [FAIR](https://www.nature.com/articles/sdata201618) (Findable, Accessible, Interoperable and Reusable) first approach SPARC datasets, protocols and publications generated via the SPARC program is intended to be able to be used by researchers globally with reproducible results. However, at the current moment, there is no real tangible way to show or visualize the usage of SPARC data in outside projects and publications. \n\n### Origin Story\nThe SPARClink project was first born as an idea at the 2021 NIH SPARC Codeathon ([more details here](https://sparc.science/help/2021-sparc-fair-codeathon)). The idea behind the topic was created as a method of visualizing citation data on datasets, protocols and publications to determine the degree of use of SPARC material outside of the official channels.\n\n### Defining Impact\nThe word 'Impact' can have many different meanings depending on the context that it is viewed in. Within the SPARClink project, we consider impact to be the frequency of citations of SPARC funded resources. The SPARC program intends to advance medical understanding by providing datasets, maps and computational studies that follow FAIR principles and is used by researchers all around the world. The usage of SPARC resouces by platforms and programs ouside SPARC is what we view as the meaning of the term 'Impact'.\n\n### Goal\nThe goal of SPARClink is to provide a system that will query all external publications using open source tools and platforms and create an interactable visualization that is helpful to any person (researcher or otherwise) to showcase the impact that SPARC has on the overall scientific research community. These impact measurements are meant to be used as a showcase of the concept of FAIR data and how good data generation practices and methods are useful in advancing the field of bioelectronic medicine.\n\nHowever, datasets and protocols are not referenced similar to prior research in manuscripts. Dataset and protocol identifiers or urls are only mentioned in text or under supplementary materials, making this a difficult task to accomplish.\n\n## How it works?\nMetadata information on datasets and protocols are extracted from [Pennsieve](https://app.pennsieve.io/), SPARC Airtable database, and [Protocols.io](https://www.protocols.io/workspaces/sparc). This information is queried against the [NIH RePORTER](https://api.reporter.nih.gov/), [NCBI](https://www.ncbi.nlm.nih.gov/), and [Google Scholar](https://serpapi.com/google-scholar-api) to extract citations and create a well connected graph using [d3.js](https://d3js.org/). \n\n\u003cp align=\"center\"\u003e\n  \u003c!--\u003cimg src=\"https://user-images.githubusercontent.com/21206996/125478715-d5f83b6f-8a6d-4ef8-a845-952baa27d8da.png\" /\u003e--\u003e\n  \u003cimg src=\"https://github.com/SPARC-FAIR-Codeathon/SPARClink/blob/main/docs/images/sparclink_block_diagram-01.png\" width=\"500\"/\u003e\n  \u003cbr/\u003e\n  \u003cspan\u003e SPARClink workflow \u003c/span\u003e\n\u003c/p\u003e\n\n## Run the project\nClone or download the repository.\n``` bash\ngit clone https://github.com/SPARC-FAIR-Codeathon/SPARClink.git\n```\n\nThe development environment uses [Anaconda](https://www.anaconda.com/products/individual) to keep track of the python dependencies. Download Anaconda here: [Anaconda Individual Edition](https://www.anaconda.com/products/individual).\n\nThe following would create a new `conda` environment with the dependencies required to run the project.\n``` bash\ncd SPARClink\nconda env create -f environment.yml --prefix ./env \nconda activate ./env\n```\nThe application uses [python-dotenv](https://github.com/theskumar/python-dotenv) to load configuration information from a `.env` file. Create a `.env` file with the following information.\n``` bash\nPROTOCOLS_IO_KEY=\"\u003cprotocols.io api key\u003e\"\nSERPAPI_KEY=\"\u003cserpapi api key\u003e\"\n```\nA public API key for protocols.io can be obtained by signing up as [shown here](https://www.protocols.io/developers). SERP api key is not required at the moment. To integrate google scholar results, an API key can be obtained as [shown here](https://serpapi.com/).\n\n### Testing\nUnit tests to verify external APIs are written in Python unittest framework. The tests can be run as shown below:\n``` bash\npython -m unittest -v tests/test_NIH_NCBI.py\n```\n\n### Firebase Backend Implementation\nCurrently, the central database is implemented as a [Firebase](https://firebase.google.com/) real-time database. The database can be updated by running `FirebaseImplementation.py`. However, this requires a username and a password.\n\nTo use your own Firebase instance, setup a Firebase web app as [shown here](https://firebase.google.com/docs/web/setup), and update `firebaseConfig` in `FirebaseImplementation.py` with the new API keys. [Setup a new user](https://firebase.google.com/docs/auth/web/password-auth), and configure the [real-time database](https://firebase.google.com/docs/database/web/start). It is recommended to limit the database write permission to authenticated users. Run `FireabaseImplementation.py` and enter user's email/password when prompted.\n\n\u003cp align=\"center\"\u003e\n  \u003c!--\u003cimg src=\"https://user-images.githubusercontent.com/21206996/125478715-d5f83b6f-8a6d-4ef8-a845-952baa27d8da.png\" /\u003e--\u003e\n  \u003cimg src=\"https://github.com/SPARC-FAIR-Codeathon/SPARClink/blob/main/docs/images/backend_flow_chart-01.png\" width=\"500\"/\u003e\n  \u003cbr/\u003e\n  \u003cspan\u003eBackend Flow Chart: Shows the methods implemented in the backend to gather citations of datasets, protocols, and SPARC publications.\u003c/span\u003e\n\u003c/p\u003e\n\n### ML Data Indexing Engine\nWe have setup a [Flask](https://flask.palletsprojects.com/en/2.0.x/) server on [pythonanywhere](https://www.pythonanywhere.com/) to handle all our machine learning operations. If you would like to setup a backend for your own fork, please setup a flask server on any hosting service of your choice and modify the approriate endpoints in the `flask_app.py` file. To learn more about the techniques we used, refer to the [Further Reading](https://github.com/SPARC-FAIR-Codeathon/SPARClink#further-reading) section. \n\n### Visualization Web App\nThe vizualizations created from the realtime database can be viewed directly from our [demo page](https://sparclink-f151d.web.app/sparclink) or by running the local version of our frontend. We use [Vue.js](https://vuejs.org/) and [Tailwind CSS](https://tailwindcss.com/) to render the demo webpage. The interactive force directed graph is created via [d3.js](https://d3js.org/) using data requested from our Firebase real-time database. Within the SPARClink demo page we use the HTML canvas element to render the visualization. In order to get your forked repo frontend to run locally, use the following commands:\n```bash\ncd frontend\nnpm install\nnpm run serve\n```\nYou can now open your browser and visit the url [http://localhost:8080/sparclink](http://localhost:8080/sparclink) to view the webpage. \n\n\n`Note:` To use the smart word filter, please refer to the frontend available in the [`smart_filter`](https://github.com/SPARC-FAIR-Codeathon/SPARClink/tree/smart_filter/frontend) branch. This feature will lead to slower render times on the graph visualization so we have not included it in the main branch.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/SPARC-FAIR-Codeathon/SPARClink/blob/main/docs/images/2021-07-25 14-44-36.gif\" /\u003e\n  \u003cbr/\u003e\n  \u003cspan\u003e SPARClink smart filter \u003c/span\u003e\n\u003c/p\u003e\n\n\u003c!--Keep track of the project [here](https://github.com/SPARC-FAIR-Codeathon/SPARClink/projects/1)--\u003e\n\n## Maintainers\n* [Sanjay Soundarajan](https://github.com/megasanjay)\n* [Monalisa Achalla](https://github.com/a-monalisa)\n* [Jongchan Kim](https://github.com/Kim-Jongchan)\n* [Ashutosh Singh](https://github.com/Ashutosh1712)\n* [Sachira Kuruppu](https://github.com/rsachira-abi)\n\n## Contributing\nIf you would like to suggest an idea to this project, please let us know in the [issues](https://github.com/SPARC-FAIR-Codeathon/SPARClink/issues) page and we will take a look at your suggestion. Please use the `enhacement` tag to label your suggestion. \n\nIf you would like to add your own feature, feel free to fork the project and send a pull request our way. This is an open source project so we will welcome your contributiobs with open arms. \nRefer to our [Contributing Guildeines](./docs/CONTRIBUTING.md) and [Code of Conduct](./docs/CODE_OF_CONDUCT.md) for more information. Add a [GitHub Star](https://github.com/SPARC-FAIR-Codeathon/SPARClink) to support active development!\n\n## License\nSPARClink is an open source project and distributed under the  MIT License. See [LICENSE](./LICENSE) for more details.\n\n## Further Reading\n- [External APIs](./ExternalAPIs/README.md)\n- [SPARC APIs](./SPARC/README.md)\n- [Visualization and frontend](./frontend/README.md)\n- [ML Data Indexing Engine](./MLDataIndexingEngine/README.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffairdataihub%2Fsparclink","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffairdataihub%2Fsparclink","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffairdataihub%2Fsparclink/lists"}