cpgtools 1.12.0__py3-none-any.whl → 2.0.2__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.
Potentially problematic release.
This version of cpgtools might be problematic. Click here for more details.
- cpgmodule/_version.py +1 -0
- cpgmodule/data/__init__.py +0 -0
- cpgmodule/methylClock.py +53 -0
- cpgmodule/utils.py +38 -1
- {cpgtools-1.12.0.data → cpgtools-2.0.2.data}/scripts/CpG_aggregation.py +1 -1
- {cpgtools-1.12.0.data → cpgtools-2.0.2.data}/scripts/CpG_anno_position.py +1 -1
- {cpgtools-1.12.0.data → cpgtools-2.0.2.data}/scripts/CpG_anno_probe.py +6 -4
- {cpgtools-1.12.0.data → cpgtools-2.0.2.data}/scripts/CpG_density_gene_centered.py +1 -1
- {cpgtools-1.12.0.data → cpgtools-2.0.2.data}/scripts/CpG_distrb_chrom.py +1 -1
- {cpgtools-1.12.0.data → cpgtools-2.0.2.data}/scripts/CpG_distrb_gene_centered.py +1 -1
- {cpgtools-1.12.0.data → cpgtools-2.0.2.data}/scripts/CpG_distrb_region.py +1 -3
- {cpgtools-1.12.0.data → cpgtools-2.0.2.data}/scripts/CpG_logo.py +1 -1
- {cpgtools-1.12.0.data → cpgtools-2.0.2.data}/scripts/CpG_to_gene.py +1 -1
- {cpgtools-1.12.0.data → cpgtools-2.0.2.data}/scripts/beta_PCA.py +31 -23
- {cpgtools-1.12.0.data → cpgtools-2.0.2.data}/scripts/beta_UMAP.py +29 -22
- cpgtools-2.0.2.data/scripts/beta_imputation.py +604 -0
- {cpgtools-1.12.0.data → cpgtools-2.0.2.data}/scripts/beta_jitter_plot.py +1 -1
- {cpgtools-1.12.0.data → cpgtools-2.0.2.data}/scripts/beta_m_conversion.py +1 -1
- {cpgtools-1.12.0.data → cpgtools-2.0.2.data}/scripts/beta_profile_gene_centered.py +1 -1
- {cpgtools-1.12.0.data → cpgtools-2.0.2.data}/scripts/beta_profile_region.py +1 -1
- {cpgtools-1.12.0.data → cpgtools-2.0.2.data}/scripts/beta_selectNBest.py +9 -6
- {cpgtools-1.12.0.data → cpgtools-2.0.2.data}/scripts/beta_stacked_barplot.py +1 -1
- {cpgtools-1.12.0.data → cpgtools-2.0.2.data}/scripts/beta_stats.py +1 -1
- {cpgtools-1.12.0.data → cpgtools-2.0.2.data}/scripts/beta_tSNE.py +31 -24
- {cpgtools-1.12.0.data → cpgtools-2.0.2.data}/scripts/beta_topN.py +1 -1
- {cpgtools-1.12.0.data → cpgtools-2.0.2.data}/scripts/beta_trichotmize.py +1 -1
- {cpgtools-1.12.0.data → cpgtools-2.0.2.data}/scripts/dmc_Bayes.py +1 -1
- {cpgtools-1.12.0.data → cpgtools-2.0.2.data}/scripts/dmc_bb.py +1 -1
- {cpgtools-1.12.0.data → cpgtools-2.0.2.data}/scripts/dmc_fisher.py +1 -1
- {cpgtools-1.12.0.data → cpgtools-2.0.2.data}/scripts/dmc_glm.py +1 -1
- {cpgtools-1.12.0.data → cpgtools-2.0.2.data}/scripts/dmc_logit.py +1 -1
- {cpgtools-1.12.0.data → cpgtools-2.0.2.data}/scripts/dmc_nonparametric.py +1 -1
- {cpgtools-1.12.0.data → cpgtools-2.0.2.data}/scripts/dmc_ttest.py +3 -3
- cpgtools-2.0.2.data/scripts/predict_sex.py +126 -0
- cpgtools-2.0.2.dist-info/LICENSE +19 -0
- cpgtools-2.0.2.dist-info/METADATA +76 -0
- cpgtools-2.0.2.dist-info/RECORD +82 -0
- {cpgtools-1.12.0.dist-info → cpgtools-2.0.2.dist-info}/WHEEL +1 -1
- cpgtools-2.0.2.dist-info/top_level.txt +3 -0
- impyute/__init__.py +3 -0
- impyute/contrib/__init__.py +7 -0
- impyute/contrib/compare.py +69 -0
- impyute/contrib/count_missing.py +30 -0
- impyute/contrib/describe.py +63 -0
- impyute/cs/__init__.py +11 -0
- impyute/cs/buck_iterative.py +82 -0
- impyute/cs/central_tendency.py +84 -0
- impyute/cs/em.py +52 -0
- impyute/cs/fast_knn.py +130 -0
- impyute/cs/random.py +27 -0
- impyute/dataset/__init__.py +6 -0
- impyute/dataset/base.py +137 -0
- impyute/dataset/corrupt.py +55 -0
- impyute/deletion/__init__.py +5 -0
- impyute/deletion/complete_case.py +21 -0
- impyute/ops/__init__.py +12 -0
- impyute/ops/error.py +9 -0
- impyute/ops/inverse_distance_weighting.py +31 -0
- impyute/ops/matrix.py +47 -0
- impyute/ops/testing.py +20 -0
- impyute/ops/util.py +76 -0
- impyute/ops/wrapper.py +179 -0
- impyute/ts/__init__.py +6 -0
- impyute/ts/locf.py +57 -0
- impyute/ts/moving_window.py +128 -0
- missingpy/__init__.py +4 -0
- missingpy/knnimpute.py +328 -0
- missingpy/missforest.py +556 -0
- missingpy/pairwise_external.py +315 -0
- missingpy/tests/__init__.py +0 -0
- missingpy/tests/test_knnimpute.py +605 -0
- missingpy/tests/test_missforest.py +409 -0
- missingpy/utils.py +124 -0
- cpgtools-1.12.0.dist-info/LICENSE.txt +0 -674
- cpgtools-1.12.0.dist-info/METADATA +0 -30
- cpgtools-1.12.0.dist-info/RECORD +0 -43
- cpgtools-1.12.0.dist-info/top_level.txt +0 -2
|
@@ -18,6 +18,7 @@ cg_003 0.845065 0.843957 0.840184 0.824286
|
|
|
18
18
|
import sys
|
|
19
19
|
import numpy as np
|
|
20
20
|
from optparse import OptionParser
|
|
21
|
+
from cpgmodule._version import __version__
|
|
21
22
|
from cpgmodule.utils import *
|
|
22
23
|
import pandas as pd
|
|
23
24
|
|
|
@@ -28,7 +29,6 @@ __author__ = "Liguo Wang"
|
|
|
28
29
|
__copyright__ = "Copyleft"
|
|
29
30
|
__credits__ = []
|
|
30
31
|
__license__ = "GPL"
|
|
31
|
-
__version__="1.12.0"
|
|
32
32
|
__maintainer__ = "Liguo Wang"
|
|
33
33
|
__email__ = "wang.liguo@mayo.edu"
|
|
34
34
|
__status__ = "Development"
|
|
@@ -40,8 +40,8 @@ def main():
|
|
|
40
40
|
parser = OptionParser(usage,version="%prog " + __version__)
|
|
41
41
|
parser.add_option("-i","--input_file",action="store",type="string",dest="input_file",help="Tab-separated data frame file containing beta values with the 1st row containing sample IDs and the 1st column containing CpG IDs.")
|
|
42
42
|
parser.add_option("-g","--group",action="store",type="string",dest="group_file",help="Comma-separated group file defining the biological groups of each sample.")
|
|
43
|
-
parser.add_option("-
|
|
44
|
-
parser.add_option("-s","--score-function",action="store",type='string', dest="score_function", default='
|
|
43
|
+
parser.add_option("-c","--topK",action="store",type='int', dest="cpg_count", default=100, help="Number of top features to select. default=%default" )
|
|
44
|
+
parser.add_option("-s","--score-function",action="store",type='string', dest="score_function", default='chisq', help="Scoring function used to measure the dependency between features scores and labels. Must be \"chisq\" (chi-squared statistic), \"anova\" (ANOVA F-value), or \"mi\" (mutual information). default=%default" )
|
|
45
45
|
parser.add_option("-o","--output",action="store",type='string', dest="out_file",help="The prefix of the output file.")
|
|
46
46
|
(options,args)=parser.parse_args()
|
|
47
47
|
|
|
@@ -77,7 +77,7 @@ def main():
|
|
|
77
77
|
|
|
78
78
|
printlog("Reading group file: \"%s\"" % (options.group_file))
|
|
79
79
|
group = pd.read_csv(options.group_file, index_col=0, header=0,names=['Sample_ID', 'Group_ID'])
|
|
80
|
-
a = list(group['Group_ID']) #a is *string labels* for groups: ['Normal', 'Normal', 'Normal', 'Normal', 'Normal', 'Cancer', 'Cancer', 'Cancer', 'Cancer']
|
|
80
|
+
a = pd.Series(list(group['Group_ID'])) #a is *string labels* for groups: ['Normal', 'Normal', 'Normal', 'Normal', 'Normal', 'Cancer', 'Cancer', 'Cancer', 'Cancer']
|
|
81
81
|
#print (a)
|
|
82
82
|
y, tmp = pd.factorize(a) #y is *numeric labels* for groups: [0 0 0 0 0 1 1 1 1]
|
|
83
83
|
#print (np.array(y))
|
|
@@ -87,12 +87,15 @@ def main():
|
|
|
87
87
|
if options.score_function == 'anova':
|
|
88
88
|
printlog ("Using ANOVA F value to select features ...")
|
|
89
89
|
selector = SelectKBest(f_classif, k = options.cpg_count)
|
|
90
|
-
elif options.score_function == '
|
|
90
|
+
elif options.score_function == 'mi':
|
|
91
91
|
printlog ("Using Mutual Information to select features ...")
|
|
92
92
|
selector = SelectKBest(mutual_info_classif, k = options.cpg_count)
|
|
93
|
-
|
|
93
|
+
elif options.score_function == 'chisq':
|
|
94
94
|
printlog ("Using Chi Square statistic to select features ...")
|
|
95
95
|
selector = SelectKBest(chi2, k = options.cpg_count)
|
|
96
|
+
else:
|
|
97
|
+
printlog("Unknown function: %s" % options.score_function)
|
|
98
|
+
sys.exit(0)
|
|
96
99
|
else:
|
|
97
100
|
printlog("Doing nothing! '-k' >= the total number of features in \"%s\"" % (options.input_file))
|
|
98
101
|
sys.exit(0)
|
|
@@ -28,6 +28,7 @@ import collections
|
|
|
28
28
|
import subprocess
|
|
29
29
|
import numpy as np
|
|
30
30
|
from optparse import OptionParser
|
|
31
|
+
from cpgmodule._version import __version__
|
|
31
32
|
from cpgmodule import ireader
|
|
32
33
|
from cpgmodule.utils import *
|
|
33
34
|
from cpgmodule import BED
|
|
@@ -37,7 +38,6 @@ __author__ = "Liguo Wang"
|
|
|
37
38
|
__copyright__ = "Copyleft"
|
|
38
39
|
__credits__ = []
|
|
39
40
|
__license__ = "GPL"
|
|
40
|
-
__version__="1.12.0"
|
|
41
41
|
__maintainer__ = "Liguo Wang"
|
|
42
42
|
__email__ = "wang.liguo@mayo.edu"
|
|
43
43
|
__status__ = "Development"
|
|
@@ -25,6 +25,7 @@ import collections
|
|
|
25
25
|
import subprocess
|
|
26
26
|
import numpy as np
|
|
27
27
|
from optparse import OptionParser
|
|
28
|
+
from cpgmodule._version import __version__
|
|
28
29
|
from cpgmodule import ireader
|
|
29
30
|
from cpgmodule.utils import *
|
|
30
31
|
from cpgmodule import BED
|
|
@@ -33,7 +34,6 @@ __author__ = "Liguo Wang"
|
|
|
33
34
|
__copyright__ = "Copyleft"
|
|
34
35
|
__credits__ = []
|
|
35
36
|
__license__ = "GPL"
|
|
36
|
-
__version__="1.12.0"
|
|
37
37
|
__maintainer__ = "Liguo Wang"
|
|
38
38
|
__email__ = "wang.liguo@mayo.edu"
|
|
39
39
|
__status__ = "Development"
|
|
@@ -33,6 +33,7 @@ import sys
|
|
|
33
33
|
import subprocess
|
|
34
34
|
from optparse import OptionParser
|
|
35
35
|
from cpgmodule.utils import *
|
|
36
|
+
from cpgmodule._version import __version__
|
|
36
37
|
import pandas as pd
|
|
37
38
|
from sklearn.preprocessing import StandardScaler
|
|
38
39
|
from sklearn.manifold import TSNE
|
|
@@ -41,15 +42,15 @@ __author__ = "Liguo Wang"
|
|
|
41
42
|
__copyright__ = "Copyleft"
|
|
42
43
|
__credits__ = []
|
|
43
44
|
__license__ = "GPL"
|
|
44
|
-
__version__="1.12.0"
|
|
45
45
|
__maintainer__ = "Liguo Wang"
|
|
46
46
|
__email__ = "wang.liguo@mayo.edu"
|
|
47
47
|
__status__ = "Development"
|
|
48
48
|
|
|
49
49
|
def pick_colors(n):
|
|
50
|
-
my_colors = [
|
|
50
|
+
my_colors = [
|
|
51
|
+
"#F0A3FF", "#0075DC", "#993F00", "#4C005C", "#191919", "#005C31", "#2BCE48", "#FFCC99", "#808080", "#94FFB5", "#8F7C00", "#9DCC00", "#C20088", "#003380", "#FFA405", "#FFA8BB", "#426600", "#FF0010", "#5EF1F2", "#00998F", "#E0FF66", "#740AFF", "#990000", "#FFFF80", "#FFE100", "#FF5005"]
|
|
51
52
|
if n > len(my_colors):
|
|
52
|
-
print ("Only support
|
|
53
|
+
print ("Only support 26 different colors", file = sys.stderr)
|
|
53
54
|
sys.exit()
|
|
54
55
|
return my_colors[0:n]
|
|
55
56
|
|
|
@@ -99,27 +100,31 @@ def main():
|
|
|
99
100
|
printlog("Perplexigty value is set to %d" % options.perplexity_value)
|
|
100
101
|
|
|
101
102
|
#remove NA and transpose
|
|
102
|
-
df2 = df1.dropna(axis=0, how='any')
|
|
103
|
-
printlog("%d rows with missing values were removed." % (len(df1) - len(df2)))
|
|
103
|
+
df2 = df1.dropna(axis=0, how='any').T
|
|
104
|
+
printlog("%d rows with missing values were removed." % (len(df1.index) - len(df2.columns)))
|
|
104
105
|
#print (df2.head())
|
|
105
|
-
|
|
106
|
-
printlog("Transposing data frame ...")
|
|
107
|
-
df2 = df2.T
|
|
108
|
-
#print (df2.index)
|
|
109
|
-
|
|
110
|
-
printlog("Standarizing values ...")
|
|
111
|
-
x = df2.values
|
|
112
|
-
x = StandardScaler().fit_transform(x)
|
|
113
|
-
#print (x.shape)
|
|
114
|
-
|
|
106
|
+
|
|
115
107
|
printlog("Reading group file: \"%s\" ..." % (options.group_file))
|
|
116
108
|
group = pd.read_csv(options.group_file, index_col=0, header=0,names=['Sample_ID', 'Group_ID'])
|
|
117
|
-
group.index = group.index.map(str)
|
|
118
|
-
|
|
119
109
|
#check if sample IDs are unique
|
|
120
110
|
if len(group.index) != len(group.index.unique()):
|
|
121
111
|
print ("Sample IDs are not unique", file = sys.stderr)
|
|
122
|
-
sys.exit()
|
|
112
|
+
sys.exit()
|
|
113
|
+
group.index = group.index.map(str)
|
|
114
|
+
printlog("Group file \"%s\" contains %d samples" % (options.group_file, len(group.index)))
|
|
115
|
+
|
|
116
|
+
printlog("Find common sample IDs between group file and data file ...")
|
|
117
|
+
common_samples = list(set(group.index) & set(df2.index))
|
|
118
|
+
used_df = df2.loc[common_samples]
|
|
119
|
+
(usable_sample, usable_cpg) = used_df.shape
|
|
120
|
+
printlog("Used CpGs: %d, Used samples: %d" % (usable_cpg, usable_sample))
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
printlog("Standarizing values ...")
|
|
124
|
+
x = used_df.to_numpy()
|
|
125
|
+
x = StandardScaler().fit_transform(x)
|
|
126
|
+
|
|
127
|
+
|
|
123
128
|
group_names = group['Group_ID'].unique().tolist() # a list of unique group names
|
|
124
129
|
color_names = pick_colors(len(group_names)) # a list of unique colors
|
|
125
130
|
group_to_col = dict(zip(group_names, color_names))
|
|
@@ -127,13 +132,13 @@ def main():
|
|
|
127
132
|
group['Colors'] = color_list
|
|
128
133
|
|
|
129
134
|
|
|
130
|
-
tsne = TSNE(n_components = options.n_components, random_state = 0, perplexity = options.perplexity_value, learning_rate = options.learning_rate,
|
|
135
|
+
tsne = TSNE(n_components = options.n_components, random_state = 0, perplexity = options.perplexity_value, learning_rate = options.learning_rate, max_iter = options.n_iterations)
|
|
131
136
|
tsne_components = tsne.fit_transform(x)
|
|
132
137
|
pc_names = [str(i)+str(j) for i,j in zip(['PC']*options.n_components,range(1,options.n_components+1))]
|
|
133
|
-
principalDf = pd.DataFrame(data = tsne_components, columns = pc_names, index =
|
|
138
|
+
principalDf = pd.DataFrame(data = tsne_components, columns = pc_names, index = used_df.index)
|
|
134
139
|
principalDf.index.name = 'Sample_ID'
|
|
135
140
|
|
|
136
|
-
finalDf = pd.concat([principalDf, group], axis=1,sort=False)
|
|
141
|
+
finalDf = pd.concat([principalDf, group], axis=1,sort=False, join='inner')
|
|
137
142
|
finalDf.index.name = 'Sample_ID'
|
|
138
143
|
|
|
139
144
|
printlog("Writing t-SNE results to file: \"%s\" ..." % (options.out_file + '.t-SNE.tsv'))
|
|
@@ -149,10 +154,12 @@ def main():
|
|
|
149
154
|
|
|
150
155
|
if options.plot_alpha:
|
|
151
156
|
print ('library(scales)', file=ROUT)
|
|
152
|
-
print ('plot(PC1, PC2, col = alpha(Colors, %f), pch=%d, cex=1.5, main="
|
|
157
|
+
print ('plot(PC1, PC2, col = alpha(Colors, %f), pch=%d, cex=1.5, main="tSNE 2D map", xlab="tSNE1", ylab="tSNE2")'
|
|
158
|
+
% (options.plot_alpha, pch[options.plot_char]), file=ROUT)
|
|
153
159
|
else:
|
|
154
|
-
print ('plot(PC1, PC2, col = Colors, pch=%d, cex=1.2, main="
|
|
155
|
-
|
|
160
|
+
print ('plot(PC1, PC2, col = Colors, pch=%d, cex=1.2, main="tSNE 2D map", xlab="tSNE1", ylab="tSNE2")'
|
|
161
|
+
% (pch[options.plot_char]), file=ROUT)
|
|
162
|
+
|
|
156
163
|
if options.text_label:
|
|
157
164
|
print ('text(PC1, PC2, labels=Sample_ID, col = Colors, cex=0.5, pos=1)', file=ROUT)
|
|
158
165
|
print ('legend("%s", legend=c(%s), col=c(%s), pch=%d,cex=1)' % (legend_pos[options.legend_location], ','.join(['"' + str(i) + '"' for i in group_names]), ','.join(['"' + str(group_to_col[i]) + '"' for i in group_names]), pch[options.plot_char]), file=ROUT)
|
|
@@ -18,6 +18,7 @@ import collections
|
|
|
18
18
|
import subprocess
|
|
19
19
|
import numpy as np
|
|
20
20
|
from optparse import OptionParser
|
|
21
|
+
from cpgmodule._version import __version__
|
|
21
22
|
from cpgmodule import ireader
|
|
22
23
|
from cpgmodule.utils import *
|
|
23
24
|
from cpgmodule import BED
|
|
@@ -27,7 +28,6 @@ __author__ = "Liguo Wang"
|
|
|
27
28
|
__copyright__ = "Copyleft"
|
|
28
29
|
__credits__ = []
|
|
29
30
|
__license__ = "GPL"
|
|
30
|
-
__version__="1.12.0"
|
|
31
31
|
__maintainer__ = "Liguo Wang"
|
|
32
32
|
__email__ = "wang.liguo@mayo.edu"
|
|
33
33
|
__status__ = "Development"
|
|
@@ -18,6 +18,7 @@ import numpy as np
|
|
|
18
18
|
from optparse import OptionParser
|
|
19
19
|
from sklearn import mixture
|
|
20
20
|
from time import strftime
|
|
21
|
+
from cpgmodule._version import __version__
|
|
21
22
|
from cpgmodule import ireader
|
|
22
23
|
from cpgmodule.utils import *
|
|
23
24
|
import pandas as pd
|
|
@@ -26,7 +27,6 @@ __author__ = "Liguo Wang"
|
|
|
26
27
|
__copyright__ = "Copyleft"
|
|
27
28
|
__credits__ = []
|
|
28
29
|
__license__ = "GPL"
|
|
29
|
-
__version__="1.12.0"
|
|
30
30
|
__maintainer__ = "Liguo Wang"
|
|
31
31
|
__email__ = "wang.liguo@mayo.edu"
|
|
32
32
|
__status__ = "Development"
|
|
@@ -27,13 +27,13 @@ from cpgmodule import ireader
|
|
|
27
27
|
from cpgmodule.utils import *
|
|
28
28
|
from cpgmodule import BED
|
|
29
29
|
from cpgmodule import padjust
|
|
30
|
+
from cpgmodule._version import __version__
|
|
30
31
|
from multiprocessing import Process, Manager, current_process
|
|
31
32
|
|
|
32
33
|
__author__ = "Liguo Wang"
|
|
33
34
|
__copyright__ = "Copyleft"
|
|
34
35
|
__credits__ = []
|
|
35
36
|
__license__ = "GPL"
|
|
36
|
-
__version__="1.12.0"
|
|
37
37
|
__maintainer__ = "Liguo Wang"
|
|
38
38
|
__email__ = "wang.liguo@mayo.edu"
|
|
39
39
|
__status__ = "Development"
|
|
@@ -36,12 +36,12 @@ from cpgmodule import ireader
|
|
|
36
36
|
from cpgmodule.utils import *
|
|
37
37
|
from cpgmodule import BED
|
|
38
38
|
from cpgmodule import padjust
|
|
39
|
+
from cpgmodule._version import __version__
|
|
39
40
|
|
|
40
41
|
__author__ = "Liguo Wang"
|
|
41
42
|
__copyright__ = "Copyleft"
|
|
42
43
|
__credits__ = []
|
|
43
44
|
__license__ = "GPL"
|
|
44
|
-
__version__="1.12.0"
|
|
45
45
|
__maintainer__ = "Liguo Wang"
|
|
46
46
|
__email__ = "wang.liguo@mayo.edu"
|
|
47
47
|
__status__ = "Development"
|
|
@@ -34,12 +34,12 @@ from cpgmodule import ireader
|
|
|
34
34
|
from cpgmodule.utils import *
|
|
35
35
|
from cpgmodule import BED
|
|
36
36
|
from cpgmodule import padjust
|
|
37
|
+
from cpgmodule._version import __version__
|
|
37
38
|
|
|
38
39
|
__author__ = "Liguo Wang"
|
|
39
40
|
__copyright__ = "Copyleft"
|
|
40
41
|
__credits__ = []
|
|
41
42
|
__license__ = "GPL"
|
|
42
|
-
__version__="1.12.0"
|
|
43
43
|
__maintainer__ = "Liguo Wang"
|
|
44
44
|
__email__ = "wang.liguo@mayo.edu"
|
|
45
45
|
__status__ = "Development"
|
|
@@ -18,12 +18,12 @@ from cpgmodule import ireader
|
|
|
18
18
|
from cpgmodule.utils import *
|
|
19
19
|
from cpgmodule import BED
|
|
20
20
|
from cpgmodule import padjust
|
|
21
|
+
from cpgmodule._version import __version__
|
|
21
22
|
|
|
22
23
|
__author__ = "Liguo Wang"
|
|
23
24
|
__copyright__ = "Copyleft"
|
|
24
25
|
__credits__ = []
|
|
25
26
|
__license__ = "GPL"
|
|
26
|
-
__version__="1.12.0"
|
|
27
27
|
__maintainer__ = "Liguo Wang"
|
|
28
28
|
__email__ = "wang.liguo@mayo.edu"
|
|
29
29
|
__status__ = "Development"
|
|
@@ -31,12 +31,12 @@ from cpgmodule import ireader
|
|
|
31
31
|
from cpgmodule.utils import *
|
|
32
32
|
from cpgmodule import BED
|
|
33
33
|
from cpgmodule import padjust
|
|
34
|
+
from cpgmodule._version import __version__
|
|
34
35
|
|
|
35
36
|
__author__ = "Liguo Wang"
|
|
36
37
|
__copyright__ = "Copyleft"
|
|
37
38
|
__credits__ = []
|
|
38
39
|
__license__ = "GPL"
|
|
39
|
-
__version__="1.12.0"
|
|
40
40
|
__maintainer__ = "Liguo Wang"
|
|
41
41
|
__email__ = "wang.liguo@mayo.edu"
|
|
42
42
|
__status__ = "Development"
|
|
@@ -19,12 +19,12 @@ from cpgmodule import ireader
|
|
|
19
19
|
from cpgmodule.utils import *
|
|
20
20
|
from cpgmodule import BED
|
|
21
21
|
from cpgmodule import padjust
|
|
22
|
+
from cpgmodule._version import __version__
|
|
22
23
|
|
|
23
24
|
__author__ = "Liguo Wang"
|
|
24
25
|
__copyright__ = "Copyleft"
|
|
25
26
|
__credits__ = []
|
|
26
27
|
__license__ = "GPL"
|
|
27
|
-
__version__="1.12.0"
|
|
28
28
|
__maintainer__ = "Liguo Wang"
|
|
29
29
|
__email__ = "wang.liguo@mayo.edu"
|
|
30
30
|
__status__ = "Development"
|
|
@@ -18,12 +18,12 @@ from cpgmodule import ireader
|
|
|
18
18
|
from cpgmodule.utils import *
|
|
19
19
|
from cpgmodule import BED
|
|
20
20
|
from cpgmodule import padjust
|
|
21
|
+
from cpgmodule._version import __version__
|
|
21
22
|
|
|
22
23
|
__author__ = "Liguo Wang"
|
|
23
24
|
__copyright__ = "Copyleft"
|
|
24
25
|
__credits__ = []
|
|
25
26
|
__license__ = "GPL"
|
|
26
|
-
__version__="1.12.0"
|
|
27
27
|
__maintainer__ = "Liguo Wang"
|
|
28
28
|
__email__ = "wang.liguo@mayo.edu"
|
|
29
29
|
__status__ = "Development"
|
|
@@ -146,8 +146,8 @@ def main():
|
|
|
146
146
|
# check if sample ID matches
|
|
147
147
|
for s in s2g:
|
|
148
148
|
if s not in sample_IDs:
|
|
149
|
-
printlog("Cannot find sample ID \"%s\" from file \"%s\"" % (s, options.input_file))
|
|
150
|
-
sys.exit(3)
|
|
149
|
+
printlog("Cannot find sample ID \"%s\" from file \"%s\". Exclude this sample from differential analysis." % (s, options.input_file))
|
|
150
|
+
#sys.exit(3)
|
|
151
151
|
else:
|
|
152
152
|
g2values = collections.defaultdict(list)
|
|
153
153
|
probe_ID = f[0]
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
#!python
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
#==============================================================================
|
|
5
|
+
Predict sex based on the semi-methylation (also known as genomic imprinting)
|
|
6
|
+
ratio. This method leverages the fact that, due to X chromosome inactivation,
|
|
7
|
+
females have a higher proportion of semi-methylated CpGs on their X chromosomes.
|
|
8
|
+
A log2(ratio) greater than 0 indicates a female, while a log2(ratio) less than
|
|
9
|
+
0 indicates a male.
|
|
10
|
+
|
|
11
|
+
Example of input data file
|
|
12
|
+
---------------------------
|
|
13
|
+
CpG_ID Sample_01 Sample_02 Sample_03 Sample_04
|
|
14
|
+
cg_001 0.831035 0.878022 0.794427 0.880911
|
|
15
|
+
cg_002 0.249544 0.209949 0.234294 0.236680
|
|
16
|
+
cg_003 0.845065 0.843957 0.840184 0.824286
|
|
17
|
+
|
|
18
|
+
Example of output file
|
|
19
|
+
----------------------
|
|
20
|
+
Sample_ID log2_SM_ratio Predicted_sex
|
|
21
|
+
Sample_01 -2.249628052954919 Male
|
|
22
|
+
Sample_02 -2.2671726671830674 Male
|
|
23
|
+
Sample_03 1.4530581933290616 Female
|
|
24
|
+
Sample_04 1.4808015115356654 Female
|
|
25
|
+
|
|
26
|
+
...
|
|
27
|
+
|
|
28
|
+
"""
|
|
29
|
+
import sys
|
|
30
|
+
import numpy as np
|
|
31
|
+
from optparse import OptionParser
|
|
32
|
+
from cpgmodule.utils import printlog
|
|
33
|
+
from cpgmodule import ireader
|
|
34
|
+
import pandas as pd
|
|
35
|
+
from cpgmodule._version import __version__
|
|
36
|
+
|
|
37
|
+
__author__ = "Liguo Wang"
|
|
38
|
+
__copyright__ = "Copyleft"
|
|
39
|
+
__credits__ = []
|
|
40
|
+
__license__ = "GPL"
|
|
41
|
+
__maintainer__ = "Liguo Wang"
|
|
42
|
+
__email__ = "wang.liguo@mayo.edu"
|
|
43
|
+
__status__ = "Development"
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def main():
|
|
47
|
+
|
|
48
|
+
usage="%prog [options]" + "\n"
|
|
49
|
+
parser = OptionParser(usage,version="%prog " + __version__)
|
|
50
|
+
parser.add_option("-i","--input_file",action="store", type="string",dest="input_file", help="Tab-separated data frame file containing beta values with the 1st row containing sample IDs and the 1st column containing CpG IDs.")
|
|
51
|
+
parser.add_option("-x","--xprobe",action="store", type="string",dest="xprobe_file", help="File with CpG IDs mapped to the X chromosome, with one probe listed per row.")
|
|
52
|
+
parser.add_option("-c","--cut",action="store", type='float', dest="cutoff", default=0.0, help="The cutoff of log2(SM ratio) to determine the sex prediction. Log2(SM ratio) greater than this cutoff indicates a female, while a log2(ratio) less than this cutoff indicates a male. default=%default")
|
|
53
|
+
parser.add_option("-o","--output",action="store", type='string', dest="out_file", help="The prefix of the output file.")
|
|
54
|
+
(options,args)=parser.parse_args()
|
|
55
|
+
|
|
56
|
+
print ()
|
|
57
|
+
if not (options.input_file):
|
|
58
|
+
print (__doc__)
|
|
59
|
+
parser.print_help()
|
|
60
|
+
sys.exit(101)
|
|
61
|
+
if not (options.xprobe_file):
|
|
62
|
+
print (__doc__)
|
|
63
|
+
parser.print_help()
|
|
64
|
+
sys.exit(102)
|
|
65
|
+
if not (options.out_file):
|
|
66
|
+
print (__doc__)
|
|
67
|
+
parser.print_help()
|
|
68
|
+
sys.exit(103)
|
|
69
|
+
|
|
70
|
+
printlog("Reading X probes from: \"%s\"" % (options.xprobe_file))
|
|
71
|
+
x_cpgs = set()
|
|
72
|
+
for l in ireader.reader(options.xprobe_file):
|
|
73
|
+
l = l.strip()
|
|
74
|
+
if l.startswith('#'):
|
|
75
|
+
continue
|
|
76
|
+
x_cpgs.add(l)
|
|
77
|
+
printlog("Total %d X probes loaded." % len(x_cpgs))
|
|
78
|
+
|
|
79
|
+
printlog("Reading input file: \"%s\"" % (options.input_file))
|
|
80
|
+
df1 = pd.read_csv(options.input_file, index_col = 0, sep="\t")
|
|
81
|
+
#print (df1)
|
|
82
|
+
|
|
83
|
+
#remove any rows with NAs
|
|
84
|
+
df2 = df1.dropna(axis=0, how='any')
|
|
85
|
+
printlog("%d CpGs with missing values were removed." % (len(df1) - len(df2)))
|
|
86
|
+
#print (df2)
|
|
87
|
+
|
|
88
|
+
sample_cpg_ids = df2.index
|
|
89
|
+
sample_names = df2.columns
|
|
90
|
+
found_x_cpgs = list(x_cpgs & set(sample_cpg_ids))
|
|
91
|
+
printlog("Found %d CpGs located on the chrX from file: %s" % (len(found_x_cpgs), options.input_file))
|
|
92
|
+
|
|
93
|
+
# only X probes in df3
|
|
94
|
+
df3 = df2.loc[list(found_x_cpgs)]
|
|
95
|
+
#pd.DataFrame.to_csv(df3, options.out_file + '.tmp.tsv', sep="\t", index_label="sample")
|
|
96
|
+
|
|
97
|
+
low_beta_range = [0, 0.2]
|
|
98
|
+
mid_beta_range = [0.3, 0.7]
|
|
99
|
+
high_beta_range = [0.8, 1.0]
|
|
100
|
+
|
|
101
|
+
output = {}
|
|
102
|
+
for s in sample_names:
|
|
103
|
+
output[s] = {}
|
|
104
|
+
low_beta_count = pd.cut(df3[s], low_beta_range).count()
|
|
105
|
+
mid_beta_count = pd.cut(df3[s], mid_beta_range).count()
|
|
106
|
+
high_beta_count = pd.cut(df3[s], high_beta_range).count()
|
|
107
|
+
try:
|
|
108
|
+
ratio = np.log2(mid_beta_count/(low_beta_count + high_beta_count))
|
|
109
|
+
except:
|
|
110
|
+
ratio = np.nan
|
|
111
|
+
output[s]['log2_SM_ratio'] = ratio
|
|
112
|
+
|
|
113
|
+
if ratio > options.cutoff:
|
|
114
|
+
output[s]['Predicted_sex'] = 'Female'
|
|
115
|
+
elif ratio < options.cutoff:
|
|
116
|
+
output[s]['Predicted_sex'] = 'Male'
|
|
117
|
+
else:
|
|
118
|
+
output[s]['Predicted_sex'] = 'Unknown'
|
|
119
|
+
df_out = pd.DataFrame(output).T
|
|
120
|
+
|
|
121
|
+
outfile = options.out_file + '.predicted_sex.tsv'
|
|
122
|
+
printlog("Writing to file: \"%s\"" % outfile)
|
|
123
|
+
pd.DataFrame.to_csv(df_out, outfile, sep="\t", index_label="Sample_ID")
|
|
124
|
+
|
|
125
|
+
if __name__=='__main__':
|
|
126
|
+
main()
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
Copyright (c) 2024 The Python Packaging Authority
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
4
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
5
|
+
in the Software without restriction, including without limitation the rights
|
|
6
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
7
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
8
|
+
furnished to do so, subject to the following conditions:
|
|
9
|
+
|
|
10
|
+
The above copyright notice and this permission notice shall be included in all
|
|
11
|
+
copies or substantial portions of the Software.
|
|
12
|
+
|
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
19
|
+
SOFTWARE.
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: cpgtools
|
|
3
|
+
Version: 2.0.2
|
|
4
|
+
Summary: Tools to analyze and visualize DNA methylation data
|
|
5
|
+
Author-email: Liguo Wang <wangliguo78@gmail.com>
|
|
6
|
+
Maintainer-email: Liguo Wang <wangliguo78@gmail.com>
|
|
7
|
+
License: Copyright (c) 2024 The Python Packaging Authority
|
|
8
|
+
|
|
9
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
10
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
11
|
+
in the Software without restriction, including without limitation the rights
|
|
12
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
13
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
14
|
+
furnished to do so, subject to the following conditions:
|
|
15
|
+
|
|
16
|
+
The above copyright notice and this permission notice shall be included in all
|
|
17
|
+
copies or substantial portions of the Software.
|
|
18
|
+
|
|
19
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
20
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
21
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
22
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
23
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
24
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
25
|
+
SOFTWARE.
|
|
26
|
+
|
|
27
|
+
Project-URL: Documentation, https://cpgtools.readthedocs.io/en/latest/index.html
|
|
28
|
+
Project-URL: Repository, https://github.com/liguowang/cpgtools.git
|
|
29
|
+
Keywords: DNA methylation,EPIC,450K,850K,935K,RRBS,WGBS
|
|
30
|
+
Classifier: Programming Language :: Python :: 3
|
|
31
|
+
Classifier: Development Status :: 4 - Beta
|
|
32
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
33
|
+
Classifier: Environment :: Console
|
|
34
|
+
Classifier: Intended Audience :: Science/Research
|
|
35
|
+
Classifier: Operating System :: MacOS :: MacOS X
|
|
36
|
+
Classifier: Operating System :: POSIX
|
|
37
|
+
Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
|
|
38
|
+
Requires-Python: >=3.5
|
|
39
|
+
Description-Content-Type: text/markdown
|
|
40
|
+
License-File: LICENSE
|
|
41
|
+
Requires-Dist: numpy
|
|
42
|
+
Requires-Dist: scipy
|
|
43
|
+
Requires-Dist: scikit-learn
|
|
44
|
+
Requires-Dist: weblogo
|
|
45
|
+
Requires-Dist: bx-python
|
|
46
|
+
Requires-Dist: pandas
|
|
47
|
+
Requires-Dist: umap-learn
|
|
48
|
+
Requires-Dist: fancyimpute
|
|
49
|
+
|
|
50
|
+
## Install CpGtools using [pip](https://pip.pypa.io/en/stable/)
|
|
51
|
+
|
|
52
|
+
1. (Optional) Create Virtual Environments (Note: `venv` is available in Python 3.3 and later. You can also use [virtualenv](https://packaging.python.org/en/latest/key_projects/#virtualenv))
|
|
53
|
+
|
|
54
|
+
`$ python3 -m venv my_env` (will create a directory called my_env)
|
|
55
|
+
|
|
56
|
+
`$ source my_env/bin/activate`
|
|
57
|
+
|
|
58
|
+
2. Install CpGtools
|
|
59
|
+
|
|
60
|
+
`$ pip install cpgtools`
|
|
61
|
+
|
|
62
|
+
or
|
|
63
|
+
|
|
64
|
+
`$ pip install git+https://github.com/liguowang/cpgtools.git`
|
|
65
|
+
|
|
66
|
+
3. Upgrade
|
|
67
|
+
|
|
68
|
+
`$ pip install cpgtools --upgrade`
|
|
69
|
+
|
|
70
|
+
4. Uninstall
|
|
71
|
+
|
|
72
|
+
`pip -y uninstall cpgtools`
|
|
73
|
+
|
|
74
|
+
## Documentation
|
|
75
|
+
|
|
76
|
+
https://cpgtools.readthedocs.io/en/latest/
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
cpgmodule/BED.py,sha256=ZNAhGZPFMFD4UpVwGTDOM0hMLnfXF52zerdMb21sH6s,12675
|
|
2
|
+
cpgmodule/MI.py,sha256=pkUWzKXYeyRuGsGKZdFVxHzFWikkuJavdQ_4fsnN3U4,8649
|
|
3
|
+
cpgmodule/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
|
+
cpgmodule/_version.py,sha256=tATvJM5shAzfspHYjdVwpV2w3-gDA119NlEYi5X2lFY,22
|
|
5
|
+
cpgmodule/cgID.py,sha256=DLG5Djm6JP0d6MiFvP_keUXv_rYxESWrISuVClTs8kw,16017914
|
|
6
|
+
cpgmodule/extend_bed.py,sha256=sjRxbRJFRumjYHwd6_AMTAYBG29yXQPYp1lDjTv2Q_Q,4648
|
|
7
|
+
cpgmodule/imotif.py,sha256=j7_MQFnowGsVTGCRQHHLUnEzSD0HehZPEHKKZ68Jv24,9227
|
|
8
|
+
cpgmodule/ireader.py,sha256=NRTdFnQvd1AEkYchfgvTVTixBVwUjn8xNyswc0OWU1Q,720
|
|
9
|
+
cpgmodule/methylClock.py,sha256=HyMk3vpVwR3yrkLCPv9fVJs6JCeSchbJEBe7i69jdSs,1202
|
|
10
|
+
cpgmodule/padjust.py,sha256=mvbQ9_crn_S39yvWrv_JPoU5OxZGHaw7cV3deBxTPdk,2389
|
|
11
|
+
cpgmodule/region2gene.py,sha256=iuSYa2-ki-qbL1TqqAlTXGT7g-j1uNIA1y7hzMwVM2U,5347
|
|
12
|
+
cpgmodule/utils.py,sha256=NgKT3aJlRT5pQKKO3_e0WB2_u93pY13F-k-r0pvgKno,16095
|
|
13
|
+
cpgmodule/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
14
|
+
cpgtools-2.0.2.data/scripts/CpG_aggregation.py,sha256=iSSUanCPlTkT3f6Df_f_b6zEP2Ixzse9zFwJLL5z2Qw,7278
|
|
15
|
+
cpgtools-2.0.2.data/scripts/CpG_anno_position.py,sha256=j8l4v7SpGFaJ3pBVE5qK8coMkxe5h4p1bwmhcPnhxMk,4643
|
|
16
|
+
cpgtools-2.0.2.data/scripts/CpG_anno_probe.py,sha256=bACac7x9zX2E1QJnUUmNKS6YNKg_f4K-jxwl_v93--4,3171
|
|
17
|
+
cpgtools-2.0.2.data/scripts/CpG_density_gene_centered.py,sha256=JM2PrvHCnGAvymBbbIBr30AfXwu69WgJkJNy6PCmCrg,5266
|
|
18
|
+
cpgtools-2.0.2.data/scripts/CpG_distrb_chrom.py,sha256=q3xZ1AH4JEif1DQRG6UXiiUb4jZyt2khzTZld1jaXnA,6207
|
|
19
|
+
cpgtools-2.0.2.data/scripts/CpG_distrb_gene_centered.py,sha256=tLfalDRzklBcNfZxhABjhprcBlk4HgUyxXxznOGVTN8,7736
|
|
20
|
+
cpgtools-2.0.2.data/scripts/CpG_distrb_region.py,sha256=nJGgZLhZe2kYCPnxuW--EemxOcoReu2hdkIAgl-7UAE,5391
|
|
21
|
+
cpgtools-2.0.2.data/scripts/CpG_logo.py,sha256=U8RxYPmakKii1xmEgG22tKfdZBPpjhZbAfKxgF_Z-O8,4597
|
|
22
|
+
cpgtools-2.0.2.data/scripts/CpG_to_gene.py,sha256=fciNtI5N6fO-jZX2eyKgiAhDIsus4SljYSCbEQMeTHI,6114
|
|
23
|
+
cpgtools-2.0.2.data/scripts/beta_PCA.py,sha256=cRlqGC5CQlpsmzhAwy2AoI4_lLwjFh_rvn7ObNbHgYg,7155
|
|
24
|
+
cpgtools-2.0.2.data/scripts/beta_UMAP.py,sha256=SJfxtCsM1NTK5rYnZjtXiDj_x1kJiYZvR1NGHKo0IRI,8079
|
|
25
|
+
cpgtools-2.0.2.data/scripts/beta_imputation.py,sha256=o7wM_iHFwhxjRAMQ5_fCxgAfO9VYe48O9dY4BeZF2wA,28928
|
|
26
|
+
cpgtools-2.0.2.data/scripts/beta_jitter_plot.py,sha256=Knja1n1rpD0qe3FHkNPax0p6BYsmAtEQBFB1wBdpHyY,4389
|
|
27
|
+
cpgtools-2.0.2.data/scripts/beta_m_conversion.py,sha256=992tJI0IzkphUaEr_9_CveSRPjKdnyYkCTO10D_xkbg,2848
|
|
28
|
+
cpgtools-2.0.2.data/scripts/beta_profile_gene_centered.py,sha256=Jb9mm8y-1cKH_EepRFhUH5mfBdoAt0zpN_VXETRnQek,7312
|
|
29
|
+
cpgtools-2.0.2.data/scripts/beta_profile_region.py,sha256=GHDPyUFR9XJm2CK0_9wCKossMTWWvn4VwYCCSA8kn2E,5971
|
|
30
|
+
cpgtools-2.0.2.data/scripts/beta_selectNBest.py,sha256=Uu_MvQUm6Zc8MGKuGUEooJ-IL7C1eg_LNRqQsNdLaWs,4638
|
|
31
|
+
cpgtools-2.0.2.data/scripts/beta_stacked_barplot.py,sha256=2fcypD_BE4XqK-vl8hHsgyWqvp3I9oLvg8tF2dd5QZ0,3415
|
|
32
|
+
cpgtools-2.0.2.data/scripts/beta_stats.py,sha256=WBh3Aquk_AHeUcteLPtt2Q2yKpqu5aBA38zaFz_7mVI,3021
|
|
33
|
+
cpgtools-2.0.2.data/scripts/beta_tSNE.py,sha256=0UTxNxyaDb-iNqbeIfFKj9DRURTQcHeJdltr-iY72XM,8450
|
|
34
|
+
cpgtools-2.0.2.data/scripts/beta_topN.py,sha256=gmbmJZoGJt3QljlRHUA8LaKSIurdCNgtn2J9LAIQNCo,3914
|
|
35
|
+
cpgtools-2.0.2.data/scripts/beta_trichotmize.py,sha256=T594UfSCDJHRFyGvov7qetLQs10WU73PGVVCDNrwNPg,7143
|
|
36
|
+
cpgtools-2.0.2.data/scripts/dmc_Bayes.py,sha256=imqKv5x8s_plXQPL3_d9OpqSI-imrSfUj-k39Zf1XqA,13735
|
|
37
|
+
cpgtools-2.0.2.data/scripts/dmc_bb.py,sha256=pOEEHT-hT--r6IswZwQFyGri77OJqbW1y9VVG8pzzpg,8407
|
|
38
|
+
cpgtools-2.0.2.data/scripts/dmc_fisher.py,sha256=t18smNJAtipmDm3xgUg62ccKsFQWcdKBo4Tm2cxx43s,5163
|
|
39
|
+
cpgtools-2.0.2.data/scripts/dmc_glm.py,sha256=_vJiZhbGA-Rv5v5oBU9N9lGND8MTEVAFHHFqW5hgfSw,6516
|
|
40
|
+
cpgtools-2.0.2.data/scripts/dmc_logit.py,sha256=V35wyBgcdiUbsR_NDnEDfs6F2yPyz11ryZvYkkV6Ess,8488
|
|
41
|
+
cpgtools-2.0.2.data/scripts/dmc_nonparametric.py,sha256=eFyUy7jXl8bPyySKZLEi3LVxYkDOKp9S4XBXevYvbVw,4945
|
|
42
|
+
cpgtools-2.0.2.data/scripts/dmc_ttest.py,sha256=jOW0el_NeJlBuF91wKN2UHnu7phoP0OPrKCNCaOAQBs,6704
|
|
43
|
+
cpgtools-2.0.2.data/scripts/predict_sex.py,sha256=ojoMJ6XwBsE1kGpxzKGZ4TZPs5JcUwI_C_9ieEQbB9c,4755
|
|
44
|
+
impyute/__init__.py,sha256=Q07nw2fDjLm_c3EQWMpSo8nZCfC-fvs2lpRG5uha-gg,87
|
|
45
|
+
impyute/contrib/__init__.py,sha256=DgGgN0iBoMfHjzr9edz-ZgtJ2KeyIDlyV1t8hxhcM2c,209
|
|
46
|
+
impyute/contrib/compare.py,sha256=psWygE7PD4Cky4MoTJLAgjaEkTXwqemv3NTKkKVaapo,2852
|
|
47
|
+
impyute/contrib/count_missing.py,sha256=KkCpYeuDP5jRxCcURJbne_k-7Zq1k31oq2aFHpqygx8,742
|
|
48
|
+
impyute/contrib/describe.py,sha256=LI6Xage19-DEEDZVNqaaOjemRAVqVkSlH4mxjjubw-A,2033
|
|
49
|
+
impyute/cs/__init__.py,sha256=ArkuAVHm0z4jl3_UK_FUBF8i2vZUvAZpfVFyryUTm18,373
|
|
50
|
+
impyute/cs/buck_iterative.py,sha256=ceoQ2ij64pXHy7NszErTTRb9h2wctF0CMBexhc6YZSA,3009
|
|
51
|
+
impyute/cs/central_tendency.py,sha256=xHwTVeDL-N-O5refvP536FiVEDODR7s-cgX2Ao9LsfI,2127
|
|
52
|
+
impyute/cs/em.py,sha256=SwvVNMYK3llATR2r1baVCA0hy_fwJIkGD110du9Woos,1631
|
|
53
|
+
impyute/cs/fast_knn.py,sha256=CI4RKMcrbXPi7izUtWo-lnq1BuLYwl8bvbx62dj8Qn0,6246
|
|
54
|
+
impyute/cs/random.py,sha256=-Ti4BwMwUGdsciKTp8OVAgYK6TzGP-R4Nw62UY_xqAs,594
|
|
55
|
+
impyute/dataset/__init__.py,sha256=GK-ktaf86PLZOUlO_oOhvc-55SX1YFLcpjcpgf7a87c,192
|
|
56
|
+
impyute/dataset/base.py,sha256=bNYszhYP62fSeDe8w_Ij4yhEf-dv6NiNGcCdC22OkuY,4445
|
|
57
|
+
impyute/dataset/corrupt.py,sha256=uGCnpofJWfWZYBucQMrwT9yOSpEQAaZSG010Jv6ks1I,1491
|
|
58
|
+
impyute/deletion/__init__.py,sha256=ztemVB8Q6LRaxSv8DDdFzZlGUVUQbsVRA7gvcs_vMhM,124
|
|
59
|
+
impyute/deletion/complete_case.py,sha256=2xBhqNOSmEeW-sBQvl3TVJCcf2Ybmkr8HXNk9xrQ2J0,395
|
|
60
|
+
impyute/ops/__init__.py,sha256=ZP_rQQ0qATGEibUA9I8D1JfD1kRT2Xqw8SsOMPIddog,275
|
|
61
|
+
impyute/ops/error.py,sha256=lyXJcIDyfdrj_JJbsEI18z-t4UKi1mpLTyt3iS2YvTs,226
|
|
62
|
+
impyute/ops/inverse_distance_weighting.py,sha256=88hmyc-dWltP66MbjrW-VHBcVgPOI0V0BkrV30B-Lyc,1017
|
|
63
|
+
impyute/ops/matrix.py,sha256=-eniwqvbvwXNrYw8PmIMD95uMcPMq6HE6OBOyjzR-Vk,837
|
|
64
|
+
impyute/ops/testing.py,sha256=3ZRVL1sc5IIQLPW2GrD6-lF4_nVnSLo7SBW4rfaOMLA,415
|
|
65
|
+
impyute/ops/util.py,sha256=Tcm8reCrWQf8btKRP5StawBL1UV_GOBWmzy1NYDcPbY,2204
|
|
66
|
+
impyute/ops/wrapper.py,sha256=bQj3r9WsZxqNw51y3OobyyXPPxCeISUv2jb-Ga2C_-M,6022
|
|
67
|
+
impyute/ts/__init__.py,sha256=veePCYSBfo1t5Ahh3wrVCNveizcniXZYhjyS7ahkIhI,145
|
|
68
|
+
impyute/ts/locf.py,sha256=qusLWfBrepKzFIkeGxIS0S5KnqRgZde2CV6mcF5nf4c,1876
|
|
69
|
+
impyute/ts/moving_window.py,sha256=G3Z4ohhqZXAVPflptuOhktwucbW3tg8FySb7gTtBraE,4991
|
|
70
|
+
missingpy/__init__.py,sha256=H_yX0CtfoG2UaJPRcoZKv0AFhi4n-1hHmfIwfqQXoPk,96
|
|
71
|
+
missingpy/knnimpute.py,sha256=WxniKg6-3pvwJa9mipiCZBqkRL_GGHUcxDu-7b57x3k,13456
|
|
72
|
+
missingpy/missforest.py,sha256=UYRf2YANPwxvRPruN3P6xlhJ5JPZB1x8o4xVhYfIp74,24696
|
|
73
|
+
missingpy/pairwise_external.py,sha256=XU_vW-rMCPD3aH9k0UrP_p90QUHDZqe3QZPoOQmu2vo,13221
|
|
74
|
+
missingpy/utils.py,sha256=sMU4OGHPvRgReT8e_HqGCYvjAJZkE_qlAPDzLo-_M6U,4360
|
|
75
|
+
missingpy/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
76
|
+
missingpy/tests/test_knnimpute.py,sha256=rR1OPZ4-IzcIKgWmSEN7UEPvVSRwJe0KU_wTxPr46k0,17527
|
|
77
|
+
missingpy/tests/test_missforest.py,sha256=5YfKZf_xdy9RcXmnlFz7cJDqdnspJDzzrxLnVVWJi3A,13725
|
|
78
|
+
cpgtools-2.0.2.dist-info/LICENSE,sha256=NAIE1kmjlmRNJ1BwR9m9i0jXHmQqqujTnEyIBuIxvwM,1074
|
|
79
|
+
cpgtools-2.0.2.dist-info/METADATA,sha256=EfdjaKSMi75Wo041GCIx9gd9JjFf7rULeCkAhw2uuqY,2943
|
|
80
|
+
cpgtools-2.0.2.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
|
|
81
|
+
cpgtools-2.0.2.dist-info/top_level.txt,sha256=L6IX1ORvZ1JssvdU8qOtU99-vbMK9ZSIgYg4zH-rL5Y,28
|
|
82
|
+
cpgtools-2.0.2.dist-info/RECORD,,
|