181 lines
4.8 KiB
Markdown
181 lines
4.8 KiB
Markdown
# Plomberie pour utiliser l'algorithme du Jugement majoritaire dans des application de sondages/votes
|
|
|
|
Ce projet provient de https://www.astrolabe.coop/ pour l'ajout du jugement majoritaire dans l'application de sondage de Nextcloud : https://github.com/nextcloud/polls/issues/3472 .
|
|
|
|
## Qu'est-ce que le jugement majoritaire ?
|
|
|
|
https://fr.wikipedia.org/wiki/Jugement_majoritaire
|
|
|
|
# Libraire de calcul Jugement majoritaire
|
|
|
|
## Etude
|
|
|
|
Une étude de l'existant est dans le répertoire étude.
|
|
|
|
Après cette recherche il est évident que les implémentations à choisir sont dans https://github.com/MieuxVoter
|
|
|
|
## Préparation
|
|
|
|
Ce projet est plutot un jouet comparé à l'existant.
|
|
L'idée ici serait d'avoir une API commune ou à minima des formats d'échanges communs.
|
|
|
|
## Cette Librairie
|
|
|
|
Le fonctionnement actuel est de fournir un fichier json contenant la votation.
|
|
Ce fichier n'a pas de connaissance des votants, juste de leur vote.
|
|
|
|
Parmi les méthodes de vote le jugement majoritaire est très récent.
|
|
C'est la description de wikipedia https://fr.wikipedia.org/wiki/Jugement_majoritaire qui a servi de référence.
|
|
|
|
(https://en.wikipedia.org/wiki/Majority_judgment)
|
|
|
|
L'implémentation est très basique et miminale :
|
|
|
|
|langage|code|
|
|
|-----|---------------------|
|
|
|python|code/parse_sample.py|
|
|
|php|code/parse_sample.php|
|
|
|
|
# Formats des votations ( json )
|
|
|
|
Le format d'entrée est un fichier json, des exemple sont sous le répertoire samples.
|
|
|
|
Le format de sortie est aussi un fichier json
|
|
|
|
## candidats
|
|
|
|
les candidats ont des clés textuelles courtes, qui peuvent être numérique ou alpjanumérique et un nom complet de candidat.
|
|
|
|
```
|
|
"A":"albert",
|
|
"B":"Beatrice",
|
|
"C":"Chloé",
|
|
"D":"Deborah",
|
|
"E":"Eric",
|
|
"F":"Francçois",
|
|
"G":"Gisèle",
|
|
"H":"Hugo"
|
|
```
|
|
|
|
## votants
|
|
|
|
Une indication du nombre de votants sert à valider que tous les votes sont bien listés. C'est une information redondante avec la liste des votes de la votation.
|
|
|
|
"decompte":10
|
|
|
|
|
|
## mentions
|
|
|
|
La sémantique des mentions est spécifiquer à chaque vote, un texte descriptif indique.
|
|
|
|
Les mentions sont ordonnées de la mention la meilleure numérotée 0 à la plus mauvaise, la dernière.
|
|
|
|
|0|Très Bien|
|
|
|1|Bien|
|
|
|2|Assez Bien|
|
|
|3|Passable|
|
|
|4|Insuffisant|
|
|
|5|A rejeter|
|
|
|
|
## votation
|
|
|
|
Pour information une date et un lien de vote sont ajoutés.
|
|
Leur contenu est textuel et laissé à l'appréciation de l'utilisateur, le champ n'est pas analysé.
|
|
|
|
```
|
|
"date":"14 juin 2025",
|
|
"lieu":"liffré",
|
|
```
|
|
|
|
### votes
|
|
|
|
le vote est une liste des vote de chaque participant.
|
|
|
|
chaque vote contient une liste de référence des candidats et le rang de leur mention.
|
|
|
|
### import
|
|
|
|
Import de fichiers csv provenant de l'application de sondage de nextcloud (polls).
|
|
|
|
Dans le sondage il est possible d'exporter les votes en csv, le fichier est à fournir au script qui va générer un json. Ce json pourra être utilisé dans le programme de vote pour obtenir le résultat.
|
|
|
|
Le programme supprime les informations des votants et ne conserve que leur vote.
|
|
|
|
Les mentions par défaut sont :
|
|
|
|
|0|yes|
|
|
|1|maybe|
|
|
|2|(empty)|
|
|
|3|no|
|
|
|
|
|
|
ATTENTION ceci ne fonctionne qu'avec une version beta de Nextcloud Poll :
|
|
|
|
git@github.com:artlog/polls.git majority_judgement_feature
|
|
|
|
Avec une confiugration du sondage spécifique où les 'Rank Options' ont été nommées, il est nécessaire de passer les noms des mentions dans l'ordre, du meilleur au plus mauvais.
|
|
|
|
voici l'exemple classique des mentions :
|
|
|
|
/!\ On remarque la différence entre fr et en.
|
|
|
|
|index|fr|en|
|
|
|-----|--|--|
|
|
|0|Très Bien|Excellent|
|
|
|1|Bien|Very Good|
|
|
|2|Assez Bien|Good|
|
|
|3|Passable|Acceptable|
|
|
|4|Insuffisant|Poor|
|
|
|5|A Rejeter|Reject|
|
|
|
|
ceci donne la commande suivante :
|
|
|
|
python3 convert_nextcloud_poll_csv.py ../samples/poll1.csv 'Très Bien' 'Bien' 'Assez Bien' 'Passable' 'Insuffisant' 'A Rejeter'
|
|
|
|
/!\ l'ordre des mention est crucial.
|
|
|
|
|
|
## Tests
|
|
|
|
Voir le README.md en anglais
|
|
|
|
# Applications de vote / sondages
|
|
|
|
|Nextcloud polls|https://github.com/nextcloud/polls|
|
|
|framadate|https://framagit.org/framasoft/framadate|
|
|
|Dudle|https://github.com/kellerben/dudle/|
|
|
|Croodle|https://github.com/jelhan/croodle|
|
|
|Rally|https://github.com/lukevella/Rallly|
|
|
|
|
intégrations
|
|
|
|
|Yunohost Opensondage|https://github.com/YunoHost-Apps/opensondage_ynh|
|
|
|
|
## Blogs existants sur le sujet
|
|
|
|
https://blog.genma.fr/?Une-alternative-a-Framadate-Opensondage-dans-Yunohost-et-Polls-dans-Nextcloud
|
|
https://opensource.com/article/22/4/open-source-alternatives-doodle-polls
|
|
|
|
## Nextcloud Polls
|
|
|
|
https://github.com/nextcloud/polls
|
|
|
|
## Framadate ?
|
|
|
|
ex: https://framadate.org
|
|
|
|
https://framagit.org/framasoft/framadate
|
|
|
|
## Yunohost Opensondage
|
|
|
|
C'est un intégration de framadate dans yunohost.
|
|
|
|
## Mieux Voter
|
|
|
|
https://app.mieuxvoter.fr/
|
|
|
|
Il est possible d'importer un csv.
|
|
|
|
https://github.com/MieuxVoter/majority-judgment-web-app
|
|
|
|
exemples sous samples/mieuxvoter |