Nextcloud poll csv import
This commit is contained in:
116
LISEZMOI.md
Normal file
116
LISEZMOI.md
Normal file
@@ -0,0 +1,116 @@
|
||||
# Libraire de calcul Jugement majoritaire
|
||||
|
||||
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émentaion 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.
|
||||
|
||||
|
||||
72
README.md
72
README.md
@@ -1,71 +1,7 @@
|
||||
# Libraire de calcul Jugement majoritaire
|
||||
# Library to deliver a poll result with majority judgement algorithm
|
||||
|
||||
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
|
||||
|
||||
(https://en.wikipedia.org/wiki/Majority_judgment)
|
||||
|
||||
L'implémentaion 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 à cahque 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.
|
||||
Sorry for inconvenience but currently only french version is available.
|
||||
|
||||
LISEZMOI.md
|
||||
4
code/check_csv.sh
Executable file
4
code/check_csv.sh
Executable file
@@ -0,0 +1,4 @@
|
||||
#!/bin/bash
|
||||
|
||||
python3 convert_nextcloud_poll_csv.py ../samples/poll1.csv 'Très Bien' 'Bien' 'Assez Bien' 'Passable' 'Insuffisant' 'A Rejeter'
|
||||
|
||||
67
code/convert_nextcloud_poll_csv.py
Normal file
67
code/convert_nextcloud_poll_csv.py
Normal file
@@ -0,0 +1,67 @@
|
||||
import json
|
||||
import sys
|
||||
import csv
|
||||
|
||||
# using non modified nextcloud standard text poll
|
||||
nom_mentions=['yes','maybe','','no']
|
||||
|
||||
if len(sys.argv) > 1:
|
||||
csv_file=sys.argv[1]
|
||||
if len(sys.argv) > 2:
|
||||
nom_mentions=[]
|
||||
for i in range(2,len(sys.argv)):
|
||||
nom_mentions.append(sys.argv[i])
|
||||
else:
|
||||
print('missing file argument')
|
||||
exit(1)
|
||||
|
||||
def mention_index(mention):
|
||||
return nom_mentions.index(mention)
|
||||
|
||||
verbose=False
|
||||
|
||||
mentions=len(nom_mentions)
|
||||
default_mention=mentions-1
|
||||
|
||||
warnings=[]
|
||||
candidats={}
|
||||
candidats_alias=[]
|
||||
a_vote={}
|
||||
votes=[]
|
||||
with open(csv_file,'r') as csv_fd:
|
||||
vote_reader = csv.reader(csv_fd, delimiter=',')
|
||||
for row in vote_reader:
|
||||
if len(candidats_alias) == 0:
|
||||
for i in range(2,len(row)):
|
||||
candidat_alias=row[i]
|
||||
candidats_alias.append(candidat_alias)
|
||||
# no other name given
|
||||
if not candidat_alias in candidats:
|
||||
candidats[candidat_alias]=candidat_alias
|
||||
else:
|
||||
# check if not duplicated
|
||||
participant=row[0]
|
||||
if participant in a_vote:
|
||||
warnings.append("Mutliple vote " + participant + " no record")
|
||||
continue
|
||||
a_vote[participant]=row[1]
|
||||
vote={}
|
||||
for i in range(2,len(row)):
|
||||
candidat_index=i-2
|
||||
candidat_alias=candidats_alias[candidat_index]
|
||||
mention=row[i]
|
||||
vote[candidat_alias]=mention_index(mention)
|
||||
votes.append(vote)
|
||||
|
||||
|
||||
default_vote={}
|
||||
|
||||
if verbose:
|
||||
print(','.join(candidats))
|
||||
print(','.join(nom_mentions))
|
||||
|
||||
result = {'candidats':candidats,'votants':{'decompte':len(a_vote)},'mentions':nom_mentions,'votation':{'votes':votes}}
|
||||
print(json.dumps(result))
|
||||
|
||||
sys.exit(0)
|
||||
|
||||
@@ -38,7 +38,7 @@ for candidat in candidats:
|
||||
collect={}
|
||||
for vote in votes:
|
||||
|
||||
# missing candidat in vote is the worts one
|
||||
# missing candidat in vote picks the worse one
|
||||
for candidat in candidats:
|
||||
if not candidat in vote:
|
||||
vote[candidat]=default_mention
|
||||
|
||||
@@ -1,13 +1,31 @@
|
||||
|
||||
Recherche des projets de code autours du jugement majoritaire sur githbu
|
||||
# contexte
|
||||
|
||||
Choix des noms de mentions
|
||||
|
||||
|
||||
https://fr.wikipedia.org/wiki/Jugement_majoritaire
|
||||
vs
|
||||
https://en.wikipedia.org/wiki/Jugement_majoritaire
|
||||
|
||||
|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|
|
||||
|
||||
|
||||
# Recherche des projets de code autours du jugement majoritaire sur githbu
|
||||
|
||||
|source|info|interet|
|
||||
|------------------|-----------------------------|-------------|
|
||||
|https://github.com/AlexJade23/JugementMajoritaire|RAS VIDE|1/20|
|
||||
|https://github.com/ostix360/JugementMajoritaire|Où est l'algo ?|2/20|
|
||||
|https://github.com/CitoyensDeDemain/JugementMajoritaire|Il y a un algo, mais pas de format de donnée, données hardcodées / API et pas de procédure d'install|11/20|
|
||||
|
||||
|
||||
|
|
||||
# david chavalarias
|
||||
|
||||
https://github.com/davidchavalarias/jugement-majoritaire
|
||||
|
||||
2
samples/poll1.csv
Normal file
2
samples/poll1.csv
Normal file
@@ -0,0 +1,2 @@
|
||||
Participants,Adresse e-mail,A,B,C
|
||||
admin,,Très Bien,Bien,Assez Bien
|
||||
|
Reference in New Issue
Block a user