現在數據科學,深度學習領域最受歡迎的是Python, 那麼為什麼要學習R語言,Python 和 R 的優勢分別在哪兒?
簡單來說,R語言更適用與研究,偏數理統計,小而精,適合將來做科研學術。Python更適用於工業領域,普適性,通用性,計算性能更好,更適合做程式設計師或者進入企業。
所以首先需要確定自己的需求,R不一定適合每一個人。如果你是想認真學習編程思維,底層邏輯,那麼R並不是一個很好地選擇。但如果你只是需要一個工具,來幫你實現問題的分析,建模,解釋和展示,那麼R是一個很好地選擇。R語言更適合高校研究從事數據分析,數據可視化,數理統計建模。數據科學的基本流程如圖所示,在R上我們可以愉快的實現數據分析的全部流程。
2. 什麼是R?什麼是Rstudio?R 是一種運行計算的程式語言, 而 RStudio 是一種集成開發環境 (IDE),它通過添加許多方便的功能和工具來提供接口,使用 RStudio 的界面也使得用 R 變得更加容易。當然還有很多IDE可以用來進行R語言編程,如Sense, RIDE,甚至Jupyter notebook 以及 VS code 也都可以用來編程R,但這些都需要相對更高的門檻,相對更推薦使用Rstudio 進行R編程的全流程工作。
3. 安裝R和Rstudio首先你需要做的就是安裝R和Rstudio到你的電腦,順序一定是先安裝R,再安裝Rstudio。
3.1 安裝R官網下載地址https://cloud.r-project.org/,但是這個網址是國外的,下載速度較慢。建議用國內的鏡像站:
如果你是Windows,Mac os, Linux 用戶分別點擊對應的 "Download R for windows", "Download R for (MAC) OS", "Download R for Linux" 下載最新版本的R-4.1.0即可。
如果是Windows用戶建議不要安裝在系統盤內,且安裝路徑一定要是英文,不能有空格,如果Windows系統用戶名是中文應先改成英文。
3.2 安裝Rstudio找到 「Installers for Supported Platforms」 按鈕,並對應自己的電腦系統下載對應版本的Rstudio客戶端。
https://www.rstudio.com/products/rstudio/download/
安裝好Rstudio後打開界面展示如下:
4. 怎樣在Rstudio裡編程?現在已經設置了 R 和 RStudio,「現在我如何使用 R?」。首先要注意的是,與 Excel、SPSS 等其他提供點擊式界面的統計軟體程序不同,R 是一種解釋性語言。這意味著您必須輸入用 R 代碼編寫的命令。換句話說,你必須在 R 中編碼/編程。
雖然使用 R 不需要是經驗豐富的編碼員/電腦程式員,但如果你是新接觸程式語言這裡需要了解一些基本編程概念。
介紹一些基本的編程概念和術語。
基本:
console pane:您輸入命令的地方。
Running code 運行代碼:通過在控制臺中給出命令來告訴 R 執行一個行為的行為。
數據類型:integers 整數、 doubles/numerics 雙精度/數字、 logicals 邏輯和 characters 字符。整數是像 -1、0、2、4092 這樣的值。雙精度或數字是一組更大的值,既包含整數,也包含分數和小數值,如 -24.932 和 0.8。邏輯是 TRUE 或 FALSE,而字符是文本,例如「你」、「我」、「R語言真好」,注意,字符通常用引號括起來表示。
vectors向量:一系列值。這些是使用 c() 函數創建的,其中 c() 代表「組合」或「連接」。例如, c(2, 11, 22, 33, 91, 99) 創建一個六元素系列的正整數值。
factors因子:分類數據通常在 R 中表示為因子。分類數據也可以表示為字符串。如成績可以分為 優,良,及格。
data frames 數據框:它們是 R 中數據集的表示,其中行對應於觀測,列對應於描述觀測的變量。
Conditionals條件:
R中=用於賦值,== 用於測試是否相等,例如 3+4 == 7 判斷3+4 是否等於7,將返回TRUE。而 3+4 = 7將發生錯誤
布爾代數:TRUE/FALSE 語句和數學運算符,例如 <(小於)、<=(小於或等於)和 !=(不等於)。例如,4 + 2 >= 3 將返回 TRUE,但 3 + 5 <= 1 將返回 FALSE。
邏輯運算符:& 表示「與」以及 |代表「或」。例如, (2 + 1 == 3) & (2 + 1 == 4) 返回 FALSE,因為兩個子句都不為 TRUE(只有第一個子句為 TRUE)。另一方面, (2 + 1 == 3) | (2 + 1 == 4) 返回 TRUE,因為這兩個子句中至少有一個是 TRUE。
Functions函數,也稱為命令:函數在 R 中執行任務。它們接受稱為參數的輸入並返回輸出。可以手動指定函數的參數或使用函數的默認值。
例如,R 中的函數 rnorm() 隨機生成正態分布的數。rnorm(n, mean=0, sd=1), n為生成數字的個數,mean均值和sd標準差默認為0和1。你可以自己修改,在命令窗口輸入`rnorm(3,mean=2,sd=3)``,按下enter.
R各種類型的包package可以說是R最大的特色了,比如最為出名的ggplot2可視化包。那什麼是R packages呢?如果把R作為一個手機的底層程序編碼,那麼package 就是手機上的各個APP。
R一些常用流行的包主要包括:
readr導入csv/fwf文件, readxl導入.xls/.xlsx文件, haven導入SPSS/Stata/SAS文件
tidyverse , data.table
ggplot2, cowplot.
5.1 包的安裝點擊 [Tools] ---- [Global Options…], 點擊 Packages, 點擊Change 修改為清華大學鏡像源,China(Beijing1)
1install.packages("tidyverse")
2install.packages("haven")
1install.packages("devtools")
2devtools::install_github("tidyverse")
3remotes::install_github("tidyverse")
1library(tidyverse)
1## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.0 ──
1## ✓ ggplot2 3.3.3 ✓ purrr 0.3.4
2## ✓ tibble 3.1.1 ✓ dplyr 1.0.5
3## ✓ tidyr 1.1.3 ✓ stringr 1.4.0
4## ✓ readr 1.4.0 ✓ forcats 0.5.1
1## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
2## x dplyr::filter() masks stats::filter()
3## x dplyr::lag() masks stats::lag()
1library(data.table)
1##
2## Attaching package: 'data.table'
1## The following objects are masked from 'package:dplyr':
2##
3## between, first, last
1## The following object is masked from 'package:purrr':
2##
3## transpose
1library(ggplot2)
2library(bruceR)
1##
2## ⚡ bruceR: BRoadly Useful Convenient and Efficient R functions
3##
4## Loaded R packages:
5## [Data]: rio / dplyr / tidyr / stringr / forcats / data.table
6## [Stat]: psych / emmeans / effectsize / performance
7## [Plot]: ggplot2 / ggtext / cowplot / see
8##
9## Frequently used functions in `bruceR`:
10## set.wd() / Describe() / Freq() / Corr() / Alpha() / MEAN()
11## MANOVA() / EMMEANS() / model_summary() / theme_bruce()
1update.packages("ggplot2")
2
3# 更新所有包
4update.packages()
1remove.packages("data.table")
通過以上的配置對於R,Rstudio和Packages有了基本的認識。現在假設你有一個數據,你想對其進行數據處理分析建模解釋等等一系列的工作。那麼可以簡單分為以下幾個步驟:
在Rstudio內創建一個Project項目
[File] --- [New Project] --- [New Directory] --- [New Project]
輸入你的項目名稱【"first project"】,選擇項目存儲位置,注意存儲路徑不要有中文。確定,這時候在你屏幕的右上角你就可以看到你的項目名稱了。
新建R腳本編寫R代碼
創建 [R Script], 命名"first.R", 保存到你項目的保存文件夾內。
1getwd()
1## [1] "/Users/cpf/Documents/paper/writting_blog/"
1install.packages("tidyverse")
2install.packages("bruceR")
3
4library(tidyverse)
5library(bruceR)
使用import函數可以導入csv,exel等多種格式的文件,優先建議使用這個函數導入。
1# mydata = import("~/yourpath/data.csv")
2
3# 也可以使用R自帶的數據集
4data("weather", package = "nycflights13")
1glimpse(weather)
1## Rows: 26,115
2## Columns: 15
3## $ origin <chr> "EWR", "EWR", "EWR", "EWR", "EWR", "EWR", "EWR", "EWR", "EW…
4## $ year <int> 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013,…
5## $ month <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
6## $ day <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
7## $ hour <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, …
8## $ temp <dbl> 39.02, 39.02, 39.02, 39.92, 39.02, 37.94, 39.02, 39.92, 39.…
9## $ dewp <dbl> 26.06, 26.96, 28.04, 28.04, 28.04, 28.04, 28.04, 28.04, 28.…
10## $ humid <dbl> 59.37, 61.63, 64.43, 62.21, 64.43, 67.21, 64.43, 62.21, 62.…
11## $ wind_dir <dbl> 270, 250, 240, 250, 260, 240, 240, 250, 260, 260, 260, 330,…
12## $ wind_speed <dbl> 10.35702, 8.05546, 11.50780, 12.65858, 12.65858, 11.50780, …
13## $ wind_gust <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 20.…
14## $ precip <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
15## $ pressure <dbl> 1012.0, 1012.3, 1012.5, 1012.2, 1011.9, 1012.4, 1012.2, 101…
16## $ visib <dbl> 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,…
17## $ time_hour <dttm> 2013-01-01 01:00:00, 2013-01-01 02:00:00, 2013-01-01 03:00…
1#
2mydata2 = weather %>%
3 select(c(year, month, hour, temp, dewp, humid)) %>% # 選擇這些列
4 filter(year == 2013) %>% # 選擇2013年的觀測
5 mutate(yearnew = year + 1) # 創建新列yearnew
6
7glimpse(mydata2)
1## Rows: 26,115
2## Columns: 7
3## $ year <int> 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 20…
4## $ month <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
5## $ hour <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19,…
6## $ temp <dbl> 39.02, 39.02, 39.02, 39.92, 39.02, 37.94, 39.02, 39.92, 39.92,…
7## $ dewp <dbl> 26.06, 26.96, 28.04, 28.04, 28.04, 28.04, 28.04, 28.04, 28.04,…
8## $ humid <dbl> 59.37, 61.63, 64.43, 62.21, 64.43, 67.21, 64.43, 62.21, 62.21,…
9## $ yearnew <dbl> 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 20…
1export(mydata2, file= "~/yourpath/.mydata2.csv")