init
This commit is contained in:
parent
002efc9d91
commit
27ed52c757
160
analyse_rps.py
Normal file
160
analyse_rps.py
Normal 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]
|
||||||
Loading…
x
Reference in New Issue
Block a user