phenograph
Subpopulation detection in high-dimensional single-cell data
Science Score: 33.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
○CITATION.cff file
-
○codemeta.json file
-
○.zenodo.json file
-
✓DOI references
Found 4 DOI reference(s) in README -
✓Academic publication links
Links to: nature.com -
✓Committers with academic emails
1 of 4 committers (25.0%) from academic institutions -
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (15.5%) to scientific vocabulary
Repository
Subpopulation detection in high-dimensional single-cell data
Basic Info
Statistics
- Stars: 70
- Watchers: 5
- Forks: 27
- Open Issues: 6
- Releases: 0
Metadata Files
README.md
PhenoGraph for Python3
PhenoGraph is a clustering method designed for high-dimensional single-cell data. It works by creating a graph ("network") representing phenotypic similarities between cells and then identifying communities in this graph.
This software package includes compiled binaries that run community detection based on C++ code written by E. Lefebvre and J.-L. Guillaume in 2008 ("Louvain method"). The code has been altered to interface more efficiently with the Python code here. It should work on reasonably current Linux, Mac and Windows machines.
To install PhenoGraph, simply run the setup script:
pip install PhenoGraph
Expected use is within a script or interactive kernel running Python 3.x. Data are expected to be passed as a numpy.ndarray. When applicable, the code uses CPU multicore parallelism via multiprocessing.
To run basic clustering:
import phenograph
communities, graph, Q = phenograph.cluster(data)
For a dataset of N rows, communities will be a length N vector of integers specifying a community assignment for each row in the data. Any rows assigned -1 were identified as outliers and should not be considered as a member of any community. graph is a N x N scipy.sparse matrix representing the weighted graph used for community detection.
Q is the modularity score for communities as applied to graph.
If you use PhenoGraph in work you publish, please cite our publication:
@article{Levine_PhenoGraph_2015,
doi = {10.1016/j.cell.2015.05.047},
url = {http://dx.doi.org/10.1016/j.cell.2015.05.047},
year = {2015},
month = {jul},
publisher = {Elsevier {BV}},
volume = {162},
number = {1},
pages = {184--197},
author = {Jacob H. Levine and Erin F. Simonds and Sean C. Bendall and Kara L. Davis and El-ad D. Amir and Michelle D. Tadmor and Oren Litvin and Harris G. Fienberg and Astraea Jager and Eli R. Zunder and Rachel Finck and Amanda L. Gedman and Ina Radtke and James R. Downing and Dana Pe'er and Garry P. Nolan},
title = {Data-Driven Phenotypic Dissection of {AML} Reveals Progenitor-like Cells that Correlate with Prognosis},
journal = {Cell}
}
Release Notes
Version 1.5.7
- Updated leidenalg and scipy version requirements, revised parallel jaccard to support scipy==1.5.1, and created a test collection for use with pytest (see below).
- Added PhenoGraph clustering tutorial with PBMC3K dataset from 10X Genomics (dataset included).
Version 1.5.6
- Fix the multiprocessing code that doesn't close/join the pool.
Version 1.5.5
- Exposed parameter
n_iterationsfor Leiden, along with minor fixes to manage sorting parallelism, and updated documentation of the clustering and sorting methods.
Version 1.5.4
- Faster and more efficient sorting by size of clusters, for large nearest neighbours graph, implementing multiprocessing and faster methods for sorting.
Version 1.5.3
- Phenograph supports now Leiden algorithm for community detection. The new feature can be called from
phenograph.cluster, by choosingleidenas the clustering algorithm.
Version 1.5.2
- Include simple parallel implementation of brute force nearest neighbors search using scipy's
cdistandmultiprocessing. This may be more efficient thankdtreeon very large high-dimensional data sets and avoids memory issues that arise insklearn's implementation.- Refactor
parallel_jaccard_kernelto remove unnecessary use ofctypesandmultiprocessing.Array.
- Refactor
Version 1.5.1
- Make
louvain_time_limita parameter tophenograph.cluster.
Version 1.5
phenograph.clustercan now take as input a square sparse matrix, which will be interpreted as a k-nearest neighbor graph. Note that this graph must have uniform degree (i.e. the same value of k at every point).- The default
time_limitfor Louvain iterations has been increased to a more generous 2000 seconds (~half hour).
Version 1.4.1
- After observing inconsistent behavior of sklearn.NearestNeighbors with respect to inclusion of self-neighbors, the code now checks that self-neighbors have been included before deleting those entries.
Version 1.4
- The dependence on IPython and/or ipyparallel has been removed. Instead the native
multiprocessingpackage is used. - Multiple CPUs are used by default for computation of nearest neighbors and Jaccard graph.
Version 1.3
- Proper support for Linux.
Running the Unit Tests
Unit tests for assessing the functionality of each module are included in the 'tests\' directory. In addition to the dependencies required by PhenoGraph, to run these tests, you must first install the pytest module.
If your system uses Python >= 3.8.0 or greater, install pytest with:
pip install pytest #Python >= 3.8.0
Otherwise, install pytest with:
pip install pytest==6.0.2 #Python < 3.8.0
Once pytest is installed, navigate to the 'PhenoGraph/' directory and run with:
pytest
All tests should pass with no warnings.
Troubleshooting
Notebook freezes after several attempts of running PhenoGraph using Jypyter Notebook
- Running
PhenoGraphfrom a Jupyter Notebook repeatedly on macOS Catalina, but not Mojave, using Python 3.7.6, causes a hang and the notebook becomes unresponsive, even for a basic matrix of nearest neighbors. However, this issue was not reproducible in command line usingPythoninterpreter in both Catalina and Mojave platforms, without using Jupyter Notebook.
It was found that attempting to plot principal components using
```
:func:`~matplotlib.pyplot.scatter`
```
in Jupyter Notebook causes a freeze, and PhenoGraph becomes unresponsive unless the kernel is restarted. When removing this line of code, everything goes back to normal and the Jupyter Notebook stopes crashing with repeated runs of PhenoGraph.
Architecture related error
When attempting to process very large nearest neighbours graph, e.g. a 2000000
x2000000 kNN graph matrix with 300 nearest neighbours, astruct.error()is raised:python struct.error: 'i' format requires -2147483648 <= number <= 2147483647
This issue was reported on stackoverflow and it's related to the multiprocessing while building the Jaccard object.
The struct.error() has been fixed in python >= 3.8.0.
leidenalg inside conda environment
- When using
PhenoGraphinside a conda environmentleidentakes longer to complete for larger samples compared to the system Python.
numpy.ufunc runtime warning when running pytest
When running unit tests, pytest may deliver the following warning
RuntimeWarning: numpy.ufunc size changed, may indicate binary incompatibility. This is caused by an incompatability between newer versions of the pytest module and an older version of Python. Check your Python version with:python --version
If using Python >= 3.8.0, all version of pytest are compatible. If using Python < 3.8.0, downgrade to pytest version 6.0.2 (see above).
Owner
- Name: Dana Pe'er Lab
- Login: dpeerlab
- Kind: organization
- Location: New York, NY
- Repositories: 14
- Profile: https://github.com/dpeerlab
Computational Biology @ Memorial Sloan Kettering Cancer Center
GitHub Events
Total
- Watch event: 6
- Pull request event: 3
- Fork event: 2
Last Year
- Watch event: 6
- Pull request event: 3
- Fork event: 2
Committers
Last synced: over 2 years ago
Top Committers
| Name | Commits | |
|---|---|---|
| Jacob Levine | j****5@c****u | 32 |
| armMSKCC | a****c@g****m | 17 |
| Jaeyoung Chun | j****n@g****m | 16 |
| Awni Mousa | a****a@g****m | 9 |
Committer Domains (Top 20 + Academic)
Issues and Pull Requests
Last synced: 11 months ago
All Time
- Total issues: 14
- Total pull requests: 8
- Average time to close issues: 6 months
- Average time to close pull requests: 2 days
- Total issue authors: 13
- Total pull request authors: 3
- Average comments per issue: 2.57
- Average comments per pull request: 1.25
- Merged pull requests: 4
- Bot issues: 0
- Bot pull requests: 0
Past Year
- Issues: 0
- Pull requests: 2
- Average time to close issues: N/A
- Average time to close pull requests: about 17 hours
- Issue authors: 0
- Pull request authors: 1
- Average comments per issue: 0
- Average comments per pull request: 0.0
- Merged pull requests: 0
- Bot issues: 0
- Bot pull requests: 0
Top Authors
Issue Authors
- ivan-marroquin (2)
- hisplan (1)
- matt-sd-watson (1)
- ManuSetty (1)
- LisaSikkema (1)
- YubinXie (1)
- quantumkisa (1)
- dalide (1)
- giacomos97 (1)
- danli349 (1)
- prubbens (1)
- rgranit (1)
- vincent6liu (1)
Pull Request Authors
- wuwenrui555 (4)
- andrewmoorman (4)
- hisplan (2)
Top Labels
Issue Labels
Pull Request Labels
Packages
- Total packages: 2
-
Total downloads:
- pypi 3,645 last-month
-
Total dependent packages: 11
(may contain duplicates) -
Total dependent repositories: 9
(may contain duplicates) - Total versions: 11
- Total maintainers: 2
pypi.org: phenograph
Graph-based clustering for high-dimensional single-cell data
- Homepage: https://github.com/dpeerlab/PhenoGraph.git
- Documentation: https://phenograph.readthedocs.io/
- License: LICENSE
-
Latest release: 1.5.7
published almost 6 years ago
Rankings
proxy.golang.org: github.com/dpeerlab/phenograph
- Documentation: https://pkg.go.dev/github.com/dpeerlab/phenograph#section-documentation
- License: mit
-
Latest release: v1.5.7
published almost 6 years ago