Tidy data----從零開始學會大數據分析課程第4課-課後作業1-part2
Hadley Wickham是Rstudio的首席科學家,同時是University of Auckland, Stanford University, 以及Rice University的統計學教授。R語言中常用的ggplot2、dplyr、tidyr、stringr以及readr、readxl包等,都是由他編寫的,題圖就是他的一幅畫像。本文摘譯自Hadley Wickham發表在《Journal of Statistical Software》雜誌上的《Tidy Data》,以下為正文第3節:
Tidy Data
Hadley Wickham
3 整理混亂的數據集
現實中的數據集,通常完全不符合tidy data中的任意一條。當然,有時候某一個數據集比較整潔,可以拿來就分析,但這只是特例。這一節介紹混亂數據集中最常見的5個問題以及相應的解決辦法。
- ?列頭是數值,而不是變數名
- 多個變數儲存在同一列中
- 在行和列中都有變數
- 同一個表格中儲存了多種類型的觀察單位
- 一種觀察單位儲存在多個表格中
?
以上以及的以及其他的混亂數據集中的問題,都可以通過幾個簡單的工具進行整理,這些工具包括:melting,string splitting,casting。以下會通過實例來解釋上面提到的5個問題。所有的數據和R程序,都可以在這裡下載:hadley/tidy-data。
3.1 列頭是數值,而不是變數名的情況
一種常見的混亂數據集是我們在彙報或者是報告中常用的表格類數據,這種數據中數值混亂分布在行和列中,而且列名是數值而不是變數名。表4是一個典型的例子。
該表格有三個變數:宗教信仰、收入、頻率。要整理這個表,我們需要「Melt(融合)」melt的結果是把列中的數據都變成變數。melt前後如圖5所示:表5a中已經有一個由變數組成的列(第一列,這種列叫做colvars,即由column和variables的首字母組成的),轉換後該列得到保留,另外生成了兩個新列:由原來的列名組成的「column」,以及由來表格中的數值組成的「value」。現在回到表4,表4也有一個colvar,即宗教信仰。其餘數據經轉換後,原本的收入分類變為單獨一列,頻率變為單獨一列(表6)。這個形式的數據更整齊,因為一方面每一列代表一個變數,每一行代表一個觀察。而且,每一個人口統計學單位對應一個宗教信仰和收入的組合。
3.2 多個變數儲存在同一列中表9是由聯合國衛生組織統計的世界各國的肺結核情況,分為國家、統計年、男性0-14歲、男性15-24歲等等多個組。實際上我們可以看出,這個數據包括國家、年、性別、年齡和病例數等多個變數,其中性別和年齡被合併在一起了。因此,melt後在進行split,得到的表格就更清爽了。要整理這個表格,首先melt,生成含有id,date,element以及value四個變數的表格(表12a),同時去掉了缺失的數據。還需要進行一步操作,以便將tmin和tmax分開,這部操作就是cast,cast有點像melt的反向操作。將element這一列重新轉換為兩個單獨的列。這樣得到的就是tidy data了(表12b)
3.4 同一個表格中儲存了多種類型的觀察單位數據集常常涉及多個水平,多中不同類型觀察單位上得到的數值。在數據整理中,每一個觀察類型應該單獨放到一張表中。這與數據集標準化的概念相類似。如果不進行標準化,數據間就會產生矛盾。
表7是2000年美國Billboard歌曲排行榜。包括年、歌手、歌曲名、歌曲長度,打榜日期、每周排名等信息。該表格中的colvar有年,歌手,歌曲,歌曲長度,打榜日期。每周排名可以拆分成周數和排名兩個變數,如表8.表8實際包含了兩種類型的觀察單位:歌曲以及每周排名。歌曲本身作為觀察對象有年,歌手,歌曲,歌曲長度,打榜日期等特徵,同時歌曲作為一個整體,它有每周排行這一特徵。就是說Billboard排行榜數據集可以分成兩個數據集:歌曲數據集以及打榜信息數據集。表13就直觀的體現了這一點。標準化在數據整理以及消除數據矛盾方面非常有用。但是很少有分析工具能直接處理關係型數據,因此分析中常常需要對數據進行去標準化,或者將多個表格融合成一個表格3.5 一種觀察單位儲存在多個表格中
一個觀察單位的數據分散在多個表格或文件中也很常見。通常這些表格是根據其他變數跟分割開的,如年,人員或者地點。只要格式一致,這一問題很好解決:
1. 把各個文件讀入到一個表格列表中 2. 對於每一個表格,增加一列,記錄下原來的文件名稱(因為文件名有時也包含重要的變數信息).3. 將所有表格整合成一個表格。該文章的內容就翻譯到此,後續會繼續更新R語言及大數據的學習筆記。
推薦閱讀:
※MySQL |OR運算符
※shiny儀錶盤應用——2016年美國大選數據可視化案例
※數值型與字元型轉換總結|R語言
※Learn R | 機器學習中的人工神經網路(七)