TraSCA/analyse.py

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)