• 沒有找到結果。

第三章 資料處理

3.3 D ATA M ERGE

透過 BeautifulSoup 解析後,不論該 HTML 的編碼是哪一種,BeautifulSoup 皆會將其轉換成 Unicode 呈現,而輸出則皆會以 UTF-8 輸出,然而在輸出 artist Linux 則多半是使用 Unicode 編碼,所以執行上雖然不會發生錯誤,但系統因為 沒有辦法自動執行 UTF-8 編碼,因此會將內容以 Unicode 編碼對應,導致寫入亂 碼的結果。

3.2 Data Clean

Facebook 粉絲專頁是近期社群網站的新寵,公司行號、品牌、餐廳將粉絲專頁 的宣傳視為是必要且重要的一環。粉絲專頁的貼文在透過 Crawler 抓取時,有時

我們將「KKBOX Chart」的資料整合後分成兩個部分:「Artist」、「Song」。

「Artist」資料表儲存了資料抓取的這段時間內的所有曾經上榜的歌手,每位歌 手當作一筆資料,儲存與歌手相關的所有資訊;「Song」資料表則儲存了這段時 間內所有曾經上榜的歌曲,以一首歌作為一筆資料,記錄與歌曲相關的內容,以 下表 8 與表 9 為從「Artist」與「Song」取出的部分資料。

表 8 排行榜彙整資料-歌手部分

Artist Song List SongCount HighestRank AppearTimes

林俊傑 可惜沒如果,關鍵詞,… 25 1 3746

Song Artist AppearTimes HighestRank ReleaseDate FirstRankDate 不為誰而作的歌 林俊傑 53 1 2015-12-04 20151204

‧ 國

立 政 治 大 學

Na tiona

l Ch engchi University

28

本章節我們透過 Python 快速的處理 CSV 檔的讀寫,在讀取的部分有兩種方 式,一種是 Reader,另一種是 DictReader。Reader 能夠將 CSV 中每一行的內容 用逗號隔開,回傳成一個 List 的形式,和 Split 有些類似,但不同的地方是,

Reader 可以順便把「” ”」處理掉。而 DictReader 則是將讀取的內容投射成 字典的形式,透過選擇參數 fieldnames(欄位名稱)我們可以得到相關欄位的 內容,如果省略填入 fieldnames,則將會以第一列的值作為 filenames 來讀取 資料。透過 DictReader 的 fieldname 我們可以控制所要抓取的內容,並透過 DataFrame 更快速的進行整合資料的工作。

我們利用 DictReader 的特性,將排行榜中所有的歌手以及歌曲分別儲存在 DataFrame 當中,接著透過 Python 判斷式中的「not in」語法,配合 List 的

「append」功能,將資料中重複值去除,接著配合 DictReader 來獲取我們所需 要的資料,如出現次數、歌曲數目等等,用於第三章「統計分析」。

在整合資料的過程中,表格欄位的中文字串必須要經過特殊處理,避免資料 內容變成亂碼。在 Python 中「String」類型的中文字串只要透過指定編碼 utf8 便能被處理,但是「List」類型的字串則不能直接處理,必須使用解碼,但是 List 類型本身卻又不提供「decode」函式,而我們嘗試以 microsoft 文書處理 工具 excel 進行文字轉換,此方法能夠成功讀取中文字串但寫入資料時無法順利 轉換,因此我們最後使用 Uniout 來直接處理編碼問題,透過 Uniout 套件,便不 需經過編碼,可直接印出 List、Object 類型中的中文字串。

訊息,我們針對「KKBOXChart」整理出從 2013 年八月以來,榜上出現過的「Artist」

以及「Song」去做統計分析,透過可視化圖表來找出近年來排行榜發生的變化、 要使用到 JavaScript,而 Bokeh 為其提供各式各樣視覺化所需的輔助函式並將 JavaScript 寫入 BokehJS 當中,讓我們不需要再多去撰寫 JavaScript 或其他的 語法,透過執行時接收 input 的方式直接在 Browser 上運作,而 Python Bokeh Library 則會將內容及屬性轉化為 JSON 格式創造出圖表。透過這些簡單易懂的 函 式 , 我 們 可 以 python 的 語 法 快 速 上 手 各 式 簡 單 的 圖 表 , 像 是

「Bokeh.plotting」、「Bokeh.charts」等等,而在 Bokeh Model 中也有更多細部 的細節,能夠將圖表做得更加精細,Bokeh 也貼心提供許多樣本與程式碼,加速 使用者選用所需的圖表類型。

在製作圖表,如何匯入資料的部分,Bokeh 也提供相當簡單的設計。我們只

15資料來源:http://bokeh.pydata.org/en/latest/