From 06ddd893d32a29829d7d9148fb3192a5b30e9ed8 Mon Sep 17 00:00:00 2001 From: Loic-Lenof <loic.lenof@gmail.com> Date: Tue, 12 Jul 2022 15:22:48 +0200 Subject: [PATCH] Sorting audio names + added sorting of names at importation to improve stability --- BBPs/BBPUtils.py | 19 +++++++++++++++---- Clicks/ClickUtils.py | 15 +++++++++++++-- Clicks/__pycache__/ClickUtils.cpython-39.pyc | Bin 0 -> 6127 bytes Whistles/WhistleUtils.py | 19 +++++++++++++++---- 4 files changed, 43 insertions(+), 10 deletions(-) create mode 100644 Clicks/__pycache__/ClickUtils.cpython-39.pyc diff --git a/BBPs/BBPUtils.py b/BBPs/BBPUtils.py index 02d765c..ff3a73b 100755 --- a/BBPs/BBPUtils.py +++ b/BBPs/BBPUtils.py @@ -13,7 +13,7 @@ import pandas as pd from scipy.signal import butter, filtfilt #%% Functions process -def import_csv(csv_name, folder, separator, useless=True): +def import_csv(csv_name, folder, useless=True, slash="/"): """ Parameters ---------- @@ -35,7 +35,7 @@ def import_csv(csv_name, folder, separator, useless=True): data = [] # read data csv - with open(folder + separator + csv_name, newline="") as csv_file: + with open(folder + slash + csv_name, newline="") as csv_file: lines = csv.reader(csv_file, delimiter=',') for row in lines: data = data + [row] @@ -72,7 +72,7 @@ def get_csv(csv_folder, slash="\\"): ------- data_20_21 : DATAFRAME Contains the inforamtion inside the .CSVs. - audio_paths : LIST + sorted_names : LIST Names corresponding to audio files in the first column of the .CSVs. """ csv_names = [a for a in os.listdir(csv_folder) if a.endswith('.csv')] @@ -92,8 +92,19 @@ def get_csv(csv_folder, slash="\\"): for filename in data_frame["Fichier Audio"]: if filename.endswith(".wav"): audio_names = np.append(audio_names, filename.replace('/', slash)) + + # sort audio files names + # We want to sort it by year + years = np.unique([path[4:8] for path in audio_names]) + sorted_names = np.array([], dtype='<U49') + # and inside each year, sort it by date. + for year in years: + idx_to_sort = np.where(np.array([path[4:8] for path in audio_names]) == year)[0] + temp_path = np.copy(audio_names[idx_to_sort]) + temp_path.sort() + sorted_names = np.append(temp_path, sorted_names) - return data_frame, audio_names + return data_frame, sorted_names def butter_pass_filter(data, cutoff, fs, order=1, mode='high'): """ diff --git a/Clicks/ClickUtils.py b/Clicks/ClickUtils.py index 65223db..280852a 100755 --- a/Clicks/ClickUtils.py +++ b/Clicks/ClickUtils.py @@ -76,7 +76,7 @@ def get_csv(csv_folder, slash="\\"): ------- data_20_21 : DATAFRAME Contains the inforamtion inside the .CSVs. - audio_paths : LIST + sorted_names : LIST Names corresponding to audio files in the first column of the .CSVs. """ csv_names = [a for a in os.listdir(csv_folder) if a.endswith('.csv')] @@ -96,8 +96,19 @@ def get_csv(csv_folder, slash="\\"): for filename in data_frame["Fichier Audio"]: if filename.endswith(".wav"): audio_names = np.append(audio_names, filename.replace('/', slash)) + + # sort audio files names + # We want to sort it by year + years = np.unique([path[4:8] for path in audio_names]) + sorted_names = np.array([], dtype='<U49') + # and inside each year, sort it by date. + for year in years: + idx_to_sort = np.where(np.array([path[4:8] for path in audio_names]) == year)[0] + temp_path = np.copy(audio_names[idx_to_sort]) + temp_path.sort() + sorted_names = np.append(temp_path, sorted_names) - return data_frame, audio_names + return data_frame, sorted_names def butter_pass_filter(data, cutoff, fs, order=1, mode='high'): """ diff --git a/Clicks/__pycache__/ClickUtils.cpython-39.pyc b/Clicks/__pycache__/ClickUtils.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..637b1f10f4e9ed909a15627bce8f38dc038a2d95 GIT binary patch literal 6127 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 literal 0 HcmV?d00001 diff --git a/Whistles/WhistleUtils.py b/Whistles/WhistleUtils.py index 7c7c5e4..a285afd 100755 --- a/Whistles/WhistleUtils.py +++ b/Whistles/WhistleUtils.py @@ -77,15 +77,15 @@ def get_csv(csv_folder, slash="\\"): ------- data_20_21 : DATAFRAME Contains the inforamtion inside the .CSVs. - audio_paths : LIST + sorted_names : LIST Names corresponding to audio files in the first column of the .CSVs. """ csv_names = [a for a in os.listdir(csv_folder) if a.endswith('.csv')] # import data - data = import_csv(csv_names[0], csv_folder, slash=slash) + data = import_csv(csv_names[0], csv_folder, separator=slash) for i in range(1,len(csv_names)): - data = data + import_csv(csv_names[i], csv_folder, slash=slash)[1:] + data = data + import_csv(csv_names[i], csv_folder, separator=slash)[1:] data_frame = pd.DataFrame(data=data[:][1:], columns=data[:][0]) # change dtype for selected columns @@ -97,8 +97,19 @@ def get_csv(csv_folder, slash="\\"): for filename in data_frame["Fichier Audio"]: if filename.endswith(".wav"): audio_names = np.append(audio_names, filename.replace('/', slash)) + + # sort audio files names + # We want to sort it by year + years = np.unique([path[4:8] for path in audio_names]) + sorted_names = np.array([], dtype='<U49') + # and inside each year, sort it by date. + for year in years: + idx_to_sort = np.where(np.array([path[4:8] for path in audio_names]) == year)[0] + temp_path = np.copy(audio_names[idx_to_sort]) + temp_path.sort() + sorted_names = np.append(temp_path, sorted_names) - return data_frame, audio_names + return data_frame, sorted_names #%% Trajectories algorithms def get_local_maxima(spectrogram, spectrogram2, hardness, threshold=10e-5): -- GitLab