R for Data Science 學(xué)習(xí)筆記1

安利一下R for Data Science這本書,作為R數(shù)據(jù)處理的神器。
全文思想就是獲得整潔數(shù)據(jù)(tidydata),并進行后續(xù)分析和可視化。

https://r4ds.had.co.nz/data-visualisation.html

學(xué)習(xí)流程

img

tidydata:每一列都是變量,每一行都是觀察值

整潔的數(shù)據(jù)非常重要,因為一致的結(jié)構(gòu)使您可以將精力集中在有關(guān)數(shù)據(jù)的問題上,而不是為了使數(shù)據(jù)以正確的形式針對不同的功能而奮斗。

ready

運行本書中的代碼,需要四件事:R,RStudio,稱為tidyverse的R軟件包的集合,以及少數(shù)其他軟件包。包是可復(fù)制R代碼的基本單位。它們包括可重用的功能,描述如何使用它們的文檔以及示例數(shù)據(jù)。

 install.packages("tidyverse")

除非您使用加載軟件包,否則將無法使用軟件包中的函數(shù),對象和幫助文件library()。安裝軟件包后,可以使用以下library()功能加載該軟件包:

library(tidyverse)
 #> ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.0 ──
 #> ? ggplot2 3.3.2     ? purrr   0.3.4
 #> ? tibble  3.0.3     ? dplyr   1.0.2
 #> ? tidyr   1.1.2     ? stringr 1.4.0
 #> ? readr   1.4.0     ? forcats 0.5.0
 #> ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
 #> ? dplyr::filter() masks stats::filter()
 #> ? dplyr::lag()    masks stats::lag()

這告訴您tidyverse正在加載ggplot2,tibble,tidyr,readr,purrr和dplyr軟件包。這些被認為是tidyverse的核心,因為您將在幾乎所有分析中都使用它們。

在本書中,我們將從tidyverse外部使用三個數(shù)據(jù)包:

 install.packages(c("nycflights13", "gapminder", "Lahman"))

這些軟件包提供了有關(guān)航班,世界發(fā)展和棒球的數(shù)據(jù),我們將用它們來說明關(guān)鍵的數(shù)據(jù)科學(xué)思想。

在整本書中,我們使用一致的約定集來引用代碼:

  • 函數(shù)采用代碼字體,后跟括號,如sum()mean()。

  • 其他R對象(如數(shù)據(jù)或函數(shù)參數(shù))采用代碼字體,不帶括號,如flightsx。

  • 如果要弄清楚對象來自哪個包,我們將使用包名稱,后跟兩個冒號,例如dplyr::mutate()nycflights13::flights。這也是有效的R代碼。

1.6獲得幫助并了解更多信息

這本書不是一本孤島。沒有任何一種資源可以使您掌握R。在您開始將本書中介紹的技術(shù)應(yīng)用于您自己的數(shù)據(jù)時,您很快就會發(fā)現(xiàn)我們無法回答的問題。本節(jié)介紹了有關(guān)如何獲取幫助以及幫助您繼續(xù)學(xué)習(xí)的一些技巧。

如果您遇到困難,請從Google開始。通常,在查詢中添加“ R”足以將其限制在相關(guān)結(jié)果中:如果搜索沒有用,則通常意味著沒有任何特定于R的結(jié)果可用。Google對于出現(xiàn)錯誤消息特別有用。如果收到錯誤消息,但不知道它是什么意思,請嘗試使用Google搜索。過去可能有人對此感到困惑,并且網(wǎng)絡(luò)上的某些地方會有所幫助。(如果錯誤消息不是英語的,請運行Sys.setenv(LANGUAGE = "en")并重新運行代碼;您更有可能找到英語錯誤消息的幫助。)

如果Google沒有幫助,請嘗試stackoverflow。首先花一點時間搜索現(xiàn)有的答案,包括[R]將搜索范圍限制在使用R的問題和答案上。如果找不到有用的東西,請準備一個最小的可復(fù)制示例或reprex。好的代表可以使其他人更輕松地為您提供幫助,而且通常您會在解決問題的過程中自己解決問題。

為了使示例可重現(xiàn),需要包括三件事:所需的程序包,數(shù)據(jù)和代碼。

  1. 程序包應(yīng)加載到腳本的頂部,因此很容易看到示例所需的程序包?,F(xiàn)在是檢查每個軟件包是否使用最新版本的好時機。自安裝軟件包以來,您可能已經(jīng)發(fā)現(xiàn)了已修復(fù)的錯誤。對于tidyverse中的軟件包,最簡單的檢查方法是運行tidyverse_update()。

  2. 在問題中包含數(shù)據(jù)的最簡單方法是使用dput()生成R代碼來重新創(chuàng)建它。例如,要mtcars 在R中重新創(chuàng)建數(shù)據(jù)集,我將執(zhí)行以下步驟:

    1. dput(mtcars)在R中運行

    2. 復(fù)制輸出

    3. 在我的可復(fù)制腳本中,鍵入mtcars <-然后粘貼。

    嘗試找到仍能揭示問題的最小數(shù)據(jù)子集。

  3. 花一點時間來確保您的代碼易于他人閱讀:

    • 確保您使用了空格,并且變量名簡潔明了,但內(nèi)容豐富。

    • 使用注釋來指示您的問題所在。

    • 盡力刪除與該問題無關(guān)的所有內(nèi)容。 您的代碼越短,越容易理解,也越容易修復(fù)。

通過開始一個新的R會話并復(fù)制并粘貼腳本來檢查您是否確實制作了一個可復(fù)制的示例。

您還應(yīng)該花一些時間為解決問題做準備。從長遠來看,每天花一點時間學(xué)習(xí)R將會獲得豐厚的回報。一種方法是在RStudio博客上關(guān)注Hadley,Garrett和RStudio其他所有人的行為。我們在這里發(fā)布有關(guān)新軟件包,新IDE功能和現(xiàn)場課程的公告。您可能還希望在Twitter上關(guān)注Hadley(@hadleywickham)或Garrett(@statgarrett),或者關(guān)注@rstudiotips以跟上IDE中的新功能。

為了更廣泛地與R社區(qū)保持聯(lián)系,我們建議閱讀http://www.r-bloggers.com:它匯集了來自世界各地的500多個有關(guān)R的博客。如果您是活躍的Twitter用戶,請遵循(#rstats)標簽。Twitter是Hadley用來跟上社區(qū)的新發(fā)展的主要工具之一。

數(shù)據(jù)可視化

使用ggplot2,您可以使用函數(shù)開始繪圖ggplot()ggplot()創(chuàng)建一個可以添加圖層的坐標系。的第一個參數(shù)ggplot()是要在圖形中使用的數(shù)據(jù)集。因此,ggplot(data = mpg)創(chuàng)建一個空圖,但這不是很有趣,因此我將不在這里顯示。

您可以通過向中添加一層或多層來完成圖形ggplot()。該函數(shù)geom_point()在您的繪圖上添加了一層點,從而創(chuàng)建了一個散點圖。ggplot2附帶了許多geom函數(shù),每個函數(shù)都會在繪圖中添加不同類型的圖層。在本章中,您將學(xué)到很多。

ggplot2中的每個geom函數(shù)都有一個mapping參數(shù)。這定義了數(shù)據(jù)集中的變量如何映射到視覺屬性。的mapping參數(shù)總是與配對aes(),以及xy的參數(shù)aes()指定要映射哪些變量的x和y軸。ggplot2在自data變量(在本例中為)中查找映射的變量mpg。

3.2.3圖形模板

讓我們將此代碼轉(zhuǎn)換為可重復(fù)使用的模板,以使用ggplot2制作圖形。要制作圖表,請將下面代碼中的方括號部分替換為數(shù)據(jù)集,geom函數(shù)或一組映射。

 ggplot(data = <DATA>) + 
  <GEOM_FUNCTION>(mapping = aes(<MAPPINGS>))

3.3 增加變量

美學(xué)映射,第三個變量

您可以class通過將其映射到美感來向二維散點圖添加第三個變量,例如。美觀是情節(jié)中對象的視覺屬性。美學(xué)包括點的大小,形狀或顏色之類的東西。您可以通過更改其美學(xué)屬性的值,以不同方式顯示一個點(如下所示)。由于我們已經(jīng)使用“值”一詞來描述數(shù)據(jù),所以讓我們使用“水平”一詞來描述美學(xué)特性。在這里,我們更改點的大小,形狀和顏色的級別,以使該點變小,呈三角形或呈藍色:

