R語言的入門學(xué)習(xí)筆記(部分)

本文首發(fā)在陳銳博客(7988888.xyz),此文章中所有鏈接均通過博客進(jìn)行訪問。
本文學(xué)習(xí)主要為打卡內(nèi)容使用,非教程。
內(nèi)容來源:本學(xué)習(xí)教程主要參考來源網(wǎng)址:https://rlearning.netlify.app/
輔助視頻教程:B站:https://www.bilibili.com/video/BV19x411X7C6?p=24
本學(xué)習(xí)內(nèi)容課程大綱
Task00:熟悉規(guī)則與R語言入門(1天)
安裝
環(huán)境配置
Task01 數(shù)據(jù)結(jié)構(gòu)與數(shù)據(jù)集 (3天)
編碼基礎(chǔ)
數(shù)據(jù)類型
特殊數(shù)據(jù)類型
table like 數(shù)據(jù)類型
加載數(shù)據(jù) (csv, rds, excel, Rdata)
實例
Task02 數(shù)據(jù)清洗與準(zhǔn)備 (3天)
重復(fù)值處理
缺失值識別與處理
異常值識別與處理
特征處理
規(guī)范化與偏態(tài)數(shù)據(jù)
Task03 基本統(tǒng)計分析 (3天)
多種方法獲取描述性統(tǒng)計量
分組計算描述性統(tǒng)計
頻數(shù)表和列聯(lián)表
相關(guān)
方差分析
Task04 數(shù)據(jù)可視化(3天)
ggplot2包介紹
散點圖
直方圖
柱狀圖
餅狀圖
折線圖
ggplot2擴(kuò)展包主題
Task05 模型(3天)
回歸模型
分類模型
本次學(xué)習(xí)根據(jù)課程大綱安排,將在2021年8月16日-2021年8月31日完成學(xué)習(xí)
Task00 R/Rstudio的安裝
R語言下載網(wǎng)址:https://cloud.r-project.org/,R 語言是一門用于統(tǒng)計計算與繪圖的編程語言和開源軟件
RStudio下載網(wǎng)址:https://www.rstudio.com/products/rstudio/ 它包括一個控制臺、語法突出顯示的編輯器、直接執(zhí)行代碼的支持,以及用于繪圖、歷史記錄、調(diào)試和工作區(qū)管理的工具。
對于安裝過程,可百度進(jìn)行。

在console窗口中可查詢包的用法信息,通過輸入首字母然后可通過鍵盤按鍵Tab進(jìn)行補(bǔ)全包的名稱。

可通過在Console輸入getwd()函數(shù)來獲取當(dāng)前工作路徑
右下角圖展示的當(dāng)前項目中的文件數(shù)據(jù)等
調(diào)整寫代碼的顏色主題:
Global Options-Appearance-RStudio Theme

快捷按鍵:
window:
control + ?? 可一次性查詢歷史記錄
alt+shift+k
MacOS:
Command + ?? 可一次性查詢歷史記錄
option+shift+k 查詢所有快捷操作

ESC中斷語句進(jìn)行
cltr + L清除console中的記錄
切換鏡像源:
由于網(wǎng)速慢的原因,有時安裝包會安裝失敗。
通過將包安裝切換至中國鏡像來解決:點【Tools】→【Global Options...】→【Packages】→【Change...】→【選中一個中國鏡像】→【OK】→【OK】。如下圖,以后安裝包都會通過這個鏡像。

R包的安裝:
在選中合適的鏡像源后,可在console窗口,輸入命令
在線安裝:
install.packages("包名稱")
離線安裝:
下載好安裝文件后,通過packages-install-選擇安裝路徑

查看已安裝的全部R包:
.packages(all.available = T)查看單獨的包:
library("包名")Task01 數(shù)據(jù)結(jié)構(gòu)與數(shù)據(jù)集
Getwd()獲取路徑
在 R Studio 中可以使用快捷鍵
window:
Alt + -來輸入<-
Mac:
option + -來輸入<-
在R語言中的基礎(chǔ)運算符號過程

賦值:
在 R 中基礎(chǔ)賦值的符號有三種:
一個向左的箭頭
<-表示將箭頭右方的值取名叫做箭頭左側(cè)的名字,或者將箭頭右側(cè)的值存儲在箭頭左側(cè)的名字里;一個向右的箭頭
->表示將箭頭左側(cè)的值儲存在箭頭右側(cè)的名字里;一個等號
=表示將箭頭右側(cè)的值存儲在箭頭左側(cè)的名字里。
x <-1
y <-2
x+y函數(shù):其實就是某些功能的賦值,比如addone此時就是函數(shù)
addone <- function(x = 0) {
x + 1
}loop循環(huán):
R 中的循環(huán)函數(shù)包括for,while,和repeat
for用法:
for (variable in vector) {
}在console窗口輸入?for即可查找相關(guān)用法,或在help欄中輸入也可

