人民日報 Twitter 在疫情初期如何報導新聞?|創作紀錄

Szu Yu
Follow the Breadcrumbs
7 min readMay 1, 2020

今天我終於正式發佈了這個學期最重要的作品 — 分析人民日報的 Twitter 在疫情初期如何報導新聞。

(作品連結

指導教授 Steven Braun 在學期初就給了我們期末作品的大方向 — 文本分析與可視化(Text analysis and visualization)。學期進行到一半,肺炎疫情爆發。我決定把主題鎖定在人民日報如何報導肺炎疫情。

原先我用 Python 爬了一堆人民日報的中文報導,但考慮到作品最後必須用英文呈現,如果我寫程式、做設計之外還要再兼任翻譯…我會死。所以最後決定分析人民日報在 Twitter 上面發表的「英文貼文」。

而這個作品最有趣的發現就是:人民日報在 Twitter 發文時會盡量避免同時提及「中國」和「死亡」(deaths and died)。另外,在提到疫情相關消息時,它也花更多篇幅討論國外而不是中國國內的狀況。

(想直接跳去看作品的,請點這裡

數據哪裡來

我用 Tweepy 連接 Twitter API,爬了人民日報英文帳號從 1/3 到 3/27 的 3,222 條貼文。接著在 Python 清洗了所有文本資料 — 刪除標點符號、帳號名稱、停用詞還有超連結等等。每篇貼文也被我斷開、分解成一個個單詞,方便我計算每個單詞被使用的次數。

這種數據清洗的流程在資料分析領域很常見,雖然有可能過度簡化文本原來的脈絡,甚至扭曲部分語意,但它也能幫助我們從新的角度看待資料。

數據分析過程

通常我會先列出自己感到好奇的問題,再思考下一步怎麼處理資料。以下是我當初列的幾個問題:

  • 這些貼文中最常提到的單字或詞語是什麼?有沒有可能依此歸類?
  • 有沒有哪些字一開始被提到超多次,後來就再也不提了(或者相反)?
  • 情感分析:貼文提到哪些字詞會帶特別正面或負面的情緒?

我把每篇貼文切割成一個個單詞,計算每個單詞每天出現的數量,畫成直線圖。其中「confirmed、cases、new、deaths」這幾個字的趨勢引起我的注意。

中國的疫情從一月就開始爆發。但為什麼直到二月中後,人民日報才在貼文中不斷提到這些描述疫情狀況的單詞呢?

(用「次數( counts)」多寡來表示字詞出現的頻率不夠準確。正式文章裡頭改計算一個單詞的使用量在當天的貼文中佔多少「比例」。)

接著我用更多不同的圖表來視覺化我的數據,希望找出更多有趣的洞察。

可視化數據+設計流程

終於進入我最喜歡的部份!

我會把重點放在三角形圖表的誕生,畢竟前前後後它經歷了… 無數次迭代。

我第一個可視化點子是從樹狀圖概念延伸而來。

我想把國家名稱放在節點最中間。節點的左右兩側是這個字前後最常見的單字。在設計原型時我直接用 Jason Davies 做的 Word Tree 工具,把所有貼文黏在一起製作成一個 txt 文檔,丟進去網頁中的框框就可以得到一個現成的文字樹狀圖。但我遇到的大問題是,雖然「China」被提到超多次,但跟在它前後的字詞實在有太多變化了,無法被歸納成上面這種漂亮的示意圖。

於是我開始實驗其他視覺化方式。

我天馬行空畫的幾個點子

這些圖大多是根據我用 Python 跑分析和視覺化圖表的結果繪製而成。例如我用 Python 跑了文字雲狀圖(上圖中的方框一),我發現沒有提到「China」但有提到其他國家的貼文裡出現大量「total、number、deaths」。

最後我和教授都最喜歡的是上圖中第三個方格的概念 — 每個圓圈代表一個字,圓圈之間的距離反映它們在貼文中被一起使用的頻率。越近的圓圈代表它們一起被使用的頻率越高。

我用 Gensim 的 word2vec 把文字轉換成向量,但得到的結果不是我想要的。因為 word2vec 把所有國家都分在一起、數字分在另一堆、關於疫情的描述又被分在了另一堆。

所以我必須要自己計算每個字之間的距離,再把它們畫到某個象限上。但我實在不知道怎麼做(我到現在也不知道哈哈哈,非常歡迎好心人士指教或者和我一起討論。)

最後我決定不去計算「字跟字」之間的距離,改計算「字跟貼文組別」之間的距離。

我篩選出提及「國家名稱」的貼文,把這些貼文分成「只提到中國、沒有提到中國、同時提到中國和其他國家」三組。然後我算出:經常被提及的單詞在不同貼文組別裡出現的比例(拗口的說法T_T)。

換句話說:confirmed 是不是比較少出現在只提到中國的貼文裡?或者相反?

我直接把結果用 d3.js 畫了出來。

同樣,每個圓圈代表一個字,圓圈大小跟使用頻率成正比。我畫了一個從 0 到 1 個象限,並假設象限的最左側代表提及其他國家卻沒有提到中國的貼文組別,右側代表只提到中國的貼文。越接近象限左側圓圈,就越常出現在左側的貼文組別; 反之亦然。

如果你好奇圓圈的位置是如何決定的?在這裡附上我當時用的公式:

就在作品完成前,我發現自己還遺漏了一個貼文組別:同時提及中國和其他國家的貼文。為了要能比較同一個字在這三個組別之中的使用頻率,我決定用「我不知道正確中文名稱所以就稱呼它三角圖」的三角圖來呈現數據。

頂點代表一個字出現在該貼文群組中的比例是 100%,而側邊代表 0%。同時我也希望表現每個字從一月到三月在不同群組中使用比例的變化。所以我加上了時間這個元素。(想知道我怎麼計算圓圈位置的嗎?點進文章最下面有詳細說明哦)

我參考 Chris Given 用 d3.js 畫的三角圖,再自己加工程式碼加上連接每個圓圈的漸層線條。

滑鼠放在圓圈上就會出現這個字從一月到三月移動的軌跡

後記

人~~~~~生~~~~~好~~~~~難~~~~~。

好啦,我很謝謝我的教授 Steven Braun、Aleszu Bajak、Matthew Carroll 和 John Wihbey,他們給了我很多靈感跟幫助,也很謝謝從沒見過面卻依然親切的學長 Felippe Rodrigues 給我技術上的支持,然後超開心自己能獨立完成設計、寫 code 和寫作所有的事。

快幫我拍拍手鼓勵鼓勵!謝謝你們看到這裡 :)

--

--