Add functions to parse questionnaires for assessments
This commit is contained in:
parent
fae94a6af9
commit
aaadcc7463
1 changed files with 37 additions and 6 deletions
|
@ -16,7 +16,8 @@
|
|||
#:calculate-statistics
|
||||
#:average)
|
||||
(:export #:assessment-results-html
|
||||
#:parse-assessments))
|
||||
#:parse-assessments
|
||||
#:parse-questionnaires))
|
||||
|
||||
(in-package :ml-qmetrics/assessment)
|
||||
|
||||
|
@ -112,11 +113,14 @@ ENTRY: Entry from a response."
|
|||
(append (getf acc cat-name) value))
|
||||
acc))
|
||||
|
||||
(defun create-assessment (type responses)
|
||||
(ecase type
|
||||
(:visawi (make-instance 'visawi-assessment :responses responses))
|
||||
(:sus (make-instance 'sus-assessment :responses responses))
|
||||
(:nps (make-instance 'nps-assessment :responses responses))))
|
||||
(defun create-assessment (name responses)
|
||||
(cond ((string= name "VISAWI")
|
||||
(make-instance 'visawi-assessment :responses responses))
|
||||
((string= name "SUS")
|
||||
(make-instance 'sus-assessment :responses responses))
|
||||
((string= name "NPS")
|
||||
(make-instance 'nps-assessment :responses responses))
|
||||
(t nil)))
|
||||
|
||||
(defun parse-assessments (categorized-responses)
|
||||
(loop for (type data) on categorized-responses by #'cddr
|
||||
|
@ -127,6 +131,33 @@ ENTRY: Entry from a response."
|
|||
(mapcar entry-fn responses)
|
||||
:initial-value '()))
|
||||
|
||||
(defun extract-names (questionnaires)
|
||||
"Extract unique names from a list of questionnaires."
|
||||
(remove-duplicates (mapcar (lambda (q)
|
||||
(getf q :name))
|
||||
questionnaires)
|
||||
:test #'string=))
|
||||
|
||||
(defun filter-questionnaires (questionnaires name)
|
||||
"Return a list of questionnaires with the given name."
|
||||
(remove-if-not (lambda (q)
|
||||
(string= (getf q :name) name))
|
||||
questionnaires))
|
||||
|
||||
(defun extract-data (questionnaire)
|
||||
"Extract timestamp-created and post-params from a questionnaire."
|
||||
(cons (getf questionnaire :timestamp-created)
|
||||
(getf questionnaire :post-params)))
|
||||
|
||||
(defun parse-questionnaires (questionnaires)
|
||||
"Parse a list of questionnaires and create assessments for each unique name."
|
||||
(let ((names (extract-names questionnaires)))
|
||||
(mapcar (lambda (name)
|
||||
(create-assessment (string-upcase name)
|
||||
(mapcar #'extract-data
|
||||
(filter-questionnaires questionnaires name))))
|
||||
names)))
|
||||
|
||||
(defun average-score-per-group (entry-fn responses)
|
||||
(let* ((values-per-group (aggregate-values-per-group entry-fn responses))
|
||||
(average-scores (loop for (category values) on values-per-group by #'cddr
|
||||
|
|
Loading…
Add table
Reference in a new issue