此處R中的loop用法跟Python中的很像,主要是條件的判斷。
管道pipe:說起來就是簡化函數(shù)的定義,能更方便的修改和識別函數(shù)。
可以參考此篇文章的解答:https://zhuanlan.zhihu.com/p/43423747和https://zhuanlan.zhihu.com/p/339107871
數(shù)據(jù)類型:
在R中有五種基礎(chǔ)數(shù)據(jù)類型,包括三個數(shù)值型、一個邏輯型和一個字符型。
數(shù)值型數(shù)據(jù)包括三種,分別是默認(rèn)的實數(shù)數(shù)值型數(shù)據(jù)(double)、整數(shù)類型(integer)和復(fù)數(shù)類型(complex):
#numeric
a<-1000.111
#integer
b<-1000
#complex
c<-2 + 3i判斷數(shù)值類型:
typeof()邏輯型(logical)數(shù)據(jù)只包括兩個值,TRUE(T) 和 FALSE(F):
字符型數(shù)據(jù)(character)可以總結(jié)為“任何帶引號的值”。在Python中表示未字符串類型string
向量vector,向量是由一組相同類型的值組成的一維序列。vec_num <- c(1, 2, 3),在向量中可使用sum、mean等函數(shù)進(jìn)行計算。sum(vec_num) = 6
因子(factor),可以使用函數(shù)factor和c組合來創(chuàng)建。它與字符向量的主要區(qū)別在于因子向量的獨特值(levels)是有限個數(shù)的。
數(shù)值類型轉(zhuǎn)換:
按照自由程度將已經(jīng)提到的幾種向量以從高到低的排序可得
字符>數(shù)值>邏輯
在數(shù)值型內(nèi)的排序從自由度高到低為
復(fù)數(shù)>實數(shù)>整數(shù)
三種截取子集的符號:[、[[ 和 $(其中$不能用在基礎(chǔ)向量上)
特殊數(shù)據(jù)類型
日期:處理的包(lubridata)
時間序列time series,首先要確保安裝了forecast包
library(forecast)
gas %>%
auto.arima() %>%
forecast(36) %>%
autoplot()
矩陣(matrix)
在R里,矩陣是一個按照長方陣列排列的、有著固定行數(shù)和列數(shù)的、包含同一類型數(shù)據(jù)的集合??墒褂煤瘮?shù)matrix
對于一個矩陣來說,主要的命名集中于行名rownames和列名colnames:
列表(list)
它和向量或者矩陣不一樣,在一個列表中可以儲存各種不同的基本數(shù)據(jù)類型。你既可以存三個數(shù)字,也可以把數(shù)值型、字符型、邏輯型混合
數(shù)據(jù)表(data frame與tibble)
一個數(shù)據(jù)表(data frame)的本質(zhì)是一個列表(list)
內(nèi)置數(shù)據(jù)集
使用data命令來查看、使用可用數(shù)據(jù)集

讀取數(shù)據(jù)文件
# 讀取csv文件
library(readr)
h1n1_flu <- read_csv("h1n1_flu.csv")
# 保存csv文件
write_csv(h1n1_flu, "h1n1_flu.csv")
R也可以直接讀取其他軟件的數(shù)據(jù)類型。這里列舉使用haven包讀寫 SPSS 的 sav 和 zsav、 Stata 的 dta、SAS 的 sas7bdat 和 sas7bcat。
library(haven)
#SPSS
read_spss()
write_spss()對于函數(shù)的介紹,可參考文章《R語言函數(shù)總結(jié)》
練習(xí)題

Task02 數(shù)據(jù)清洗與準(zhǔn)備
這一章節(jié)有點難,需要花時間來琢磨。主要是對包的加載和使用其中的函數(shù)不了解。
環(huán)境配置(包加載)

數(shù)據(jù)集1:加載數(shù)據(jù)(本地文件h1n1_flu.csv)和查看部分?jǐn)?shù)據(jù)(從33個特征中篩選出10個特征用于后續(xù)處理)
h1n1_data <- read.csv("h1n1_flu.csv",header = TRUE)
dim(h1n1_data)
h1n1_data <- h1n1_data[, c(1, 3, 11, 12, 15, 16, 19, 20, 22, 23, 33)]
head(h1n1_data)
數(shù)據(jù)集2:波士頓房價數(shù)據(jù)集(mlbench包中)(13個特征+1個預(yù)測字段)
data(BostonHousing)
dim(BostonHousing)
head(BostonHousing)
重復(fù)值處理
unique()函數(shù)可以對數(shù)據(jù)進(jìn)行整體去重,distinct()函數(shù)可以針對某些列去重。
# 整體去重
h1n1_data_de_dup1 <- unique(h1n1_data)
# 指定根據(jù)列respondent_id,h1n1_knowledge去重,并保留所有列
h1n1_data_de_dup2 <- distinct(h1n1_data, respondent_id, h1n1_knowledge, .keep_all = T)缺失值識別和處理
常用方法:
在R語言中,慣用會把缺失值表示為NA,一般可使用is.na(a),!complete.cases(a)來識別a是否為缺失值
# 假設(shè)定義的一個變量中存在缺失值
y <- c(1, 2, 3, NA)
# 用is.na在識別是否為缺失值
is.na(y)
# 用!complete.cases()在識別是否為缺失值
!complete.cases(y)
缺失值統(tǒng)計(使用is.na(x))
# 數(shù)據(jù)集中總?cè)笔?shù)據(jù)量
sum(is.na(h1n1_data))
# 數(shù)據(jù)集中某一列缺失數(shù)據(jù)量
sum(is.na(h1n1_data["h1n1_knowledge"]))
數(shù)據(jù)中某一行來統(tǒng)計。
pMiss <- function(x) {
sum(is.na(x)) / length(x) * 100
}
apply(h1n1_data, 2, pMiss) # 按列統(tǒng)計缺失比率%
還可以 調(diào)用現(xiàn)成的包。
缺失值機(jī)制與分析:
分為完全隨機(jī)缺失(MCAR),隨機(jī)缺失(MAR)和非隨機(jī)缺失(MNAR)
(1)完全隨機(jī)缺失:缺失現(xiàn)象完全隨機(jī)發(fā)生,與自身或其他變量的取值無關(guān)。(2)隨機(jī)缺失:缺失數(shù)據(jù)的發(fā)生與數(shù)據(jù)庫中其他無缺失變量的取值有關(guān)。如果缺失和觀測值之間存在系統(tǒng)關(guān)系,則為MAR(2)非隨機(jī)缺失:若缺失數(shù)據(jù)不屬于MCAR和MAR,數(shù)據(jù)的缺失依賴于不完全變量本身,則數(shù)據(jù)為非隨機(jī)缺失。
可視化分析缺失數(shù)據(jù)關(guān)聯(lián)的方法:
使用VIM中的aggr函數(shù):
# cex.axis調(diào)整軸字體大小,oma調(diào)整外邊框大小
aggr(h1n1_data, cex.axis = .6, oma = c(9, 5, 5, 1))
# 先簡單處理一下一些類別變量的順序
h1n1_data_matplt <- h1n1_data
h1n1_data_matplt$age_group <- factor(h1n1_data_matplt$age_group)
h1n1_data_matplt$education <- factor(h1n1_data_matplt$education, levels = c("", "< 12 Years", "12 Years", "Some College", "College Graduate"))
h1n1_data_matplt$sex <- factor(h1n1_data_matplt$sex)
h1n1_data_matplt$income_poverty <- factor(h1n1_data_matplt$income_poverty, levels = c("18 - 34 Years", "<= $75,000, Above Poverty", "> $75,000"))
# levels(h1n1_data_matplt$age_group) # 查看順序
# 矩陣圖可視化
par(mar = c(9, 4.1, 2.1, 2.1)) # x軸標(biāo)簽太長,調(diào)用par()函數(shù)調(diào)整外邊框的大小
matrixplot(h1n1_data_matplt, sortby = "chronic_med_condition", cex.axis = 0.7) # cex.axis為調(diào)整坐標(biāo)軸字體大小shadow_mat <- as.data.frame(abs(is.na(h1n1_data[, -1])))
head(shadow_mat)
# 可提取含缺失值的變量
shadow_mat <- shadow_mat[which(apply(shadow_mat, 2, sum) > 0)]
# 計算相關(guān)系數(shù)
cor(shadow_mat)
# 相關(guān)系數(shù)熱力圖
heatmap(cor(shadow_mat))缺失值處理:
1.將缺失值作為變量值使用
2.刪除法
3.插補(bǔ)法

