This commit is contained in:
Colas Geier 2024-05-15 17:04:59 +02:00
parent 002efc9d91
commit 27ed52c757

160
analyse_rps.py Normal file
View File

@ -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]