Datacamp學習筆記(1)——R語言中的Tidyverse

2021-03-06 Yifei Psycho Lab

       Datacamp是一個很棒的學習程式語言的網站!在這個網站中,可以學習R,Python等很火併且對於心理學專業很實用的編程技能!我買了一年的會員,目前趁著一直在家待著,沒事就學習一下,也就想到了在這分享一下學習的內容。現在覺得敲代碼還真是挺有意思的,至少可以看著繁雜的數據變得整齊、可視化,也覺得蠻有成就感。今天就是學習筆記的第一部分,TIDYVERSE!也推薦大家也可以用TIDYVERSE來對自己的實驗數據進行一下整理和可視化。給大家看一個實例,感受一下經過整理和可視化的數據。

       

目錄:

Data Wrangling

Data Visualization

Grouping and summarizing

Types of visualization

 Data Wrangling(數據整理)

      Tidyverse的第一個功能就是數據的整理,在這個功能中我們第一個用到的package就是dplyr,使用這個包,我們能夠對我們的數據進行一系列處理,例如filter(篩選),summarize(進行計算,例如平均值,中位數等)。Datacamp的實例使用的是gapminder,是一個描各個國家在不同年份的GDP、人口數量等數據,那我分享時也採用這個數據。

       現在開始操作吧!先把需要的給加載起來!

1# 載入gapminder數據
2library(gapminder)
3
4# 載入dplyr包
5library(dplyr)
6
7# 查看gapminder
8gapminder

       現在數據和包都加加載好了,看一下gapminder長啥樣!

      1704行的數據,還是很龐大的,所以我們要做的就是一步步的梳理數據,然後看到我們想看到的部分。如果我們想要對這些數據進行操作,那我們要用到dplyr中的verbs,第一個就是filter,它可以幫助我們篩選數據,例如我們篩選所有2007年的數據。在這裡shouxian 需要注意的是,我們用到了%>%這個符號,它在R中的意思是管道,類似於流水線上的工人,在確認了上一步的操作後,做一個標記,然後進入下一步,因此每一步都要表上pipe。其次在filter中,我們使用了「==」而不是「=」,這個我們學院開設psychopy的時候講過兩者的區別,在這裡一定使用「==」,否則會報錯。

1library(gapminder)
2library(dplyr)
3
4# 篩選出2007年的數據
5gapminder %>%
6  filter(year == 2007) %>%

      篩選出的數據如下,可以看到,year這一部分全部是2007,然後數據的行數變成了142行,這表明我們完成了對於year這一變量的篩選!想要篩選其他的變量,也是同樣滴操作。

       filter還可以同時篩選多個變量,比如:

1library(gapminder)
2library(dplyr)
3
4# 篩選出2007年和亞洲的數據
5gapminder %>%
6  filter(year == 2007, continent = "Asia") %>%

       第二個動詞是arrange,這個verb可以幫助我們對數據按照大小進行排序,在其中加入desc的話還可以按照從大到小的順序將數據排列。例如我們對gdpPercap進行排序

1gapminder %>% 
2arrange(desc(gdpPercap))

       效果就是這樣滴:

       第三個verb是mutate,mutate可以對數據中的列進行更改或者增加列,可以用"* / + -"對變量進行計算,這裡我們展示如何增加列,和更改列是相似的操作。

1gapminder %>% 
2mutate(gdp = gdpPercap * pop)

       我們可以看到,在數據中,增加了gdp這一列,是我們通過計算得出來的,也可以使用mutate對數據進行更多的操作,自己探索吧!

       當使用多個verb時,我們要在每一個動作後面加上pipe,也就是%>%,要不然會報錯的!正確示範如下圖:

1gapminder %>% 
2mutate(gdp = gdpPercap * pop) %>% 
3filter(year == 2007) %>% 
4arrange(desc(gdp))

  2. Data Visualization(數據可視化)

       在這裡,我們加入了一個新的package——ggplot2!在這個介紹中,使用起來非常方便,只需要設置好使用的數據、x軸、y軸、圖表樣式等,就能給數據畫出好看的圖片(個人對於給數據畫圖還挺鍾愛的)。

