{ "info": { "author": "", "author_email": "shobana.venkat88@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "# PARC\nPARC, \u201cphenotyping by accelerated refined community-partitioning\u201d - is a fast, automated, combinatorial graph-based clustering approach that integrates hierarchical graph construction (HNSW) and data-driven graph-pruning with the new Leiden community-detection algorithm.\n\n## Getting Started\n### install using pip\n```\nconda create --name ParcEnv pip // (optional)\npip install parc // tested on linux\n```\n### install by cloning repository and running setup.py \n```\ngit clone https://github.com/ShobiStassen/PARC.git \npython3 setup.py install // cd into the directory of the cloned PARC folder containing setup.py and issue this command\n```\n\n### install dependencies separately if needed\npip install leidenalg, igraph and hnswlib\n\n## Example Usage 1. (small test sets) - IRIS and Digits dataset from sklearn\n\n```\nfrom parc import PARC\nimport matplotlib.pyplot as plt\nfrom sklearn import datasets\n\n// load sample IRIS data\n//data (n_obs x k_dim, 150x4)\niris = datasets.load_iris()\nX = iris.data\ny=iris.target\n\nplt.scatter(X[:,0],X[:,1], c = y) // colored by 'ground truth'\nplt.show()\n\nParc1 = parc.PARC(X,y) // instantiate PARC\nParc1.run_PARC() // run the clustering\nparc_labels = Parc1.labels\n\n# View scatterplot colored by PARC labels\n\nplt.scatter(X[:, 0], X[:, 1], c=parc_labels)\nplt.show()\n\n// load sample digits data\ndigits = datasets.load_digits()\nX = digits.data // (n_obs x k_dim, 1797x64) \ny = digits.target\nParc2 = parc.PARC(X,y, jac_std_global='median') // 'median' is default pruning level\nParc2.run_PARC()\nparc_labels = Parc2.labels\n\n```\n## Example Usage 2. (mid-scale scRNA-seq): 10X PBMC (Zheng et al., 2017)\n[pre-processed datafile](https://drive.google.com/file/d/1H4gOZ09haP_VPCwsYxZt4vf3hJ1GZj3b/view?usp=sharing)\n\n[annotations](Datasets/annotations_zhang.txt)\n\n```\nimport PARC\nimport csv\n\n## load data (50 PCs of filtered gene matrix pre-processed as per Zheng et al. 2017)\n\nX = csv.reader(open(\"'./pca50_pbmc68k.txt\", 'rt'),delimiter = \",\")\nX = np.array(list(X)) // (n_obs x k_dim, 68579 x 50)\nX = X.astype(\"float\")\n// OR with pandas as: X = pd.read_csv(\"'./pca50_pbmc68k.txt\").values.astype(\"float\")\n\ny = [] // annotations\nwith open('/annotations_zhang.txt', 'rt') as f: \n for line in f: y.append(line.strip().replace('\\\"', ''))\n// OR with pandas as: y = list(pd.read_csv('./data/zheng17_annotations.txt', header=None)[0]) \n\n\nparc1 = parc.PARC(X,y) // instantiate PARC\nparc1.run_PARC() // run the clustering\nparc_labels = parc1.labels \n```\n![](Images/10X_PBMC_PARC_andGround.png) tsne plot of annotations and PARC clustering\n\n## Example Usage 3. 10X PBMC (Zheng et al., 2017) integrating Scanpy pipeline\n\n[raw datafile](https://github.com/10XGenomics/single-cell-3prime-paper/tree/master/pbmc68k_analysis)\n\n```\npip install scanpy\n```\n\n```\nimport scanpy.api as sc\nimport pandas as pd\n//load data\npath = './data/zheng17_filtered_matrices_mex/hg19/'\nadata = sc.read(path + 'matrix.mtx', cache=True).T # transpose the data\nadata.var_names = pd.read_csv(path + 'genes.tsv', header=None, sep='\\t')[1]\nadata.obs_names = pd.read_csv(path + 'barcodes.tsv', header=None)[0]\n\n// annotations as per correlation with pure samples\nannotations = list(pd.read_csv('./data/zheng17_annotations.txt', header=None)[0])\nadata.obs['annotations'] = pd.Categorical(annotations)\n\n//pre-process as per Zheng et al., and take first 50 PCs for analysis\nsc.pp.recipe_zheng17(adata)\nsc.tl.pca(adata, n_comps=50)\nparc1 = parc.PARC(adata2.obsm['X_pca'], annotations)\nparc_labels = parc1.labels\nadata2.obs[\"PARC\"] = pd.Categorical(parc_labels)\n\n//visualize\nsc.pl.umap(adata, color='annotations')\nsc.pl.umap(adata, color='PARC')\n```\n## Example Usage 4. Large-scale (70K subset and 1.1M cells) Lung Cancer cells (multi-ATOM imaging cytometry based features)\n\n[normalized image-based feature matrix 70K cells](https://drive.google.com/open?id=1LeFjxGlaoaZN9sh0nuuMFBK0bvxPiaUz)\n\n[Lung Cancer cells annotation 70K cells](https://drive.google.com/open?id=1iwXQkdwEwplhZ1v0jYWnu2CHziOt_D9C)\n\n[1.1M cell features and annotations](https://data.mendeley.com/datasets/nnbfwjvmvw/draft?a=dae895d4-25cd-4bdf-b3e4-57dd31c11e37)\n\n```\nimport PARC\nimport pandas as pd\n\n// load data: digital mix of 7 cell lines from 7 sets of pure samples (1.1M cells x 26 features)\nX = pd.read_csv(\"'./LungData.txt\").values.astype(\"float\") \ny = list(pd.read_csv('./LungData_annotations.txt', header=None)[0]) // list of cell-type annotations\n\n// run PARC\nparc1 = parc.PARC(X, y)\nparc_labels = parc1.labels\n\n```\n![](Images/70K_Lung_github_overview.png) tsne plot of annotations and PARC clustering, heatmap of features\n\n## References to dependencies \n- Leiden (pip install leidenalg) (V.A. Traag, 2019 doi.org/10.1038/s41598-019-41695-z)\n- hsnwlib Malkov, Yu A., and D. A. Yashunin. \"Efficient and robust approximate nearest neighbor search using Hierarchical Navigable Small World graphs.\" TPAMI, preprint: https://arxiv.org/abs/1603.09320\n- igraph (igraph.org/python/)\n\n## Citing\nIf you find this code useful in your work, please consider citing this paper [PARC:ultrafast and accurate clustering of phenotypic data of millions of single cells](https://doi.org/10.1101/765628)\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/ShobiStassen/PARC", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "parc", "package_url": "https://pypi.org/project/parc/", "platform": "", "project_url": "https://pypi.org/project/parc/", "project_urls": { "Homepage": "https://github.com/ShobiStassen/PARC" }, "release_url": "https://pypi.org/project/parc/0.18/", "requires_dist": [ "pybind11", "numpy", "scipy", "pandas", "hnswlib", "python-igraph", "leidenalg" ], "requires_python": "", "summary": "", "version": "0.18" }, "last_serial": 5974535, "releases": { "0.11": [ { "comment_text": "", "digests": { "md5": "1aa6c69273c58ffb0fb42b9df524bc54", "sha256": "6cdc8b684892b0c718df336e9f1fa45994d143a80fd1fcd44f2aa244c07bbd81" }, "downloads": -1, "filename": "parc-0.11-py3-none-any.whl", "has_sig": false, "md5_digest": "1aa6c69273c58ffb0fb42b9df524bc54", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 15632, "upload_time": "2019-09-25T04:08:16", "url": "https://files.pythonhosted.org/packages/15/e3/edcf42936fd66ad544cf2ae19b00b17db42814c679311f49fe586557b943/parc-0.11-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1d1803397d8b7297c5f1a81f88bb5334", "sha256": "d78bd41fd4e3c0b2629e5633df82c585360eb0400a5f1aaa7b69bf5e92f96551" }, "downloads": -1, "filename": "parc-0.11.tar.gz", "has_sig": false, "md5_digest": "1d1803397d8b7297c5f1a81f88bb5334", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11451, "upload_time": "2019-09-25T04:08:18", "url": "https://files.pythonhosted.org/packages/b2/bc/be14a74fb022ae98198004fe4aca58a450b8d359e7d73a6dd53f31a2c7d8/parc-0.11.tar.gz" } ], "0.12": [ { "comment_text": "", "digests": { "md5": "10d1e8664d764a78341758b7cd623dff", "sha256": "4691ae8303d3107a9b677eeb9bc43672d6842700925af538772ec3c1e7db6554" }, "downloads": -1, "filename": "parc-0.12-py3-none-any.whl", "has_sig": false, "md5_digest": "10d1e8664d764a78341758b7cd623dff", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 15634, "upload_time": "2019-09-25T05:05:07", "url": "https://files.pythonhosted.org/packages/25/b2/01bd5650fac798229e2596dcba957f962d5754e9e4f8ac48ed58c97546ad/parc-0.12-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a4ca6636a6892d274546384c42097882", "sha256": "4fd17f8ea1927fe5002724975c2c95b1a641c6d2b9d0f8a62986bf3b38ba8ea3" }, "downloads": -1, "filename": "parc-0.12.tar.gz", "has_sig": false, "md5_digest": "a4ca6636a6892d274546384c42097882", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11454, "upload_time": "2019-09-25T05:05:10", "url": "https://files.pythonhosted.org/packages/ab/4b/d2bcc745d08476472c13ff89930808924528aa09ecf9d324fe39d947d35f/parc-0.12.tar.gz" } ], "0.13": [ { "comment_text": "", "digests": { "md5": "00315432d7a8df629b1f6f747891c9f3", "sha256": "19ff636f3900ff1b20deb6079932e8d5b0d416dcba68e1dd6d9bd498026a6943" }, "downloads": -1, "filename": "parc-0.13-py3-none-any.whl", "has_sig": false, "md5_digest": "00315432d7a8df629b1f6f747891c9f3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9978, "upload_time": "2019-09-25T05:46:43", "url": "https://files.pythonhosted.org/packages/eb/df/d5fd32038bcc14f951e457a1ebc0ffb0c190a3f9be04b71d267b5f8b4df4/parc-0.13-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c6e3b98dcd8fbe31447960697f2ad8d1", "sha256": "f6625801af36c57bbe014358e74a89d88325b364675aa7601aea9ed212877ca7" }, "downloads": -1, "filename": "parc-0.13.tar.gz", "has_sig": false, "md5_digest": "c6e3b98dcd8fbe31447960697f2ad8d1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11432, "upload_time": "2019-09-25T05:46:45", "url": "https://files.pythonhosted.org/packages/5d/34/4fdb0159eec72580ff781ed6ba3b8a7dcd8a9d98223383617b401fe217e5/parc-0.13.tar.gz" } ], "0.14": [ { "comment_text": "", "digests": { "md5": "bfb0f8ac33cc445475c7a705337ebf27", "sha256": "1327d091d7fff7025ec18aa1fbd814c686acb1d8ce967cf0026ed2c2955fd5d1" }, "downloads": -1, "filename": "parc-0.14-py3-none-any.whl", "has_sig": false, "md5_digest": "bfb0f8ac33cc445475c7a705337ebf27", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9979, "upload_time": "2019-09-25T05:57:12", "url": "https://files.pythonhosted.org/packages/e0/55/bd07686ac21f8c66509b1f12306a417ace7b8802056e878120044bd406f7/parc-0.14-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9820c1fb843a591e5f91834051912224", "sha256": "010f1249c9ffb151f24f5d185457e097ca9656c95a777ba9f97fbb73d86165f8" }, "downloads": -1, "filename": "parc-0.14.tar.gz", "has_sig": false, "md5_digest": "9820c1fb843a591e5f91834051912224", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11432, "upload_time": "2019-09-25T05:57:14", "url": "https://files.pythonhosted.org/packages/2f/19/3e14519ea16a721fb8f58ee95935df73375067b40725ffbf8fc59c839125/parc-0.14.tar.gz" } ], "0.15": [ { "comment_text": "", "digests": { "md5": "d560789f1685d6bd56bdd1cc66c5936d", "sha256": "c354d9c6482bae6de81502d395c6eb6774af6c69ff4a30ad23d0b4256d2110c1" }, "downloads": -1, "filename": "parc-0.15-py3-none-any.whl", "has_sig": false, "md5_digest": "d560789f1685d6bd56bdd1cc66c5936d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9921, "upload_time": "2019-09-25T06:50:31", "url": "https://files.pythonhosted.org/packages/10/b9/e1ceee4361e6b7ca61275d003dd2bd85663de7c55c33bf053c37480667bd/parc-0.15-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d50ea76841834857570964adb0243247", "sha256": "b3128eff9fd8c17c562959b8e452ec73b89017faafe2c5a11040ce144681e6bb" }, "downloads": -1, "filename": "parc-0.15.tar.gz", "has_sig": false, "md5_digest": "d50ea76841834857570964adb0243247", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11377, "upload_time": "2019-09-25T06:50:33", "url": "https://files.pythonhosted.org/packages/94/93/2ee22560498b5c25a35b55818ba7a17bc63aed8bee226ba3f228fa670ce6/parc-0.15.tar.gz" } ], "0.16": [ { "comment_text": "", "digests": { "md5": "d3560b3ee20d0de9dbaeff51c31579ec", "sha256": "aed506e6d3077dce392ee06587e4732be17216b60be7e30f04f06c81f172991f" }, "downloads": -1, "filename": "parc-0.16-py3-none-any.whl", "has_sig": false, "md5_digest": "d3560b3ee20d0de9dbaeff51c31579ec", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9889, "upload_time": "2019-09-25T10:00:25", "url": "https://files.pythonhosted.org/packages/fc/ec/9ebde874b068c39f619873a0621b64e7616cf368d9aa045db19e6e2040c0/parc-0.16-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fa346f602307820c4c21901b7aa3eec3", "sha256": "ae8618067bbdecdd2a7218c78b975df6fa1b95785208973cc2d32e40c27e4be5" }, "downloads": -1, "filename": "parc-0.16.tar.gz", "has_sig": false, "md5_digest": "fa346f602307820c4c21901b7aa3eec3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11352, "upload_time": "2019-09-25T10:00:33", "url": "https://files.pythonhosted.org/packages/3a/87/a1a2d0f4396ed1f9bf41acf59e40bb3cf9ce8cc0d177d4d6b0685b74366b/parc-0.16.tar.gz" } ], "0.17": [ { "comment_text": "", "digests": { "md5": "d65f8b165284fddb7d33dff6f578607d", "sha256": "4f32b812f6965342987048c5156cb85be266b726b5b17e8c3ceced0f45e1c115" }, "downloads": -1, "filename": "parc-0.17-py3-none-any.whl", "has_sig": false, "md5_digest": "d65f8b165284fddb7d33dff6f578607d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9890, "upload_time": "2019-09-25T10:08:31", "url": "https://files.pythonhosted.org/packages/cf/af/b734e40329ae3b5650bb7c83060c8d4fad8751e0cb40c5128b2672f4d4b8/parc-0.17-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0de01ac3405b9d176c31b3c7f6bc09cb", "sha256": "7ea6ca2dd58662ec851d309f22ec7bb6e29b01033d07203313f91f4691fd209e" }, "downloads": -1, "filename": "parc-0.17.tar.gz", "has_sig": false, "md5_digest": "0de01ac3405b9d176c31b3c7f6bc09cb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11352, "upload_time": "2019-09-25T10:08:33", "url": "https://files.pythonhosted.org/packages/e9/3e/b0fc0ebe813af3c551e0653d69b03ebc295fb4c8ed993e1429485b4fa241/parc-0.17.tar.gz" } ], "0.18": [ { "comment_text": "", "digests": { "md5": "4b157d58284a1efbbc71edf306abaa79", "sha256": "70911f7058b3102c1cc788bb618cb402697993f0d19c9d8a819d74adbfdc3a3b" }, "downloads": -1, "filename": "parc-0.18-py3-none-any.whl", "has_sig": false, "md5_digest": "4b157d58284a1efbbc71edf306abaa79", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9929, "upload_time": "2019-10-15T03:11:49", "url": "https://files.pythonhosted.org/packages/2d/82/7dcddc30ba3cd6cec30a1f939d40bb21882bef791d87a1ddab174e825b5e/parc-0.18-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "099c2bcdede050b24ae58978bf91ac21", "sha256": "4795f409c3a658e6f737d39b6646107c291bc94c1b465018c318fc5c088810fd" }, "downloads": -1, "filename": "parc-0.18.tar.gz", "has_sig": false, "md5_digest": "099c2bcdede050b24ae58978bf91ac21", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11238, "upload_time": "2019-10-15T03:11:51", "url": "https://files.pythonhosted.org/packages/d6/54/016290c3c41d3928831c3f10dbbf443629b772dcfe6d7718d1fea0078175/parc-0.18.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "4b157d58284a1efbbc71edf306abaa79", "sha256": "70911f7058b3102c1cc788bb618cb402697993f0d19c9d8a819d74adbfdc3a3b" }, "downloads": -1, "filename": "parc-0.18-py3-none-any.whl", "has_sig": false, "md5_digest": "4b157d58284a1efbbc71edf306abaa79", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9929, "upload_time": "2019-10-15T03:11:49", "url": "https://files.pythonhosted.org/packages/2d/82/7dcddc30ba3cd6cec30a1f939d40bb21882bef791d87a1ddab174e825b5e/parc-0.18-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "099c2bcdede050b24ae58978bf91ac21", "sha256": "4795f409c3a658e6f737d39b6646107c291bc94c1b465018c318fc5c088810fd" }, "downloads": -1, "filename": "parc-0.18.tar.gz", "has_sig": false, "md5_digest": "099c2bcdede050b24ae58978bf91ac21", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11238, "upload_time": "2019-10-15T03:11:51", "url": "https://files.pythonhosted.org/packages/d6/54/016290c3c41d3928831c3f10dbbf443629b772dcfe6d7718d1fea0078175/parc-0.18.tar.gz" } ] }