gplot2一次只能使用六個形狀。默認情況下,使用形狀美學(xué)時,其他組將不作圖。

對于每種美學(xué),您都aes()可以將美學(xué)名稱與要顯示的變量相關(guān)聯(lián)。該aes()函數(shù)將圖層使用的每個美學(xué)映射收集在一起,并將其傳遞給圖層的映射參數(shù)。語法突出顯示了有關(guān)x和的有用見解y:點的x和y本身就是美觀,可視化的屬性,您可以將其映射到變量以顯示有關(guān)數(shù)據(jù)的信息。

一旦繪制了美學(xué)圖,ggplot2就會處理其余的工作。它選擇了一個合理的比例以配合美學(xué),并構(gòu)造了一個圖例來解釋級別和值之間的映射。對于x和y美學(xué),ggplot2不會創(chuàng)建圖例,但會創(chuàng)建帶有刻度線和標簽的軸線。軸線充當圖例;它說明了位置和值之間的映射。

手動更改圖形的美學(xué)屬性

還可以手動設(shè)置幾何圖形的美學(xué)屬性。例如,我們可以將圖中的所有點設(shè)為藍色:

 ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy), color = "blue")

在這里,顏色不會傳達有關(guān)變量的信息,而只會改變圖形的外觀。要手動設(shè)置美學(xué),請按名稱將美學(xué)設(shè)置為geom函數(shù)的參數(shù);即它去外面aes()。您需要選擇一種對于這種美學(xué)有意義的水平:

  • 顏色的名稱,作為字符串。

  • 點的大小,以毫米為單位。

  • 點的形狀為數(shù)字,如圖3.1所示。

圖3.1

R具有25個內(nèi)置的形狀,這些形狀由數(shù)字標識。 有一些看似重復(fù)的對象:例如,0,15和22都是正方形。 區(qū)別來自“顏色”和“填充”美學(xué)的相互作用。 空心形狀(0--14)的邊界由“ colour”確定; 實心形狀(15--20)填充有“顏色”; 填充的形狀(21--24)的邊界為“顏色”,并填充為“填充”。

3.4常見問題

當您開始運行R代碼時,您可能會遇到問題。

首先,將您正在運行的代碼與本書中的代碼進行仔細比較。R非常挑剔,并且放錯位置的字符可能會有所不同。確保每個(都與匹配,)每個"都與另一個配對"。有時,您將運行代碼,但沒有任何反應(yīng)。檢查控制臺的左側(cè):如果是a +,則表示R認為您沒有鍵入完整的表達式,它正在等待您完成它。在這種情況下,按ESCAPE中止當前命令的處理通常很容易從頭開始。

創(chuàng)建ggplot2圖形時,一個常見的問題是將放在+錯誤的位置:它必須出現(xiàn)在行的末尾,而不是開始。換句話說,請確保您沒有意外地編寫如下代碼:

ggplot(data = mpg) 
 + geom_point(mapping = aes(x = displ, y = hwy))

如果仍然遇到問題,請嘗試幫助。通過?function_name在控制臺中運行,或選擇函數(shù)名稱并在RStudio中按F1,可以獲得有關(guān)任何R函數(shù)的幫助。如果幫助看起來沒有幫助,請不要擔(dān)心-而是跳到示例并查找與您要執(zhí)行的操作匹配的代碼。

如果這樣做沒有幫助,請仔細閱讀錯誤消息。當然,搜索引擎更是一大利器,多搜索,會得到想要的答案。

3.5子圖

添加其他變量的一種方法是圖形美學(xué)。另一種對分類變量特別有用的方法是將繪圖劃分為構(gòu)面(子圖),每個子圖顯示數(shù)據(jù)的一個子集。

要通過單個變量對圖進行分面,請使用facet_wrap()。的第一個參數(shù)facet_wrap()應(yīng)該是公式,在公式中創(chuàng)建~后跟一個變量名(此處的“公式”是R中數(shù)據(jù)結(jié)構(gòu)的名稱,而不是“等式”的同義詞)。您傳遞給的變量facet_wrap()應(yīng)該是離散的。

 ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy)) + 
  facet_wrap(~ class, nrow = 2)