1# 載入ggplot2包
2library(ggplot2) 
3# 使用gapminder數據畫圖,x軸為gdpPercap,y軸為lifeExp,設置為散點圖
4ggplot(gapminder, aes(x = gdpPerCap, y = lifeExp)) + geom_point()

       看看我們畫出來的圖:還是有點東西的嘿嘿。其中geom_point()是將圖設置為散點圖。

       下面我們看一下如何將畫出來的散點圖上色,例如我們以continent的不同類別來區分散點:其中scale_x_log10()是將x軸的單位轉化為log10,雖然我也不知道為什麼哈哈。

1# 載入所需packages
2library(ggplot2) 
3library(dplyr)
4library(gapminder)
5# 篩選出只包含2007年數據的數據集
6gaominder_2007 <- gapminder %>%
7  filter(year == 2007)
8# 使用gapminder數據畫圖,x軸為gdpPercap,y軸為lifeExp,設置為散點圖
9ggplot(gapminder_2007, aes(x = gdpPerCap, y = lifeExp, color = continent)) 
10+ geom_point()
11+ scale_x_log10()

       畫出來的圖,就是帶上了鮮豔的顏色的圖片,非常的美觀,顏色的話是R自己設置的,不用我們自己設置嘿嘿。

       我們還可以通過設置facet,來同時呈現多個圖片,這樣我們就可以根據continent的分類,把每一個continent的數據單獨呈現在表中。在這裡我們還添加了size這個選項,這樣設置,散點的大小會根據pop的大小變化,讓數據的大小更加直觀!(facet_wrap後面的~是by的意思)

1ggplot(gapminder, aes(x = gdpPercap, y = lifeExp, size = pop, color = continent))
2+ geom_point() 
3+ scale_x_log10() 
4# 設置facet,根據continent分解
5+ facet_wrap(~ year)

       效果:

  3. Grouping and Summarizing

      這裡我們又引入一個新verb——summarize。顧名思義,這個verb可以幫助我們對數據進行一個總結,可以進行mean, sum, median, min, max的操作。用法如下:  

1gapminder %>% filter(year == 2007) %>% 
2summarize(meanLifeExp = mean(lifeExp), 
3          totalPop = sum(pop))

      這樣我們就總結出了兩個新的變量,meanLifeExp,是lifeExp的平均值,totalPop,是pop的和。

       在summarize前使用group_by這個verb,可以把我們想整理的數據按照group_by的變量先行合併,比如:

1gapminder %>% 
2# 根據year變量,將數據分組
3group_by(year) %>% 
4summarize(meanLifeExp = mean(lifeExp), 
5          totalPop = sum(pop))

       這樣我們得出來的數據就不像剛才那樣是兩個數字了,而是根據年份下的一個列表!

       下面我們可以嘗試用經過group和summarize後的數據,來進行visualization!

1# 創建一個by_year_continent數據集
2by_year_continent <- gapminder %>% 
3group_by(year, continent) %>% 
4summarize(totalPop = sum(pop), meanLifeExp = mean(lifeExp)) 
5# 使用ggplot2給by_year_continent畫個圖
6ggplot(by_year_continent, aes(x = year, y = totalPop, color = continent)) 
7+ geom_point() 
8+ expand_limits(y = 0) # 將y軸起點設置為0

       如圖所示:

  4. Types of Visualization

       使用ggplot2還可以畫出其他樣式的圖,包含線圖、柱狀圖、直方圖、箱圖,下面簡略的附上代碼和成圖。不同的圖,基本上後面就是改一下geom_後面的部分。

       線圖:

1library(gapminder)
2library(dplyr)
3library(ggplot2)
4
5# 創建by_year這個數據集,根據不同年份計算gdpPercap的中位數並保存
6by_year <- gapminder %>%
7  group_by(year) %>%
8  summarize(medianGdpPercap = median(gdpPercap))
9
10# 畫一個gdpPercap隨年份變化的線圖
11ggplot(by_year, aes(x = year, y = medianGdpPercap)) 
12+ geom_line() 
13+ expand_limits(y = 0)

       效果圖:

       柱狀圖:

