初學R並實現探索性數據分析
最近應課程要求在開始學習R,想在這裡記錄下學習路徑,供大家參考和自己翻閱。
安裝R的路徑:https://mirrors.tuna.tsinghua.edu.cn/CRAN/
安裝Rstduio的路徑: https://www.rstudio.com/products/rstudio/download/
選擇下載一個就好,當然還有其他的IDE可供選擇,比如sublime、notebook。
這裡選用Rstduio,在console裡面輸入命令行並實現編譯。
R包安裝命令:
install.packages("需要安裝的包名")
自定義包的安裝路徑:
.libPaths("需要修改的路徑")
首先在導入數據前需要導入需要的包:
library(需要導入的包名)
如果在命令行中出現中文亂碼的情況,參考:https://www.cnblogs.com/nxld/p/6098987.html
導入數據(數據可關注公眾號「經管人學數據分析」獲取):
數據是關於紅酒的相關參數,目的是利用該數據研究跟紅酒質量相關的變數。
注意考慮到 符號,這裡的文件路徑要麼用 \ 要麼用 /
library("gridExtra")library(ggplot2)library(GGally)wine <- read.csv("redwine1.csv", sep = ";")
有時候有些txt文件格式比較混亂,推薦「readr」包,這裡的txt文件需要用到裡面的read_csv("數據文件路徑"),還有"readxl"包,可用來導入Excel文件。
這裡先將因變數「質量」轉變為因子變數,即分類變數,並設定其分類變數定序:
str(wine)wine$質量 <- factor(wine$質量, ordered = T)
這裡將質量分為三個等級並將其歸為「打分」列:
wine$打分 <- ifelse(wine$質量 < 5, bad, ifelse(wine$質量 < 7, average, good))
將打分列最終的順序確定:
wine$打分 <- ordered(wine$打分, levels = c(bad, average, good))
對wine數據進行描述性統計:
str(wine)summary(wine)
可以看到對於數值型變數,我們得到了其最小值、 分位數、中位數、均值、 分位數、最大值;對於因子變數,我們得到其屬性的頻數。
對質量進行簡單的可視化分析:
ggplot(data = wine, aes(x = 質量)) + geom_bar()
因為「殘糖量」為數值型變數,比較適合畫直方圖:
ggplot(data = wine, aes(x = 殘糖量)) + geom_histogram()
函數scale_x_continuous()是設定x軸的刻度,break用來控制刻度。
ggplot(data = wine, aes(x = 酒精)) + geom_histogram(color=white) + scale_x_continuous(breaks = seq(8, 15, 1))
ggplot(data = wine, aes(x = 打分)) + geom_bar()
也可以通過下面的方法,對單變數進行可視化。用grid.arrange()用來將幾個圖形放在同一圖層下。
grid.arrange( ggplot(wine, aes(x = "酒石酸", y = 酒石酸)) + geom_jitter(alpha = 0.1) + geom_boxplot(alpha = 0.2) + theme(axis.title.x = element_blank()), ggplot(data = wine, aes(x = 酒石酸)) + geom_histogram(color = white), ncol = 2)
可直接在圖形函數裡面設置參數color,alpha為該圖層的透明度。
grid.arrange( ggplot(wine, aes(x = "醋酸", y = 醋酸)) + geom_jitter(alpha = 0.1) + geom_boxplot(alpha = 0.2, color = steelblue) + scale_y_continuous(lim = c(0, 1)), ggplot(data = wine, aes(x = 醋酸)) + geom_histogram(fill = steelblue, color = black), ncol = 2)
grid.arrange( ggplot(wine, aes(x = "檸檬酸", y = 檸檬酸)) + geom_jitter(alpha = 0.1) + geom_boxplot(alpha = 0.2, color = steelblue), ggplot(data = wine, aes(x = 檸檬酸)) + geom_histogram( binwidth = 0.03, color = black, fill = steelblue ) , ncol = 2)
同理畫出其他的單變數因素的可視化圖形。
接下來看看變數之間的相關關係:
str(wine)wine_subset <- wine[, c(1:13)]ggpairs(wine_subset[sample.int(nrow(wine_subset), 100),])
取一個wine前13列的子集wine_subset,通過ggpairs()繪製下面的圖形:
對角線上的是數值型變數的分布圖和分類變數的條形圖,右上角的皮爾遜相關係數對應左下角的兩變數散點圖,從最後兩列箱形圖的走勢可以看出每個變數對因變數質量和打分的關係,可以大致看到醋酸對因變數呈現負相關關係,酒石酸、硫酸鉀、酒精對因變數呈現正相關關係。
接下來繪製酒精和質量之間的關係圖,觀察之間的大致關係。
ggplot(data = wine, aes(x = 質量, y = 酒精)) + geom_jitter(alpha = .3) + geom_boxplot( alpha = .5, lwd = 1, fatten = 0.5, color = steelblue ) + stat_summary(fun.y = "mean", geom = "point", color = "red")
酒精質量LinearModel <- lm(as.numeric(質量) ~ 酒精, data = wine)summary(酒精質量LinearModel)
對「質量」用as.numeric()設置為數值型,並檢測酒精跟其的數值關係,用線性模型LM來擬合,得到酒精顯著影響質量,並且該變數能解釋22.67%的因變數(看R方值),說明這個變數對預測質量很重要。
接下來在剛剛的圖形中加入geom_smooth()圖形並且method用線性模型得到圖中的那條紅線,也可以看出來酒精和質量之間呈現正相關關係。
ggplot(data = wine, aes(x = 質量, y = 酒精)) + geom_jitter(alpha = .3) + geom_boxplot( alpha = .5, lwd = 1, fatten = 0.5, color = steelblue ) + stat_summary(fun.y = "mean", geom = "point", color = "red") + geom_smooth(method = lm, color = "red", aes(group = 1))
同理,醋酸和質量之間呈現負相關關係。
ggplot(data = wine, aes(x = 質量, y = 醋酸)) + geom_jitter(alpha = .3) + geom_boxplot( alpha = .5, lwd = 1, fatten = 0.5, color = steelblue ) + stat_summary(fun.y = "mean", geom = "point", color = "red") + geom_smooth(method = lm, color = "red", aes(group = 1))
同理,可畫出質量與其他變數之間的關係走勢。
接下來自定義函數simple_cor_test(),該函數的主要含義是求出相關係數。
simple_cor_test <- function(x, y) { return(cor.test(x, as.numeric(y))$estimate)}correlations <- c( simple_cor_test(wine$酒石酸, wine$質量), simple_cor_test(wine$醋酸, wine$質量), simple_cor_test(wine$檸檬酸, wine$質量), simple_cor_test(log10(wine$殘糖量), wine$質量), simple_cor_test(log10(wine$氯化鈉), wine$質量), simple_cor_test(wine$遊離二氧化硫, wine$質量), simple_cor_test(wine$總二氧化硫, wine$質量), simple_cor_test(wine$密度, wine$質量), simple_cor_test(wine$pH, wine$質量), simple_cor_test(log10(wine$硫酸鉀), wine$質量), simple_cor_test(wine$酒精, wine$質量))cors <- as.numeric(unlist(correlations))[seq(1, 22, 2)]pvals <- as.numeric(unlist(correlations))[seq(2, 22, 2)]cors <- as.data.frame(rbind(cors, pvals))names(cors) <- c(酒石酸, 醋酸, 檸檬酸, 殘糖量, chlordies, 遊離二氧化硫, 總二氧化硫, 密度, pH, 硫酸鉀, 酒精)cors
最後進行多變數分析:
ggplot(aes(x = 酒石酸, y = 醋酸), data = wine) + geom_point(aes(color = 質量)) + facet_wrap( ~ 質量) + ggtitle(紅酒質量與酒石酸及醋酸之間相關關係圖)
ggplot(data = wine, aes(y = 密度, x = 酒精, color = 質量)) + geom_point(alpha = 0.2, size = 2) + geom_smooth(method = "lm", se = FALSE, size = 1)
ggplot(data = wine, aes(y = 硫酸鉀, x = 酒精, color = 質量)) + geom_point(alpha = 0.8, size = 1) + geom_smooth(method = "lm", se = FALSE, size = 1) + scale_y_continuous(limits = c(0.3, 1.5)) + facet_wrap( ~ 打分)
推薦閱讀: