Visualizing NTU Student Congress Vote Rate and Attendance Rate


用 R 語言視覺化台大學代選舉結果!

你也可以在我新建的medium publication上讀到這篇文章
我也用 R 架了說明整個專案的靜態網站
我也用 R 架了動態的APP

1 Introduction

  就我自己的經驗而言,身邊的同學們普遍不關心學生自治,無論是校內選舉如學生會會長與學生代表選舉,或者是選舉過後的施政與監督,因為生活重心不同,所以大家無暇或者無意願將目光放在此處。

  儘管我們都可能都曾經耳聞 Plato 說過的名言: “One of the penalties for refusing to participate in politics is that you end up being governed by your inferiors.” ,我大三時系上也有糟糕的系學會會長,但是對學生來說,學生自治對平常生活沒有太多太大的影響。

  但其實台大學生自治是非常有趣的,候選人的路線對抗選前在PTT上的黑函攻擊選舉時電子投票系統故障學代不通過學生會會長的幹部任命案學代被罷免且最後罷免成功學代會議長預算審議爭議,一連串的精彩大戲,讓我們提前預習出社會見到的台灣政壇模樣。

  台大學生自治的選舉主要分行政與立法兩個層面,行政部分除正副會長為投票選出外,幹部由會長任命,成員則由學生自主參加,並非由投票決定,因此我將重點放在台大學生的立法機關學代會,其全名為 National Taiwan University Student Congress (國立臺灣大學學生會學生代表大會),簡稱為 NTUSC ,由全體學生選舉所組成,和代表行政的學生會以及代表司法的學生法院形成三權互相制衡,其職責為代表學生爭取學生權利並監督學生會施政。

  大概一年多前有些爭議議題,像是中國新歌聲演唱會場地爭議管中閔台大校長遴選爭議,都能見到台大學代的身影,又因為媒體報導與網友關注,使得台大學代低投票率成為新聞報導的話題,也有網友批評,台大學代已經被特定政治力量所把持。

  雖然存在感很低,身旁仍有朋友或者同學前仆後繼的獻身於學生自治,每個人的目標與付出都不一樣。有積極爭取學生權益的、有想要改變環境但最終失敗的、有認真質詢以做好監督工作的、有學代缺席率高踞排行榜前三的、有投入選委工作的、有只為了增添履歷頭銜的,自然也有有成天訕笑學生自治,可是卻什麼事情都不做的,也有閉上嘴巴咬牙向前,踏踏實實的企圖做出改變的。

  我對行政、立法、司法都沒有太大的興趣,既不喜歡參加活動,也不是很有動力監督學校,但還是想從適合的角度出發,貢獻自己的能力於學生自治。後來因緣際會接觸到 open data 的理念,當下便覺得或許能夠從開放資料/揭露資料開始,若同學們能夠以簡單的方式得知學生自治團體在做些什麼,對其有些基本的認識之後,也比較有可能產生興趣,進而深化參與。因此,我想要從開放資料的角度出發,讓台大學生可以看到關於台大學生代表的出席資料,再加上簡單的圖表與表格,對資料的全貌有更多認識。

2 Goal and Output

  學生自治有多種實踐方式,擔任學代是眾多方法之中非常好的一種,但也有其他很好的方式,參與系學會、院學會、性平會學生委員等,都可以為身旁的環境帶來改變。

  對未曾接觸實際情況的同學來說,學代可能是無法產生影響的職位,也有可能是充滿改變可能的職位,然而在認識學代業務後,有人選擇背起責任將任期內的工作完成,也有人選擇缺席大半任期,因此,我想要透過揭露學代出席率,達成三個目標。在資訊充分揭露後,候選人能夠認識學代出席的生態,學代本身也更能夠和身旁其他同事比較,公眾也較能監督出席。

  • 影響候選人: 讓候選人能夠更好評估自身情況
  • 影響學代: 讓學代掌握自身出席情況
  • 影響公眾: 讓公眾更有意願關注學代

  我希望能夠影響候選人、學代、公眾,而要讓上述三者能夠更好的接近使用資料,具體手段如下:

  • 原始資料: 讓大家可以直接下載原始資料與code
  • 視覺化: 讓大家可以快速瞭解這份資料
  • 延伸性: 建立起固定工作流程, 並使其成為可重複性研究, 並引入更多外部資料

  因為這份報告其實是一年多前上課時的課堂專案,所以其實有初步成果了,這次主要是整理整個工作流程,修正ggplot2畫出的圖,再加入這篇短文:

  • 短文: 讓大家可以瞭解五個學期間學代投票率與參與率的概觀
  • 靜態網站: 讓大家可以瞭解整個專案的流程
  • 動態的APP: 讓大家可以下載處理好的原始資料並看到互動式圖表

  下面我會介紹一下架出靜態網站與 APP 的方法,再說明 APP 要怎麼使用,再來才會進到選舉與出席相關的圖表分析。

3 Static Site and Shiny APP

3.1 Static Site

  我的靜態網頁連結。這個網站是用 Rmarkdown 架設的,它背後的原理很簡單,就是寫好一個索引的 Rmarkdown 文件,其他每個分頁也都是一個 Rmarkdown 文件,分別轉成 html 之後再拼起來就好。你可能不知道 markdown 是什麼,它是一種輕量的標記語言,可以直接看markdown風格了解他的長相,markdown 方便寫好編排,又能夠跨越多個平台,並且方便轉成其他格式,所以很多寫程式的人喜歡用,而 Rmarkdown 算是 markdown 的某種變種,但它可以做到太多事情了!你可以看一下 Rmarkdown 的官網了解它有什麼應用,但如果你不想看的話也沒關係,因為我會稍微說明一下。

  簡單來說,Rmarkdown 就是在 RStudio 裡面寫文件,寫好的檔案可以輸出成 word, PDF, html 等格式,它還可以拿來做簡報架網站、進階一點的出書架部落格。對學生來說,Rmarkdown 最大的好處是可以把 code 整合到文件當中,假設你要交一個統計作業,可能會把 R 跑的結果貼到 word 裡面,如果檢查的時候發現有個變數數值弄錯了,修改後所有結果又要重貼很麻煩, Rmarkdown 的好處是它只記錄你的 code,譬如說文件內容是 x * 3,如果 x = 1,那他就會印出 3,如果 x = 3,那他就會印出 9 了。這個例子聽起來不怎麼樣,修改一下就好,但如果你的作業裡面 x 出現在二十個不同的地方,這時候 Rmarkdown 就很有價值了。

靜態網站呈現

Figure 3.1: 靜態網站呈現

  再回到這個靜態網頁,我分了介紹、專案範圍、資料處理、資料視覺化、失敗模型建立、結果傳達、Shiny頁面與感謝,每個分頁對應到的內容就是我做這個專案的每一個步驟,我參考的是 R for data Science 的流程。基本上點進網頁看就知道再幹嘛了,Shiny APP 比較複雜需要說明。   
R for data Science workflow

Figure 3.2: R for data Science workflow

3.2 Shiny APP

  我的 Shiny APP 連結。Shiny 是 RStudio 公司旗下的產品,可以到他們的官網看相關的應用,他的強大之處在於使用者就算不懂前端語法,也能夠打造出互動式的網站應用。對於非工程師來說,除了上面提過的靜態網頁以外,如果想要呈現動態的圖表,讓使用者可以選擇自己想看的欄位或者篩選特定的值,就可以使用 Shiny。

  再回到這個 Shiny APP,它的目的是讓使用者可以快速的了解台大學代出席率的情況,並且分為五個學期分別的資料,以及一個五學期綜合的 summary。你可以自行選擇你想看的欄位,譬如以學院為主體或是以學系為主體的出席率,也可以用勾選的方式過濾你想看或不想看的系所,底下的表格提供查詢與排序。

可以選擇自己想看的欄位並篩選

Figure 3.3: 可以選擇自己想看的欄位並篩選

  我也製作了不同形式的圖表,譬如說長條圖、折線圖、散點圖等,希望這些形式能夠做到更好的敘事。

