Faculty Development: where to start?
大学のFDアンケート結果を視覚化したら、「教員実施」関連の質問で低く見えるのは 「教員の板書(またはPPT・配布資料など)は読みやすかった(見やすかった)」
「板書」と「PPT」と 「配布資料」はそろぞれ実施と評価が違う可能性があるのでもっと詳しく調べる価値があるかもしれない。 プレゼンや配布資料が課題のなら、情報デザインの能力開発を目指すばいいかもしれない。
データ表から意味を取るのが難しいようですが、アンケート結果の視覚化するのが能力開発に繋げることができる。基礎プログラミングとデータ視覚化の授業を作ってから、いろいろな学生(または先生)が自らアンケートを作成と実施、分析できるようになるかもしれない。FDも参加型、 “Nothing About Us Without Us”の理念を行かして 大学の「民衆化」(fn:1) の時代に相応しい動きになります。
DrRacketで視覚化を試してみたい方がいるのなら、下にコードが貼ってある。
前の試し:https://write.as/bs2lr/facdev-questionnaire-data-vis
- 違うデータで視覚化とその意義を考えた投稿
- https://write.as/bs2lr/plot-picts-and-pip-lines-with-arrows-and-bitmaps > Getting information from a table is like extracting sunlight from a cucumber. (Farquhar & Farquhar, 1891) quoted by Howard Wainer
- https://write.as/bs2lr/racket-plot-minamata-fishery-decline-1950s
- 違うデータで視覚化とその意義を考えた投稿
(fn:1) アメリカ合衆国では第二次戦争後(1945)、 高校や大学の民衆化のことを考えるために、ハーバード大学で「General Education in a Free Society」委員会があった。報告の本が興味深いです:
- https://archive.org/details/generaleducation013127mbp/page/n6 「絵で見る英語」を作成したI.A. Richardsはその委員会の中心的な人物の一人だった。「絵で見る英語 Book 3」(1957) は一千語の英語で委員会の勧めを実施しているじゃないかと私は思います。 Book 3の内容は南九州大学の図書館にある50年代のエッセー集型大学教科書「Toward liberal education 」の内容と似ています。 今のメディア環境で育てられた学生より、50年代の大学生はまだ読書力、語彙力があったはず。 その教養と読書力を必要とするエッセー集の内容を一千語の英語(EP3)で触れるようにしたI.A. Richards先生がすごいと思います。 https://ruhrspora.de/tags/ep3
データ視覚化のコード
#lang racket
(define my-home (find-system-path 'home-dir))
(define learning-directory "Learning-Racket")
(define facdev-directory "FD")
;; ~/home-directory/Learning-Racket/FD"
(define data-file "DG-2018-2-Frequencies.csv")
(define Q-ja-file "SetsuMon.csv")
;; 出席,学生取組,私はこの授業によく出席した
;; 発言,学生取組,私は授業内容について質問や発言した
;; 取組,学生取組,私はこの科目に積極的に取り組んだ予習と復習した)
;; 聞取,教員実施,教員の声は聞き取りやすかった。
;; 資料,教員実施,教員の板書(またはPPT・配布資料など)は読みやすかった(見やすかった)
;; 時刻,教員実施,教員は授業の開始・終了の時刻を守ろうとしていた
;; 反応,教員実施,教員は学生の反応を確かめながら授業を進めていた
;; 熱意,教員実施,教員は熱意を持って授業をしていた
;; 理解,総合評価,私はこの授業内容を理解できた
;; 役立,総合評価,私はこの授業で学んだ内容はなんらかの形で将来的に役立つと感じた
;; 満足,総合評価,私は総合的に判断してこの授業で満足が得られた
(define KaiTou-file "KaiTou.csv")
;; 5, 特に,特にそう思う
;; 4, 多少,多少そう思う
;; 3, どちも,どちらともいえない
;; 2, あまり,あまりそう思わない
;; 1, 全く,全くそう思わない
(define working-directory (build-path my-home learning-directory facdev-directory))
(current-directory-for-user working-directory)
(define data-path (build-path working-directory data-file))
(define get-data
(lambda (pth)
(let* ((inp (open-input-file pth))
(lines (port->lines inp)))
(close-input-port inp)
(map (lambda (s) (string-split
(regexp-replace* "\"" s "")
","))
lines))))
(define fd-data (get-data data-path))
(define info-data (list (first fd-data) (second fd-data)))
(define data-labels (cddr fd-data))
(define questions-ja (get-data (build-path working-directory Q-ja-file)))
(define kaitou-ja (get-data (build-path working-directory KaiTou-file)))
(define (transpose-table tbl)
(define (helper tbl dict) ; dictionary
(cond
((empty? (first tbl)) (reverse dict))
(#t (helper (map cdr tbl) (cons (cons (first (first tbl))
(map first (cdr tbl)))
dict)))))
(helper tbl '()))
;; from info-lines generate plot-title and file-name
(define info-dict (transpose-table info-data))
(define (plot-title-join dict)
(define (title-part entry)
(string-join entry ":"))
(map title-part dict))
(define plot-title-string
(string-join (plot-title-join info-dict)
","))
(define (filename-join dict)
(string-join
(map car (dict-values dict))
"-"))
(define plot-file-name
(filename-join info-dict))
(define (reorder-responses-ascending dat-labs) ;; data-labels
(map (lambda (row) (cons (car row) (reverse (cdr row)))) dat-labs))
(define ascending-data-labels
(reorder-responses-ascending data-labels))
(define (get-response-number row n)
(string->number (list-ref row n)))
(define (sum-responses row n m)
(+ (get-response-number row n)(get-response-number row m)))
(define (positives-sum row)
(sum-responses row 4 5))
(define (negatives-sum row)
(sum-responses row 1 2))
(require plot)
(require plot/utils)
;; (define neutral-response 3)
(define (neutral-line row y)
(let* ((neutral-label (list-ref row 3))
(neutral-number (string->number neutral-label))
(half (/ neutral-number 2)))
(list
(hrule y (- half) half #:color "black")
(point-label (vector 0 y) (string-append "3:" neutral-label)
#:anchor 'bottom #:point-size 5 #:size 9))))
(define (positive-line row y)
(let* ((4-label (list-ref row 4))
(4-number (string->number 4-label))
(5-label (list-ref row 5))
(5-number (string->number 5-label))
(4n5 (+ 4-number 5-number)))
(list
(lines (list(vector 0 y) (vector 4-number y)) #:color "green")
(lines (list (vector 4-number y) (vector 4n5 y)) #:color "green" #:width 3)
(points (list (vector 4-number y)) #:color "black" #:sym 'fullcircle #:size 5)
(point-label (vector 4n5 y) (string-append "4:" 4-label "," "5:" 5-label)
#:anchor 'bottom #:point-size 5))))
(define (negative-line row y)
(let* ((1-label (list-ref row 1))
(1-number (string->number 1-label))
(2-label (list-ref row 2))
(2-number (string->number 2-label))
(1n2 (+ 1-number 2-number)))
(list
(point-label (vector (- 1n2) y) (string-append "1:" 1-label "," "2:" 2-label)
#:anchor 'bottom #:point-size 2)
(lines (list (vector (- 1n2) y) (vector (- 2-number) y)) #:color "blue" #:width 3)
(lines (list (vector (- 2-number) y) (vector 0 y)) #:color "blue")
(points (list (vector 0 y)) #:color "black" #:sym 'fullcircle #:size 5)
)))
(define (place-question key dict y)
(let* ((d-ref (dict-ref dict key))
(type (first d-ref))
(question (second d-ref))
(label (string-append type ":" question))
(y-offset .3)
(q-y (+ y y-offset)))positives-sum
(point-label (vector 0 q-y) label #:size 14 #:point-size 0)))
(define (plot-a-question row dict y)
(list
(neutral-line row (- y .25))
(positive-line row (- y .05))
(negative-line row (- y .05))
(place-question (first row) dict y)
))
(define (plot-questions data dict)
(define (helper rows y plots)
(cond
((empty? rows) plots)
(#t (helper (cdr rows) (add1 y)
(cons (plot-a-question (car rows) dict y) plots)))))
(helper data 1 '()))
(require pict)
(define visu-pict (blank 1000 1000))
(parameterize
((plot-title plot-title-string)
(plot-x-axis? #f)
(plot-x-label #f)
(plot-x-far-axis? #f)
(plot-y-axis? #f)
(plot-y-label #f)
(plot-y-far-axis? #f)
(plot-width 1000)
(plot-height 1000))
(set! visu-pict
(plot-pict
(plot-questions
(sort (cdr ascending-data-labels) #:key positives-sum >)
questions-ja)
#:x-min -600 #:x-max 2500
#:y-min 0 #:y-max 11.5
)))
(define (pict-line base x-start y-start x-end y-end
#:clr (clr "gray") #:sze (sze 10))
(define x-diff (- x-end x-start))
(define y-diff (- y-end y-start))
(pin-over base x-start y-start
(colorize
(pip-line x-diff y-diff sze) clr)))
(define (pict-line-arrow base x-start y-start x-end y-end
#:clr (clr "gray") #:sze (sze 10))
(define x-diff (- x-end x-start))
(define y-diff (- y-end y-start))
(pin-over base x-start y-start
(colorize
(pip-arrow-line x-diff y-diff sze) clr)))
(define (pict-line-arrows base x-start y-start x-end y-end
#:clr (clr "gray") #:sze (sze 10))
(define x-diff (- x-end x-start))
(define y-diff (- y-end y-start))
(pin-over base x-start y-start
(colorize
(pip-arrows-line x-diff y-diff sze) clr)))
(send
(pict->bitmap
(pin-over
(pict-line
(pict-line-arrow
(pin-over visu-pict
750 15
(table 3 (map (lambda (x) (text x (cons 'italic 'roman ) 16 ))
(flatten kaitou-ja))
lc-superimpose cc-superimpose
10 5))
25 290 189 290 #:clr "red")
346 310 591 310 #:clr "red")
500 260 (colorize ;345
(text "教員はどんな能力開発すればいいか、ここから調べる?" (cons 'italic'roman) 20)
"red"))
)
save-file (build-path (current-directory-for-user)
"2018Koki-DG-plot-pict-20190704-2.png")
'png)
#DrRacket #DataVisualization #FD #facdev #Questionnaires #アンケート #教員開発 #情報デザイン