1library(gapminder)
2library(dplyr)
3library(ggplot2)
4
5# 篩選出Ocieania洲的1952年數據
6oceania_1952 <- gapminder %>%
7  filter(continent == "Oceania", year == 1952)
8
9# 繪製柱狀圖
10ggplot(oceania_1952, aes(x = country, y = gdpPercap)) 
11+ geom_col()

       效果圖:

       直方圖:

1library(gapminder)
2library(dplyr)
3library(ggplot2)
4
5# 篩選出1952年的數據,並將pop的單位換算成百萬
6gapminder_1952 <- gapminder %>%
7  filter(year == 1952) %>%
8  mutate(pop_by_mil = pop / 1000000)
9
10# 用pop_by_mil繪製直方圖
11ggplot(gapminder_1952, aes(x = pop_by_mil)) +
12  geom_histogram(bins = 50)

       效果圖:

       最後一個box plot!

1gapminder_1952 <- gapminder %>%
2  filter(year == 1952)
3
4# 繪製box plot,比較1952年不同continent之間的gdpPercap
5ggplot(gapminder_1952, aes(x = continent, y = gdpPercap)) 
6+ geom_boxplot() 
7+ scale_y_log10()

       效果圖:

       寫這麼多累死我了我靠!以後再更!!一起學習R嘿嘿

       材料來源:www.datacamp.com