折線圖呈現長期趨勢

Figure 3.4: 折線圖呈現長期趨勢

  最後,在 summary 頁面有個 download data 的分頁,你可以到這個分頁下載原始資料,也可以在這邊查詢五個學期的學代出席紀錄。

summary 分頁的下載頁面

Figure 3.5: summary 分頁的下載頁面

  上面的靜態網頁與這個 Shiny APP 是以開放資料的精神製作的,但離資料新聞還有點距離,因為它只有視覺呈現而沒有任何洞見。我期許自己以後能夠搭更大規模的儀表板以及技術更深的互動圖表,並增加一些屬於自己的詮釋,也因此才有底下偏向資料新聞的嘗試,除了資訊圖表以外也加上了自己的一些解讀。

4 Visualization

  我將底下的圖表切成兩塊,架構如下圖所示,分成學代選舉與學代出席,除了依照各自有的變數拆分數據,像是不同學院的投票率和出席人數,以及不同年級的學代出席率。還有選舉資料與出席資料之間的關係,像是得票率與出席率的關係。  

我的流程筆記

Figure 4.1: 我的流程筆記

  底下是簡單的幾張圖表,希望能夠讓讀者可以掌握台大學生在學代會的投票狀況,以及學代選上後實際的出席情形。另外因為考慮到研究生的特殊性質,譬如說系所和年級和大學部同學相同,但實際生活與求學環境相去甚遠,過濾掉了學代中的研究生,僅留下大學部學代,所以比對原始資料的時候會覺得跟結果有所差異。

4.1 Overview

term won lost all
104-1 43 3 46
104-2 36 10 46
105-1 26 2 28
105-2 49 21 70
106-1 45 8 53
  上面的表格中呈現了不同學期的學代選舉狀況,其中104-1指的是選舉出104上學期開始上任的學代,因此實際投票時間是103-2,由表中可見,在台大想要成為學代並不困難。
  
term 出席人次 未請假缺席人次 其他原因缺席人次 請假缺席人次
104-1 344 215 0 71
104-2 334 197 0 41
105-1 289 114 3 64
105-2 393 143 38 66
106-1 397 170 40 123
  
term 學生代表人數 出席率
104-1 70 54.60%
104-2 52 58.39%
105-1 47 61.49%
105-2 64 61.41%
106-1 73 54.38%

  上面的表格中則呈現了不同學期的學代出席狀況,學代任期有兩個學期,譬如105上學期到105下學期。看完基本的overview後,馬上進到更詳盡的拆解與分析。

4.2 Student Congress Election Vote Rate

台大學代選舉各學院投票率

Figure 4.2: 台大學代選舉各學院投票率

  這張圖表呈現了各學院的投票率,從圖表可以看出,不同學院的投票率(turnout)有很大的差距,在衡量政治參與時,投票率常常是一個重要指標,我們可以發現刻板印象中喜歡關心政治的法學院與社科院的投票率名列前茅,而工學院與電資學院則敬陪末座,而生命科學院投票率僅有兩個學期的資料點,因為做比較的五學期當中,他們只有兩個學期有候選人參選。

台大學代選舉各學院合格選民數與投票率分布

Figure 4.3: 台大學代選舉各學院合格選民數與投票率分布

  這張圖表呈現了各學院合格選民數與投票率分布,再依照該學院(也就是選區)的選舉是否為同額競選分顏色,藍色代表候選人數目大過應選人數目,紅色反之。跟上圖類似,我們可以發現社科院與法學院大多數為超額競選,此外法學院人數不多但投票率高,其餘各學院則以不足額選舉為主。

台大學代選舉各學院落選與選上人數分布

Figure 4.4: 台大學代選舉各學院落選與選上人數分布

  這張圖表呈現了各學院落選與選上人數分布,紅色代表落選,藍色代表選上,另外再依照該學院(也就是選區)的選舉是否為同額競選加上框線,黑框候選人數目大過應選人數目,白框反之。我們可以看出在台大當選學代並不難,但這很看候選人所在的選區,像是競爭激烈的社科院與法學院,因為政治參與高候選人多,因此相對並不容易當選。

  另外值得一提的是,倘若某選區選舉為不足額競選,則選民可以投反對票,所以才會在圖上看到不足額競選卻落選的情形,而不足額選舉還落選,要不是人緣真的太差,要不然就是之前有發生過某些政治醜聞,對此有興趣的可以再找圈內人士研究。