要在兩個變量的組合上顯示,請?zhí)砑?code>facet_grid()到情節(jié)調(diào)用中。的第一個參數(shù)facet_grid()也是一個公式。這次,公式應(yīng)包含兩個變量名,并用a分隔~。

 ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy)) + 
  facet_grid(drv ~ cyl)

如果您不希望在行或列維中不使用構(gòu)面,請使用a.代替變量名,例如 + facet_grid(. ~ cyl)。

3.6幾何對象

img
img

兩個圖都包含相同的x變量,相同的y變量,并且都描述相同的數(shù)據(jù)。但是情節(jié)并不相同。每個圖都使用不同的視覺對象來表示數(shù)據(jù)。用ggplot2語法,我們說它們使用不同的geoms。

geom是繪圖中用來表示數(shù)據(jù)的幾何對象。人們通常根據(jù)地塊使用的幾何類型來描述地塊。例如,bar charts use bar geoms, line charts use line geoms, boxplots use boxplot geoms, and so on.散點圖打破了趨勢。他們使用點幾何。如上所述,您可以使用不同的幾何圖形來繪制相同的數(shù)據(jù)。上側(cè)的圖使用點幾何,而下側(cè)的圖使用平滑幾何,即擬合數(shù)據(jù)的平滑線。

要更改繪圖中的幾何圖形,請更改添加到的幾何圖形功能ggplot()。例如,要繪制上面的圖,可以使用以下代碼:

 # up
 ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy))
 
 # down
 ggplot(data = mpg) + 
  geom_smooth(mapping = aes(x = displ, y = hwy))

要在同一圖中顯示多個幾何圖形,請將多個幾何圖形功能添加到ggplot():

  ggplot(data = mpg) +
  geom_point(mapping = aes(x = displ, y = hwy)) +
  geom_smooth(mapping = aes(x = displ, y = hwy))

進階:但是,這在我們的代碼中引入了一些重復(fù)。想象一下,如果您想將y軸更改為cty而不是hwy。您需要在兩個地方更改變量,而您可能忘記更新一個。您可以通過將一組映射傳遞到來避免這種重復(fù)ggplot()。ggplot2會將這些映射視為適用于圖中每個geom的全局映射。換句話說,此代碼將產(chǎn)生與先前代碼相同的圖:

 ggplot(data = mpg) +
  geom_point() + 
  geom_smooth()

如果將映射放置在geom函數(shù)中,則ggplot2會將其視為該圖層的本地映射。它將僅使用這些映射來擴展或覆蓋該層的全局映射。這使得可以在不同的層中顯示不同的圖形。

geom_point(mapping = aes(color = class)) + 
  geom_smooth()
 ??geom

練習(xí)

#在腦海中運行這段代碼,并預(yù)測輸出結(jié)果。然后,在R中運行代碼并檢查您的預(yù)測。
 ggplot(data = mpg, mapping = aes(x = displ, y = hwy, color = drv)) + 
  geom_point() + 
  geom_smooth(se = FALSE)
 
 ggplot(data = mpg) +
  geom_smooth(
  mapping = aes(x = displ, y = hwy, color = drv),
  show.legend = FALSE #不添加標簽 )

#這兩圖是否一致
 ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) + 
  geom_point() + 
  geom_smooth()

ggplot() + 
  geom_point(data = mpg, mapping = aes(x = displ, y = hwy)) + 
  geom_smooth(data = mpg, mapping = aes(x = displ, y = hwy))

重新創(chuàng)建生成以下圖形所需的R代碼。


image.png
image.png

3.7統(tǒng)計轉(zhuǎn)換

接下來,讓我們看一下條形圖。條形圖看起來很簡單,但是它們很有趣,因為它們揭示了一些關(guān)于圖的細微之處??紤]使用繪制的基本條形圖geom_bar()。下圖顯示了diamonds數(shù)據(jù)集中的鉆石總數(shù),按分組cut。該diamonds數(shù)據(jù)集進來GGPLOT2,并包含?54000顆鉆石,其中包括信息price,carat,color,clarity,和cut每顆鉆石的。圖表顯示,高質(zhì)量切割的鉆石比低質(zhì)量切割的鉆石更多。

 ggplot(data = diamonds) + 
  geom_bar(mapping = aes(x = cut))
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容