annotate flow_overview/flowstatlib.py @ 0:8283ff163ba6 draft

Uploaded
author immport-devteam
date Mon, 27 Feb 2017 12:54:37 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
1 ######################################################################
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
2 # Copyright (c) 2016 Northrop Grumman.
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
3 # All rights reserved.
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
4 ######################################################################
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
5 from __future__ import print_function
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
6 import sys
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
7 import pandas as pd
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
8 from scipy.stats import gmean
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
9 from argparse import ArgumentParser
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
10
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
11
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
12 def gen_overview_stats(file_name):
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
13 flow_stats = {}
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
14 fcs = pd.read_table(file_name)
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
15 (events, columns) = fcs.shape
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
16 flow_stats['fcs'] = fcs
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
17 flow_stats['events'] = events
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
18 flow_stats['columns'] = columns - 1
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
19 flow_stats['data'] = fcs.iloc[:, :-1]
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
20 flow_stats['population'] = fcs.iloc[:, -1:].iloc[:, 0]
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
21 flow_stats['population_freq'] = flow_stats['population'].value_counts()
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
22 flow_stats['population_sample'] = (flow_stats['population_freq'] * (20000/float(events))).round(decimals=0)
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
23 flow_stats['population_freq_sort'] = flow_stats['population_freq'].sort_index()
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
24 flow_stats['population_per'] = (flow_stats['population'].value_counts(normalize=True) * 100).round(decimals=2)
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
25 flow_stats['population_per_sort'] = flow_stats['population_per'].sort_index()
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
26 flow_stats['population_all'] = pd.concat([flow_stats['population_freq_sort'], flow_stats['population_per_sort']], axis=1)
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
27 flow_stats['population_all'].columns = ['Count', 'Percentage']
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
28 flow_stats['min'] = flow_stats['data'].values.min()
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
29 flow_stats['max'] = flow_stats['data'].values.max()
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
30 flow_stats['markers'] = list(flow_stats['data'].columns)
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
31 flow_stats['mfi'] = fcs.groupby('Population').mean().round(decimals=2)
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
32 flow_stats['mfi_pop'] = pd.merge(flow_stats['mfi'], flow_stats['population_all'], left_index=True, right_index=True)
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
33 flow_stats['mfi_pop']['Population'] = flow_stats['mfi_pop'].index
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
34 flow_stats['gmfi'] = fcs.groupby('Population').agg(lambda x: gmean(list(x))).round(decimals=2)
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
35 flow_stats['gmfi_pop'] = pd.merge(flow_stats['gmfi'], flow_stats['population_all'], left_index=True, right_index=True)
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
36 flow_stats['gmfi_pop']['Population'] = flow_stats['gmfi_pop'].index
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
37 flow_stats['mdfi'] = fcs.groupby('Population').median().round(decimals=2)
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
38 flow_stats['mdfi_pop'] = pd.merge(flow_stats['mdfi'], flow_stats['population_all'], left_index=True, right_index=True)
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
39 flow_stats['mdfi_pop']['Population'] = flow_stats['mdfi_pop'].index
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
40
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
41 #
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
42 # If the number of events is less than 20000, then return
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
43 # the complete data set,
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
44 # Otherwise sample the data to only return 20000 events.
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
45 if events <= 20000:
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
46 flow_stats['sample'] = fcs
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
47 else:
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
48 fcs_np = fcs.values
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
49 sample_data = []
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
50 pop_found = {}
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
51 for i in range(0, events):
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
52 population_number = fcs_np[i][columns-1]
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
53 if population_number in pop_found:
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
54 if pop_found[population_number] < flow_stats['population_sample'][population_number]:
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
55 pop_found[population_number] += 1
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
56 sample_data.append(fcs_np[i])
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
57 else:
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
58 pop_found[population_number] = 1
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
59 sample_data.append(fcs_np[i])
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
60 flow_stats['sample'] = pd.DataFrame(sample_data)
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
61 flow_stats['sample'].columns = fcs.columns
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
62
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
63 flow_stats['sample_data'] = flow_stats['sample'].iloc[:, :-1]
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
64 flow_stats['sample_population'] = flow_stats['sample'].iloc[:, -1:].iloc[:, 0]
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
65
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
66 return flow_stats
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
67
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
68
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
69 if __name__ == '__main__':
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
70 parser = ArgumentParser(
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
71 prog="flowstats",
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
72 description="Gets statistics on FLOCK run")
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
73
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
74 parser.add_argument(
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
75 '-i',
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
76 dest="input_file",
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
77 required=True,
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
78 help="File locations for flow clr file.")
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
79
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
80 parser.add_argument(
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
81 '-o',
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
82 dest="out_file",
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
83 required=True,
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
84 help="Path to the directory for the output file.")
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
85 args = parser.parse_args()
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
86
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
87 flow_stats = gen_overview_stats(args.input_file)
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
88 with open(args.out_file, "w") as outf:
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
89 outf.write("Events: ", flow_stats['events'])
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
90 outf.write("Min: ", flow_stats['min'])
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
91 outf.write("Max: ", flow_stats['max'])
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
92 outf.write("Columns: ", flow_stats['columns'])
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
93 outf.write("Markers: ", flow_stats['markers'])
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
94 outf.write("Population: ", flow_stats['population'])
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
95 outf.write("Population Freq: ", flow_stats['population_freq'])
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
96 outf.write("Population Sample: ", flow_stats['population_sample'])
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
97 outf.write("Population Per: ", flow_stats['population_per'])
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
98 outf.write("Sample Data contains ", len(flow_stats['sample']), " events")
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
99 outf.write("MIF_POP ", flow_stats['mfi_pop'])
8283ff163ba6 Uploaded
immport-devteam
parents:
diff changeset
100 sys.exit(0)