Mercurial > repos > immport-devteam > auto_collapse_pop
comparison auto_collapse_pops.py @ 1:08b71aee9b80 draft default tip
"planemo upload for repository https://github.com/ImmPortDB/immport-galaxy-tools/tree/master/flowtools/auto_collapse_pop commit c4cd54a5b7a57f494a82d2a5e9b94f24473fff24"
author | azomics |
---|---|
date | Mon, 22 Jun 2020 17:22:03 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
0:7632562ada41 | 1:08b71aee9b80 |
---|---|
1 #!/usr/bin/env python | |
2 | |
3 ###################################################################### | |
4 # Copyright (c) 2016 Northrop Grumman. | |
5 # All rights reserved. | |
6 ###################################################################### | |
7 from __future__ import print_function | |
8 import sys | |
9 import pandas as pd | |
10 from argparse import ArgumentParser | |
11 | |
12 | |
13 def auto_collapse(input_file, profile_file, output, report): | |
14 profile_pop_list = {} | |
15 pop_to_collapse = [] | |
16 markers = [] | |
17 with open(profile_file, "r") as pf: | |
18 pffl = pf.readline() | |
19 markers = pffl.strip().split("\t") | |
20 for pfline in pf: | |
21 line = pfline.strip().split("\t") | |
22 pop = line[0] | |
23 profil = "\t".join(line[1:-2]) | |
24 if profil in profile_pop_list: | |
25 profile_pop_list[profil].append(pop) | |
26 else: | |
27 profile_pop_list[profil] = [pop] | |
28 i = 1 | |
29 with open(report, "w") as rt: | |
30 rt.write("New_Population\tFormer_Populations\t") | |
31 rt.write("\t".join(markers[1:-2]) + "\n") | |
32 for profs in profile_pop_list: | |
33 pop_to_collapse.append(profile_pop_list[profs]) | |
34 pop_ls = ", ".join(profile_pop_list[profs]) | |
35 rt.write("\t".join([str(i), pop_ls, profs]) + "\n") | |
36 i += 1 | |
37 df = pd.read_table(input_file, dtype={'Population': object}) | |
38 df['new_population'] = df.Population | |
39 for i, sets_pop in enumerate(pop_to_collapse): | |
40 df.loc[df['Population'].isin(sets_pop), ['new_population']] = i + 1 | |
41 | |
42 df.Population = df.new_population | |
43 df.drop(['new_population'], inplace=True, axis=1) | |
44 df.to_csv(output, sep="\t", index=False) | |
45 | |
46 | |
47 if __name__ == "__main__": | |
48 parser = ArgumentParser( | |
49 prog="auto_pop_collapse_from_profile", | |
50 description="collapses FLOCK populations based on profile.") | |
51 | |
52 parser.add_argument( | |
53 '-i', | |
54 dest="input_file", | |
55 required=True, | |
56 help="FLOCK output file") | |
57 | |
58 parser.add_argument( | |
59 '-o', | |
60 dest="output", | |
61 required=True, | |
62 help="Name of the output file.") | |
63 | |
64 parser.add_argument( | |
65 '-r', | |
66 dest="report", | |
67 required=True, | |
68 help="Name of the report file.") | |
69 | |
70 parser.add_argument( | |
71 '-p', | |
72 dest="profile", | |
73 required=True, | |
74 help="File location for the profile.txt from FLOCK.") | |
75 | |
76 args = parser.parse_args() | |
77 | |
78 auto_collapse(args.input_file, args.profile, args.output, args.report) |