4.3 Student Congress Members Attendance Rate

台大學代各學院學代會議出席率

Figure 4.5: 台大學代各學院學代會議出席率

  這張圖表呈現了各學院學生代表的學代會議出席率,從圖表可以清楚的看出,法律學院和社科院不只投票率高,出席率也較高,而排名第三的則是文學院。

  乍看之下,台大的文組同學們似乎沒有忘記身上背負的社會責任,積極的參與政治,並在選上學代後負起責任出席會議,然而,若將目光移到圖表下方,就會見到也屬於文組的管理學院,管院學代的出席率是全台大最低的,我為這張圖表下了一個副標:“College of Management Congress Members Preserve Their Time for Internship instead of Assembly”,希望我的英文夠精準。

台大學代各年級學代會議出席率

Figure 4.6: 台大學代各年級學代會議出席率

  這張圖表呈現了各學院學生代表的學代會議出席率,從圖表無法輕易的看出不同年級間出席率的差異,很難下結論說高年級比較容易或者比較不容易出席學代會議。一年級學代人數相對較少,只有三學期曾有一年級學代,而 super senior 指的則是大四以上的延畢生。

台大學代當選時獲票率與學代會議出席率分布

Figure 4.7: 台大學代當選時獲票率與學代會議出席率分布

  這張圖表呈現了當選時獲票率與學代會議出席率分布,這裡當選時獲票率是用該學代獲得的支持票數除以該學院獲得的總票數,會用這個指標是因為考慮到不同學院人數有所差異,再加上前述的足額不足額選舉議題,希望找一個類似正規化後的指標。

  從圖表中可以看到兩件事情,第一是平均而言,從競爭較為激烈的足額選舉中獲勝的學代相對於不足額選舉的學代出席率較高,第二則是獲票率與出席率看起來有些微的正相關。這符合直覺的判斷,有競爭的選舉勝利者以及高得票者會更有壓力也使命感。

5 Conclusion

5.1 Recap and additional work for future

  從上面的圖表中,可以得到這樣的小結:

  • 不同學院的投票率差距很大,法學院與社科學院最高
  • 法學院雖然人少,但投票率很高高
  • 參選學代很難落選,但如果是參政度高的學院落選機會較大
  • 在非競爭選舉的學院如工學院參選仍有機會落選
  • 法學院與社科學院和文學院的學代會議出席率最高,管理學院最低
  • 法學院與社科學院和文學院的學代會議出席率最高,管理學院最低
  • 不同年級的學代會議出席率之間沒有明顯差異
  • 得票數較高與非同額選舉的候選人平均出席率較高

  我寫了這篇簡單的分析文,並分別做了描述整個專案的靜態網站與互動式的動態網站,接下來要做的事情有兩個,第一個是把所有code整理完後上傳,包含讀取資料、清理資料、分析資料、視覺化等等,第二的則是看有沒有其他後續的應用或是串其他資料,再做出更有趣的分析。之後預計會把code上傳到這裡

5.2 A short review

  在這篇文章當中,我利用 R 語言分析了橫跨五學期的學代選舉與出席資料,再以資訊圖表視覺化呈現結果,另外以 Rmarkdown 建立了一個靜態網頁,並使用 Shiny 打造了一個動態的 APP 。因為原始資料是自己利用程式與手動輸入的,若有疏漏與建議都歡迎指正,希望你會喜歡!特別感謝水豚君 Capy 協助我處理 github page 的建置,蝦慈與臺元給我的幫助,還有老師當年的指導。

陪我獨自在教研奮戰的電腦

Figure 5.1: 陪我獨自在教研奮戰的電腦

Dennis Tseng
Dennis Tseng
An analyst & R lover

Use data to solve problems, tell stories, and change the world