當古代文人參加「中國好詩人」節目 | R爬蟲&可視化第2季

作者:徐麟,數據分析師,就職於上海唯品會。熱愛數據挖掘和分析,喜歡用R、Python玩點不一樣的數據。個人公眾號:數據森麟(微信ID:shujusenlin)

往期推薦:

衛視實時收視率對比 | R爬蟲&可視化第1季

前言

第一期的R爬蟲&可視化專題中,與大家分享了關於電視台收視率爬取和可視化的一些內容,得到了許多朋友的關注,在這裡向大家表示由衷的感謝。

第二期的專題中,會與大家聊聊在中國歷史中留下濃墨重彩的古代文人們,究竟誰的作品最受歡迎,誰的人氣最高,誰又最高產。本文將用現在流行的選秀節目形式在輕鬆的氛圍中回答這些問題,並與大家分享一些爬蟲和統計的知識。

相關Package

海選

在任何一檔選秀節目中,想要通過海選都需要有讓人值得稱讚的作品,關於詩人作品的評價,我們爬取了古詩文網(gushiwen.org/)中5000首詩,5000首詞,1000首曲,500篇文言文的點贊數。將作者的點贊數進行累加,選取排名前100位的詩人,網站頁面如下:

初賽階段爬取代碼如下(以唐詩數據為例):

需要特別指出的是,由於爬取的網站有時會出現爬取過程超時導致報錯,我們因此採用了try/next 的函數組合,在爬取失敗時,自動重新爬取該網頁,避免了因此造成的循環提前結束。

初賽成績計算

(我們自動篩除了全部點贊均來自於文言文的作者,以符合「中國好詩人」的主題,並且排除掉全部點贊數均來自於一部作品的作者)

我們將前100位的作者的作品數量和作品總點贊數分別作為x,y軸繪製散點圖

我們發現原始數據集中在左下角,為了提高可讀性,我們將橫縱坐標分別log處理,並將點贊數前15位的作者姓名在下圖中標註出來。我們此次採取了ggthemes中提供的theme_solarized模板繪製,其中有light這一重要參數,下面兩圖分別為light為TRUE/FALSE時的效果。

複賽

有了好的作品,也需要有一定的人氣作為保證才能在高手如雲的選秀節目中殺出重圍,我們爬取了各位文人在百度的點贊數和轉發數二者之和,並從中選出人氣最高的50位進入最後決賽,需要注意的是,本次爬取依然需要藉助RSelenium進行動態的爬取過程,頁面及爬取的代碼如下:(如下圖杜牧的點贊數和轉發數分別為9980、291)

決賽

終於進入了最終的決賽,先來看一下50位進入決賽選手所在的賽區分布(生活朝代):

對於決賽選手,我們將根據其作品好評數(初賽作品好評數),作品數量(初賽入圍作品數量),人氣值(複賽好評數+轉發數)三項指標獲得最終的排名。在統一量綱標準化後,採取PCA(主成分分析法),分別得到各位選手PCA分解後在各個維度的分數,結合該維度方差佔比得到綜合分數。

代碼如下:

最後給出完整的排名:

(由於PCA會自動對數據進行中心化,所以會出現最終得分為負分的情況)

現在我們可以回答文章開頭提到的幾個問題了。作品最受歡迎TOP3:李白、蘇軾、杜甫,人氣最高TOP3:李白、李清照、曹操,最高產TOP3:李白、蘇軾、辛棄疾。

最終李白以三項均排名第一的巨大優勢毫無懸念的獲得了本次比賽的冠軍,被小學生所熱捧的蘇軾和一直很忙的杜甫分獲亞軍和季軍,排名四到十位的分別是:辛棄疾,白居易,陸遊,李商隱,王維,李清照,劉禹錫。


推薦閱讀:

入門 ggplot2 的圖形語法
第二篇——用幾分鐘了解R語言入門知識(續)
第二講實踐:數據結構入門
2017.07大數據入門學習計劃
編寫R語言的樂趣 --第二關:數據結構入門

TAG:R编程语言 | 爬虫计算机网络 | 可视化 |