123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- import argparse
- import pandas as pd
- import numpy as np
- import sys
- from pathlib import Path
- sys.path.append(str(Path.cwd().parents[0] / 'plot_figures' / 'scripts'))
- from plotting_utils import df_dtypes, int_types, float_types
- def load_df(path, usecols=[]):
- df = pd.read_csv(path,
- usecols=lambda c: c in set(int_types+float_types+usecols),
- dtype=df_dtypes)
- df.drop(df.columns[df.columns.str.contains('unnamed', case=False)],
- axis=1, inplace=True)
- return df
- def normalize_direction(df, direction_key='direction'):
- direction_columns = [col.strip('_x') for col in df.columns \
- if (direction_key in col) \
- and ('_x' in col) \
- and not ('_std' in col)]
- for key in direction_columns:
- direction = df[f'{key}_x'] + 1j*df[f'{key}_y']
- direction /= np.abs(direction)
- df[f'{key}_x'] = np.real(direction)
- df[f'{key}_y'] = np.imag(direction)
- return df
- if __name__ == '__main__':
- CLI = argparse.ArgumentParser(description=__doc__,
- formatter_class=argparse.RawDescriptionHelpFormatter)
- CLI.add_argument("--dataframe", nargs='?', type=Path, required=True,
- help="path to input data in neo format")
- CLI.add_argument("--output", nargs='?', type=Path, required=True,
- help="path of output file")
- args, unknown = CLI.parse_known_args()
- groupby = ['profile', 'wavemode', 'technique', 'anesthetic', 'model_type'] #, 'disease_model']
- df = load_df(args.dataframe, usecols=groupby)
- df = normalize_direction(df)
- if 'channel-wise' in str(args.dataframe):
- groupby += ['channel_id', 'x_coords', 'y_coords']
- if 'disease_model' in df.columns:
- df.disease_model.fillna('None', inplace=True)
- groupby += ['disease_model']
- avg_df = df.groupby(groupby, as_index=False, observed=True, dropna=False).mean()
- if 'disease_model' in df.columns:
- avg_df['disease_model'].replace({'None': None}, inplace =True)
- avg_df.to_csv(args.output)
|