LeRiton a écrit :
Bonjour,
Deux questions assez distinctes à propos de l'implémentation d'un système de questionnaire.
Niveau représentation des données en bases, je pars sur un truc très simple, à base d'une colonne par réponse. Concernant le type des champs, ENUM si supporté pour les questions à choix multiples, BOOL pour un oui / non, INTEGER pour une note sur 20...
|
Je pense que tu veux dire une ligne par réponse, d'ou la réponse de TotalRecall: une colonne par réponse ca serait pas une bonne idée du tout (en fait, ca serait même impossible).
LeRiton a écrit :
J'ai vu quelques schémas où les données de réponses à un questionnaire données étaient disjointes dans plusieurs tables, mais je trouve ça bloaté (DatabaseAnswers 81 à 85 notamment).
|
Ce n'est pas bloaté, la présence de plusieurs tables permet de faire du relationnel: si tu dois choisir parmis 150 destinations de voyage, par exemple, il est beaucoup plus interessant de mettre ces 150 destinations dans une table différente, avec chacune un identifiant; et de n'enregistrer que l'identifiant choisi pour chaque réponse. Ca à donc le meme effet qu'un ENUM, sauf que tu peux modifier les données (supprimer des destinations, en ajouter, corriger des fautes d'orthographe ... ) et partager cette table avec d'autres bouts de ton application (un autre sondage qui demande la destination peut aussi utiliser cette table, par exemple). Enfin, l'intéret le plus évident, c'est que tu peux avoir associé des infos spécifiques avec chaque élément(un prix et un pays pour chaque destination par exemple) et utiliser le lien dans un autre bout de l'appli (par exemple, donner le prix du trajet en fonction de la destination, une fois le sondage validé)
En gros, si la réponse est un choix entre < 10 éléments fixes, qui ne bougeront jamais (individuellement et en groupe) et ne sont liés à aucune autre donnée que leur "label"; tu peux utiliser un enum. Si toutes ces conditions ne sont pas remplies, il est préférable d'utiliser une table.
LeRiton a écrit :
C'est un cas somme toute basique, mais je me demande si je ne rate pas quelque chose.
La vraie question de ce topac est néanmoins le retraitement des données. Je sais qu'il existe des méthodes pour déterminer si un sondage (l'ensemble des réponses données par un "sondé" ) est pertinent, ou inversement invalider celui-ci, mais je ne trouve pas d'algo ni de ressources détaillant ces procédés. L'analyse statistique de ce type de données un métier à part entière bien évidemment, mais quelques filtres simples pourraient déjà améliorer la qualité générale du système.
Merci d'avance pour vos retours ![[:dawa] [:dawa]](https://forum-images.hardware.fr/images/perso/dawa.gif)
|
A priori, le "retraitement" des données dépend du type de données.
Cependant, tu peux commencer par appliquer un poids à chaque champ suivant son importance pour le traitement et ne prendre en compte que les questionnaires dont le poids est suffisament important.
Par exemple, je suis encore sur mon formulaire de choix de destination pour une agence de voyage.
Imaginons qu'il ait les champs: nom, prénom, mail, adresse, téléphone, destination préférée pour l'été, destination préférée pour l'hiver, connaissez vous l'agence, comment connaissez vous l'agence.
Si je cherche à prospecter des clients interessés, je met des poids sur les infos de contact (si non rempli, la valeur du champ*poids = 0, sinon = poids) et je ne prend que ceux qui ont rempli au moins 3 champs, par exemple.
Maintenant, si je cherche à savoir comment est perçue l'agence, je mettrai les poids sur la partie commentaire.
Si tu as plusieurs champs avec des notations, par exemple le retour d'un client sur un service, tu peux également utiliser ces poids pour déterminer si l'impression générale est plutot positive ou négative (en multipliant chaque note par le poids associé), puis en n'effectuant l'analyse que sur les types de réponses qui t'interessent (connaitre ce qui ne va vraiment pas => analyse sur les impressions négatives).
En règle générale, il ne sert à rien de "refuser" une réponse. Il est plus utile de mettre en place les règles de filtrage au moment de l'analyse des données. En effet, il est plus grave d'écarter des réponses dont on ne voit pas l'intérêt immédiatement que d'utiliser un peu de puissance de calcul au moment de la récupération des résultats. Ne serait-ce que parce que cela permet d'obtenir plusieurs grilles de lectures et analyse sur le même sondage et de les affiner en fonction des besoins (si un filtre est trop restrictif ou pas assez, il faut pouvoir le corriger, et ce n'est pas faisable avant d'avoir eu plusieurs réponses). Imagine si tu t'aperçois après coup qu'un champ que tu considérais très important pour considérer la réponse sérieuse n'est pas remplissable à cause d'un bug: toutes les réponses entrées jusque là et écartées par erreur sont perdues et les gens ne viendront jamais les remettre.
Enfin, il faut que le sondage soit représentatif: après filtrage, affiche toujours le nombre de résultats avant d'afficher les statistiques. Au dessous d'un nombre minimum de réponses, le sondage n'est plus représentatif. Je ne connais pas les valeurs exactes et cela dépend du groupe sondé mais typiquement les sondages INSEE se font sur 1000 personnes et sont très représentatif (bon c'est 1000 personnes en respectant en gros la répartition par age, métier ... représentatifs de la population francaise).