我們發現這張Gary.csv表格存在學生成績不完全的(五十三名學生,三名學生存在成績不完整、共四個不完整成績)
79號大學語文、高等數學
96號中國近代史綱要
65號大學體育

(1)NA表示數據集中的該數據遺失、不存在。在針對具有NA的數據集進行函數操作的時候,該NA不會被直接剔除。如x<-c(1,2,3,NA,4),取mean(x),則結果為NA,如果想去除NA的影響,需要顯式告知mean方法,如 mean(x,na.rm=T);NA是沒有自己的mode的,在vector中,它會“追隨”其他數據的類型,比如剛剛的x,mode(x)為numeric,mode(x[4])亦然。 (2) NULL表示未知的狀態。它不會在計算之中,如x<-c(1,2,3,NULL,4),取mean(x),結果為2.5。NULL是不算數的,length(c(NULL))為0,而length(c(NA))為1。可見NA“占着”位置,它存在着,而NULL沒有“占着”位置,或者說,“不知道”有沒有真正的數據。 在R語言中缺失值通常以NA表示,判斷是否缺失值的函數是is.na。 另一個常用到的函數是complete.cases,它對數據框進行分析,判斷某一觀測樣本是否完整。

setwd('D:\\data') #設置工作目錄 list.files() #列出工作目錄下的文件 dat=read.csv(file="Gary.csv",header=TRUE) #打開Gary.csv文件 is.na(dat) #對數據進行判空,空值返回TRUE complete.cases(dat) #對數據行進行判空,存在空值的行返回TRUE sum(complete.cases(dat)) #統計未缺失數 sum(!complete.cases(dat)) #統計缺失數 mean(!complete.cases(dat)) #統計缺失比例 dat[!complete.cases(dat),] #返回存在空值行數據 library(mice) md.pattern(dat) #針對復雜的數據集值進行處理 #異常值檢測箱線圖 sp<-boxplot(dat$"大學語文",boxwex=0.7,norch=FALSE) title("大學語文") xi=1.1 sd.s=sd(dat[complete.cases(dat),]$"大學語文") #標准差 mn.s=mean(dat[complete.cases(dat),]$"大學語文") #均值 points(xi,mn.s,col="red",pch=18) arrows(xi, mn.s - sd.s, xi, mn.s + sd.s, code = 3, col = "pink", angle = 75, length = .1) text(rep(c(1.05,1.05,0.95,0.95),length=length(sp$out)),labels=sp$out[order(sp$out)], sp$out[order(sp$out)]+rep(c(150,-150,150,-150),length=length(sp$out)),col="red") plot(saledata[,1],saledata[,2]) lines(saledata[,2])
對成績數據進行缺失值分析,並表述分析過程
處理方法
對數據進行判空,空值返回TRUE
is.na(dat)
對數據行進行判空,存在空值的行返回TRUE
complete.cases(dat)
統計未缺失數
sum(complete.cases(dat))
統計缺失數
sum(!complete.cases(dat))
統計缺失比例
mean(!complete.cases(dat))
返回存在空值行數據
dat[!complete.cases(dat),]
依賴包mice
md.pattern(dat) #針對復雜的數據集值進行處理
md.pattern()
依賴包mice
生成一個以矩陣或數據框形式展示缺失值模式的表格
0表示變量的列中沒有缺失,1則表示有缺失值
第一行第一個數據:完整成績人數
第二個數據至倒數第二個數據:列出全部學生考試科目
最后一個數據:缺少考試科目數量(爭對復雜數據,這里象對數據簡單)
第二行至倒數第二行:缺少考試成績學生信息
第二行表示存在一個學生缺少 中國近代史綱要成績 缺少成績科目數量為1
第三行表示存在一個學生缺少 大學語文和高等數學 缺少成績科目數量為2
第四行表示存在一個學生缺少 大學體育 缺少成績科目數量為1
最后一行:給出了每個科目的缺失值數目(中國近代史綱要成績、大學語文和高等數學、大學體育)
最后一個數據:缺少科目學生人數(3人)
對成績數據進行異常值分析,並表述分析過程
箱線圖 傳送門
箱線圖(Boxplot)也稱箱須圖(Box-whisker Plot),是利用數據中的五個統計量:最小值、第一四分位數、中位數、第三四分位數與最大值來描述數據的一種方法,它也可以粗略地看出數據是否具有有對稱性,分布的分散程度等信息,特別可以用於對幾個樣本的比較。
#異常值檢測箱線圖 sp<-boxplot(dat$"大學語文",boxwex=0.7,norch=FALSE) title("大學語文") xi=1.1 sd.s=sd(dat[complete.cases(dat),]$"大學語文") #標准差 mn.s=mean(dat[complete.cases(dat),]$"大學語文") #均值 points(xi,mn.s,col="red",pch=18) arrows(xi, mn.s - sd.s, xi, mn.s + sd.s, code = 3, col = "pink", angle = 75, length = .1) text(rep(c(1.05,1.05,0.95,0.95),length=length(sp$out)),labels=sp$out[order(sp$out)], sp$out[order(sp$out)]+rep(c(150,-150,150,-150),length=length(sp$out)),col="red") plot(saledata[,1],saledata[,2]) lines(saledata[,2])
提示錯誤:Error in text.default(rep(c(1.05, 1.05, 0.95, 0.95), length = length(sp$out)), : 'labels'長度不能設成零
測試科目 大學語文 時盡然無恥的報錯了 Σ(= = !)...
sp$out:結果中會自帶異常值,就是下面代碼中的sp$out,這個是做箱型圖,按照上下邊界之外為異常值進行判定的
對數據進行規范化目的:規范化目的是使結構更合理,消除存儲異常,使數據冗余盡量小,便於插入,刪除,和跟新
測試高等數學
成功畫出箱線圖!!
測試 高級語言程序設計
成功畫出箱線圖!!