當前位置:
首頁 > 新聞 > 中了數據可視化的毒:BBC如何使用R語言繪製數據圖表?

中了數據可視化的毒:BBC如何使用R語言繪製數據圖表?

生動的圖表能極大地幫助呈現更有信息量的新聞。BBC(英國廣播公司)近日分享了他們的視覺與數據新聞團隊使用 R 語言繪製新聞圖表的經驗。為了簡化流程,他們創建了一個 bbplot 軟體包和一份參考手冊,並也已將它們開源。

中了數據可視化的毒:BBC如何使用R語言繪製數據圖表?

過去一年裡,BBC 視覺與數據新聞(Visual and Data Journalism)團隊的數據記者已經從根本上改變了他們繪製發表在 BBC 新聞網站上的數據圖表的方式。我們將在這篇文章中介紹我們如何以及為何要使用 R 語言的 ggplot2 軟體包來創建可直接使用的圖表,我們也會給出我們的流程和代碼以及分享我們一路上所學到的東西。

BBC 視覺與數據新聞團隊的數據記者已經使用 R 來執行複雜和可重複的數據分析以及構建原型一些時日了。

比如,在獲過獎的 NHS 跟蹤項目中,我們使用了 R 來提取、清洗、清理和探索數百份電子表格中的數據,以了解 NHS 目標是否遭受了攻擊。當我們在 2017 年分析英格蘭和威爾士超過 800 萬住宅物業交易以便了解扣除了物價因素的房價變化情況時,R 也是我們的首要選擇;該項目去年獲得了皇家統計學會的一個獎項。

但當涉及到繪製圖表時,情況又不一樣。

我們曾使用了 R(尤其是 R 的數據可視化軟體包 ggplot2)來進行數據探索,從而讓模式可視化以及幫助我們理解數據和尋找故事。但我們沒有按照 BBC 新聞的圖表風格來構建可用於網上發布的圖表。

為了創建在 BBC 新聞網站上伴隨故事的圖表,我們有兩個主要選項:如果時間充足,我們可以委託我們的設計團隊繪製圖表。如果我們需要快速周轉,我們會轉而選擇我們的內部製圖工具。

在 2018 年的前幾個月,數據團隊中一些充滿好奇心的成員開始了實驗,深入到了 ggplot2 軟體包內部,想要搞清楚我們還需要多少工作才能復現 BBC 的內部風格。

在去年三月份,我們發布了第一張從頭至尾都使用 ggplot2 繪製的圖表。

中了數據可視化的毒:BBC如何使用R語言繪製數據圖表?

自那以後,進展很快。

比起製圖工具,ggplot2 能提供更多控制和創造性,能讓人不局限於數量有限的圖表。使用腳本能節省大量時間和精力,尤其是在操作需要定期更新的數據時——可重複性是我們的工作流程的一大關鍵需求。

簡而言之,這帶來了徹底的變革,所以我們很快就將注意力轉向了如何最好地管理這種新發現的能力。

我們需要找到一種收集和共享我們積累的知識的好方法,並且讓我們整個團隊都能使用;我們還要開發出一個簡單且易於重複的工作流程,讓團隊在從頭至尾繪製圖表時有一致性的體驗。

在使用 R 製圖時,我們採用了一種雙管齊下的方法:將這些難題的解決方案放入了一個我們稱之為 bbplot 的軟體包以及我們團隊的 R「食譜」——一份 ggplot 參考手冊。現在我們將它們都開源了。

  • bbplot:https://github.com/bbc/bbplot
  • R cookbook:https://bbc.github.io/rcookbook/

bbplot 軟體包有什麼用?

這個軟體包的開發目的是處理所有反覆出現的障礙,簡化在所有圖表中添加對象的工作流程。

當我們剛開始使用 R 時,每次繪製圖表時都必須調整每個單獨的元素以將默認的 ggplot 風格改成我們內部的 BBC 風格。

將其保存為一個函數很明顯是簡化我們生活的第一要務。

我們還有很多類似的難題需要搞清楚:如何添加 BBC 標識,並且無論你想要導出的圖表的縱橫比如何,都能有合適的尺寸?如何將圖表標題對齊到左上角?就是這類問題。

通過與視覺與數據新聞團隊的設計師緊密合作,我們逐一解決了這一問題,將解決方案放入了易於重複使用的函數中。

下一步是將這些解決方案集中於一處,以提供一致的體驗以及讓所有一切都能儘可能簡單地復用——這就是 bbplot。

之前我們討論了需要加入到該軟體包中的功能。我們是否應該創建製作特定圖表類型的函數?預選擇條形圖的顏色以匹配我們的設計調色板好不好?

我們抵住了過於規範的誘惑,提出了適用於創建圖表時可能出現的每個潛在問題的普適性解決方案。

