diff --git a/analyse_rps.py b/analyse_rps.py new file mode 100644 index 0000000..96e261a --- /dev/null +++ b/analyse_rps.py @@ -0,0 +1,160 @@ +import matplotlib.pyplot as plt +from matplotlib.backends import backend_pdf +import pandas as pd +import os + +dict_color = { + 'mood' : {'good_mood': '#0000FF', 'mood': '#d0ef16', 'bad_mood': '#FF0000'}, + 'yes/no' : {'oui': '#0000FF', 'non': '#FF0000'}, + '+/-': { + '+ + +': '#0000FF', + '+ +': '#05f57f', + '+': '#069f05', + '-': '#d0ef16', + '- -': '#f57a02', + '- - -': '#FF0000' + }, + 'text': { + 'toujours': '#0000FF', + 'souvent': '#069f05', + 'rarement': '#d0ef16', + 'jamais': '#FF0000', + } +} + +good_mood = [ + 'Passionnant','Bien','apaiser','évoluer','amélioration','entraide','Intérêt','Changement','Enrichissant','passion','Confiance', # Mot clef 1 + 'Valorisant','Motivant','Convivialité','confiance','Evolutif','varié','Valeurs', # Mot clef 2 + 'Utile','dynamiser','Reconnaissance','Bienveillance','bonne équipe','Motivation','dialogue', # Mot clef 3 + ] +bad_mood = [ + 'solitude','instabilité','lourd','Frustration','Surcharge','désorganisation', # Mot clef 1 + "pas d'évolution",'Usant','Pertinence ?','débordé','fatiguer','trop administratif','Stress','auto-apprentissage','Peu de cadrage','Pression','démotiver', # Mot clef 2 + 'clivage métier','Bouche-trou','empêché','bloquer','Frustrant','stress','Débordé','Surcharge','peu de moyen','tension','budget serré', # Mot clef 3 + ] +mood = [ + 'responsabilité','intéressant','Diversifié','interrogation','Autonomie', # Mot clef 1 + 'devoir','initiative','Evolution', # Mot clef 2 + 'occupation','Routine', # Mot clef 3 + ] + +invers = [ + "j'utilise des produits chimiques.", # 12 + "il m arrive de supporter seul(e) le poids des décisions et la prise de risques.", # 17 + "j'ai un temps contraint.", # 20 + "je travaille de nuit.", # 21 + "je travaille les weekends ou les jours fériés.", # 22 + "il y a des dysfonctionnement dans le déroulement de mon travail.", # 32 + "il m'arrive d'avoir peur pendant mon travail.", # 40 + "il m'arrive de travailler dans l'urgence (imprévus...).", # 41 + "il m'arrive d'être dérangé par des sollicitations (téléphone, conseils, etc.) lorsque j'aurais besoin de me concentrer.", # 42 + "il m'arrive de mal dormir parce que je pense à mon travail.", # 43 + "il m'arrive de contourner les procédures de travail.", # 44 + "il m'arrive de venir au travail à contrecoeur.", # 45 + "il m'arrive de ressentir de l'ennui dans mon travail.", # 46 + "les mutations technologiques constituent une contrainte dans la mise en oeuvre de mes missions.", # 48 + "les mutations stratégiques constituent une contrainte dans la mise en oeuvre de mes missions.", # 49 + "Au cours des dernières années, mon travail est devenu de plus en plus exigeant.", # 55 + "j'ai fait l'objet de discriminations liées à mon sexe, mon âge, ma religion, mon handicap, ou encore mon orientation sexuelle.", # 57 + "j'ai déjà travaillé alors que j'étais malade.", # 58 + "j'ai fait l'objet de violences physiques au travail.", # 59 + "j'ai souffert de violences psychologiques.", # 60 + "j'ai vécu des difficultés relationnelles au travail.", # 62 + "je crains de perdre mon emploi.", # 69 + "j'envisage de quitter ma structure.", # 72 +] +# ajouter "Ma structure" à partir de la diapo 25 jusqu'à la 30 +# ajouter "Il m'arrive" à partir de la diapo 40 jusqu'à la 46 + +def sort_plot(values,colors,invers=False): + name_index = values.index.name + name_col = values.name + df = values.reset_index() + df['idx'] = None + for i,c in enumerate(colors.keys()): + if c in df[name_index].tolist(): + df.loc[df[name_index]==c,'idx'] = i + df.set_index('idx',inplace=True) + df.sort_index(inplace=True) + df.set_index(name_index,inplace=True) + return df[name_col] + + +def color_plot(data_list): + for d in dict_color.values(): + if any(k in data_list for k in d.keys()): + return d + +def keyword_plot(data): + color = dict_color['mood'] + ax = (pd.Series({ + 'mots positifs': data.isin(good_mood).value_counts()[True] if any(data.isin(good_mood)) else 0, + 'mots neutres': data.isin(mood).value_counts()[True] if any(data.isin(mood)) else 0, + 'mots négatifs': data.isin(bad_mood).value_counts()[True] if any(data.isin(bad_mood)) else 0, + # 'autre':0 + }) + .plot + .pie( + y='quantite', + title=data.name, + figsize=(5, 5), + legend=True, + ylabel='', + # colors = [*[i for i in color.values()],'#069f05'], + colors = [i for i in color.values()], + fontsize=11, + autopct='%1.1f%%', # pourcentage sur 1 chiffre apres la virgule de chaque portion + )) + ax.title.set_fontweight('bold') + return ax + + +def make_plot(data): + color = color_plot(data.unique()) + vals = sort_plot(data.value_counts(),color) + if data.name in invers: + lst_color = [] + [[x,*lst_color] for x in color.values()] + color = dict(zip(color.keys(),list(reversed(color.values())))) + ax = (vals + .plot + .pie( + y='quantite', + title=data.name.capitalize(), + figsize=(5, 5), + legend=True, + ylabel='', + colors = [color[i] for i in vals.index], + fontsize=11, + autopct='%1.1f%%', # pourcentage sur 1 chiffre apres la virgule de chaque portion + )) + ax.title.set_fontweight('bold') + ax.title.set_wrap(True) + return ax + + +if __name__ == "__main__": + + + PATH = '/media/colas/SRV/FICHIERS/Délégués Personnel_CSE/6_Enquêtes/Enquêtes RPS' + file = 'Enquete_Nat_RPS_2023_CEN_ISERE.xlsx' + + df = pd.read_excel(os.path.join(PATH,file)) + df.drop(columns=['Année','Votre CEN','Séquentiel','id'], inplace=True, errors='ignore') + + pdf = backend_pdf.PdfPages(os.path.join(PATH,'ANALYSE',"Analyse 2023.pdf")) + for i,c in enumerate(df.columns): + if i in range(24,30): df[c].name = 'ma structure ' + df[c].name + if i in range(39,46): df[c].name = "il m'arrive " + df[c].name + + fig = keyword_plot(df[c]) if c.startswith('Mot clef') else make_plot(df[c]) + pdf.savefig( + fig.get_figure(), + transparent=True + ) + fig.clear() + + pdf.close() + + # c = 'Mot clef 1' + # data = df[c] \ No newline at end of file