筆者邀請您,先思考:
1 什麼是整潔數據?
2 tidyverse怎麼使用?
tidyverse是由RStudio首席科學家Hadley Wickham開發的R套裝的集合。 這些包作為大數據分析管道的一部分可以很好地協同工作。要了解這些工具及其協同工作的更多信息,請閱讀R for data science。 對於R的新手,請查看我之前的Storybench教程:RStudio筆記本中的R入門。
以下教程將介紹tidyverse中用於構建和分析數據集的一些基本功能。 這是關於清理數據的三部分系列中的第一部分,使用tidyverse在R中對其進行可視化。
加載包首先,安裝tidyverse,然後加載tidyverse和magrittr。
suppressWarnings(suppressMessages(install.packages("tidyverse")))
suppressWarnings(suppressMessages(library(tidyverse)))
suppressWarnings(suppressMessages(library(magrittr)))
我們將在本教程中使用「管道」。 管道使您的代碼讀起來更像一個句子,從左到右分支。 所以像這樣:f(x)變成這樣:x%>%f和這樣的東西:h(g(f(x)))變成這樣:x%>%f%>%g%>%h
「管道」來自magrittr包。 請閱讀此處的使用方法。
什麼是整潔的數據?「整潔數據」這一術語描述了構建數據集以使分析和可視化更容易的標準化方法。 如果您使用過SQL和關係資料庫,那麼您將認識到大多數這些概念。 Hadley Wickham從Edgar F. Codd的正常形式中獲取了許多技術術語,並將其應用於單個數據表。 更重要的是,他將這些原則轉化為幾乎任何進行數據分析的人應該能夠識別和理解的術語。
整潔數據的核心原則整潔數據有三個原則:
變量構成列
觀察組成行
值放在單元裡面
如果您處理了前兩個原則,第三個原則幾乎是給定的,因此我們將重點關注這些原則。
一個假設的臨床試驗來解釋變量變量是可以採用多個值的任何度量。根據數據集來自的欄位,變量可以稱為自變量或因變量,特徵,預測變量,結果,目標,響應或屬性。
變量通常可以分為三類:固定變量(在收集數據之前已知的特徵),測量變量(包含研究或調查期間捕獲的信息的變量)和派生變量(在現有變量分析過程中創建的變量)。
這是一個例子:假設臨床醫生正在測試一種新的抗高血壓藥物。他們招募了30名患者,他們都接受了高血壓治療,並將他們隨機分成三組。臨床醫生給三分之一的患者服用藥物八周,另外三分之一的人服用安慰劑,最後三分之一照常照顧。在研究開始時,臨床醫生還收集有關患者的信息。這些測量包括患者的性別,年齡,體重,身高和基線血壓(BP前)。
對於該假設研究中的患者,假設他們被隨機分組的組(即藥物,對照組或安慰劑組)將被視為固定變量。前BP(和後BP)測量將被視為測量變量。
假設在試驗結束後 - 收集了所有數據 - 臨床醫生想要一種方法來確定試驗中血壓降低的患者數量(是或否)?一種方法是創建一個新的分類變量,用於識別血壓低於140 mm Hg的患者(1 =是,0 =否)。這個新的分類變量將被視為派生變量。
我所描述的虛構研究的數據也包含時間的基本維度。如描述所示,在服用藥物(或安慰劑)之前和之後測量每位患者的血壓。因此,可以想像這些數據可以包括入組日期(患者進入研究的日期),血壓前測量日期(基線測量),給藥日期(患者服用藥物),血壓測量日期(在研究結束時進行血壓測量)。
什麼是觀察?觀察是分析的單位,或者是由變量描述的「事物」。 堅持我們假設的血壓試驗,患者將成為分析的單位。 在整潔的數據集中,我們希望每行代表一個患者。 觀察有點像名詞,從某種意義上說,確定一個確切的定義可能很困難,而且它往往很大程度上取決於數據的收集方式以及您嘗試回答的問題類型。 觀察的其他術語包括記錄,案例,示例,實例或樣本。
什麼是數據表?表由值組成。 正如您可能已經猜到的那樣,值是電子表格中不是行或列的東西。 我認為將值視為表中的物理位置是有幫助的 - 它們位於變量和觀察的交叉點。
例如,假設一個數字,75,放在一個表裡。
我們可以說這個數字的位置是第2列和第2行的交集,但這並沒有告訴我們多少。 數據75在沒有任何關於它代表什麼的信息的情況下無意義地放在一個表中。 一張表上的一個數字引出了一個問題,「七十五是什麼?」
這就是為什麼將表視為變量(在列中)和觀察(在行中)有助於獲得每個單元格中值的背後的含義。 在添加變量(列)和觀察(行)名稱後,我們可以看到該75是患者3號(患者_3)的舒張前血壓(Pre_Dia_BP)。
值得指出的是,同樣的信息可以用另一種方式呈現:
該布置顯示相同的信息(即,對於患者編號3的舒張前血壓),但是現在列meas_type包含關於75代表哪個血壓測量的信息(預)。 哪一個很整潔? 為了回答這個問題,我們將建立一個寵物示例來建立一些基本的整理術語。
「tibble」如何比table更好我們將使用下面的調用來創建鍵值對引用tibble。 在使用tidyverse的包時,tibbles是一種優化的存儲數據的方法,你應該在這裡閱讀更多關於它們的信息。
我們將從頭開始構建一個tibble,定義列(變量),行(觀察)和每個單元格的內容(值)。 通過這樣做,我們將能夠跟蹤重新排列這些數據時發生的情況。 這個簡短練習的目標是使鍵值對更易於查看和理解。
我們的新對象(key_value)使用以下基礎邏輯構建。
行使用數字(1-3)和下劃線()編號,並始終顯示在值的前面。 列使用下劃線()和數字(1-3)編號,並始終顯示在值的末尾。
library(tidyr)
library(tibble)
key_value <- tribble(
~row, ~key1, ~key2, ~key3,
"1", "1_value_1","1_value_2","1_value_3",
"2", "2_value_1", "2_value_2", "2_value_3",
"3", "3_value_1", "3_value_2", "3_value_3"
)
key_value
因此,key1和row = 1的值是1_value_1; key2和row = 2的值是2_value_1; 等等。
第一個數字#表示行(觀察)位置,尾隨數字#表示key_列(變量)位置。
使用tidyr包tidyr是tidyverse的一個軟體包,它可以幫助您構建(或重新構建)數據,從而更容易實現可視化和建模。 這是tidyr頁面的連結。 整理數據集通常涉及將行轉換為列(擴展)或將列切換為行(收集)的某種組合。
我們可以使用我們的key_value對象來探索這些函數的工作方式。
使用 gather「Gather佔用多列並摺疊成鍵值對,根據需要複製所有其他列。 當你注意到你的列不是變量時,你可以使用gather()。「這就是tidyverse定義gather的方式。
讓我們首先將三個關鍵列收集到一個列中,並使用包含其所有值的新列值。
kv_gathered <- key_value %>%
gather(key,
value,
key1:key3,
na.rm = TRUE
)
kv_gathered
注意結構:
我把這種數據安排稱為「堆疊」。 威克姆將此稱為索引。 但重要的是,我們使用gather()來挖掘最初分散在三列中的數據,並將它們分為兩列:鍵和值。
鍵值對將鍵和值配對。 這意味著當我們將key指定為新列的名稱時,該命令將獲取前三個鍵列並將其堆疊在其中。 然後我們將value指定為新列的名稱及其對應的值對。
行列怎麼樣? 我們留下這列,因為我們希望它保持相同的安排(即1,2,3)。 當鍵和值列堆疊時,這些行會在列中重複出現,
在此過程中也沒有任何損失。 我仍然可以查看行:3,鍵:2並查看結果值3_value_2。
使用spread現在我們將鍵和值列重新分配回原始排列(key_1,key_2和key_3三列)。spread描述顯示:「跨多個列傳播鍵值對。」
kv_spreaded <- kv_gathered %>%
spread(
key,
value
)
kv_spreaded
Spread將堆疊在兩列(鍵和值)中的值移動到三個不同的key_列中。
鍵值對是我們可以用來重新排列數據以使其整潔的索引。
哪個版本的key_value很整潔? 我們說整齊的數據意味著「每列一個變量,每行一個觀察」,因此滿足這個條件的安排是key_gathered數據集。 但我想強調的是,如果不了解這些變量和觀察結果實際包含的內容,我們就無法真正知道這些數據是否整潔。
完整代碼library(tidyr)
library(tibble)
key_value <- tribble(
~row, ~key1, ~key2, ~key3,
"1", "1_value_1","1_value_2","1_value_3",
"2", "2_value_1", "2_value_2", "2_value_3",
"3", "3_value_1", "3_value_2", "3_value_3"
)
key_value
kv_gathered <- key_value %>%
gather(key,
value,
key1:key3,
na.rm = TRUE
)
kv_gathered
kv_spreaded <- kv_gathered %>%
spread(
key,
value
)
kv_spreaded
原文連結:
http://www.storybench.org/getting-started-with-tidyverse-in-r/
版權聲明:作者保留權利,嚴禁修改,轉載請註明原文連結。
數據人網是數據人學習、交流和分享的平臺http://shujuren.org 。專注於從數據中學習到有用知識。
平臺的理念:人人投稿,知識共享;人人分析,洞見驅動;智慧聚合,普惠人人。
您在數據人網平臺,可以1)學習數據知識;2)創建數據博客;3)認識數據朋友;4)尋找數據工作;5)找到其它與數據相關的乾貨。
我們努力堅持做原創,聚合和分享優質的省時的數據知識!
我們都是數據人,數據是有價值的,堅定不移地實現從數據到商業價值的轉換!
點擊閱讀原文,進入數據人網。