教程介紹了刪除和插補(bǔ)法:
1.刪除法:
行刪除使用函數(shù):complete.cases()或na.omit()
h1n1_data_row_del1 <- h1n1_data[!complete.cases(h1n1_data), ]
h1n1_data_row_del2 <- na.omit(h1n1_data)列刪除:dataset[,-5]或 subset(dataset, select = -c(col1, col2))
#比如刪除health_insurance
h1n1_data_col_del1 <- subset(h1n1_data, select = -c(health_insurance))2.插補(bǔ)法:簡單插補(bǔ)法、擬合插補(bǔ)法、多重插補(bǔ)法
還需要多查找資料了解:
多重插補(bǔ)法: 處理缺失值之多重插補(bǔ)(Multiple Imputation)https://zhuanlan.zhihu.com/p/36436260
異常值識別
識別:有幾種常用方法,包括可視化圖形分布識別(箱線圖)、z-score識別、局部異常因子法(LOF法)、聚類法等。
z-score是一種一維或低維特征空間中參數(shù)異常檢測方法。它假定數(shù)據(jù)是高斯分布,異常值是分布尾部的數(shù)據(jù)點,因此遠(yuǎn)離數(shù)據(jù)的平均值。一般將z-score低于-3或高于3的數(shù)據(jù)看成是異常值。
局部異常因子法(LOF),是一種無監(jiān)督的離群檢測方法,是基于密度的離群點檢測方法中一個比較有代表性的算法。適用于在中等高維數(shù)據(jù)集上執(zhí)行異常值檢測。
特征編碼
特征編碼其實在很多程序語言中都會使用到,它是對一類特征的一種歸類,能更好的用于后續(xù)的數(shù)據(jù)處理。
1.獨熱編碼/啞編碼
One-hot encoding 和 dummy,是將類別變量擴(kuò)充為多個只顯示0,1的變量,每個變量代表原類別變量中的一個類。 ——來源學(xué)習(xí)教程
2.標(biāo)簽編碼
標(biāo)簽編碼(Label Encoder)是將類別變量轉(zhuǎn)換成連續(xù)的數(shù)值型變量,通常對有序的變量進(jìn)行標(biāo)簽編碼,既保留了順序信息,也節(jié)約了空間(不會擴(kuò)充變量)
3.手動編碼
即自定義編碼,可以用特定的函數(shù)進(jìn)行處理,比如case_when()
規(guī)范化與偏態(tài)數(shù)據(jù)
為什么要數(shù)據(jù)規(guī)范化?簡單來說是為了去除數(shù)據(jù)量綱和數(shù)據(jù)大小的差異,確保數(shù)據(jù)是在同一量綱或者同一數(shù)量級下進(jìn)行比較,一般用在機(jī)器學(xué)習(xí)算法之前。數(shù)據(jù)規(guī)范化又可以使用0-1規(guī)范化,Z-score等方法。
為什么要處理偏態(tài)數(shù)據(jù)?。很多模型會假設(shè)數(shù)據(jù)或參數(shù)服從正態(tài)分布。例如線性回歸(linear regression),它假設(shè)誤差服從正態(tài)分布?!獊碓磳W(xué)習(xí)教程
規(guī)范化的方法:
1.0-1規(guī)范化
2.Z-score標(biāo)準(zhǔn)化
3.對數(shù)轉(zhuǎn)換(log transform)
4.Box-Cox
附錄:參考資料
理論資料
數(shù)據(jù)的預(yù)處理基礎(chǔ): 如何處理缺失值 https://cloud.tencent.com/developer/article/1626004
多重插補(bǔ)法: 處理缺失值之多重插補(bǔ)(Multiple Imputation)https://zhuanlan.zhihu.com/p/36436260
異常值檢測: R語言--異常值檢測 https://blog.csdn.net/kicilove/article/details/76260350
異常值檢測之LOF: 異常檢測算法之局部異常因子算法-Local Outlier Factor(LOF) https://blog.csdn.net/BigData_Mining/article/details/102914342
規(guī)范化: 規(guī)范化、標(biāo)準(zhǔn)化、歸一化、正則化 https://blog.csdn.net/u014381464/article/details/81101551
什么樣的模型對缺失值更敏感?: https://blog.csdn.net/zhang15953709913/article/details/88717220
R語言函數(shù)用法示例
funModeling用法示例:https://cran.r-project.org/web/packages/funModeling/vignettes/funModeling_quickstart.html
tidyverse官方文檔:https://www.tidyverse.org/
VIM教學(xué)網(wǎng)頁:https://www.datacamp.com/community/tutorials/visualize-data-vim-package
mice使用文檔(Multivariate Imputation by Chained Equations):https://cran.r-project.org/web/packages/mice/mice.pdf
mice使用中文解釋:https://blog.csdn.net/sinat_26917383/article/details/51265213
mice檢驗結(jié)果解釋:http://blog.fens.me/r-na-mice/
caret包數(shù)據(jù)預(yù)處理:https://www.cnblogs.com/Hyacinth-Yuan/p/8284612.html
R語言日期時間處理:https://zhuanlan.zhihu.com/p/83984803
基于R語言進(jìn)行Box-Cox變換:https://ask.hellobi.com/blog/R_shequ/18371
R中數(shù)據(jù)集分割:https://zhuanlan.zhihu.com/p/45163182
Task03 基本的統(tǒng)計分析
待學(xué)習(xí)待更新。
內(nèi)容參考網(wǎng)絡(luò)資料,以上內(nèi)容僅供學(xué)習(xí)使用,不作其它用途,如有侵權(quán),請留言以下微信號,作刪除處理!
有任何疑問及建議,掃描以下公眾號二維碼添加交流:
