protpy 1.4.2__tar.gz → 1.6.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- protpy-1.6.0/PKG-INFO +832 -0
- protpy-1.6.0/README.md +784 -0
- {protpy-1.4.2 → protpy-1.6.0}/docs/conf.py +20 -1
- protpy-1.6.0/protpy/__init__.py +37 -0
- {protpy-1.4.2 → protpy-1.6.0}/protpy/_constants.py +39 -0
- protpy-1.6.0/protpy/_helpers.py +388 -0
- protpy-1.6.0/protpy/autocorrelation.py +197 -0
- protpy-1.6.0/protpy/complexity.py +244 -0
- protpy-1.6.0/protpy/composition.py +1943 -0
- protpy-1.6.0/protpy/conjoint_triad.py +108 -0
- {protpy-1.4.2 → protpy-1.6.0}/protpy/ctd.py +116 -113
- protpy-1.6.0/protpy/data/README.md +16 -0
- protpy-1.6.0/protpy/data/aa_scales.json +1934 -0
- protpy-1.6.0/protpy/data/reduced_alphabets.json +151 -0
- protpy-1.6.0/protpy/data/residue_tables.json +759 -0
- protpy-1.6.0/protpy/data/structural_params.json +107 -0
- protpy-1.6.0/protpy/encode.py +733 -0
- protpy-1.6.0/protpy/physicochemical.py +685 -0
- protpy-1.6.0/protpy/scales.py +632 -0
- protpy-1.6.0/protpy/sequence_order.py +284 -0
- protpy-1.6.0/protpy/spectral.py +183 -0
- protpy-1.6.0/protpy/structural.py +727 -0
- protpy-1.6.0/protpy/utils.py +996 -0
- protpy-1.6.0/protpy.egg-info/PKG-INFO +832 -0
- {protpy-1.4.2 → protpy-1.6.0}/protpy.egg-info/SOURCES.txt +23 -0
- {protpy-1.4.2 → protpy-1.6.0}/protpy.egg-info/requires.txt +0 -1
- {protpy-1.4.2 → protpy-1.6.0}/protpy.egg-info/top_level.txt +1 -0
- {protpy-1.4.2 → protpy-1.6.0}/pyproject.toml +3 -3
- protpy-1.6.0/tests/_compare.py +9 -0
- {protpy-1.4.2 → protpy-1.6.0}/tests/test_autocorrelation.py +5 -4
- protpy-1.6.0/tests/test_backwards_compat.py +83 -0
- protpy-1.6.0/tests/test_complexity.py +70 -0
- {protpy-1.4.2 → protpy-1.6.0}/tests/test_composition.py +162 -139
- protpy-1.6.0/tests/test_composition_extended.py +183 -0
- {protpy-1.4.2 → protpy-1.6.0}/tests/test_conjoint_triad.py +18 -9
- protpy-1.6.0/tests/test_descriptor_sets.py +154 -0
- {protpy-1.4.2 → protpy-1.6.0}/tests/test_encode.py +12 -12
- protpy-1.6.0/tests/test_helpers.py +117 -0
- protpy-1.6.0/tests/test_performance.py +25 -0
- protpy-1.6.0/tests/test_physicochemical.py +227 -0
- protpy-1.6.0/tests/test_protpy.py +91 -0
- protpy-1.6.0/tests/test_reference_values.py +77 -0
- protpy-1.6.0/tests/test_regressions.py +171 -0
- protpy-1.6.0/tests/test_scales.py +103 -0
- {protpy-1.4.2 → protpy-1.6.0}/tests/test_sequence_order.py +62 -66
- protpy-1.6.0/tests/test_spectral.py +79 -0
- protpy-1.6.0/tests/test_structural.py +142 -0
- {protpy-1.4.2 → protpy-1.6.0}/tests/test_utils.py +2 -1
- protpy-1.4.2/PKG-INFO +0 -558
- protpy-1.4.2/README.md +0 -509
- protpy-1.4.2/protpy/__init__.py +0 -43
- protpy-1.4.2/protpy/autocorrelation.py +0 -381
- protpy-1.4.2/protpy/composition.py +0 -1475
- protpy-1.4.2/protpy/conjoint_triad.py +0 -76
- protpy-1.4.2/protpy/data/README.md +0 -9
- protpy-1.4.2/protpy/encode.py +0 -631
- protpy-1.4.2/protpy/sequence_order.py +0 -363
- protpy-1.4.2/protpy/utils.py +0 -740
- protpy-1.4.2/protpy.egg-info/PKG-INFO +0 -558
- protpy-1.4.2/tests/test_protpy.py +0 -130
- {protpy-1.4.2 → protpy-1.6.0}/LICENSE +0 -0
- {protpy-1.4.2 → protpy-1.6.0}/MANIFEST.in +0 -0
- {protpy-1.4.2 → protpy-1.6.0}/protpy/data/grantham-physicochemical-distance-matrix.json +0 -0
- {protpy-1.4.2 → protpy-1.6.0}/protpy/data/schneider-wrede-physicochemical-distance-matrix.json +0 -0
- {protpy-1.4.2 → protpy-1.6.0}/protpy.egg-info/dependency_links.txt +0 -0
- {protpy-1.4.2 → protpy-1.6.0}/setup.cfg +0 -0
- {protpy-1.4.2 → protpy-1.6.0}/tests/__init__.py +0 -0
- {protpy-1.4.2 → protpy-1.6.0}/tests/test_ctd.py +0 -0
protpy-1.6.0/PKG-INFO
ADDED
|
@@ -0,0 +1,832 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: protpy
|
|
3
|
+
Version: 1.6.0
|
|
4
|
+
Summary: Python package for generating various biochemical, physicochemical and structural descriptors/features of protein sequences.
|
|
5
|
+
Author-email: AJ McKenna <amckenna41@qub.ac.uk>
|
|
6
|
+
Maintainer-email: AJ McKenna <amckenna41@qub.ac.uk>
|
|
7
|
+
License: MIT
|
|
8
|
+
Project-URL: Homepage, https://github.com/amckenna41/protPy
|
|
9
|
+
Project-URL: Repository, https://github.com/amckenna41/protPy
|
|
10
|
+
Project-URL: Bug Tracker, https://github.com/amckenna41/protpy/issues
|
|
11
|
+
Project-URL: Download, https://github.com/amckenna41/protPy/archive/refs/heads/main.zip
|
|
12
|
+
Keywords: bioinformatics,protein engineering,python,pypi,machine learning,aaindex,protein descriptors,physicochemical descriptors,biochemical descriptors,structural descriptors,pySAR
|
|
13
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
14
|
+
Classifier: Environment :: Console
|
|
15
|
+
Classifier: Intended Audience :: Developers
|
|
16
|
+
Classifier: Intended Audience :: Science/Research
|
|
17
|
+
Classifier: Intended Audience :: Healthcare Industry
|
|
18
|
+
Classifier: Intended Audience :: Information Technology
|
|
19
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
20
|
+
Classifier: Natural Language :: English
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
24
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
25
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
26
|
+
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
27
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
28
|
+
Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
|
|
29
|
+
Classifier: Topic :: Scientific/Engineering :: Mathematics
|
|
30
|
+
Classifier: Topic :: Scientific/Engineering :: Medical Science Apps.
|
|
31
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
32
|
+
Requires-Python: >=3.9
|
|
33
|
+
Description-Content-Type: text/markdown
|
|
34
|
+
License-File: LICENSE
|
|
35
|
+
Requires-Dist: aaindex>=1.3.1
|
|
36
|
+
Requires-Dist: numpy>=2.0.0
|
|
37
|
+
Requires-Dist: pandas>=2.0.2
|
|
38
|
+
Requires-Dist: tqdm>=4.0.0
|
|
39
|
+
Provides-Extra: test
|
|
40
|
+
Requires-Dist: pytest; extra == "test"
|
|
41
|
+
Requires-Dist: pytest-cov; extra == "test"
|
|
42
|
+
Requires-Dist: pytest-flake8; extra == "test"
|
|
43
|
+
Requires-Dist: pytest-timeout; extra == "test"
|
|
44
|
+
Requires-Dist: biopython>=1.87; extra == "test"
|
|
45
|
+
Provides-Extra: docs
|
|
46
|
+
Requires-Dist: sphinx; extra == "docs"
|
|
47
|
+
Dynamic: license-file
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
<a id="TOP"></a>
|
|
51
|
+
|
|
52
|
+
# protpy - Package for generating protein physicochemical, biochemical and structural descriptors using their constituent amino acids. #
|
|
53
|
+
[](https://pypi.org/project/protpy/)
|
|
54
|
+
[](https://github.com/amckenna41/protpy/actions?query=workflowBuilding%20and%20Testing)
|
|
55
|
+
[](https://pypi.org/project/protpy/)
|
|
56
|
+
[](https://pypi.org/project/protpy/)
|
|
57
|
+
[](https://protpy.readthedocs.io/en/latest/?badge=latest)
|
|
58
|
+
[](https://codecov.io/gh/amckenna41/protPy)
|
|
59
|
+
[](https://opensource.org/licenses/MIT)
|
|
60
|
+
[](https://github.com/amckenna41/protpy/issues)
|
|
61
|
+
<!-- [](https://github.com/amckenna41/protpy)
|
|
62
|
+
[](https://github.com/amckenna41/protpy) -->
|
|
63
|
+
<!-- <p align="center">
|
|
64
|
+
<img src="https://images.newscientist.com/wp-content/uploads/2021/07/22155326/22-july_deepmind-proteome.jpg?width=300" alt="protpyLogo" height="200"/>
|
|
65
|
+
</p> -->
|
|
66
|
+
|
|
67
|
+
* 🧬 A <b>demo</b> of the software is available [here][demo]
|
|
68
|
+
* 📝 A <b>Medium</b> article about `protPy` and its background is available [here][article]
|
|
69
|
+
|
|
70
|
+
<p align="center">
|
|
71
|
+
<img src="https://raw.githubusercontent.com/amckenna41/protpy/main/images/protpy.png" alt="protpy" width="500"/>
|
|
72
|
+
</p>
|
|
73
|
+
|
|
74
|
+
Table of Contents
|
|
75
|
+
-----------------
|
|
76
|
+
|
|
77
|
+
* [Introduction](#introduction)
|
|
78
|
+
* [Requirements](#requirements)
|
|
79
|
+
* [Installation](#installation)
|
|
80
|
+
* [Usage](#usage)
|
|
81
|
+
* [Documentation](#documentation)
|
|
82
|
+
* [Directories](#directories)
|
|
83
|
+
* [Tests](#tests)
|
|
84
|
+
* [Issues](#Issues)
|
|
85
|
+
* [Contact](#contact)
|
|
86
|
+
* [References](#references)
|
|
87
|
+
|
|
88
|
+
Introduction
|
|
89
|
+
------------
|
|
90
|
+
`protpy` is a Python software package for generating a variety of physicochemical, biochemical and structural descriptors for proteins. All of these descriptors are calculated using sequence-derived or physicochemical features of the amino acids that make up the proteins. These descriptors have been highly studied and used in a series of Bioinformatic applications including protein engineering, SAR (sequence-activity-relationships), predicting protein structure & function, subcellular localization, protein-protein interactions, drug-target interactions etc.
|
|
91
|
+
|
|
92
|
+
This software is aimed at any researcher or developer using protein sequence/structural data, and was mainly created to use in my own project [`pySAR`](https://github.com/amckenna41/pySAR) which uses protein sequence data to identify Sequence Activity Relationships (SAR) using Machine Learning [[1]](#references). `protpy` is built and developed in Python 3.10.
|
|
93
|
+
|
|
94
|
+
The descriptors available in `protpy` include:
|
|
95
|
+
|
|
96
|
+
<details>
|
|
97
|
+
<summary><b>Composition Descriptors (24)</b></summary>
|
|
98
|
+
|
|
99
|
+
* **amino_acid_composition** (AAComp)
|
|
100
|
+
* **dipeptide_composition** (DPComp)
|
|
101
|
+
* **gravy** (GRAVY)
|
|
102
|
+
* **aromaticity** (Aromaticity)
|
|
103
|
+
* **instability_index** (II)
|
|
104
|
+
* **isoelectric_point** (pI)
|
|
105
|
+
* **molecular_weight** (MW)
|
|
106
|
+
* **aliphatic_index** (AI)
|
|
107
|
+
* **extinction_coefficient** (ExtCoeff)
|
|
108
|
+
* **boman_index** (BI) — alias of `gravy`
|
|
109
|
+
* **charge_distribution** (ChargeDist)
|
|
110
|
+
* **hydrophobic_moment** (μH)
|
|
111
|
+
* **motif_composition** (MotifComp)
|
|
112
|
+
* **pseudo_amino_acid_composition** (PAAComp)
|
|
113
|
+
* **amphiphilic_pseudo_amino_acid_composition** (APAAComp)
|
|
114
|
+
* **natural_vector** (NV)
|
|
115
|
+
* **atomic_composition** (ATC)
|
|
116
|
+
* **cksaagp** (CKSAAGP) — alias of `cksaap`
|
|
117
|
+
* **cksaap** (CKSAAP)
|
|
118
|
+
* **asdc** (ASDC)
|
|
119
|
+
* **distance_pair** (DP) — alias of `cksaap`
|
|
120
|
+
* **tripeptide_composition** (TPComp) — alias of `kmer_composition`
|
|
121
|
+
* **kmer_composition** (kmer)
|
|
122
|
+
* **dde** (DDE) — alias of `dipeptide_composition`
|
|
123
|
+
|
|
124
|
+
</details>
|
|
125
|
+
|
|
126
|
+
<details>
|
|
127
|
+
<summary><b>Complexity Descriptors (3)</b></summary>
|
|
128
|
+
|
|
129
|
+
* **shannon_entropy** (ShannonH)
|
|
130
|
+
* **wootton_federhen_complexity** (WF)
|
|
131
|
+
* **lempel_ziv_complexity** (LZ)
|
|
132
|
+
|
|
133
|
+
</details>
|
|
134
|
+
|
|
135
|
+
<details>
|
|
136
|
+
<summary><b>Autocorrelation Descriptors (4)</b></summary>
|
|
137
|
+
|
|
138
|
+
* **geary_autocorrelation** (GAuto) — alias of `autocorrelation`
|
|
139
|
+
* **moreaubroto_autocorrelation** (MBAuto) — alias of `autocorrelation`
|
|
140
|
+
* **moran_autocorrelation** (MAuto) — alias of `autocorrelation`
|
|
141
|
+
* **autocorrelation** (Auto)
|
|
142
|
+
|
|
143
|
+
</details>
|
|
144
|
+
|
|
145
|
+
<details>
|
|
146
|
+
<summary><b>Conjoint Triad Descriptors (1)</b></summary>
|
|
147
|
+
|
|
148
|
+
* **conjoint_triad** (CTriad)
|
|
149
|
+
|
|
150
|
+
</details>
|
|
151
|
+
|
|
152
|
+
<details>
|
|
153
|
+
<summary><b>CTD Descriptors (5)</b></summary>
|
|
154
|
+
|
|
155
|
+
* **ctd** (CTD)
|
|
156
|
+
* **ctd_** (CTD) — alias of `ctd`
|
|
157
|
+
* **ctd_composition** (CTD-C) — alias of `ctd`
|
|
158
|
+
* **ctd_transition** (CTD-T) — alias of `ctd`
|
|
159
|
+
* **ctd_distribution** (CTD-D) — alias of `ctd`
|
|
160
|
+
|
|
161
|
+
</details>
|
|
162
|
+
|
|
163
|
+
<details>
|
|
164
|
+
<summary><b>Sequence Order Descriptors (2)</b></summary>
|
|
165
|
+
|
|
166
|
+
* **quasi_sequence_order** (QSO)
|
|
167
|
+
* **sequence_order_coupling_number** (SOCN)
|
|
168
|
+
|
|
169
|
+
</details>
|
|
170
|
+
|
|
171
|
+
<details>
|
|
172
|
+
<summary><b>Physicochemical Descriptors (5)</b></summary>
|
|
173
|
+
|
|
174
|
+
* **charge_fractions** (FCR)
|
|
175
|
+
* **kappa** (Kappa)
|
|
176
|
+
* **sequence_charge_decoration** (SCD)
|
|
177
|
+
* **hydrophobicity_profile** (HP)
|
|
178
|
+
* **thermostability_indices** (Thermo)
|
|
179
|
+
|
|
180
|
+
</details>
|
|
181
|
+
|
|
182
|
+
<details>
|
|
183
|
+
<summary><b>Spectral Descriptors (1)</b></summary>
|
|
184
|
+
|
|
185
|
+
* **spectral_descriptors** (Spectral)
|
|
186
|
+
|
|
187
|
+
</details>
|
|
188
|
+
|
|
189
|
+
<details>
|
|
190
|
+
<summary><b>Structural Descriptors (3)</b></summary>
|
|
191
|
+
|
|
192
|
+
* **aggrescan** (AGG)
|
|
193
|
+
* **charge_hydropathy** (CH)
|
|
194
|
+
* **plaac** (PLAAC)
|
|
195
|
+
|
|
196
|
+
</details>
|
|
197
|
+
|
|
198
|
+
<details>
|
|
199
|
+
<summary><b>Scales Descriptors (2)</b></summary>
|
|
200
|
+
|
|
201
|
+
* **auto_cross_covariance** (ACC)
|
|
202
|
+
* **aa_scale_descriptors** (Scale)
|
|
203
|
+
|
|
204
|
+
</details>
|
|
205
|
+
|
|
206
|
+
### New in v1.6.0: a slimmer, corrected descriptor set
|
|
207
|
+
|
|
208
|
+
A [descriptor value audit](CHANGELOG.md#160---2026-11-08) found that about half of the 80 registered
|
|
209
|
+
descriptors were exact duplicates, subsets or fixed linear maps of the amino acid composition, and
|
|
210
|
+
that several values were wrong. v1.6.0:
|
|
211
|
+
|
|
212
|
+
* **fixes values** — the instability-index table (now matches Biopython/ExPASy), QSO composition
|
|
213
|
+
terms (were 100x too large), CTD distribution quartiles, FoldIndex residue assignment, kappa for
|
|
214
|
+
single-sign sequences, APAAC denominator guard; pI and charge default to the Bjellqvist pKa set;
|
|
215
|
+
conjoint triad is normalised as in Shen et al. 2007; descriptors are no longer rounded
|
|
216
|
+
(`decimals=` rounds on request); a lag that is too long raises instead of silently becoming 30;
|
|
217
|
+
* **merges duplicates into family functions** — `kmer_composition(alphabet=)`, `cksaap(alphabet=)`,
|
|
218
|
+
`dipeptide_composition(normalize="dde")`, `autocorrelation(method=)`, `ctd(parts=)`,
|
|
219
|
+
`sequence_order_coupling_number` / `quasi_sequence_order(distance_matrix="both")`,
|
|
220
|
+
`hydrophobicity_profile(segments=)`, `motif_composition` (PROSITE motifs), `aa_scale_descriptors(mode=)`,
|
|
221
|
+
`charge_hydropathy(window=)`, `thermostability_indices()` and `spectral_descriptors(transform=)`;
|
|
222
|
+
literature names such as `tripeptide_composition`, `dde`, `cksaagp`, `distance_pair`,
|
|
223
|
+
`geary_autocorrelation` and `ctd_composition` stay as permanent aliases;
|
|
224
|
+
* **deprecates** 37 functions (they still work with a `DeprecationWarning` and are removed in 2.0;
|
|
225
|
+
see the table in `DESCRIPTORS.md`);
|
|
226
|
+
* **shrinks the default `all_descriptors` set** from 9,957 to 1,402 columns (tripeptide composition is
|
|
227
|
+
now opt-in), and makes it about 8x faster.
|
|
228
|
+
|
|
229
|
+
| Category | Registered descriptors added in v1.5.0 / v1.6.0 |
|
|
230
|
+
|---|---|
|
|
231
|
+
| Composition | `cksaap`, `cksaagp`, `dde`, `asdc`, `distance_pair`, `natural_vector`, `atomic_composition` |
|
|
232
|
+
| Autocorrelation / CTD | `autocorrelation`, `ctd` |
|
|
233
|
+
| Scales | `aa_scale_descriptors`, `auto_cross_covariance` |
|
|
234
|
+
| Physicochemical | `charge_fractions`, `kappa`, `sequence_charge_decoration`, `hydrophobicity_profile`, `thermostability_indices` |
|
|
235
|
+
| Complexity | `wootton_federhen_complexity`, `lempel_ziv_complexity` (and `shannon_entropy`, moved here) |
|
|
236
|
+
| Spectral | `spectral_descriptors` |
|
|
237
|
+
| Structural | `aggrescan`, `charge_hydropathy`, `plaac` |
|
|
238
|
+
|
|
239
|
+
`all_descriptors` and `encode_dataset` take `descriptor_set="classic"` (default, 1,402 columns),
|
|
240
|
+
`"extended"` or `"all"`, plus `include=` / `exclude=` lists and `decimals=`:
|
|
241
|
+
|
|
242
|
+
```python
|
|
243
|
+
df = protpy.all_descriptors(protein_seq, descriptor_set="extended")
|
|
244
|
+
df = protpy.all_descriptors(protein_seq, include=["tripeptide_composition"], decimals=3)
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
More detail of each descriptor is listed in the markdown file: [`DESCRIPTORS.md`](https://github.com/amckenna41/protPy/blob/main/DESCRIPTORS.md)
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
Requirements
|
|
251
|
+
------------
|
|
252
|
+
* [Python][python] >= 3.9
|
|
253
|
+
* [aaindex][aaindex] >= 1.3.1
|
|
254
|
+
* [numpy][numpy] >= 2.0.0
|
|
255
|
+
* [pandas][pandas] >= 2.0.2
|
|
256
|
+
* [tqdm][tqdm] >= 4.0.0
|
|
257
|
+
* [biopython][biopython] >= 1.87 (only required for testing)
|
|
258
|
+
|
|
259
|
+
Installation
|
|
260
|
+
------------
|
|
261
|
+
Install the latest version of `protpy` using pip:
|
|
262
|
+
|
|
263
|
+
```bash
|
|
264
|
+
pip3 install protpy --upgrade
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
Install by cloning repository:
|
|
268
|
+
|
|
269
|
+
```bash
|
|
270
|
+
git clone https://github.com/amckenna41/protpy.git
|
|
271
|
+
python3 setup.py install
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
Usage
|
|
275
|
+
-----
|
|
276
|
+
### Import `protpy` after installation:
|
|
277
|
+
```python
|
|
278
|
+
import protpy as protpy
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
### Import protein sequence from fasta:
|
|
282
|
+
```python
|
|
283
|
+
from Bio import SeqIO
|
|
284
|
+
|
|
285
|
+
with open("test_fasta.fasta") as pro:
|
|
286
|
+
protein_seq = str(next(SeqIO.parse(pro,'fasta')).seq)
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
|
|
290
|
+
<details>
|
|
291
|
+
<summary><b>Composition Descriptors Usage Examples</b></summary>
|
|
292
|
+
|
|
293
|
+
Calculate Amino Acid Composition:
|
|
294
|
+
```python
|
|
295
|
+
aac = protpy.amino_acid_composition(protein_seq)
|
|
296
|
+
# A C D E F ...
|
|
297
|
+
# 6.693 3.108 5.817 3.347 6.614 ...
|
|
298
|
+
# shape: 1 x 20
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
Calculate Dipeptide Composition:
|
|
302
|
+
```python
|
|
303
|
+
dpc = protpy.dipeptide_composition(protein_seq)
|
|
304
|
+
# AA AC AD AE AF ...
|
|
305
|
+
# 0.797 0.159 0.478 0.399 0.239 ...
|
|
306
|
+
# shape: 1 x 400
|
|
307
|
+
|
|
308
|
+
#dipeptide deviation from expected mean (alias: protpy.dde)
|
|
309
|
+
dde = protpy.dipeptide_composition(protein_seq, normalize="dde")
|
|
310
|
+
# DDE_AA DDE_AC DDE_AD DDE_AE DDE_AF ...
|
|
311
|
+
# 1.989 -0.424 2.014 1.405 0.185 ...
|
|
312
|
+
# shape: 1 x 400
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
Calculate Tripeptide Composition:
|
|
316
|
+
```python
|
|
317
|
+
#alias of kmer_composition(k=3); 8000 columns, not in any all_descriptors set
|
|
318
|
+
tpc = protpy.tripeptide_composition(protein_seq)
|
|
319
|
+
# AAA AAC AAD AAE AAF ...
|
|
320
|
+
# 0.080 0 0 0.160 0 ...
|
|
321
|
+
# shape: 1 x 8000
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
Calculate k-mer / Reduced Alphabet Composition:
|
|
325
|
+
```python
|
|
326
|
+
#using default parameters: k=2
|
|
327
|
+
kmer = protpy.kmer_composition(protein_seq)
|
|
328
|
+
# AA AC AD AE AF ...
|
|
329
|
+
# 0.797 0.159 0.478 0.399 0.239 ...
|
|
330
|
+
# shape: 1 x 400
|
|
331
|
+
|
|
332
|
+
#hydrophobic / polar / charged groups (formerly hydrophobic_polar_charged_composition)
|
|
333
|
+
hpc = protpy.kmer_composition(protein_seq, k=1, alphabet=3)
|
|
334
|
+
# ReducedAlphabet_1 ReducedAlphabet_2 ReducedAlphabet_3
|
|
335
|
+
# 44.542 32.669 22.789
|
|
336
|
+
# shape: 1 x 3
|
|
337
|
+
|
|
338
|
+
#grouped dipeptide composition over the iFeature 5-group alphabet (GDPC)
|
|
339
|
+
gdpc = protpy.kmer_composition(protein_seq, k=2, alphabet="ifeature5")
|
|
340
|
+
# GDPC_aliphatic.aliphatic GDPC_aliphatic.aromatic GDPC_aliphatic.positive GDPC_aliphatic.negative GDPC_aliphatic.uncharged ...
|
|
341
|
+
# 12.839 4.625 3.429 2.951 12.121 ...
|
|
342
|
+
# shape: 1 x 25
|
|
343
|
+
|
|
344
|
+
#a custom grouping: a list of residue strings covering the 20 amino acids
|
|
345
|
+
custom = protpy.kmer_composition(protein_seq, k=1, alphabet=["AGV", "ILFP", "YMTS", "HNQW", "RK", "DE", "C"])
|
|
346
|
+
# RA_custom_AGV RA_custom_ILFP RA_custom_YMTS RA_custom_HNQW RA_custom_RK ...
|
|
347
|
+
# 20.239 25.259 21.434 12.908 7.888 ...
|
|
348
|
+
# shape: 1 x 7
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
Calculate GRAVY:
|
|
352
|
+
```python
|
|
353
|
+
gravy = protpy.gravy(protein_seq)
|
|
354
|
+
# GRAVY
|
|
355
|
+
# -0.045
|
|
356
|
+
# shape: 1 x 1
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
Calculate Aromaticity:
|
|
360
|
+
```python
|
|
361
|
+
aromaticity = protpy.aromaticity(protein_seq)
|
|
362
|
+
# Aromaticity
|
|
363
|
+
# 0.118
|
|
364
|
+
# shape: 1 x 1
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
Calculate Instability Index:
|
|
368
|
+
```python
|
|
369
|
+
#score < 40 = stable protein; DIWV table as in Biopython / ExPASy
|
|
370
|
+
instability = protpy.instability_index(protein_seq)
|
|
371
|
+
# InstabilityIndex
|
|
372
|
+
# 32.419
|
|
373
|
+
# shape: 1 x 1
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
Calculate Isoelectric Point:
|
|
377
|
+
```python
|
|
378
|
+
#using default parameters: pka_scale="bjellqvist" (as ExPASy / Biopython)
|
|
379
|
+
pi = protpy.isoelectric_point(protein_seq)
|
|
380
|
+
# IsoelectricPoint
|
|
381
|
+
# 5.562
|
|
382
|
+
# shape: 1 x 1
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
Calculate Molecular Weight:
|
|
386
|
+
```python
|
|
387
|
+
mw = protpy.molecular_weight(protein_seq)
|
|
388
|
+
# MolecularWeight
|
|
389
|
+
# 139125.120
|
|
390
|
+
# shape: 1 x 1
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
Calculate Charge Distribution:
|
|
394
|
+
```python
|
|
395
|
+
#using default parameters: ph=7.4, pka_scale="bjellqvist"
|
|
396
|
+
charge = protpy.charge_distribution(protein_seq)
|
|
397
|
+
# PositiveCharge NegativeCharge NetCharge
|
|
398
|
+
# 99.398 114.920 -15.522
|
|
399
|
+
# shape: 1 x 3
|
|
400
|
+
|
|
401
|
+
#charge per Da (formerly charge_density)
|
|
402
|
+
charge = protpy.charge_distribution(protein_seq, normalize="mass")
|
|
403
|
+
# PositiveCharge_perDa NegativeCharge_perDa NetCharge_perDa
|
|
404
|
+
# 0.000714 0.000826 -0.000112
|
|
405
|
+
# shape: 1 x 3
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
Calculate Motif Composition:
|
|
409
|
+
```python
|
|
410
|
+
#using the 8 default motifs
|
|
411
|
+
motif = protpy.motif_composition(protein_seq)
|
|
412
|
+
# NxS/T_glycosylation RGD_integrin KDEL_retention CxxC_zinc_finger CAAX_prenylation ...
|
|
413
|
+
# 23 0 0 2 0 ...
|
|
414
|
+
# shape: 1 x 8
|
|
415
|
+
|
|
416
|
+
#built-in PROSITE motifs by name, with counts per 100 residues
|
|
417
|
+
motif = protpy.motif_composition(protein_seq, motifs=["N_glycosylation", "PTS1", "tryptic_site"], per_100=True)
|
|
418
|
+
# N_glycosylation PTS1 tryptic_site N_glycosylation_per100 PTS1_per100 ...
|
|
419
|
+
# 23 0 93 1.833 0 ...
|
|
420
|
+
# shape: 1 x 6
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
Calculate Aliphatic Index:
|
|
424
|
+
```python
|
|
425
|
+
ai = protpy.aliphatic_index(protein_seq)
|
|
426
|
+
# AliphaticIndex
|
|
427
|
+
# 82.725
|
|
428
|
+
# shape: 1 x 1
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
Calculate Extinction Coefficient:
|
|
432
|
+
```python
|
|
433
|
+
ec = protpy.extinction_coefficient(protein_seq)
|
|
434
|
+
# ExtCoeff_Reduced ExtCoeff_Oxidized
|
|
435
|
+
# 140960 143335
|
|
436
|
+
# shape: 1 x 2
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
Calculate Boman Index:
|
|
440
|
+
```python
|
|
441
|
+
bi = protpy.boman_index(protein_seq)
|
|
442
|
+
# BomanIndex
|
|
443
|
+
# 1.198
|
|
444
|
+
# shape: 1 x 1
|
|
445
|
+
```
|
|
446
|
+
|
|
447
|
+
Calculate Hydrophobic Moment:
|
|
448
|
+
```python
|
|
449
|
+
#using default parameters: window=11, angle=100 (alpha-helix)
|
|
450
|
+
hm = protpy.hydrophobic_moment(protein_seq)
|
|
451
|
+
# HydrophobicMoment_Mean HydrophobicMoment_Max
|
|
452
|
+
# 0.272 0.813
|
|
453
|
+
# shape: 1 x 2
|
|
454
|
+
```
|
|
455
|
+
|
|
456
|
+
Calculate Pseudo Amino Acid Composition:
|
|
457
|
+
```python
|
|
458
|
+
#using default parameters: lamda=30, weight=0.05
|
|
459
|
+
paac = protpy.pseudo_amino_acid_composition(protein_seq)
|
|
460
|
+
# PAAC_1 PAAC_2 PAAC_3 PAAC_4 PAAC_5 ...
|
|
461
|
+
# 1.871 0.869 1.626 0.935 1.849 ...
|
|
462
|
+
# shape: 1 x 50
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
Calculate Amphiphilic Pseudo Amino Acid Composition:
|
|
466
|
+
```python
|
|
467
|
+
#using default parameters: lamda=30, weight=0.5
|
|
468
|
+
apaac = protpy.amphiphilic_pseudo_amino_acid_composition(protein_seq)
|
|
469
|
+
# APAAC_1 APAAC_2 APAAC_3 APAAC_4 APAAC_5 ...
|
|
470
|
+
# 6.049 2.809 5.257 3.025 5.977 ...
|
|
471
|
+
# shape: 1 x 80
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
Calculate CKSAAP / CKSAAGP / ASDC / Distance Pair:
|
|
475
|
+
```python
|
|
476
|
+
#using default parameters: gap=5
|
|
477
|
+
cksaap = protpy.cksaap(protein_seq)
|
|
478
|
+
# CKSAAP_AA_gap0 CKSAAP_AC_gap0 CKSAAP_AD_gap0 CKSAAP_AE_gap0 CKSAAP_AF_gap0 ...
|
|
479
|
+
# 0.797 0.159 0.478 0.399 0.239 ...
|
|
480
|
+
# shape: 1 x 2400
|
|
481
|
+
|
|
482
|
+
#grouped pairs (alias: protpy.cksaagp)
|
|
483
|
+
cksaagp = protpy.cksaap(protein_seq, alphabet="ifeature5")
|
|
484
|
+
# CKSAAGP_aliphatic.aliphatic_gap0 CKSAAGP_aliphatic.aromatic_gap0 CKSAAGP_aliphatic.positive_gap0 CKSAAGP_aliphatic.negative_gap0 CKSAAGP_aliphatic.uncharged_gap0 ...
|
|
485
|
+
# 12.839 4.625 3.429 2.951 12.121 ...
|
|
486
|
+
# shape: 1 x 150
|
|
487
|
+
|
|
488
|
+
asdc = protpy.asdc(protein_seq)
|
|
489
|
+
# ASDC_AA ASDC_AC ASDC_AD ASDC_AE ASDC_AF ...
|
|
490
|
+
# 0.443 0.218 0.329 0.252 0.329 ...
|
|
491
|
+
# shape: 1 x 400
|
|
492
|
+
|
|
493
|
+
dp = protpy.distance_pair(protein_seq)
|
|
494
|
+
# DP_IMV DP_L DP_F DP_WY DP_G ...
|
|
495
|
+
# 15.060 7.888 6.614 5.179 6.295 ...
|
|
496
|
+
# shape: 1 x 602
|
|
497
|
+
```
|
|
498
|
+
|
|
499
|
+
Calculate Natural Vector / Atomic Composition:
|
|
500
|
+
```python
|
|
501
|
+
nv = protpy.natural_vector(protein_seq, normalize=True)
|
|
502
|
+
# NV_n_A NV_n_C NV_n_D NV_n_E NV_n_F ...
|
|
503
|
+
# 0.067 0.031 0.058 0.033 0.066 ...
|
|
504
|
+
# shape: 1 x 60
|
|
505
|
+
|
|
506
|
+
atc = protpy.atomic_composition(protein_seq)
|
|
507
|
+
# ATC_C ATC_H ATC_N ATC_O ATC_S
|
|
508
|
+
# 27.011 52.281 6.952 13.501 0.255
|
|
509
|
+
# shape: 1 x 5
|
|
510
|
+
```
|
|
511
|
+
|
|
512
|
+
</details>
|
|
513
|
+
|
|
514
|
+
<details>
|
|
515
|
+
<summary><b>Autocorrelation Descriptors Usage Examples</b></summary>
|
|
516
|
+
|
|
517
|
+
Calculate Autocorrelation:
|
|
518
|
+
```python
|
|
519
|
+
#Moreau-Broto, Moran or Geary; the three names below are aliases
|
|
520
|
+
auto = protpy.autocorrelation(protein_seq, method="moran", lag=10)
|
|
521
|
+
# MAuto_CIDH920105_1 MAuto_CIDH920105_2 MAuto_CIDH920105_3 MAuto_CIDH920105_4 MAuto_CIDH920105_5 ...
|
|
522
|
+
# -0.058 -0.078 -0.042 -0.021 -0.054 ...
|
|
523
|
+
# shape: 1 x 80
|
|
524
|
+
|
|
525
|
+
#using default parameters: lag=30, the 8 default AAindex properties, normalize=True
|
|
526
|
+
mb = protpy.moreaubroto_autocorrelation(protein_seq)
|
|
527
|
+
# MBAuto_CIDH920105_1 MBAuto_CIDH920105_2 MBAuto_CIDH920105_3 MBAuto_CIDH920105_4 MBAuto_CIDH920105_5 ...
|
|
528
|
+
# -0.052 -0.072 -0.036 -0.015 -0.048 ...
|
|
529
|
+
# shape: 1 x 240
|
|
530
|
+
|
|
531
|
+
moran = protpy.moran_autocorrelation(protein_seq)
|
|
532
|
+
# MAuto_CIDH920105_1 MAuto_CIDH920105_2 MAuto_CIDH920105_3 MAuto_CIDH920105_4 MAuto_CIDH920105_5 ...
|
|
533
|
+
# -0.058 -0.078 -0.042 -0.021 -0.054 ...
|
|
534
|
+
# shape: 1 x 240
|
|
535
|
+
|
|
536
|
+
#Geary is the autocorrelation in the classic all_descriptors set
|
|
537
|
+
geary = protpy.geary_autocorrelation(protein_seq)
|
|
538
|
+
# GAuto_CIDH920105_1 GAuto_CIDH920105_2 GAuto_CIDH920105_3 GAuto_CIDH920105_4 GAuto_CIDH920105_5 ...
|
|
539
|
+
# 1.057 1.077 1.040 1.020 1.052 ...
|
|
540
|
+
# shape: 1 x 240
|
|
541
|
+
```
|
|
542
|
+
|
|
543
|
+
</details>
|
|
544
|
+
|
|
545
|
+
<details>
|
|
546
|
+
<summary><b>Conjoint Triad Descriptors Usage Examples</b></summary>
|
|
547
|
+
|
|
548
|
+
Calculate Conjoint Triad:
|
|
549
|
+
```python
|
|
550
|
+
#normalised (f - min) / max as in Shen et al. 2007
|
|
551
|
+
ctriad = protpy.conjoint_triad(protein_seq)
|
|
552
|
+
# conj_triad_111 conj_triad_112 conj_triad_113 conj_triad_114 conj_triad_115 ...
|
|
553
|
+
# 0.409 0.773 0.500 0.136 0.273 ...
|
|
554
|
+
# shape: 1 x 343
|
|
555
|
+
|
|
556
|
+
#raw triad counts
|
|
557
|
+
ctriad = protpy.conjoint_triad(protein_seq, normalize=False)
|
|
558
|
+
# conj_triad_111 conj_triad_112 conj_triad_113 conj_triad_114 conj_triad_115 ...
|
|
559
|
+
# 9 17 11 3 6 ...
|
|
560
|
+
# shape: 1 x 343
|
|
561
|
+
```
|
|
562
|
+
|
|
563
|
+
</details>
|
|
564
|
+
|
|
565
|
+
<details>
|
|
566
|
+
<summary><b>CTD Descriptors Usage Examples</b></summary>
|
|
567
|
+
|
|
568
|
+
Calculate CTD:
|
|
569
|
+
```python
|
|
570
|
+
#using default parameters: all 7 properties, parts="CTD" (ctd_ is an alias)
|
|
571
|
+
ctd = protpy.ctd(protein_seq)
|
|
572
|
+
# CTD_C_01_hydrophobicity CTD_C_02_hydrophobicity CTD_C_03_hydrophobicity CTD_C_01_normalized_vdwv CTD_C_02_normalized_vdwv ...
|
|
573
|
+
# 0.279 0.386 0.335 0.420 0.355 ...
|
|
574
|
+
# shape: 1 x 147
|
|
575
|
+
|
|
576
|
+
#transition only, for one property (same as ctd_transition)
|
|
577
|
+
ctd_t = protpy.ctd(protein_seq, property="charge", all_ctd=False, parts="T")
|
|
578
|
+
# CTD_T_12_charge CTD_T_13_charge CTD_T_23_charge
|
|
579
|
+
# 0.131 0.019 0.147
|
|
580
|
+
# shape: 1 x 3
|
|
581
|
+
```
|
|
582
|
+
|
|
583
|
+
</details>
|
|
584
|
+
|
|
585
|
+
<details>
|
|
586
|
+
<summary><b>Sequence Order Descriptors Usage Examples</b></summary>
|
|
587
|
+
|
|
588
|
+
Calculate Sequence Order Coupling Number:
|
|
589
|
+
```python
|
|
590
|
+
#using default parameters: lag=30, distance_matrix="schneider-wrede"
|
|
591
|
+
socn = protpy.sequence_order_coupling_number(protein_seq)
|
|
592
|
+
# SOCN_SW1 SOCN_SW2 SOCN_SW3 SOCN_SW4 SOCN_SW5 ...
|
|
593
|
+
# 401.387 409.243 376.946 393.042 396.196 ...
|
|
594
|
+
# shape: 1 x 30
|
|
595
|
+
|
|
596
|
+
#both matrices, divided by the number of pairs (removes the length dependence)
|
|
597
|
+
socn = protpy.sequence_order_coupling_number(protein_seq, lag=10, distance_matrix="both", normalize=True)
|
|
598
|
+
# SOCN_SW1 SOCN_SW2 SOCN_SW3 SOCN_SW4 SOCN_SW5 ...
|
|
599
|
+
# 0.320 0.327 0.301 0.314 0.317 ...
|
|
600
|
+
# shape: 1 x 20
|
|
601
|
+
```
|
|
602
|
+
|
|
603
|
+
Calculate Quasi Sequence Order:
|
|
604
|
+
```python
|
|
605
|
+
#using default parameters: lag=30, weight=0.1, distance_matrix="schneider-wrede"; the 50 values sum to 1
|
|
606
|
+
qso = protpy.quasi_sequence_order(protein_seq)
|
|
607
|
+
# QSO_SW1 QSO_SW2 QSO_SW3 QSO_SW4 QSO_SW5 ...
|
|
608
|
+
# 0.000057 0.000026 0.000049 0.000028 0.000056 ...
|
|
609
|
+
# shape: 1 x 50
|
|
610
|
+
|
|
611
|
+
#both matrices (as in all_descriptors)
|
|
612
|
+
qso = protpy.quasi_sequence_order(protein_seq, distance_matrix="both")
|
|
613
|
+
# QSO_SW1 QSO_SW2 QSO_SW3 QSO_SW4 QSO_SW5 ...
|
|
614
|
+
# 0.000057 0.000026 0.000049 0.000028 0.000056 ...
|
|
615
|
+
# shape: 1 x 100
|
|
616
|
+
```
|
|
617
|
+
|
|
618
|
+
</details>
|
|
619
|
+
|
|
620
|
+
<details>
|
|
621
|
+
<summary><b>Physicochemical, Complexity, Spectral and Structural Descriptors Usage Examples</b></summary>
|
|
622
|
+
|
|
623
|
+
Calculate Charge:
|
|
624
|
+
```python
|
|
625
|
+
fcr = protpy.charge_fractions(protein_seq)
|
|
626
|
+
# Charge_FCR Charge_FPlus Charge_FMinus Charge_NCPR Charge_Sigma
|
|
627
|
+
# 0.171 0.079 0.092 -0.013 0.000953
|
|
628
|
+
# shape: 1 x 5
|
|
629
|
+
|
|
630
|
+
kappa = protpy.kappa(protein_seq)
|
|
631
|
+
# Kappa
|
|
632
|
+
# 0.153
|
|
633
|
+
# shape: 1 x 1
|
|
634
|
+
|
|
635
|
+
scd = protpy.sequence_charge_decoration(protein_seq)
|
|
636
|
+
# Charge_SCD
|
|
637
|
+
# 1.392
|
|
638
|
+
# shape: 1 x 1
|
|
639
|
+
```
|
|
640
|
+
|
|
641
|
+
Calculate Hydrophobicity Profile:
|
|
642
|
+
```python
|
|
643
|
+
hp = protpy.hydrophobicity_profile(protein_seq)
|
|
644
|
+
# HP_kyte_doolittle_w9_mean HP_kyte_doolittle_w9_max HP_kyte_doolittle_w9_min HP_kyte_doolittle_w9_std
|
|
645
|
+
# -0.053 3.189 -2.822 0.876
|
|
646
|
+
# shape: 1 x 4
|
|
647
|
+
|
|
648
|
+
#hydropathy transmembrane segments (formerly transmembrane_features)
|
|
649
|
+
tm = protpy.hydrophobicity_profile(protein_seq, window=19, threshold=1.6, segments=True)
|
|
650
|
+
# HP_kyte_doolittle_w19_mean HP_kyte_doolittle_w19_max HP_kyte_doolittle_w19_min HP_kyte_doolittle_w19_std HP_kyte_doolittle_w19_frac_above ...
|
|
651
|
+
# -0.058 2.811 -1.911 0.631 0.015 ...
|
|
652
|
+
# shape: 1 x 8
|
|
653
|
+
|
|
654
|
+
#Vihinen flexibility profile (formerly flexibility)
|
|
655
|
+
flex = protpy.hydrophobicity_profile(protein_seq, scale="vihinen_flexibility", window=9, edge=0.25)
|
|
656
|
+
# HP_vihinen_flexibility_w9_mean HP_vihinen_flexibility_w9_max HP_vihinen_flexibility_w9_min HP_vihinen_flexibility_w9_std
|
|
657
|
+
# 0.995 1.060 0.931 0.019
|
|
658
|
+
# shape: 1 x 4
|
|
659
|
+
```
|
|
660
|
+
|
|
661
|
+
Calculate Thermostability Indices:
|
|
662
|
+
```python
|
|
663
|
+
thermo = protpy.thermostability_indices(protein_seq)
|
|
664
|
+
# IVYWREL CvP_Bias
|
|
665
|
+
# 0.330 -9.323
|
|
666
|
+
# shape: 1 x 2
|
|
667
|
+
```
|
|
668
|
+
|
|
669
|
+
Calculate Complexity:
|
|
670
|
+
```python
|
|
671
|
+
h = protpy.shannon_entropy(protein_seq)
|
|
672
|
+
# ShannonEntropy
|
|
673
|
+
# 4.163
|
|
674
|
+
# shape: 1 x 1
|
|
675
|
+
|
|
676
|
+
wf = protpy.wootton_federhen_complexity(protein_seq)
|
|
677
|
+
# WF_K2_mean WF_K2_min WF_LowComplexity_frac
|
|
678
|
+
# 3.001 2.055 0.030
|
|
679
|
+
# shape: 1 x 3
|
|
680
|
+
|
|
681
|
+
lz = protpy.lempel_ziv_complexity(protein_seq)
|
|
682
|
+
# LZ_Normalized
|
|
683
|
+
# 0.860
|
|
684
|
+
# shape: 1 x 1
|
|
685
|
+
```
|
|
686
|
+
|
|
687
|
+
Calculate Spectral Descriptors:
|
|
688
|
+
```python
|
|
689
|
+
fft = protpy.spectral_descriptors(protein_seq)
|
|
690
|
+
# FFT_eiip_bin1 FFT_eiip_bin2 FFT_eiip_bin3 FFT_eiip_bin4 FFT_eiip_bin5 ...
|
|
691
|
+
# 0.001361 0.001641 0.001838 0.001610 0.001683 ...
|
|
692
|
+
# shape: 1 x 10
|
|
693
|
+
|
|
694
|
+
dct = protpy.spectral_descriptors(protein_seq, transform="dct")
|
|
695
|
+
# DCT_kyte_doolittle_1 DCT_kyte_doolittle_2 DCT_kyte_doolittle_3 DCT_kyte_doolittle_4 DCT_kyte_doolittle_5 ...
|
|
696
|
+
# -1.812 1.051 2.011 1.613 -3.117 ...
|
|
697
|
+
# shape: 1 x 10
|
|
698
|
+
```
|
|
699
|
+
|
|
700
|
+
Calculate Factor Scales:
|
|
701
|
+
```python
|
|
702
|
+
#sequence mean of a factor scale
|
|
703
|
+
scales = protpy.aa_scale_descriptors(protein_seq, "atchley_factors")
|
|
704
|
+
# AF_1 AF_2 AF_3 AF_4 AF_5
|
|
705
|
+
# -0.095 0.080 -0.141 0.337 -0.122
|
|
706
|
+
# shape: 1 x 5
|
|
707
|
+
|
|
708
|
+
#auto/cross covariance of the 5 z-scales
|
|
709
|
+
acc = protpy.auto_cross_covariance(protein_seq)
|
|
710
|
+
# ACC_1_1_lag1 ACC_1_2_lag1 ACC_1_3_lag1 ACC_1_4_lag1 ACC_1_5_lag1 ...
|
|
711
|
+
# -0.494 -0.181 0.021 -0.101 -0.119 ...
|
|
712
|
+
# shape: 1 x 125
|
|
713
|
+
```
|
|
714
|
+
|
|
715
|
+
Calculate Structural:
|
|
716
|
+
```python
|
|
717
|
+
agg = protpy.aggrescan(protein_seq)
|
|
718
|
+
# AGG_a3vSA AGG_NnHS AGG_AATr AGG_THSAr AGG_a4vAHS
|
|
719
|
+
# 0.072 4.701 0.230 0.155 0.409
|
|
720
|
+
# shape: 1 x 5
|
|
721
|
+
|
|
722
|
+
#Uversky charge-hydropathy score of the whole sequence
|
|
723
|
+
ch = protpy.charge_hydropathy(protein_seq)
|
|
724
|
+
# CH_HQ
|
|
725
|
+
# 0.215
|
|
726
|
+
# shape: 1 x 1
|
|
727
|
+
|
|
728
|
+
#FoldIndex profile
|
|
729
|
+
fi = protpy.charge_hydropathy(protein_seq, window=51)
|
|
730
|
+
# CH_w51_mean CH_w51_max CH_w51_min CH_w51_std
|
|
731
|
+
# 0.186 0.582 -0.190 0.132
|
|
732
|
+
# shape: 1 x 4
|
|
733
|
+
|
|
734
|
+
plaac = protpy.plaac(protein_seq, fill_value=0.0)
|
|
735
|
+
# PLAAC_LLR PLAAC_COREscore PLAAC_PrD_length PLAAC_has_PrD
|
|
736
|
+
# -1.578 0 0 0
|
|
737
|
+
# shape: 1 x 4
|
|
738
|
+
```
|
|
739
|
+
|
|
740
|
+
</details>
|
|
741
|
+
### Scaling features for machine learning
|
|
742
|
+
|
|
743
|
+
protpy returns each descriptor on its natural scale (percentages, counts, indices, pH, Da, ...). If your classifier needs features on a common scale such as [0, 1], fit a scaler on your **training** data and reuse it for test and new sequences. This scales every column to the range seen in your data without leaking information from the test set:
|
|
744
|
+
|
|
745
|
+
```python
|
|
746
|
+
from sklearn.preprocessing import MinMaxScaler
|
|
747
|
+
|
|
748
|
+
X_train = protpy.encode_dataset(train_seqs, output_file=None, verbose=False).set_index("sequence_id")
|
|
749
|
+
X_test = protpy.encode_dataset(test_seqs, output_file=None, verbose=False).set_index("sequence_id")
|
|
750
|
+
|
|
751
|
+
scaler = MinMaxScaler(clip=True).fit(X_train) # fit on training data only
|
|
752
|
+
X_train_scaled = scaler.transform(X_train) # every column in [0, 1]
|
|
753
|
+
X_test_scaled = scaler.transform(X_test) # clip=True keeps unseen extremes in [0, 1]
|
|
754
|
+
```
|
|
755
|
+
|
|
756
|
+
`StandardScaler` is a common alternative, and tree-based models don't need scaling. When cross-validating, put the scaler in a scikit-learn `Pipeline` so it is re-fitted on each training fold. Impute the few `NaN` values that `descriptor_set="extended"` can produce (e.g. with `SimpleImputer`) before scaling.
|
|
757
|
+
|
|
758
|
+
Documentation
|
|
759
|
+
-------------
|
|
760
|
+
The documentation for `protpy` is hosted on **ReadTheDocs** and is available [here][readthedocs].
|
|
761
|
+
|
|
762
|
+
Directories
|
|
763
|
+
-----------
|
|
764
|
+
* `/tests` - unit and integration tests for `protpy` package.
|
|
765
|
+
* `/protpy` - source code and all required external data files for package.
|
|
766
|
+
* `/docs` - `protpy` documentation.
|
|
767
|
+
* `/examples` - example notebook for protpy
|
|
768
|
+
|
|
769
|
+
Tests
|
|
770
|
+
-----
|
|
771
|
+
Install the test requirements (these include Biopython, which the reference-value tests compare against), then run all tests from the main `protpy` folder:
|
|
772
|
+
```
|
|
773
|
+
pip install -r tests/requirements.txt
|
|
774
|
+
python3 -m unittest discover tests -v
|
|
775
|
+
```
|
|
776
|
+
`python -m pytest` runs the same suite, and the CI uses it. Set `PROTPY_PERF=1` to include the timing test. See [`tests/README.md`](tests/README.md) for what each test file covers.
|
|
777
|
+
|
|
778
|
+
Contact
|
|
779
|
+
-------
|
|
780
|
+
If you have any questions or comments, please contact amckenna41@qub.ac.uk or raise an issue on the [Issues][Issues] tab.
|
|
781
|
+
|
|
782
|
+
References
|
|
783
|
+
----------
|
|
784
|
+
\[1\]: Mckenna, A., & Dubey, S. (2022). Machine learning based predictive model for the analysis of sequence activity relationships using protein spectra and protein descriptors. Journal of Biomedical Informatics, 128(104016), 104016. https://doi.org/10.1016/j.jbi.2022.104016 <br>
|
|
785
|
+
\[2\]: Shuichi Kawashima, Minoru Kanehisa, AAindex: Amino Acid index database, Nucleic Acids Research, Volume 28, Issue 1, 1 January 2000, Page 374, https://doi.org/10.1093/nar/28.1.374 <br>
|
|
786
|
+
\[3\]: Dong, J., Yao, ZJ., Zhang, L. et al. PyBioMed: a python library for various molecular representations of chemicals, proteins and DNAs and their interactions. J Cheminform 10, 16 (2018). https://doi.org/10.1186/s13321-018-0270-2 <br>
|
|
787
|
+
\[4\]: Reczko, M. and Bohr, H. (1994) The DEF data base of sequence based protein
|
|
788
|
+
fold class predictions. Nucleic Acids Res, 22, 3616-3619. <br>
|
|
789
|
+
\[5\]: Hua, S. and Sun, Z. (2001) Support vector machine approach for protein
|
|
790
|
+
subcellular localization prediction. Bioinformatics, 17, 721-728. <br>
|
|
791
|
+
\[6\]: Broto P, Moreau G, Vandicke C: Molecular structures: perception,
|
|
792
|
+
autocorrelation descriptor and SAR studies. Eur J Med Chem 1984, 19: 71–78. <br>
|
|
793
|
+
\[7\]: Ong, S.A., Lin, H.H., Chen, Y.Z. et al. Efficacy of different protein
|
|
794
|
+
descriptors in predicting protein functional families. BMC Bioinformatics
|
|
795
|
+
8, 300 (2007). https://doi.org/10.1186/1471-2105-8-300 <br>
|
|
796
|
+
\[8\]: Inna Dubchak, Ilya Muchink, Stephen R.Holbrook and Sung-Hou Kim. Prediction
|
|
797
|
+
of protein folding class using global description of amino acid sequence.
|
|
798
|
+
Proc.Natl. Acad.Sci.USA, 1995, 92, 8700-8704. <br>
|
|
799
|
+
\[9\]: Juwen Shen, Jian Zhang, Xiaomin Luo, Weiliang Zhu, Kunqian Yu, Kaixian Chen,
|
|
800
|
+
Yixue Li, Huanliang Jiang. Predicting proten-protein interactions based only
|
|
801
|
+
on sequences inforamtion. PNAS. 2007 (104) 4337-4341. <br>
|
|
802
|
+
\[10\]: Kuo-Chen Chou. Prediction of Protein Subcellar Locations by Incorporating
|
|
803
|
+
Quasi-Sequence-Order Effect. Biochemical and Biophysical Research
|
|
804
|
+
Communications 2000, 278, 477-483. <br>
|
|
805
|
+
\[11\]: Kuo-Chen Chou. Prediction of Protein Cellular Attributes Using
|
|
806
|
+
Pseudo-Amino Acid Composition. PROTEINS: Structure, Function, and
|
|
807
|
+
Genetics, 2001, 43: 246-255. <br>
|
|
808
|
+
\[12\]: Kuo-Chen Chou. Using amphiphilic pseudo amino acid composition to predict enzyme
|
|
809
|
+
subfamily classes. Bioinformatics, 2005,21,10-19.
|
|
810
|
+
|
|
811
|
+
Support
|
|
812
|
+
-------
|
|
813
|
+
[<img src="https://img.shields.io/github/stars/amckenna41/protpy?color=green&label=star%20it%20on%20GitHub" width="132" height="20" alt="Star it on GitHub">](https://github.com/amckenna41/protpy)
|
|
814
|
+
|
|
815
|
+
|
|
816
|
+
<a href="https://www.buymeacoffee.com/amckenna41" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/default-orange.png" alt="Buy Me A Coffee" height="41" width="174"></a>
|
|
817
|
+
|
|
818
|
+
[Back to top](#TOP)
|
|
819
|
+
|
|
820
|
+
<!-- Links -->
|
|
821
|
+
[python]: https://www.python.org/downloads/release/python-360/
|
|
822
|
+
[protpy]: https://github.com/amckenna41/protpy
|
|
823
|
+
[aaindex]: https://github.com/amckenna41/aaindex
|
|
824
|
+
[biopython]: https://biopython.org/
|
|
825
|
+
[numpy]: https://numpy.org/
|
|
826
|
+
[tqdm]: https://pypi.org/project/tqdm/
|
|
827
|
+
[pandas]: https://pandas.pydata.org/
|
|
828
|
+
[PyPi]: https://pypi.org/project/protpy/
|
|
829
|
+
[demo]: https://colab.research.google.com/drive/12E3ayovpZOf6Gv-8ILwkN1zReKslEksB?usp=sharing
|
|
830
|
+
[article]: https://medium.com/@ajmckenna69/protpy-05f02f821baa
|
|
831
|
+
[Issues]: https://github.com/amckenna41/protpy/issues
|
|
832
|
+
[readthedocs]: https://protpy.readthedocs.io/en/latest
|