python-katlas 0.1.4__py3-none-any.whl → 0.2.1__py3-none-any.whl
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.
- katlas/__init__.py +1 -1
- katlas/_modidx.py +133 -101
- katlas/common.py +10 -0
- katlas/compare.py +118 -0
- katlas/data.py +544 -0
- katlas/hierarchical.py +20 -0
- katlas/lo.py +69 -0
- katlas/pathway.py +170 -0
- katlas/plot.py +326 -640
- katlas/pspa.py +138 -0
- katlas/pssm.py +375 -0
- katlas/scoring.py +325 -0
- katlas/utils.py +236 -0
- python_katlas-0.2.1.dist-info/METADATA +492 -0
- python_katlas-0.2.1.dist-info/RECORD +19 -0
- {python_katlas-0.1.4.dist-info → python_katlas-0.2.1.dist-info}/WHEEL +1 -1
- {python_katlas-0.1.4.dist-info → python_katlas-0.2.1.dist-info}/entry_points.txt +0 -0
- {python_katlas-0.1.4.dist-info → python_katlas-0.2.1.dist-info/licenses}/LICENSE +0 -0
- {python_katlas-0.1.4.dist-info → python_katlas-0.2.1.dist-info}/top_level.txt +0 -0
- katlas/core.py +0 -816
- katlas/dl.py +0 -357
- katlas/feature.py +0 -295
- katlas/imports.py +0 -7
- katlas/train.py +0 -233
- python_katlas-0.1.4.dist-info/METADATA +0 -416
- python_katlas-0.1.4.dist-info/RECORD +0 -14
katlas/__init__.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "0.1
|
|
1
|
+
__version__ = "0.2.1"
|
katlas/_modidx.py
CHANGED
|
@@ -5,105 +5,137 @@ d = { 'settings': { 'branch': 'main',
|
|
|
5
5
|
'doc_host': 'https://sky1ove.github.io',
|
|
6
6
|
'git_url': 'https://github.com/sky1ove/katlas',
|
|
7
7
|
'lib_path': 'katlas'},
|
|
8
|
-
'syms': { 'katlas.
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
'katlas.
|
|
19
|
-
'katlas.
|
|
20
|
-
'katlas.
|
|
21
|
-
'katlas.
|
|
22
|
-
'katlas.
|
|
23
|
-
|
|
24
|
-
'katlas.
|
|
25
|
-
'katlas.
|
|
26
|
-
'katlas.
|
|
27
|
-
'katlas.
|
|
28
|
-
'katlas.
|
|
29
|
-
'katlas.
|
|
30
|
-
'katlas.
|
|
31
|
-
'katlas.
|
|
32
|
-
|
|
33
|
-
'katlas.
|
|
34
|
-
'katlas.
|
|
35
|
-
'katlas.
|
|
36
|
-
'katlas.
|
|
37
|
-
'katlas.
|
|
38
|
-
'katlas.
|
|
39
|
-
'katlas.
|
|
40
|
-
'katlas.
|
|
41
|
-
'katlas.
|
|
42
|
-
'katlas.
|
|
43
|
-
'katlas.
|
|
44
|
-
'katlas.
|
|
45
|
-
'katlas.
|
|
46
|
-
'katlas.
|
|
47
|
-
'katlas.
|
|
48
|
-
'katlas.
|
|
49
|
-
'katlas.
|
|
50
|
-
'katlas.
|
|
51
|
-
'katlas.
|
|
52
|
-
'katlas.
|
|
53
|
-
'katlas.
|
|
54
|
-
'katlas.
|
|
55
|
-
'katlas.
|
|
56
|
-
'katlas.
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
'katlas.
|
|
66
|
-
'katlas.
|
|
67
|
-
'katlas.
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
'katlas.feature.get_t5': ('feature.html#get_t5', 'katlas/feature.py'),
|
|
80
|
-
'katlas.feature.get_t5_bfd': ('feature.html#get_t5_bfd', 'katlas/feature.py'),
|
|
81
|
-
'katlas.feature.preprocess': ('feature.html#preprocess', 'katlas/feature.py'),
|
|
82
|
-
'katlas.feature.reduce_feature': ('feature.html#reduce_feature', 'katlas/feature.py'),
|
|
83
|
-
'katlas.feature.remove_hi_corr': ('feature.html#remove_hi_corr', 'katlas/feature.py')},
|
|
84
|
-
'katlas.imports': {},
|
|
85
|
-
'katlas.plot': { 'katlas.plot.draw_corr': ('plot.html#draw_corr', 'katlas/plot.py'),
|
|
86
|
-
'katlas.plot.get_AUCDF': ('plot.html#get_aucdf', 'katlas/plot.py'),
|
|
87
|
-
'katlas.plot.get_color_dict': ('plot.html#get_color_dict', 'katlas/plot.py'),
|
|
88
|
-
'katlas.plot.get_logo': ('plot.html#get_logo', 'katlas/plot.py'),
|
|
89
|
-
'katlas.plot.get_logo2': ('plot.html#get_logo2', 'katlas/plot.py'),
|
|
90
|
-
'katlas.plot.logo_func': ('plot.html#logo_func', 'katlas/plot.py'),
|
|
91
|
-
'katlas.plot.plot_2d': ('plot.html#plot_2d', 'katlas/plot.py'),
|
|
92
|
-
'katlas.plot.plot_bar': ('plot.html#plot_bar', 'katlas/plot.py'),
|
|
93
|
-
'katlas.plot.plot_bokeh': ('plot.html#plot_bokeh', 'katlas/plot.py'),
|
|
94
|
-
'katlas.plot.plot_box': ('plot.html#plot_box', 'katlas/plot.py'),
|
|
95
|
-
'katlas.plot.plot_cluster': ('plot.html#plot_cluster', 'katlas/plot.py'),
|
|
96
|
-
'katlas.plot.plot_confusion_matrix': ('plot.html#plot_confusion_matrix', 'katlas/plot.py'),
|
|
97
|
-
'katlas.plot.plot_corr': ('plot.html#plot_corr', 'katlas/plot.py'),
|
|
98
|
-
'katlas.plot.plot_count': ('plot.html#plot_count', 'katlas/plot.py'),
|
|
99
|
-
'katlas.plot.plot_group_bar': ('plot.html#plot_group_bar', 'katlas/plot.py'),
|
|
8
|
+
'syms': { 'katlas.common': {},
|
|
9
|
+
'katlas.compare': { 'katlas.compare.cosine_overall_flat': ('compare.html#cosine_overall_flat', 'katlas/compare.py'),
|
|
10
|
+
'katlas.compare.cosine_similarity': ('compare.html#cosine_similarity', 'katlas/compare.py'),
|
|
11
|
+
'katlas.compare.js_divergence': ('compare.html#js_divergence', 'katlas/compare.py'),
|
|
12
|
+
'katlas.compare.js_divergence_flat': ('compare.html#js_divergence_flat', 'katlas/compare.py'),
|
|
13
|
+
'katlas.compare.js_similarity': ('compare.html#js_similarity', 'katlas/compare.py'),
|
|
14
|
+
'katlas.compare.js_similarity_flat': ('compare.html#js_similarity_flat', 'katlas/compare.py'),
|
|
15
|
+
'katlas.compare.kl_divergence': ('compare.html#kl_divergence', 'katlas/compare.py'),
|
|
16
|
+
'katlas.compare.kl_divergence_flat': ('compare.html#kl_divergence_flat', 'katlas/compare.py')},
|
|
17
|
+
'katlas.data': { 'katlas.data.CPTAC': ('data.html#cptac', 'katlas/data.py'),
|
|
18
|
+
'katlas.data.CPTAC._read_file': ('data.html#cptac._read_file', 'katlas/data.py'),
|
|
19
|
+
'katlas.data.CPTAC.get_id': ('data.html#cptac.get_id', 'katlas/data.py'),
|
|
20
|
+
'katlas.data.CPTAC.list_cancer': ('data.html#cptac.list_cancer', 'katlas/data.py'),
|
|
21
|
+
'katlas.data.Data': ('data.html#data', 'katlas/data.py'),
|
|
22
|
+
'katlas.data.Data.clear_cache': ('data.html#data.clear_cache', 'katlas/data.py'),
|
|
23
|
+
'katlas.data.Data.download': ('data.html#data.download', 'katlas/data.py'),
|
|
24
|
+
'katlas.data.Data.get_aa_info': ('data.html#data.get_aa_info', 'katlas/data.py'),
|
|
25
|
+
'katlas.data.Data.get_aa_morgan': ('data.html#data.get_aa_morgan', 'katlas/data.py'),
|
|
26
|
+
'katlas.data.Data.get_aa_rdkit': ('data.html#data.get_aa_rdkit', 'katlas/data.py'),
|
|
27
|
+
'katlas.data.Data.get_cddm': ('data.html#data.get_cddm', 'katlas/data.py'),
|
|
28
|
+
'katlas.data.Data.get_cddm_LO': ('data.html#data.get_cddm_lo', 'katlas/data.py'),
|
|
29
|
+
'katlas.data.Data.get_cddm_LO_upper': ('data.html#data.get_cddm_lo_upper', 'katlas/data.py'),
|
|
30
|
+
'katlas.data.Data.get_cddm_upper': ('data.html#data.get_cddm_upper', 'katlas/data.py'),
|
|
31
|
+
'katlas.data.Data.get_combine_site_phosphorylated': ( 'data.html#data.get_combine_site_phosphorylated',
|
|
32
|
+
'katlas/data.py'),
|
|
33
|
+
'katlas.data.Data.get_combine_site_psp_ochoa': ('data.html#data.get_combine_site_psp_ochoa', 'katlas/data.py'),
|
|
34
|
+
'katlas.data.Data.get_cptac_ensembl_site': ('data.html#data.get_cptac_ensembl_site', 'katlas/data.py'),
|
|
35
|
+
'katlas.data.Data.get_cptac_gene_site': ('data.html#data.get_cptac_gene_site', 'katlas/data.py'),
|
|
36
|
+
'katlas.data.Data.get_cptac_unique_site': ('data.html#data.get_cptac_unique_site', 'katlas/data.py'),
|
|
37
|
+
'katlas.data.Data.get_human_site': ('data.html#data.get_human_site', 'katlas/data.py'),
|
|
38
|
+
'katlas.data.Data.get_kd_uniprot': ('data.html#data.get_kd_uniprot', 'katlas/data.py'),
|
|
39
|
+
'katlas.data.Data.get_kinase_info': ('data.html#data.get_kinase_info', 'katlas/data.py'),
|
|
40
|
+
'katlas.data.Data.get_kinase_uniprot': ('data.html#data.get_kinase_uniprot', 'katlas/data.py'),
|
|
41
|
+
'katlas.data.Data.get_ks_background': ('data.html#data.get_ks_background', 'katlas/data.py'),
|
|
42
|
+
'katlas.data.Data.get_ks_dataset': ('data.html#data.get_ks_dataset', 'katlas/data.py'),
|
|
43
|
+
'katlas.data.Data.get_ks_unique': ('data.html#data.get_ks_unique', 'katlas/data.py'),
|
|
44
|
+
'katlas.data.Data.get_num_dict': ('data.html#data.get_num_dict', 'katlas/data.py'),
|
|
45
|
+
'katlas.data.Data.get_ochoa_site': ('data.html#data.get_ochoa_site', 'katlas/data.py'),
|
|
46
|
+
'katlas.data.Data.get_psp_human_site': ('data.html#data.get_psp_human_site', 'katlas/data.py'),
|
|
47
|
+
'katlas.data.Data.get_pspa': ('data.html#data.get_pspa', 'katlas/data.py'),
|
|
48
|
+
'katlas.data.Data.get_pspa_raw': ('data.html#data.get_pspa_raw', 'katlas/data.py'),
|
|
49
|
+
'katlas.data.Data.get_pspa_scale': ('data.html#data.get_pspa_scale', 'katlas/data.py'),
|
|
50
|
+
'katlas.data.Data.get_pspa_st': ('data.html#data.get_pspa_st', 'katlas/data.py'),
|
|
51
|
+
'katlas.data.Data.get_pspa_st_pct': ('data.html#data.get_pspa_st_pct', 'katlas/data.py'),
|
|
52
|
+
'katlas.data.Data.get_pspa_tyr': ('data.html#data.get_pspa_tyr', 'katlas/data.py'),
|
|
53
|
+
'katlas.data.Data.get_pspa_tyr_pct': ('data.html#data.get_pspa_tyr_pct', 'katlas/data.py'),
|
|
54
|
+
'katlas.data.Data.get_reactome_pathway': ('data.html#data.get_reactome_pathway', 'katlas/data.py'),
|
|
55
|
+
'katlas.data.Data.get_reactome_pathway_lo': ('data.html#data.get_reactome_pathway_lo', 'katlas/data.py'),
|
|
56
|
+
'katlas.data.Data.read_file': ('data.html#data.read_file', 'katlas/data.py'),
|
|
57
|
+
'katlas.data._default_dataset_dir': ('data.html#_default_dataset_dir', 'katlas/data.py'),
|
|
58
|
+
'katlas.data._normalize_dataset_dir': ('data.html#_normalize_dataset_dir', 'katlas/data.py'),
|
|
59
|
+
'katlas.data._normalize_required_files': ('data.html#_normalize_required_files', 'katlas/data.py'),
|
|
60
|
+
'katlas.data._read_dataset_file_cached': ('data.html#_read_dataset_file_cached', 'katlas/data.py')},
|
|
61
|
+
'katlas.hierarchical': { 'katlas.hierarchical.get_1d_js': ('hierarchical.html#get_1d_js', 'katlas/hierarchical.py'),
|
|
62
|
+
'katlas.hierarchical.get_1d_js_parallel': ( 'hierarchical.html#get_1d_js_parallel',
|
|
63
|
+
'katlas/hierarchical.py')},
|
|
64
|
+
'katlas.lo': { 'katlas.lo.get_pssm_LO': ('lo.html#get_pssm_lo', 'katlas/lo.py'),
|
|
65
|
+
'katlas.lo.get_pssm_LO_flat': ('lo.html#get_pssm_lo_flat', 'katlas/lo.py'),
|
|
66
|
+
'katlas.lo.plot_logo_LO': ('lo.html#plot_logo_lo', 'katlas/lo.py'),
|
|
67
|
+
'katlas.lo.plot_logo_heatmap_LO': ('lo.html#plot_logo_heatmap_lo', 'katlas/lo.py')},
|
|
68
|
+
'katlas.pathway': { 'katlas.pathway.add_reactome_ref': ('pathway.html#add_reactome_ref', 'katlas/pathway.py'),
|
|
69
|
+
'katlas.pathway.get_overlap': ('pathway.html#get_overlap', 'katlas/pathway.py'),
|
|
70
|
+
'katlas.pathway.get_reactome': ('pathway.html#get_reactome', 'katlas/pathway.py'),
|
|
71
|
+
'katlas.pathway.get_reactome_raw': ('pathway.html#get_reactome_raw', 'katlas/pathway.py'),
|
|
72
|
+
'katlas.pathway.plot_path': ('pathway.html#plot_path', 'katlas/pathway.py'),
|
|
73
|
+
'katlas.pathway.query_reactome': ('pathway.html#query_reactome', 'katlas/pathway.py')},
|
|
74
|
+
'katlas.plot': { 'katlas.plot.change_center_name': ('plot.html#change_center_name', 'katlas/plot.py'),
|
|
75
|
+
'katlas.plot.convert_logo_df': ('plot.html#convert_logo_df', 'katlas/plot.py'),
|
|
76
|
+
'katlas.plot.get_logo_IC': ('plot.html#get_logo_ic', 'katlas/plot.py'),
|
|
77
|
+
'katlas.plot.get_pos_min_max': ('plot.html#get_pos_min_max', 'katlas/plot.py'),
|
|
78
|
+
'katlas.plot.pSTY2sty': ('plot.html#psty2sty', 'katlas/plot.py'),
|
|
100
79
|
'katlas.plot.plot_heatmap': ('plot.html#plot_heatmap', 'katlas/plot.py'),
|
|
101
|
-
'katlas.plot.
|
|
102
|
-
'katlas.plot.
|
|
103
|
-
'katlas.plot.
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
80
|
+
'katlas.plot.plot_heatmap_simple': ('plot.html#plot_heatmap_simple', 'katlas/plot.py'),
|
|
81
|
+
'katlas.plot.plot_logo': ('plot.html#plot_logo', 'katlas/plot.py'),
|
|
82
|
+
'katlas.plot.plot_logo_heatmap': ('plot.html#plot_logo_heatmap', 'katlas/plot.py'),
|
|
83
|
+
'katlas.plot.plot_logo_raw': ('plot.html#plot_logo_raw', 'katlas/plot.py'),
|
|
84
|
+
'katlas.plot.plot_logos': ('plot.html#plot_logos', 'katlas/plot.py'),
|
|
85
|
+
'katlas.plot.plot_logos_idx': ('plot.html#plot_logos_idx', 'katlas/plot.py'),
|
|
86
|
+
'katlas.plot.plot_two_heatmaps': ('plot.html#plot_two_heatmaps', 'katlas/plot.py'),
|
|
87
|
+
'katlas.plot.scale_pos_neg_values': ('plot.html#scale_pos_neg_values', 'katlas/plot.py'),
|
|
88
|
+
'katlas.plot.scale_zero_position': ('plot.html#scale_zero_position', 'katlas/plot.py'),
|
|
89
|
+
'katlas.plot.sty2pSTY': ('plot.html#sty2psty', 'katlas/plot.py'),
|
|
90
|
+
'katlas.plot.sty2pSTY_df': ('plot.html#sty2psty_df', 'katlas/plot.py')},
|
|
91
|
+
'katlas.pspa': { 'katlas.pspa.get_logo': ('pspa.html#get_logo', 'katlas/pspa.py'),
|
|
92
|
+
'katlas.pspa.get_one_kinase': ('pspa.html#get_one_kinase', 'katlas/pspa.py'),
|
|
93
|
+
'katlas.pspa.plot_logo_heatmap_pspa': ('pspa.html#plot_logo_heatmap_pspa', 'katlas/pspa.py'),
|
|
94
|
+
'katlas.pspa.plot_logo_pspa': ('pspa.html#plot_logo_pspa', 'katlas/pspa.py'),
|
|
95
|
+
'katlas.pspa.preprocess_pspa': ('pspa.html#preprocess_pspa', 'katlas/pspa.py'),
|
|
96
|
+
'katlas.pspa.raw2norm': ('pspa.html#raw2norm', 'katlas/pspa.py')},
|
|
97
|
+
'katlas.pssm': { 'katlas.pssm._clean_zero': ('pssm.html#_clean_zero', 'katlas/pssm.py'),
|
|
98
|
+
'katlas.pssm.clean_zero_normalize': ('pssm.html#clean_zero_normalize', 'katlas/pssm.py'),
|
|
99
|
+
'katlas.pssm.flatten_pssm': ('pssm.html#flatten_pssm', 'katlas/pssm.py'),
|
|
100
|
+
'katlas.pssm.get_IC': ('pssm.html#get_ic', 'katlas/pssm.py'),
|
|
101
|
+
'katlas.pssm.get_IC_flat': ('pssm.html#get_ic_flat', 'katlas/pssm.py'),
|
|
102
|
+
'katlas.pssm.get_cluster_pssms': ('pssm.html#get_cluster_pssms', 'katlas/pssm.py'),
|
|
103
|
+
'katlas.pssm.get_entropy': ('pssm.html#get_entropy', 'katlas/pssm.py'),
|
|
104
|
+
'katlas.pssm.get_entropy_flat': ('pssm.html#get_entropy_flat', 'katlas/pssm.py'),
|
|
105
|
+
'katlas.pssm.get_prob': ('pssm.html#get_prob', 'katlas/pssm.py'),
|
|
106
|
+
'katlas.pssm.get_pssm_seq_labels': ('pssm.html#get_pssm_seq_labels', 'katlas/pssm.py'),
|
|
107
|
+
'katlas.pssm.get_pssm_weight': ('pssm.html#get_pssm_weight', 'katlas/pssm.py'),
|
|
108
|
+
'katlas.pssm.get_specificity': ('pssm.html#get_specificity', 'katlas/pssm.py'),
|
|
109
|
+
'katlas.pssm.get_specificity_flat': ('pssm.html#get_specificity_flat', 'katlas/pssm.py'),
|
|
110
|
+
'katlas.pssm.pssm_to_seq': ('pssm.html#pssm_to_seq', 'katlas/pssm.py'),
|
|
111
|
+
'katlas.pssm.recover_pssm': ('pssm.html#recover_pssm', 'katlas/pssm.py')},
|
|
112
|
+
'katlas.scoring': { 'katlas.scoring.Params': ('scoring.html#params', 'katlas/scoring.py'),
|
|
113
|
+
'katlas.scoring.STY2sty': ('scoring.html#sty2sty', 'katlas/scoring.py'),
|
|
114
|
+
'katlas.scoring.cut_seq': ('scoring.html#cut_seq', 'katlas/scoring.py'),
|
|
115
|
+
'katlas.scoring.duplicate_ref_zero': ('scoring.html#duplicate_ref_zero', 'katlas/scoring.py'),
|
|
116
|
+
'katlas.scoring.get_dict': ('scoring.html#get_dict', 'katlas/scoring.py'),
|
|
117
|
+
'katlas.scoring.get_pct': ('scoring.html#get_pct', 'katlas/scoring.py'),
|
|
118
|
+
'katlas.scoring.get_pct_df': ('scoring.html#get_pct_df', 'katlas/scoring.py'),
|
|
119
|
+
'katlas.scoring.multiply': ('scoring.html#multiply', 'katlas/scoring.py'),
|
|
120
|
+
'katlas.scoring.multiply_generic': ('scoring.html#multiply_generic', 'katlas/scoring.py'),
|
|
121
|
+
'katlas.scoring.multiply_pspa': ('scoring.html#multiply_pspa', 'katlas/scoring.py'),
|
|
122
|
+
'katlas.scoring.predict_kinase': ('scoring.html#predict_kinase', 'katlas/scoring.py'),
|
|
123
|
+
'katlas.scoring.predict_kinase_df': ('scoring.html#predict_kinase_df', 'katlas/scoring.py'),
|
|
124
|
+
'katlas.scoring.preprocess_ref': ('scoring.html#preprocess_ref', 'katlas/scoring.py'),
|
|
125
|
+
'katlas.scoring.sumup': ('scoring.html#sumup', 'katlas/scoring.py')},
|
|
126
|
+
'katlas.utils': { 'katlas.utils.aln2df': ('utils.html#aln2df', 'katlas/utils.py'),
|
|
127
|
+
'katlas.utils.check_seq': ('utils.html#check_seq', 'katlas/utils.py'),
|
|
128
|
+
'katlas.utils.check_seqs': ('utils.html#check_seqs', 'katlas/utils.py'),
|
|
129
|
+
'katlas.utils.clean_feat': ('utils.html#clean_feat', 'katlas/utils.py'),
|
|
130
|
+
'katlas.utils.extract_site_seq': ('utils.html#extract_site_seq', 'katlas/utils.py'),
|
|
131
|
+
'katlas.utils.get_aln_freq': ('utils.html#get_aln_freq', 'katlas/utils.py'),
|
|
132
|
+
'katlas.utils.get_fasta': ('utils.html#get_fasta', 'katlas/utils.py'),
|
|
133
|
+
'katlas.utils.get_subfamily_color': ('utils.html#get_subfamily_color', 'katlas/utils.py'),
|
|
134
|
+
'katlas.utils.phosphorylate_seq': ('utils.html#phosphorylate_seq', 'katlas/utils.py'),
|
|
135
|
+
'katlas.utils.phosphorylate_seq_df': ('utils.html#phosphorylate_seq_df', 'katlas/utils.py'),
|
|
136
|
+
'katlas.utils.prepare_path': ('utils.html#prepare_path', 'katlas/utils.py'),
|
|
137
|
+
'katlas.utils.remove_hi_corr': ('utils.html#remove_hi_corr', 'katlas/utils.py'),
|
|
138
|
+
'katlas.utils.run_clustalo': ('utils.html#run_clustalo', 'katlas/utils.py'),
|
|
139
|
+
'katlas.utils.standardize': ('utils.html#standardize', 'katlas/utils.py'),
|
|
140
|
+
'katlas.utils.validate_site': ('utils.html#validate_site', 'katlas/utils.py'),
|
|
141
|
+
'katlas.utils.validate_site_df': ('utils.html#validate_site_df', 'katlas/utils.py')}}}
|
katlas/common.py
ADDED
katlas/compare.py
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"""algorithms about comparing two PSSMs"""
|
|
2
|
+
|
|
3
|
+
# AUTOGENERATED! DO NOT EDIT! File to edit: ../nbs/06_compare.ipynb.
|
|
4
|
+
|
|
5
|
+
# %% auto #0
|
|
6
|
+
__all__ = ['kl_divergence', 'kl_divergence_flat', 'js_divergence', 'js_divergence_flat', 'js_similarity', 'js_similarity_flat',
|
|
7
|
+
'cosine_similarity', 'cosine_overall_flat']
|
|
8
|
+
|
|
9
|
+
# %% ../nbs/06_compare.ipynb #76949d54-f519-4bc6-9da5-d48a05bbfe69
|
|
10
|
+
import numpy as np, pandas as pd
|
|
11
|
+
from .pssm import EPSILON
|
|
12
|
+
|
|
13
|
+
# %% ../nbs/06_compare.ipynb #b1ef2ee7-70fd-4703-96b4-1c1a9053987f
|
|
14
|
+
def kl_divergence(p1, # target pssm p (array-like, shape: (AA, positions))
|
|
15
|
+
p2, # pred pssm q (array-like, same shape as p1)
|
|
16
|
+
):
|
|
17
|
+
"""
|
|
18
|
+
KL divergence D_KL(p1 || p2) over positions.
|
|
19
|
+
|
|
20
|
+
p1 and p2 are arrays (df or np) with index as aa and column as position.
|
|
21
|
+
Returns average divergence across positions if mean=True, else per-position.
|
|
22
|
+
"""
|
|
23
|
+
if p1.shape != p2.shape: raise ValueError("Shapes of p1 and p2 must match.")
|
|
24
|
+
p1, p2 = p1.align(p2, join='inner', axis=None)
|
|
25
|
+
# Mask invalid positions (both zero)
|
|
26
|
+
valid = (p1 + p2) > 0
|
|
27
|
+
p1 = np.where(valid, p1, 0.0)
|
|
28
|
+
p2 = np.where(valid, p2, 0.0)
|
|
29
|
+
|
|
30
|
+
# KL divergence: sum_x p1(x) log(p1(x)/p2(x))
|
|
31
|
+
kl = np.sum(p1 * np.log((p1 + EPSILON) / (p2 + EPSILON)), axis=0)
|
|
32
|
+
|
|
33
|
+
return kl
|
|
34
|
+
|
|
35
|
+
# %% ../nbs/06_compare.ipynb #71084bb3-169a-4dc2-b5dd-1b802fda8225
|
|
36
|
+
def kl_divergence_flat(p1_flat, # pd.Series of target flattened pssm p
|
|
37
|
+
p2_flat, # pd.Series of pred flattened pssm q
|
|
38
|
+
):
|
|
39
|
+
|
|
40
|
+
"p1 and p2 are two flattened pd.Series with index as aa and column as position"
|
|
41
|
+
kld = kl_divergence(p1_flat,p2_flat) # do not do js.mean() because it's 1d
|
|
42
|
+
total_position = len(p1_flat.index.str.extract(r'(-?\d+)').drop_duplicates())
|
|
43
|
+
return float(kld/total_position)
|
|
44
|
+
|
|
45
|
+
# %% ../nbs/06_compare.ipynb #eca99343-fbcd-48c2-a1ff-88af31fd2346
|
|
46
|
+
def js_divergence(p1, # pssm
|
|
47
|
+
p2, # pssm
|
|
48
|
+
index=True,
|
|
49
|
+
):
|
|
50
|
+
"p1 and p2 are two arrays (df or np) with index as aa and column as position"
|
|
51
|
+
if p1.shape != p2.shape: raise ValueError("Shapes of p1 and p2 must match.")
|
|
52
|
+
p1, p2 = p1.align(p2, join='inner', axis=None)
|
|
53
|
+
if index: positions=p1.columns
|
|
54
|
+
valid = (p1 + p2) > 0
|
|
55
|
+
p1 = np.where(valid, p1, 0.0)
|
|
56
|
+
p2 = np.where(valid, p2, 0.0)
|
|
57
|
+
|
|
58
|
+
m = 0.5 * (p1 + p2)
|
|
59
|
+
|
|
60
|
+
js = 0.5 * np.sum(p1 * np.log((p1+ EPSILON) / (m + EPSILON)), axis=0) + \
|
|
61
|
+
0.5 * np.sum(p2 * np.log((p2+ EPSILON) / (m + EPSILON)), axis=0)
|
|
62
|
+
return pd.Series(js,index=positions) if index else js
|
|
63
|
+
|
|
64
|
+
# %% ../nbs/06_compare.ipynb #37553737-13b3-4461-ad93-fe4cf863f25b
|
|
65
|
+
def js_divergence_flat(p1_flat, # pd.Series of flattened pssm
|
|
66
|
+
p2_flat, # pd.Series of flattened pssm
|
|
67
|
+
):
|
|
68
|
+
|
|
69
|
+
"p1 and p2 are two flattened pd.Series with index as aa and column as position"
|
|
70
|
+
js = js_divergence(p1_flat,p2_flat,index=False)
|
|
71
|
+
total_position = len(p1_flat.index.str.extract(r'(-?\d+)').drop_duplicates())
|
|
72
|
+
return float(js/total_position)
|
|
73
|
+
|
|
74
|
+
# %% ../nbs/06_compare.ipynb #7e480e54-c5de-4726-b208-c531e07a2adc
|
|
75
|
+
def js_similarity(pssm1,pssm2):
|
|
76
|
+
"Convert JSD to bits to be in range (0,1) then 1-JSD."
|
|
77
|
+
distance = js_divergence(pssm1,pssm2)/np.log(2)
|
|
78
|
+
similarity = 1-distance
|
|
79
|
+
return similarity
|
|
80
|
+
|
|
81
|
+
# %% ../nbs/06_compare.ipynb #0c51e8b5-df29-431b-8013-ff46388b4872
|
|
82
|
+
def js_similarity_flat(p1_flat,p2_flat):
|
|
83
|
+
"Convert JSD to bits to be in range (0,1) then 1-JSD. "
|
|
84
|
+
return 1-(js_divergence_flat(p1_flat,p2_flat)/np.log(2))
|
|
85
|
+
|
|
86
|
+
# %% ../nbs/06_compare.ipynb #8d2e228a-8543-4174-8c24-ce6ded317c8d
|
|
87
|
+
def cosine_similarity(pssm1: pd.DataFrame, pssm2: pd.DataFrame) -> pd.Series:
|
|
88
|
+
"Compute cosine similarity per position (column) between two PSSMs."
|
|
89
|
+
|
|
90
|
+
if pssm1.shape != pssm2.shape: raise ValueError("PSSMs must have the same shape")
|
|
91
|
+
|
|
92
|
+
sims = {}
|
|
93
|
+
for pos in pssm1.columns:
|
|
94
|
+
v1 = pssm1[pos]
|
|
95
|
+
v2 = pssm2[pos]
|
|
96
|
+
v1,v2 = v1.align(v2, join='inner') # make sure the aa index match with each other
|
|
97
|
+
|
|
98
|
+
norm1 = np.linalg.norm(v1)
|
|
99
|
+
norm2 = np.linalg.norm(v2)
|
|
100
|
+
|
|
101
|
+
if norm1 == 0 or norm2 == 0:
|
|
102
|
+
sims[pos] = 0.0
|
|
103
|
+
else:
|
|
104
|
+
dot_product = np.dot(v1,v2) # sum(v1*v2)
|
|
105
|
+
sims[pos] = dot_product / (norm1 * norm2)
|
|
106
|
+
|
|
107
|
+
return pd.Series(sims)
|
|
108
|
+
|
|
109
|
+
# %% ../nbs/06_compare.ipynb #d830fbaa-4a9f-4d5d-98ba-289fc91bff8e
|
|
110
|
+
def cosine_overall_flat(pssm1_flat, pssm2_flat):
|
|
111
|
+
"""Compute overall cosine similarity between two PSSMs (flattened)."""
|
|
112
|
+
# match index for dot product
|
|
113
|
+
pssm1_flat, pssm2_flat = pssm1_flat.align(pssm2_flat, join='inner')
|
|
114
|
+
norm1 = np.linalg.norm(pssm1_flat)
|
|
115
|
+
norm2 = np.linalg.norm(pssm2_flat)
|
|
116
|
+
if norm1 == 0 or norm2 == 0: return 0.0
|
|
117
|
+
dot_product = sum(pssm1_flat*pssm2_flat) # np.dot(pssm1_flat, pssm2_flat)
|
|
118
|
+
return dot_product/ (norm1 * norm2)
|