143 lines
5.3 KiB
Python
143 lines
5.3 KiB
Python
#!/usr/bin/python
|
|
# Filename : analyse.py
|
|
|
|
import csv
|
|
import sys
|
|
import pandas as pd
|
|
import os.path
|
|
from os import path
|
|
|
|
|
|
# def skill_frequency(filename) -> None:
|
|
def skill_frequency(filename):
|
|
"""
|
|
Répertorie toutes les figures contenue dans le fichier et compte le nombre de fois qu'elles
|
|
apparaissent. La fonction compte aussi le nombre de série, le nombre de série non finie et le
|
|
nombre de figures.
|
|
"""
|
|
skills_dict = dict()
|
|
number_of_skill = 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)
|
|
|
|
for column in column_list:
|
|
number_of_routine += 1
|
|
skill_in_routine = 0
|
|
|
|
for skill in data[column]:
|
|
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
|
|
|
|
if skill_in_routine != 10:
|
|
number_of_unfinished_routine += 1
|
|
|
|
return skills_dict, number_of_skill, number_of_routine, number_of_unfinished_routine, number_of_tucked, number_of_picked, number_of_straight
|
|
|
|
|
|
def setup_combinaison_dictionnary(skills_dict) -> dict:
|
|
"""
|
|
Crée le dictionnaire de combinaison par rapport à toutes les figures contenues dans le
|
|
dictionnaire de figure.
|
|
"""
|
|
combination_dict = dict()
|
|
|
|
for next_skill in skills_dict.keys():
|
|
combination_dict[next_skill] = dict()
|
|
for previous_skill in skills_dict.keys():
|
|
combination_dict[next_skill][previous_skill] = 0
|
|
combination_dict[next_skill]['begin'] = 0
|
|
|
|
combination_dict['end'] = dict()
|
|
for next_skill in skills_dict.keys():
|
|
combination_dict['end'][next_skill] = 0
|
|
|
|
return combination_dict
|
|
|
|
|
|
def combinaison_frequency(filename, skills_dict) -> dict:
|
|
"""
|
|
Compte la fréquence des occurences des combinaisons de (deux) figures.
|
|
"""
|
|
|
|
combination_dict = setup_combinaison_dictionnary(skills_dict)
|
|
|
|
data = pd.read_csv(filename, delimiter=';')
|
|
column_list = list(data.columns)
|
|
|
|
for column in column_list:
|
|
skill_in_routine = 0
|
|
previous_skill = None
|
|
for skill in data[column]:
|
|
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, number_of_tucked, number_of_picked, number_of_straight) -> None:
|
|
"""
|
|
Crée deux fichiers contenant les résultats des analyses faites.
|
|
"""
|
|
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)])
|
|
|
|
with open('combinaison_frequencies_' + filename, 'w') as result_file:
|
|
writer = csv.writer(result_file, delimiter=';')
|
|
writer.writerow(["Combinaison", "# Apparition", "% Apparition"])
|
|
for following_skill in combination_dict.keys():
|
|
for skill, value in combination_dict[following_skill].items():
|
|
if value != 0:
|
|
writer.writerow([str(skill) + ' - ' + str(following_skill), str(value) , str(value / number_of_routine)])
|
|
|
|
|
|
if __name__ == '__main__':
|
|
if len(sys.argv) < 2:
|
|
print('Please, give a csv file.')
|
|
exit()
|
|
|
|
filename = sys.argv[1]
|
|
if filename[-4:] != '.csv':
|
|
print('Must be a CSV file.')
|
|
exit()
|
|
|
|
if not os.path.isfile(filename):
|
|
print('File does not exist.')
|
|
exit()
|
|
|
|
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)
|
|
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)
|