From 42640c17d960f66ace850bce772280b47b2b84f8 Mon Sep 17 00:00:00 2001 From: Till Raab Date: Fri, 19 May 2023 13:17:26 +0200 Subject: [PATCH] evaluation of the trial_summary initiated. Now the fun beginns --- complete_analysis.py | 28 +++++++--- trial_summary.csv | 44 +++++++++++++++ trial_summary_eval.py | 126 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 190 insertions(+), 8 deletions(-) create mode 100644 trial_summary.csv create mode 100644 trial_summary_eval.py diff --git a/complete_analysis.py b/complete_analysis.py index a0f291b..d946732 100644 --- a/complete_analysis.py +++ b/complete_analysis.py @@ -177,8 +177,9 @@ def main(data_folder=None): sr = 20_000 light_start_sec = 3*60*60 - trial_summary = pd.DataFrame(columns=['group', 'win_fish', 'lose_fish', 'sex_win', 'sex_lose', 'size_win', 'size_lose', 'EODf_win', 'EODf_lose', - 'exp_win', 'exp_lose', 'chirps_win', 'chirps_lose', 'rises_win', 'rise_lose']) + trial_summary = pd.DataFrame(columns=['recording', 'group', 'win_fish', 'lose_fish', 'sex_win', 'sex_lose', + 'size_win', 'size_lose', 'EODf_win', 'EODf_lose', 'exp_win', 'exp_lose', + 'chirps_win', 'chirps_lose', 'rises_win', 'rise_lose', 'draw']) trial_summary_row = {f'{s}':None for s in trial_summary.keys()} for trial_idx in tqdm(np.arange(len(trials_meta)), desc='Trials'): @@ -186,6 +187,7 @@ def main(data_folder=None): group = trials_meta['group'][trial_idx] recording = trials_meta['recording'][trial_idx][1:-1] + print('') print(recording) rec_id1 = trials_meta['rec_id1'][trial_idx] @@ -209,6 +211,16 @@ def main(data_folder=None): ############################################################################################################# ### meta collect + if (winner_fish := trials_meta['winner'][trial_idx]) == -1: + pass + elif np.isnan(winner_fish): + continue + elif winner_fish != trials_meta['fish1'][trial_idx] and winner_fish != trials_meta['fish2'][trial_idx]: + embed() + quit() + print(f'not participating winner in {recording}!!!') + continue + win_id = rec_id1 if trials_meta['fish1'][trial_idx] == trials_meta['winner'][trial_idx] else rec_id2 lose_id = rec_id2 if trials_meta['fish1'][trial_idx] == trials_meta['winner'][trial_idx] else rec_id1 @@ -270,7 +282,8 @@ def main(data_folder=None): lose_fish_no = trials_meta['fish2'][trial_idx] if trials_meta['fish1'][trial_idx] == trials_meta['winner'][trial_idx] else trials_meta['fish1'][trial_idx] trial_summary.loc[len(trial_summary)] = trial_summary_row - trial_summary.iloc[-1] = {'group': trials_meta['group'][trial_idx], + trial_summary.iloc[-1] = {'recording' : recording, + 'group': trials_meta['group'][trial_idx], 'win_fish': win_fish_no, 'lose_fish': lose_fish_no, 'sex_win': 'n', @@ -284,7 +297,8 @@ def main(data_folder=None): 'chirps_win': len(chirp_times[0]), 'chirps_lose': len(chirp_times[1]), 'rises_win': len(rise_idx_int[0]), - 'rise_lose': len(rise_idx_int[1]) + 'rise_lose': len(rise_idx_int[1]), + 'draw': 1 if trials_meta['winner'][trial_idx] == -1 else 0 } # embed() @@ -340,9 +354,6 @@ def main(data_folder=None): plt.savefig(os.path.join(os.path.join(os.path.split(__file__)[0], 'figures', f'{recording}.png')), dpi=300) plt.close() - embed() - quit() - fig = plt.figure(figsize=(20/2.54, 20/2.54)) gs = gridspec.GridSpec(2, 2, left=0.1, bottom=0.1, right=0.95, top=0.95, height_ratios=[1, 3], width_ratios=[3, 1]) ax = fig.add_subplot(gs[1, 0]) @@ -380,7 +391,8 @@ def main(data_folder=None): sex = 'm' trial_summary['sex_win'][(trial_summary['group'] == g) & (trial_summary['win_fish'] == f)] = sex trial_summary['sex_lose'][(trial_summary['group'] == g) & (trial_summary['lose_fish'] == f)] = sex - + embed() + quit() pass if __name__ == '__main__': diff --git a/trial_summary.csv b/trial_summary.csv new file mode 100644 index 0000000..ea67eb0 --- /dev/null +++ b/trial_summary.csv @@ -0,0 +1,44 @@ +,recording,group,win_fish,lose_fish,sex_win,sex_lose,size_win,size_lose,EODf_win,EODf_lose,exp_win,exp_lose,chirps_win,chirps_lose,rises_win,rise_lose,draw +0,2019-11-25-09_59,3,1,2,f,f,13.2,12.0,713.0544113886845,762.0273047058653,1,1,36,2657,22,165,0 +1,2019-11-26-10_00,3,4,3,m,m,15.5,17.5,883.141322780704,918.0584506431281,1,1,472,1322,17,481,0 +2,2019-11-27-10_00,3,5,6,f,f,14.4,12.65,728.1663791991439,650.6079943890219,1,1,16,2041,14,311,0 +3,2019-11-28-09_58,3,1,3,f,m,13.2,17.5,720.9491781126661,888.9029901347602,2,2,370,30,26,37,0 +4,2019-11-29-09_59,3,4,2,m,f,15.5,12.0,927.3677808126133,757.8912786740188,2,2,119,1232,56,161,0 +5,2019-12-02-10_00,3,3,5,m,f,17.5,14.4,866.5433040990971,719.3596160671729,3,2,2,759,28,165,0 +6,2019-12-03-10_01,3,1,6,f,f,13.2,12.65,709.888382193265,645.345316200243,3,2,61,3191,23,230,0 +7,2019-12-04-10_00,3,3,2,m,f,17.5,12.0,867.515070390076,732.5567785654214,4,3,2,1005,31,73,0 +8,2019-12-06-10_00,3,4,6,m,f,15.5,12.65,912.2881743174412,652.9837532796978,3,3,34,306,58,188,0 +9,2019-12-09-10_00,3,5,2,f,f,14.4,12.0,715.5845509704202,726.7506510306094,4,4,446,2345,10,180,0 +10,2019-12-10-10_00,3,3,6,m,f,17.5,12.65,853.973867720756,640.9374451096469,5,4,1,205,31,165,0 +11,2019-12-11-10_00,3,4,1,m,f,15.5,13.2,909.5564241038855,704.759181051688,4,5,44,260,48,165,0 +12,2019-12-12-10_00,3,2,6,f,f,12.0,12.65,708.2029632781753,649.3215729301896,5,5,55,1489,26,152,0 +13,2019-12-16-10_00,3,4,5,m,f,15.5,14.4,911.4475182245616,734.3463774893517,5,5,52,963,39,123,0 +14,2020-03-13-10_00,4,5,4,m,f,12.5,12.266666666666666,726.3470010966499,705.1654694195288,2,2,54,941,70,177,0 +15,2020-03-16-10_00,4,3,1,m,f,11.933333333333332,11.299999999999999,852.2318545355058,642.0347177867645,3,3,1304,724,57,154,0 +16,2020-03-18-10_34,4,5,3,m,m,12.5,11.933333333333332,725.8257351336636,863.6524533012707,3,4,16557,2089,339,43,1 +17,2020-03-19-10_00,4,1,4,f,f,11.299999999999999,12.266666666666666,659.5490944255365,697.5034008357667,4,4,52,1583,36,197,0 +18,2020-03-20-10_00,4,5,2,m,f,12.5,12.266666666666666,,,4,4,45,665,75,76,0 +19,2020-03-23-09_58,4,2,1,f,f,12.266666666666666,11.299999999999999,699.4914052830558,654.7533296886725,5,5,84,1158,17,67,1 +20,2020-03-24-10_00,4,4,3,f,m,12.266666666666666,11.933333333333332,684.578069899078,854.0458114588357,5,5,883,2,184,86,1 +21,2020-03-25-10_00,4,5,1,m,f,12.5,11.299999999999999,733.5001619575638,647.9874053272127,5,6,819,1831,48,70,1 +22,2020-03-31-09_59,4,3,2,m,f,11.933333333333332,12.266666666666666,860.5459022492297,692.2978867242133,6,6,10,225,26,50,1 +23,2020-05-11-10_00,5,1,2,m,f,12.333333333333334,13.166666666666666,834.369973908149,667.9762847453638,1,1,4,631,25,230,0 +24,2020-05-12-10_00,5,5,3,f,m,19.0,10.666666666666666,697.6088902440882,818.2108387976053,1,1,1,117,8,429,0 +25,2020-05-13-10_00,5,4,2,m,f,17.5,13.166666666666666,885.2957289220773,681.372424868242,1,2,34,614,22,98,0 +26,2020-05-14-10_00,5,5,1,f,m,19.0,12.333333333333334,703.5828000211009,840.457519990521,2,2,83,316,10,232,0 +27,2020-05-15-10_00,5,4,3,m,m,17.5,10.666666666666666,875.2647282681933,824.4852744512042,2,2,98,745,27,255,0 +28,2020-05-18-10_00,5,2,3,f,m,13.166666666666666,10.666666666666666,677.7516154017525,837.794665426305,3,3,338,530,28,270,0 +29,2020-05-19-10_00,5,5,4,f,m,19.0,17.5,699.3246023368515,881.0368775083901,3,3,628,1457,2,256,0 +30,2020-05-21-10_00,5,5,2,f,f,19.0,13.166666666666666,702.20947265625,684.967041015625,4,4,86,671,43,257,0 +31,2020-05-25-10_00,5,4,1,m,m,17.5,12.333333333333334,880.891870115058,842.1688052017244,4,4,125,165,37,122,0 +32,2020-05-27-10_00,6,3,1,f,m,13.5,9.0,686.4001347696975,815.713300982056,1,1,17,92,8,330,0 +33,2020-05-28-10_00,6,2,4,m,f,11.0,11.0,774.6150067187118,728.8412253286924,1,1,69,684,84,342,0 +34,2020-05-29-10_00,6,5,3,m,f,17.5,13.5,805.4542233630881,681.7640419584177,1,2,373,478,18,58,0 +35,2020-06-02-10_00,6,1,4,m,f,9.0,11.0,820.4496652837709,723.7667250846596,2,2,485,1253,69,309,0 +36,2020-06-03-10_10,6,5,2,m,m,17.5,11.0,810.7042669363011,783.6640529162586,2,2,54,182,16,74,0 +37,2020-06-04-10_00,6,3,4,f,f,13.5,11.0,695.5929553333448,714.6541711375795,3,3,44,994,34,291,0 +38,2020-06-05-10_00,6,2,1,m,m,11.0,9.0,804.8998142492978,827.5225072258723,3,3,117,425,41,143,0 +39,2020-06-08-10_00,6,5,3,m,f,17.5,13.5,816.1812754102803,691.6736840654672,3,4,1087,170,8,14,1 +40,2020-06-09-10_00,6,3,2,f,m,13.5,11.0,691.8529359583595,798.4298849024372,5,4,18,632,21,391,0 +41,2020-06-10-10_00,6,5,1,m,m,17.5,9.0,815.498890219021,828.5259822280207,4,4,66,269,1,14,0 +42,2020-06-11-10_00,6,5,4,m,f,17.5,11.0,817.6355361855158,730.7609124893474,5,4,144,1100,2,54,0 diff --git a/trial_summary_eval.py b/trial_summary_eval.py new file mode 100644 index 0000000..df4eec5 --- /dev/null +++ b/trial_summary_eval.py @@ -0,0 +1,126 @@ +import numpy as np +import itertools +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib.gridspec as gridspec +from IPython import embed + +colors = ['#BA2D22', '#53379B', '#F47F17', '#3673A4', '#AAB71B', '#DC143C', '#1E90FF'] +female_color, male_color = '#e74c3c', '#3498db' +Wc, Lc = 'darkgreen', '#3673A4' + + +def plot_chirp_rise_count_per_pairing(trial_summary): + win_chirps = [] + lose_chirps = [] + + win_rises = [] + lose_rises = [] + + for win_sex, lose_sex in itertools.product(['m', 'f'], repeat=2): + win_chirps.append(trial_summary['chirps_win'][(trial_summary["sex_win"] == win_sex) & + (trial_summary["sex_lose"] == lose_sex) & + (trial_summary["draw"] == 0)].to_numpy()) + lose_chirps.append(trial_summary['chirps_lose'][(trial_summary["sex_win"] == win_sex) & + (trial_summary["sex_lose"] == lose_sex) & + (trial_summary["draw"] == 0)].to_numpy()) + win_rises.append(trial_summary['rises_win'][(trial_summary["sex_win"] == win_sex) & + (trial_summary["sex_lose"] == lose_sex) & + (trial_summary["draw"] == 0)].to_numpy()) + lose_rises.append(trial_summary['rise_lose'][(trial_summary["sex_win"] == win_sex) & + (trial_summary["sex_lose"] == lose_sex) & + (trial_summary["draw"] == 0)].to_numpy()) + + + fig = plt.figure(figsize=(20/2.54, 12/2.54)) + gs = gridspec.GridSpec(1, 1, left=0.1, bottom=0.1, right=0.95, top=0.95) + ax = fig.add_subplot(gs[0, 0]) + ax.boxplot(win_chirps, positions=np.arange(len(win_chirps))-0.15, widths= .2, sym='') + ax.boxplot(lose_chirps, positions=np.arange(len(lose_chirps))+0.15, widths= .2, sym='') + + ax.set_xticks(np.arange(len(win_chirps))) + # ax.set_xticklabels([u'\u2642\u2642', u'\u2642\u2640', u'\u2640\u2642', u'\u2640\u2640']) + ax.set_xticklabels(['mm', 'mf', 'fm', 'ff']) + y0, y1 = ax.get_ylim() + for i in range(len(win_chirps)): + ax.text(i, y1, f'n={len(win_chirps[i]):.0f}', fontsize=10, ha='center', va='bottom') + ax.set_ylim(top = y1*1.1) + ax.set_ylabel('chirps [n]', fontsize=12) + plt.tick_params(labelsize=10) + + fig = plt.figure(figsize=(20/2.54, 12/2.54)) + gs = gridspec.GridSpec(1, 1, left=0.1, bottom=0.1, right=0.95, top=0.95) + ax = fig.add_subplot(gs[0, 0]) + ax.boxplot(win_rises, positions=np.arange(len(win_rises))-0.15, widths= .2, sym='') + ax.boxplot(lose_rises, positions=np.arange(len(lose_rises))+0.15, widths= .2, sym='') + + ax.set_xticks(np.arange(len(win_rises))) + # ax.set_xticklabels([u'\u2642\u2642', u'\u2642\u2640', u'\u2640\u2642', u'\u2640\u2640']) + ax.set_xticklabels(['mm', 'mf', 'fm', 'ff']) + y0, y1 = ax.get_ylim() + for i in range(len(win_rises)): + ax.text(i, y1, f'n={len(win_rises[i]):.0f}', fontsize=10, ha='center', va='bottom') + ax.set_ylim(top = y1*1.1) + ax.set_ylabel('rises [n]', fontsize=12) + plt.tick_params(labelsize=10) + plt.show() + +def plot_chirp_rise_count_per_vs_size_diff(trial_summary): + win_chirps = [] + lose_chirps = [] + + win_rises = [] + lose_rises = [] + + d_size = [] + + for win_sex, lose_sex in itertools.product(['m', 'f'], repeat=2): + win_chirps.append(trial_summary['chirps_win'][(trial_summary["sex_win"] == win_sex) & + (trial_summary["sex_lose"] == lose_sex) & + (trial_summary["draw"] == 0)].to_numpy()) + lose_chirps.append(trial_summary['chirps_lose'][(trial_summary["sex_win"] == win_sex) & + (trial_summary["sex_lose"] == lose_sex) & + (trial_summary["draw"] == 0)].to_numpy()) + win_rises.append(trial_summary['rises_win'][(trial_summary["sex_win"] == win_sex) & + (trial_summary["sex_lose"] == lose_sex) & + (trial_summary["draw"] == 0)].to_numpy()) + lose_rises.append(trial_summary['rise_lose'][(trial_summary["sex_win"] == win_sex) & + (trial_summary["sex_lose"] == lose_sex) & + (trial_summary["draw"] == 0)].to_numpy()) + + w_size = trial_summary['size_win'][(trial_summary["sex_win"] == win_sex) & + (trial_summary["sex_lose"] == lose_sex) & + (trial_summary["draw"] == 0)].to_numpy() + l_size = trial_summary['size_lose'][(trial_summary["sex_win"] == win_sex) & + (trial_summary["sex_lose"] == lose_sex) & + (trial_summary["draw"] == 0)].to_numpy() + + d_size.append(w_size-l_size) + embed() + quit() + + fig = plt.figure(figsize=(20/2.54, 12/2.54)) + gs = gridspec.GridSpec(1, 1, left=0.1, bottom=0.1, right=0.95, top=0.95) + ax = fig.add_subplot(gs[0, 0]) + mek = ['k', 'None', 'None', 'k'] + + c = [male_color, male_color, female_color, female_color] + for i in range(len(lose_rises)): + ax.plot(d_size[i]*-1, lose_rises[i], 'p', color=c[i], markeredgecolor=mek[i], markersize=8) + + ax.set_ylabel('rises [n]', fontsize=12) + plt.tick_params(labelsize=10) + + +def main(): + trial_summary = pd.read_csv('trial_summary.csv', index_col=0) + + plot_chirp_rise_count_per_pairing(trial_summary) + + plot_chirp_rise_count_per_vs_size_diff(trial_summary) + + + pass + +if __name__ == '__main__': + main() \ No newline at end of file