對於這個軟體包,我們的目標是僅包含繪製每張圖表時所必需的函數,以簡化工作流程,也不失靈活性——因為靈活性是使用 ggplot2 的一大實在優勢。

中了數據可視化的毒:BBC如何使用R語言繪製數據圖表?

我們想的是,我們為 ggplot2 默認外觀到我們內部風格的改變而創建的函數 bbc_style() 能夠完成 90% 的工作,之後你可以對你的圖表進行任何額外的調整,這和其它製圖工具不一樣——只會給你提供完成的圖表,調整空間很小。


為什麼要做一個「食譜」?

這個「食譜」是基於我們團隊對 ggplot2 的集體知識綜合而成的一份指南。這是一份參考手冊,而不是教程,其中可能不會告訴你如何用 R 繪製你的第一張圖表,但卻包含了很多有用的小技巧。

我們的想法是,每當數據團隊的成員解決一個特定問題時(比如在圖中加入一條曲線箭頭或突出顯示條形圖的一條),都能將代碼加入到這個「食譜」中,從而節省你和同事下一次的時間。

中了數據可視化的毒:BBC如何使用R語言繪製數據圖表?

在創建圖表時,團隊成員可以求助這個「食譜」,尋找答案和解決方案——比如如何繪製特定類型的圖表(如 dumbbell chart)或如何在你的圖中加入文本注釋。另一方面,這個軟體包可以自動處理你繪製每張圖表時都需要的解決方案——比如添加 BBC 標識。

我們希望簡化這些事情,但保留腳本帶來的自由和控制能力也很重要。


我們學到了什麼?

用這種方式處理圖表有很多好處。

我們的重點是創建一個可重複的工作流程,這意味著我們無需在另一個程序中進行最後的潤色,就能完全使用 R 創建出儘可能多的圖表,而且將我們的知識集中到一起能讓這些知識輕鬆地傳遞給不太習慣使用 R 的團隊成員。

R 能夠滿足我們所有的製圖需求嗎?不是的。我們沒將其用於互動式圖表,因為 JavaScript 庫 D3 更合適,而且有時候單獨使用 Illustrator 等軟體來調整注釋比直接使用 R 的工作量少得多。但對於靜態圖表,我們發現 R 和 ggplot2 非常有用。

也許最重要的應該是團隊合作:通過將我們的努力彙集一處和分享我們的技能,我們的知識獲得了極大的增長。因為推進我們對 R 的使用並不是某一個人獨自的責任,而是數據團隊很多人共同實驗,一起推行的。正因如此,我們收集的知識才得以快速增長。

教會其他人——意料之外的結果

使用 ggplot2 創建生產可用的圖表的另一個關鍵優勢原本並不在我們的必需計劃中。

團隊其他部分的同事的積極反饋讓我們開發了一個為期六周的內部課程,以讓人們儘快了解使用 R 的基本知識以及上手使用 bbplot 和「食譜」來繪製圖表。

這個課程並不能在六次短課中教會人們有關 R 的一切,但能幫助完全不了解 R 的人熟悉這是什麼。我們每周都會介紹一個新概念,與他們談論它並為他們指出他們可以在對應的課程周學習的網路教程。我們為課程參與者創建了一個 Slack 頻道,他們可以在這裡互相討論或尋求幫助。

在這六周之中,參與者會學習如何將數據載入 R、不同的數據類型、使用 tidyverse 軟體包在 R 中進行一些非常基本的數據操作和分析、對 ggplot2 的介紹。在課程結束時,他們會面臨一個挑戰:用他們學習到的所有不同的技能、概念和代碼,基於原始數據生成基本圖表。

中了數據可視化的毒:BBC如何使用R語言繪製數據圖表?

課程的最後是一場三小時長的研討會,主題是 bbplot 軟體包的工作方式以及如何有效使用我們的 R「食譜」。我們發現,為人們提供「食譜」以及他們應該在六周的時間裡生成的圖表,並不能人更輕鬆地學習 R——但心中有目標,知道這能在日常工作中提供助益,能讓人更有動力去學習。

為我們的同事提供課程的一大主要成功在於激勵了某些參與者繼續使用 R 以及提升他們的 ggplot2 知識。

現在,他們很多人已經對某些事情的工作方式和原因有了更好的理解,而不只是複製我們為他們準備的代碼。他們現在已能生成不屬於「食譜」配方的圖表,實際操作時所需的數據團隊的幫助也越來越少。

中了數據可視化的毒:BBC如何使用R語言繪製數據圖表?

接下來呢?讓團隊中的每個人為這份「食譜」添加配方並將其提交到 GitHub。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 機器之心 的精彩文章:

深度人臉識別中不同損失函數的性能對比
人臉識別技術全面總結:從傳統方法到深度學習

TAG:機器之心 |