From c647773520f9089de1529abf290ac5c503e29696 Mon Sep 17 00:00:00 2001 From: Tanushree Tunstall Date: Tue, 5 Apr 2022 14:51:21 +0100 Subject: [PATCH] saving work --- test_data/processing.py | 167 +++++++++++++++++++++++++++++++++----- test_data/sample_data.csv | 52 ++++++------ test_data/sample_data.ods | Bin 18903 -> 23948 bytes 3 files changed, 174 insertions(+), 45 deletions(-) diff --git a/test_data/processing.py b/test_data/processing.py index 011eae2..f75afee 100644 --- a/test_data/processing.py +++ b/test_data/processing.py @@ -9,53 +9,182 @@ import sys, os import pandas as pd import numpy as np from statistics import mean, median, mode -#from statistics import multimode +from statistics import multimode from collections import Counter -import math +#import math # https://stackoverflow.com/questions/43321455/pandas-count-null-values-in-a-groupby-function +# https://stackoverflow.com/questions/33457191/python-pandas-dataframe-fill-nans-with-a-conditional-mean +# round up +#int(math.ceil(mean(foo))) #https://stackoverflow.com/questions/33457191/python-pandas-dataframe-fill-nans-with-a-conditional-mean -#%% +#%% Read data and formatting drug = "pyrazinamide" data = pd.read_csv("/home/tanu/git/ML_AI_training/test_data/sample_data.csv") data.columns +# COPY mutation_info_labels column +data['mutation_info_labels_orig'] = data['mutation_info_labels'] + # Convert DM/OM labels to numeric dm_om_map = {'DM': 1, 'OM': 0} # pnca, OM is minority, other genes: DM is minority data['dm_om_numeric'] = data['mutation_info_labels'].map(dm_om_map) # sanity check -data['dm_om_numeric'].value_counts() +data['dm_om_numeric'].value_counts() data['mutation_info_labels'].value_counts() +# Convert drtype column to numeric +drtype_map = {'XDR': 5 + , 'Pre-XDR': 4 + , 'MDR': 3 + , 'Pre-MDR': 2 + , 'Other': 1 + , 'Sensitive': 0} + +data['drtype_numeric'] = data['drtype'].map(drtype_map) + # COPY dst column -data['dst'] = data[drug] +data['dst'] = data[drug] # to allow cross checking +data['dst_multimode'] = data[drug] + # sanity check data[drug].value_counts() -data[drug].isnull().sum() +data['dst_multimode'].value_counts() -data['dst'].value_counts() -data['dst'].isnull().sum() +data[drug].isnull().sum() +data['dst_multimode'].isnull().sum() data['mutationinformation'].value_counts() #data.C.isnull().groupby([df['A'],df['B']]).sum().astype(int).reset_index(name='count') data[drug].isnull().groupby(data['mutationinformation']).sum() # GOAL is to populate na in the dst column from the count of the dm_om_numeric column -data['dst'].isnull().groupby(data['mutationinformation']).sum() +data['dst_multimode'].isnull().groupby(data['mutationinformation']).sum() +# COPY mutationinformation for sanity check +data['mutation'] = data['mutationinformation'] -# round up -int(math.ceil(mean(foo))) -#https://stackoverflow.com/questions/33457191/python-pandas-dataframe-fill-nans-with-a-conditional-mean -#FIXME +#%% POC: fill na with mean/mode/median/max for each mutation # STAGE 1: replace mean with Max(multimode), atm it is MEAN #na_val = data.groupby(data['mutationinformation'])['dst'].mean() +data['dst_multimode'].fillna(data.groupby('mutationinformation')['dst_multimode'].transform('mean')) +data['dst_multimode'].fillna(data.groupby('mutationinformation')['dm_om_numeric'].transform('mean')) -data['dst'] = data['dst'].fillna(data.groupby('mutationinformation')['dst'].transform('mean')) +# STAGE 2: Fill TRUE nan with DM.OM column value, atm it is MEAN +#data['dst_mean_check'] = data['dst'].fillna(data.groupby('mutationinformation')['dst'].transform('mean')) +#data['dst_mean_check'] = data['dst'].fillna(data.groupby('mutationinformation')['dm_om_numeric'].transform('mean')) +#%% POC continued: Test getting mode +#data.groupby('mutationinformation')['dm_om_numeric'].mode() +data.groupby('mutationinformation')['dm_om_numeric'].agg(mode) +data.groupby('mutationinformation')['dm_om_numeric'].agg(multimode) +foo = data.groupby('mutationinformation')['dm_om_numeric'].agg(multimode) +foo +foo = foo.to_frame() +foo['dm_om_numeric'].apply(lambda x: max(x))# returns nan +foo['dm_om_numeric'].apply(lambda x: np.nanmax(x)) +#foo.assign(dst_mode = lambda x: (x['dst'])) +foo['multimode_extract'] = foo['dm_om_numeric'].apply(lambda x: max(x)) +foo['multimode_extract'] +#%% Recalculating columns [dst, drtype and mutation_info_labels]: SET Index as 'mutationinformation' +data2 = data.copy() +# Reset index as it allows the groupby expression to directly map +data2 = data2.set_index(['mutationinformation']) +#%% Recalculating dst: my data +#------------------------------ +# Revised dst: max(multimode) +#------------------------------ +# For each mutation, generate the revised dst which is the mode of dm_om_numeric +# PROBLEM: Returns the smallest of the two when bimodal, and fails when all equally likely +# SOLUTION: Using max of the 'dst_noNA' column +#data2.groupby('mutationinformation')['dm_om_numeric'].agg(multimode) -# FIXME -#STAGE 2: Fill TRUE nan with DM.OM column value, atm it is MEAN -data['dst2'] = data['dst'].fillna(data.groupby('mutationinformation')['dm_om_numeric'].transform('mean')) -data['dst2'] = data['dst'].fillna(data.groupby('mutationinformation').transform(['dm_om_numeric'])) - \ No newline at end of file +# Get multimode for dm_om_numeric column +dm_om_multimode = data2.groupby('mutationinformation')['dm_om_numeric'].agg(multimode) +#dm_om_multimode + +# Fill using multimode ONLY where NA in dst_multimode column +#data2['dst_multimode'] = data2['dst_multimode'].fillna(dm_om_multimode) +data2['dst_multimode'] = data2['dst_multimode'].fillna(dm_om_multimode) + +# data2['dst_multimode'] + +# Now get the max from multimode +data2['dst_noNA'] = data2['dst_multimode'].apply(lambda x: np.nanmax(x)) +print(data2) + +# Finally created a revised dst with the max from the multimode +data2['dst_mode'] = data2.groupby('mutationinformation')['dst_noNA'].max() +#============================================================================== +#%% Recalculating drtype: my data +#-------------------------------- +# drtype: ALL values: +# numeric and names in an array +#-------------------------------- +data2['drtype_all_vals'] = data2['drtype_numeric'] +data2['drtype_all_names'] = data2['drtype'] + +# example: https://stackoverflow.com/questions/55125680/pandas-get-all-groupby-values-in-an-array +# print(df.groupby('key').data.apply(list).reset_index()) # my use case, don't need the reset_index() +data2['drtype_all_vals'] = data2.groupby('mutationinformation').drtype_all_vals.apply(list) +data2['drtype_all_names'] = data2.groupby('mutationinformation').drtype_all_names.apply(list) + +#--------------------------------- +# Revised drtype: max(Multimode) +#-------------------------------- +data2['drtype_multimode'] = data2.groupby(['mutationinformation'])['drtype_numeric'].agg(multimode) +data2['drtype_multimode'] + +# Now get the max from multimode +data2['drtype_mode'] = data2['drtype_multimode'].apply(lambda x: np.nanmax(x)) +data2.head() + +#---------------------- +# Revised drtype: Max +#---------------------- +data2.head() +data2['drtype_max'] = data2.groupby(['mutationinformation'])['drtype_numeric'].max() +#data2 = data2.reset_index() +data2.head() + +#%% Finally reset index +data2 = data2.reset_index() +#============================================================================== +#--------------------------------------- +# Create revised mutation_info_column +#--------------------------------------- +data2['dst_mode'].value_counts() +data2[drug].value_counts() + +# note this is overriding, since downstream depends on it +# make a copy you if you need to keep that +data2['mutation_info_labels_orig'] = data2['mutation_info_labels'] +data2['mutation_info_labels'] = data2['dst_mode'].map({1: 'DM' + , 0: 'OM'}) +data2['mutation_info_labels_orig'].value_counts() +data2['mutation_info_labels'].value_counts() +#============================================================================== +# sanity check +if (all(data2['mutation'] == data2['mutationinformation'])): + print('\nPass: Mutationinformation check successful') +else: + sys.exit('\nERROR: mutationin cross checks failed. Please check your group_by() aggregate functions') + +# Drop mutation column +data2.drop(['mutation'], axis=1, inplace=True) + +#%% Process lineage info +# add how many different lineages a sample is represented in? +#%% subset: equivalent of merged_df3? +# https://stackoverflow.com/questions/39900061/sort-lists-in-a-pandas-dataframe-column + +# result = data2['dst_multimode'].sort_values().apply(lambda x: sorted(x)) +# newdf = pd.DataFrame({'dst_multimode': Series(list(set(result['a'].apply(tuple))))}) +# newdf.sort_values(by='a') + +# data2['dst_multimode'].value_counts() +# data2.sort_values(['dst_multimode'], ascending=False) + +data_df3 = data2.drop_duplicates(['mutationinformation']) +data_df3_v2 = data2.drop_duplicates(['mutationinformation']) +all(data_df3 == data_df3_v2) \ No newline at end of file diff --git a/test_data/sample_data.csv b/test_data/sample_data.csv index 5fd5515..f77e4aa 100644 --- a/test_data/sample_data.csv +++ b/test_data/sample_data.csv @@ -1,26 +1,26 @@ -id,mutationinformation,position,pyrazinamide,mutation_info_labels,drtype -S1,M1A,1,0,DM,MDR -S2,M1A,1,1,DM,Pre-MDR -S3,M1A,1,1,OM,Sensitive -S4,M1A,1,NA,OM,Others -S5,M1A,1,1,OM,Pre-XDR -S6,M1A,1,1,DM,XDR -S7,M1B,1,NA,OM,MDR -S8,M1B,1,1,DM,MDR -S9,M1B,1,NA,DM,Other -S10,M1B,1,0,OM,Sensitive -S11,M1C,1,NA,OM,Pre-XDR -S12,M1C,1,NA,OM,Pre-XDR -S13,M1C,1,1,OM,MDR -S14,M1C,1,NA,DM,MDR -S15,A2B,2,0,OM,Others -S16,A2B,2,0,OM,XDR -S17,A2C,2,NA,DM,Pre-MDR -S18,A2C,2,1,DM,Pre-MDR -S19,D3E,3,1,DM,XDR -S20,D3E,3,NA,DM,MDR -S21,D3E,3,NA,OM,Pre-MDR -S22,D3P,3,0,OM,Pre-MDR -S23,D3A,3,0,OM,Sensitive -S24,P4A,4,NA,OM,Others -S25,P5A,5,1,DM,Sensitive +sample,mutationinformation,position,pyrazinamide,mutation_info_labels,drtype,lineage +S1,M1A,1,0,DM,MDR,l1 +S2,M1A,1,1,DM,Pre-MDR,l2 +S3,M1A,1,1,OM,Sensitive,l1 +S4,M1A,1,NA,OM,Other,l3 +S5,M1A,1,1,OM,Pre-XDR,l2 +S6,M1A,1,1,DM,XDR,l4 +S7,M1B,1,NA,OM,MDR,l1 +S8,M1B,1,1,DM,Other,l1 +S9,M1B,1,NA,DM,Other,l2 +S10,M1B,1,0,OM,Sensitive,l2 +S11,M1C,1,NA,OM,Pre-XDR,l3 +S12,M1C,1,NA,OM,Pre-XDR,l1 +S13,M1C,1,1,OM,MDR,l1 +S14,M1C,1,NA,DM,MDR,l2 +S15,A2B,2,0,OM,Other,l4 +S16,A2B,2,0,OM,XDR,l4 +S17,A2C,2,NA,DM,Pre-MDR,l5 +S18,A2C,2,1,DM,Pre-MDR,l1 +S19,D3E,3,1,DM,XDR,l2 +S20,D3E,3,NA,DM,MDR,l2 +S21,D3E,3,NA,OM,Pre-MDR,l1 +S22,D3P,3,0,OM,Pre-MDR,l2 +S23,D3A,3,0,OM,Sensitive,l5 +S24,P4A,4,NA,OM,Other,l6 +S25,P5A,5,1,DM,Sensitive,l4 diff --git a/test_data/sample_data.ods b/test_data/sample_data.ods index aff3cca690da48b2bf00cac9e14a9f225495681f..73a79a8a6ed89f3bb27313c228d2accf570644a4 100644 GIT binary patch delta 22505 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