我學(xué)習(xí)的主要是這本書R for Data Science.
上圖是我們處理數(shù)據(jù)的流程
導(dǎo)入:首先结澄,必須將數(shù)據(jù)導(dǎo)入R泽本。
整理:導(dǎo)入數(shù)據(jù)后,需要整理一下冲秽,整理數(shù)據(jù)意味著以統(tǒng)一整齊的形式存儲數(shù)據(jù),我稱它為齊整數(shù)據(jù)颠通。
轉(zhuǎn)換:整理完數(shù)據(jù)后猪瞬,通常第一步是對其進行轉(zhuǎn)換。轉(zhuǎn)換包括縮小觀測范圍(提取)(例如一個城市中的所有人或去年的所有數(shù)據(jù))富岳,創(chuàng)建現(xiàn)有變量的函數(shù)的新變量(例如根據(jù)距離和時間來計算速度)以及計算一組統(tǒng)計信息(如計數(shù)或均值)蛔糯。
描述:一旦有了需要的變量的齊整數(shù)據(jù),就可以使用兩個主要的方式來描述它:可視化和建模窖式。
(1) 良好的可視化效果會反映出在輸入時的錯誤或者對數(shù)據(jù)提出新的問題蚁飒,或者反映出需要收集其他數(shù)據(jù)。
(2) 模型是可視化的補充工具萝喘。一旦問題變得足夠精確淮逻,就可以使用模型來描述回答琼懊。交流:數(shù)據(jù)統(tǒng)計科學(xué)的最后一步是交流(沒理解)。
我們首先從數(shù)據(jù)可視化開始學(xué)習(xí)爬早,先了解我們最后能得到一個什么樣fancy的結(jié)果肩碟,這里主要用到了ggplot2包。
1. Prerequisites
install.packages("tidyverse")
library(tidyverse)
我們使用ggplot2中的mpg數(shù)據(jù)框進行分析測試凸椿。 數(shù)據(jù)框是變量(列)和觀察值(行)的矩陣集合。 mpg包含美國環(huán)境保護署收集的有關(guān)38輛汽車的觀察結(jié)果翅溺。
mpg
#> # A tibble: 234 x 11
#> manufacturer model displ year cyl trans drv cty hwy fl class
#> <chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
#> 1 audi a4 1.8 1999 4 auto(l5) f 18 29 p compa…
#> 2 audi a4 1.8 1999 4 manual(m5) f 21 29 p compa…
#> 3 audi a4 2 2008 4 manual(m6) f 20 31 p compa…
#> 4 audi a4 2 2008 4 auto(av) f 21 30 p compa…
#> 5 audi a4 2.8 1999 6 auto(l5) f 16 26 p compa…
#> 6 audi a4 2.8 1999 6 manual(m5) f 18 26 p compa…
#> # … with 228 more rows
displ: 表示汽車引擎大心月(以升為單位)。
hwy: 高速公路上的汽車燃油效率咙崎,以英里/加侖(mpg)為單位优幸。 當(dāng)相同距離行駛時,低燃油效率的汽車比高燃油效率的汽車消耗更多的燃油褪猛。
2. Creating a ggplot
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy))
該圖顯示了發(fā)動機尺寸(排量)和燃油效率(高速)之間的負相關(guān)關(guān)系网杆。
ggplot()的第一個參數(shù)是要在圖形中使用的數(shù)據(jù)集。因此ggplot(data = mpg)創(chuàng)建了一個空圖伊滋,然后通過向ggplot()添加一層或多層來完成圖形碳却。
函數(shù)geom_point()在繪圖上添加了一層點,從而創(chuàng)建了一個散點圖笑旺。
ggplot2附帶了許多geom函數(shù)昼浦,每個函數(shù)都會在繪圖中添加不同類型的圖層。ggplot2中的每個geom函數(shù)都帶有一個映射參數(shù)筒主。這定義了數(shù)據(jù)集中的變量如何映射到視覺屬性关噪。映射參數(shù)始終與aes()配對,而aes()的x和y參數(shù)指定要映射到x和y軸的變量乌妙。
3. Aesthetic mappings
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy, color = class))
在上面的示例中使兔,我們將點的類別映射到顏色,我們也可以以相同的方式將類別映射到尺寸藤韵。
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy, size = class))
#> Warning: Using size for a discrete variable is not advised.
我們也可以將類映射到控制點的透明度的alpha虐沥,或控制點的形狀。
# Up
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy, alpha = class))
# Down
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy, shape = class))
ggplot2一次只能使用六個形狀荠察。對于每種映射置蜀,都可以使用aes()將映射名稱與要顯示的變量相關(guān)聯(lián)。
還可以手動設(shè)置幾何圖形的映射屬性悉盆。例如盯荤,我們可以將圖中的所有點設(shè)為藍色:
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy), color = "blue")
要手動設(shè)置映射,需按名稱將映射設(shè)置為geom函數(shù)的參數(shù)焕盟, 需要選擇一種適合該美學(xué)的水平:
- 顏色的名稱秋秤,為字符串宏粤。
- 點的大小,以毫米為單位灼卢。
- 點的形狀為數(shù)字绍哎,如圖所示。
4. Facets
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy)) +
facet_wrap(~ class, nrow = 2)
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy)) +
facet_grid(drv ~ cyl)
5. Geometric objects
# Up
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy))
# Down
ggplot(data = mpg) +
geom_smooth(mapping = aes(x = displ, y = hwy))
ggplot2中的每個geom函數(shù)都帶有一個映射參數(shù)鞋真。 可以設(shè)置點的形狀崇堰,或者可以設(shè)置線的線型。 例如:geom_smooth()將為映射到線型的變量的每個唯一值繪制一條不同的線涩咖,并使用不同的線型海诲。
ggplot(data = mpg) +
geom_smooth(mapping = aes(x = displ, y = hwy, linetype = drv))
許多幾何圖形(例如geom_smooth())都使用單個幾何對象顯示多行數(shù)據(jù)。ggplot2將為分組
group
變量的每個唯一值繪制一個單獨的對象檩互。
ggplot(data = mpg) +
geom_smooth(mapping = aes(x = displ, y = hwy))
ggplot(data = mpg) +
geom_smooth(mapping = aes(x = displ, y = hwy, group = drv))
ggplot(data = mpg) +
geom_smooth(
mapping = aes(x = displ, y = hwy, color = drv),
show.legend = FALSE
)
要在同一圖中顯示多個幾何特幔,可以將多個幾何函數(shù)添加到ggplot()中:
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy)) +
geom_smooth(mapping = aes(x = displ, y = hwy))
如果將映射放置在geom函數(shù)中,則ggplot2會將其視為該圖層的局部映射闸昨。 它將僅使用這些映射來擴展或覆蓋該層的全局映射蚯斯。 這可以實現(xiàn)在不同的圖層顯示不同的映射。
ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) +
geom_point(mapping = aes(color = class)) +
geom_smooth()
可以使用相同的想法為每個圖層指定不同的數(shù)據(jù)饵较。 在這里拍嵌,我們的平滑線僅顯示mpg數(shù)據(jù)集的一個子集,即小型汽車循诉。 geom_smooth()中的局部數(shù)據(jù)參數(shù)僅覆蓋該層的ggplot()中的全局數(shù)據(jù)參數(shù)撰茎。
ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) +
geom_point(mapping = aes(color = class)) +
geom_smooth(data = filter(mpg, class == "subcompact"), se = FALSE)