From f2ecc618b6d0962561143266dd94839e934f4893 Mon Sep 17 00:00:00 2001 From: Gregory Trullemans Date: Tue, 1 Mar 2022 19:00:33 +0100 Subject: [PATCH] Bug fix and optimizations --- .gitignore | 2 ++ analyse.py | 72 ++++++++++++++++++++++++++++-------------------------- 2 files changed, 39 insertions(+), 35 deletions(-) diff --git a/.gitignore b/.gitignore index 63ec1ca..c1c68d9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ *.csv +*.xls +*.xlsx # Mac OS .DS_Store \ No newline at end of file diff --git a/analyse.py b/analyse.py index ecd68d5..7b2a6b2 100644 --- a/analyse.py +++ b/analyse.py @@ -16,11 +16,11 @@ def skill_frequency(filename): """ skills_dict = dict() number_of_skill = 0 - number_of_routine = 0 - number_of_unfinished_routine = 0 number_of_tucked = 0 number_of_picked = 0 + number_of_routine = 0 number_of_straight = 0 + number_of_unfinished_routine = 0 data = pd.read_csv(filename, delimiter=';') column_list = list(data.columns) @@ -28,18 +28,20 @@ def skill_frequency(filename): for column in column_list: number_of_routine += 1 skill_in_routine = 0 + for skill in data[column]: - number_of_skill += 1 - skill_in_routine += 1 - skills_dict[skill] = skills_dict.get(skill, 0) + 1 + if not pd.isna(skill): + number_of_skill += 1 + skill_in_routine += 1 + skills_dict[skill] = skills_dict.get(skill, 0) + 1 - position = skill.strip()[-1:] - if position == 'o': - number_of_tucked += 1 - elif position == '<': - number_of_picked += 1 - elif position == '/': - number_of_straight +=1 + position = skill.strip()[-1:] + if position == 'o': + number_of_tucked += 1 + elif position == '<': + number_of_picked += 1 + elif position == '/': + number_of_straight +=1 if skill_in_routine != 10: number_of_unfinished_routine += 1 @@ -54,15 +56,15 @@ def setup_combinaison_dictionnary(skills_dict): """ combination_dict = dict() - for key, value in skills_dict.items(): + for key in skills_dict.keys(): combination_dict[key] = dict() - for k, v in skills_dict.items(): + for k in skills_dict.keys(): combination_dict[key][k] = 0 combination_dict[key]['begin'] = 0 combination_dict['end'] = dict() - for k, v in skills_dict.items(): - combination_dict['end'][k] = 0 + for key in skills_dict.keys(): + combination_dict['end'][key] = 0 return combination_dict @@ -79,20 +81,31 @@ def combinaison_frequency(filename, skills_dict): for column in column_list: previous_skill = None + skill_in_routine = 0 for skill in data[column]: - if previous_skill is None: - combination_dict[skill]['begin'] += 1 - else: - combination_dict[skill][previous_skill] += 1 - previous_skill = skill - combination_dict['end'][previous_skill] += 1 + if not pd.isna(skill): + skill_in_routine += 1 + if previous_skill is None: + combination_dict[skill]['begin'] += 1 + else: + combination_dict[skill][previous_skill] += 1 + previous_skill = skill + + if skill_in_routine == 10: + # on ne compte pas la combinaison de fin s'il y a crash. + combination_dict['end'][previous_skill] += 1 return combination_dict -def export_result_in_csv(filename, skills_dict, combination_dict, number_of_skill, number_of_routine, number_of_unfinished_routine) -> None: +def export_result_in_csv(filename, skills_dict, combination_dict, number_of_skill, number_of_routine, number_of_unfinished_routine, number_of_tucked, number_of_picked, number_of_straight) -> None: with open('skill_frequencies_' + filename, 'w') as result_file: writer = csv.writer(result_file, delimiter=';') + writer.writerow(["# Routine", "# Unfinished R.", "# skill", "# tucked", "# picked", "# straight"]) + writer.writerow([number_of_routine, number_of_unfinished_routine, number_of_skill, number_of_tucked, number_of_picked, number_of_straight]) + writer.writerow(["", "", "", number_of_tucked / number_of_skill, number_of_picked / number_of_skill, number_of_straight / number_of_skill]) + writer.writerow([""]) + writer.writerow([""]) writer.writerow(["Skill", "# Apparition", "% Apparition"]) for key, value in skills_dict.items(): writer.writerow([str(key), str(value), str(value / number_of_routine)]) @@ -106,17 +119,6 @@ def export_result_in_csv(filename, skills_dict, combination_dict, number_of_skil writer.writerow([str(skill) + ' - ' + str(following_skill), str(value) , str(value / number_of_routine)]) -def print_result(number_of_skill, number_of_routine, number_of_unfinished_routine, number_of_tucked, number_of_picked, number_of_straight) -> None: - print('------------------------------------------------------------------------') - print('Number of routine: ' + str(number_of_routine)) - print('Number of unfinished routine: ' + str(number_of_unfinished_routine)) - print('Number of skill: ' + str(number_of_skill)) - print('Number of skill tucked: ' + str(number_of_tucked)) - print('Number of skill picked: ' + str(number_of_picked)) - print('Number of skill straight: ' + str(number_of_straight)) - print('------------------------------------------------------------------------') - - if __name__ == '__main__': if len(sys.argv) < 2: print('Please, give a filename.') @@ -127,4 +129,4 @@ if __name__ == '__main__': skills_dict, number_of_skill, number_of_routine, number_of_unfinished_routine, number_of_tucked, number_of_picked, number_of_straight = skill_frequency(filename) combination_dict = combinaison_frequency(filename, skills_dict) print_result(number_of_skill, number_of_routine, number_of_unfinished_routine, number_of_tucked, number_of_picked, number_of_straight) - export_result_in_csv(filename, skills_dict, combination_dict, number_of_skill, number_of_routine, number_of_unfinished_routine) + export_result_in_csv(filename, skills_dict, combination_dict, number_of_skill, number_of_routine, number_of_unfinished_routine, number_of_tucked, number_of_picked, number_of_straight)