相關焦點

  • 【數據管理】Tidyverse:R 語言學習之旅的新起點
    學習R語言的傳統路徑(base R first)多是從變量類型、數據結構、流程控制、循環與自定義函數,也就是以R程式設計作為起點,接著依照數據處理、視覺化、統計與機器學習等應用偏好延續下一個學習的旅程;由tidyverse
  • R語言 | Tidyverse包入門介紹
    以此為契機,統計學家Hadley Wickham開發出了一系列數據處理的包,整合成為一個,這就是tidyverse包,它裡面包括了與數據處理相關的內容,如ggplot2,dplyr,tidyr,tibble等等。你可以直接調用tidyverse,也可以調用它所轄屬的包。下面,我們講解一些tidyverse中可能使用到的函數,幫助你快速上手這個方便的東西。
  • Tidy時代R語言學習的一些ABC
    最初的想法,是把這個公眾號作為一個「筆記本」,記錄一下自己工作中用到的新工具、解決的小問題或者論文筆記什麼的。當然,寫著寫著,不自覺地還是變成了寫教程。畢竟,多年教師的經歷,「寫教案」已經成為自己整理知識的一種習慣。那麼,以後主要就來寫教程吧。
  • R語言學習指南(3) tidyverse的基礎使用
    tidyverse是為數據科學設計的R軟體包,它包含(ggplot2、dplyr、tidyr、stringr、magrittr、tibble)等一系列熱門軟體包,學好tidyverse的使用可也讓你站上另一個高度,從而高效的處理數據,因此本文檔不僅僅做一些案例介紹,而是希望以較為正確的學習方法來介紹R語言,使大家少走彎路,快速入門掌握R語言
  • 【tidyverse】R中的tidyverse入門
    要了解這些工具及其協同工作的更多信息,請閱讀R for data science。 對於R的新手,請查看我之前的Storybench教程:RStudio筆記本中的R入門。以下教程將介紹tidyverse中用於構建和分析數據集的一些基本功能。 這是關於清理數據的三部分系列中的第一部分,使用tidyverse在R中對其進行可視化。
  • R入門?從Tidyverse學起!
    那麼,tidyverse就提供了一個很好的學習思路(tidyverse first),讓我們先忽略編程這道大關,其理念是一開始不談向量、矩陣、數據框、因子、流程控制等概念,直接從數據的操縱入手,讓初學者在最短時間內學會數據的處理與可視化應用。
  • tidyverse —— readr包
    相比於base包,其優勢在於速度快,能提速十餘倍;相比於data.table包,其速度稍有遜色,作者Hadley大叔表示,差個1.2到2倍速度的樣子,但是,在讀取過程中能對數據進行更加精細的解析。下面介紹其主要函數。主要參考R for Data Science一書,http://r4ds.had.co.nz/data-import.html#getting-started。
  • R語言必知必會之tidyverse(一):管道操作
    徵得張敬信老師同意,本號將轉載張老師關於R語言tidyverse包一系列文章,為大家進行醫學研究提供助力。
  • 從另一個視角看 R 語言的方言 Tidyverse
    中文翻譯及投稿至 COS 經過作者同意[1]。文中的「我」為作者視角,但譯文中存在的任何不妥之處當然很可能是由譯者引入的,還望讀者不吝賜教[2]。注意:此為簡版在我看來,Tidyverse 的主要問題在於其不利於教學。我相信使用 Tidyverse 而非 base-R 實際上會阻礙對沒有編寫代碼背景的初學者進行教學。
  • R語言入門教程 | tidyverse包之數據處理
    大家在學習R語言的時候,大多參考《R語言實戰》這本書,但這本書年代過於久遠
  • tidyverse —— readxl包
    readxl包,讀取Excel文件專用包,有和tidyverse核心包一樣的特點,快!效率特高!話說Hadley大叔出品就沒有效率低的,可能鍵盤是借來的,著急還。獨立性高,不外部依賴Java啥的,xls和xlsx文件讀取都可以。
  • 數據清理工具簡介(Tidyverse)
    為了加快數據清理的效率,同時為以後的建模和數據可視化做準備,R語言的Tidyverse包可以提供非常優秀的數據清理、整合和可視化的「一站式服務」。Tidy 數據簡介 (Tidy data)為了更好的分析數據,我們需要將數據整合成Tidy格式 (Fig. 1)。Tidy 格式主要思想是儘量減少不同觀測值之間的耦合,以保證:
  • [R數據科學]tidyverse數據清洗案例詳解
    介紹本中你將學習在R中數據處理簡潔的方法,稱為tidy data。將數據轉換為這種格式需要一些前期工作,但這些工作從長遠來看是值得的。一旦你有了整潔的數據和一些包提供的整潔工具,您將花費很少時間將數據從一種表示轉換到另一種,從而可以將更多的時間花在分析問題上。
  • 大數據學習資源之DataCamp
    (ૢ˃ꌂ˂ૢ))今天來給大家簡單介紹一個免費的大數據學習資源平臺——DataCamphttps://www.datacamp.com/courses從名字組成就可以得知,Data Camp (Campus) —— 「數據校園」。
  • R語言 | 數據操作dplyr包
    [更新~] Python網絡爬蟲與文本數據分析公眾號只帶著Python字眼,卻分享著R語言,不務正業,任性了~dplyr簡介dplyr是R語言的數據分析包,很像python中的pandas,能對dataframe
  • 【好書共享】《R for Data Science》的中譯版
    這本書原版就是開源的(網址:http://r4ds.had.co.nz/),但是中文看得更快,學R語言一定要買一本紙質書放在案頭,多多翻閱。R for Data Science關於這本書這本書將教我們如何用R來做數據科學:學習如何將自己的數據導入R中,把它變成最有用的結構,轉換,可視化並對數據進行建模。
  • R語言空間數據分析學習筆記2——數據基本操作
    本節將會學習如何利用地理空間數據進行連接、篩選等操作,首先我們加載軟體環境和數據。
  • R語言如何檢測和處理數據缺失值?
    這篇文章,總結和分享R語言如何檢測數據中的缺失值,以及針對不同情形下處理缺失值的方法。R語言可以使用is.na()函數來判斷數據集的取值是否為缺失值,並且利用一些匯總函數可以概述數據整體的缺失率、每個樣本的缺失率和每個變量的缺失率。R語言也提供可視化工具來直觀展示變量的缺失分布情況。
  • R語言學習路上的憶苦思甜
    給出的原始數據是這個樣子的## 我喜歡用data.table中的fread讀取數據,參數data.table=F,限定讀入數據後是data.frame。data <- data.table::fread("Temperature.txt",data.table = F)年代是從1990到2005
  • 我的R語言學習方法
    1)為什麼要學習R語言,即學習R語言的目的和動機2)怎麼學習R語言,即學習R語言舉措和行動3)要學習R語言的什麼,即學習的結果和成果給大家一分鐘時間,大家可以思考一下,可以把答案在後面留言或者進入R語言公眾號,加入群,一起討論。我說一下自己的Why-How-What。