R語言常用命令總結
-----------------------------------20170907更新-----------------------------------
更新數據分析部分,關於線性回歸及優化的內容
前幾天看了一個二手房價格的數據分析案例,其中涉及聚類方法的使用,將更新到下邊的數據分析板塊中
-----------------------------------題外話-----------------------------------
自主學習也有一段時期了,從2016年中到2017.8,一共學習了三大塊內容,MySQL,R,統計。
1.MySQL達到了在本地資料庫內自主select的水平。
2.R語言從最早的《R語言實戰》前六章只敲書里的代碼到加入學習小組以後重新review這本書然後發現了kaggle這塊寶地,現在自主在kaggle上做數據分析案例 kaggle數據集分析案例——二手車數據分析 。
3.統計學《商務經濟統計學》前六章,由於kaggle案例的需要,又看了部分線性回歸的內容。
回顧這段時間的學習,總體來說還是有一些聊勝於無的自律與蜻蜓點水的執行力。。
-----------------------------------以下是正文-----------------------------------
這篇文章的主要目的是系統性的總結一下R語言的基本相關操作,省的以後再做分析的時候還得一個一個翻閱以前案例的代碼。
代碼的總結邏輯(以下內容今後會隨時更新)
----------------------------更新時間2017.8.13----------------------------
數據框常用操作
數據讀取:read相關
查看數據:str,summary,quantile
數據清洗與重編碼:數據替換,排查NA與空置,日期值處理
數據分析:畫圖相關,相關性,回歸分析與逐步回歸,效果檢測
一.數據框常用操作
1.清除所有緩存的數據 rm(list=ls())
2.限定輸出小數點後的位數 options(digits = 2)
3."0,1"標準化
z<-scale(roster[,2:4]) 將roster中的2:4列進行「0,1」標準化並存入z中
4.按行/列應用函數
score<-apply(z,1,mean) 將z中按行(1 indicates rows, 2 indicates columns)應用函數mean並存在score中
5.數據框合併
roster<-cbind(roster,score) 將roster與score縱向合併
(cbind=column bind,rbind=row bind)
6.從list中提取數據
roster$firstname<-sapply(name,"[",1) 提取name(list)中的第一個元素
roster$firstname<-sapply(name,"[",2) 提取第二個元素
7.數據排序
roster<-roster[order(roster$lastname,roster$firstname),]
將roster中的數據先按照lastname順序再按firstname順序排序,注意[xxx,]選取所有列
二.數據讀取
library(xlsx)
a<-read.xlsx("c/myworkbook.xlsx")
library(data.table)
a<-fread(input = "c/myworkbook.xlsx",head = T) #讀取速度較快
三.查看數據
1.查詢數據結構
str()
2.查詢統計概述
summary()
3.查詢obs & variables
dim()
4.查詢百分數
quantile() 例如quantile(auto$price,0.05)——查詢百分位為5%的price值
四.數據清洗與重編碼
1.獲取數據框名稱向量
name_title<-name(name_data.frame)
2.選入部分變數進入新的數據框
new_dataframe<-old_dataframe[ , c("xxx","xxx","xxx",...,"xxx")]
[ , c() ] 選入所有行,部分列
3.從變數中刪選出符合要求的值
name_dataframe<-name_dataframe[name1 > 123 & name1 < 456 , ]
選擇name1中大於123且小於456的值,[ xxx , ] 選入所有列,部分行
4.排查NA與空值
name_dataframe<-name_dataframe[!is.na(name_dataframe$name1) , ]
選擇數據框中不是NA的值
name_dataframe<-name_dataframe[!name1 == 「」 , ]
選擇數據框中的非空值
5.數據的分列
方法一:substr(x, start, stop)
name_dataframe$name2<-substr(name_dataframe$name1,1,10)
把name1中的第1~10個字元放入name2中
方法二:library(stringr),str_split_fixed(string, pattern, n)
a<-str_split_fixed(auto$dateCrawled," ",2)
把auto中dataCrawled按照「 」分成兩列,並存放在a(matrix)中
方法三:name<-strsplit((roster$student)," ")
將roster中的student按照「 」分列,並存在name(list)中
6.處理日期 as.Date()
used_car$lastSeen<-as.Date(used_car$lastSeen,"%Y-%m-%d")
將used_car中lastSeen轉化為日期,目標格式為2017-08-13
7.兩個日期的間隔 difftime()
used_car$age<-difftime(used_car$lastSeen,used_car$dateOfRegistration,units = "weeks")
age為lastSeen - dateOfRegistration,間隔為week
五.數據分析
通用部分:
(1)選取欄位並進行重編嗎,定性數據0-1標準化
#選取欄位並將定性數據0-1標準化
lmdata<-used_car[,c("kilometer","price","vehicleType","powerPS","gearbox", "fuelType","sellingday","age")]
lmdata$bus <- ifelse(lmdata$vehicleType=="bus",1,0)
lmdata$cabrio <- ifelse(lmdata$vehicleType=="cabrio",1,0)
lmdata$coupe <- ifelse(lmdata$vehicleType=="coupe",1,0)
#把定量數據轉化為numberic
lmdata$kilometer<-as.numeric(lmdata$kilometer)
lmdata$price<-as.numeric(lmdata$price)
lmdata$sellingday<-as.numeric(lmdata$sellingday)
(2)設置隨機數種子並分離數據集為訓練集與測試集
set.seed(100)
#從lmdata的行數中隨機取出70%的數據
sublmdata <- sample(nrow(lmdata), floor(nrow(lmdata)*0.7))
#分離訓練集測試集
training_data<-lmdata[sublmdata,]
validation_data <- lmdata[-sublmdata,]
(3)
1.線性回歸及其優化
(1)構建線性回歸模型
fit<-lm(price ~ kilometer + sellingday + age + powerPS+bus+cabrio+coupe+
wagon+small_car+limousine+suv+
automatic+manual+petrol+diesel+lpg, data=training_data)
(2)優化方法一
通過在summary中查看P值可刪除P值過大的欄位(大於0.01 or 0.05),線性關係不顯著
優化方法二
fit.step<-step(fit)
通過逐步回歸檢測找到較小AIC值的欄位,可將其刪除後重建構建回歸模型並查看R^2是否有提高
(3)模型檢測
#計算模型的各個指標
calc.relimp(fit_new, type = c("lmg"), rela = TRUE)
#在訓練集中對比預測值與實際值的誤差
training_data$predict.price <- predict(fit_new)
training_data$error <- training_data$predict.price - training_data$price
par(mfrow=c(1,1))
hist(training_data$error)
#在測試集中生成預測值並檢測誤差
validation_data$predict.price <- predict(fit_new, newdata = validation_data)
validation_data$error <- validation_data$predict.price-validation_data$price
#繪製誤差圖
ggplot(validation_data,aes(error))+
geom_histogram(fill="red",alpha=0.5)+
labs(x= error, y= Frequency)+
scale_x_continuous(breaks=seq(-15000,15000,2000))+
ggtitle(histogram for error)
2.聚類分析方法及優化
推薦閱讀:
※數據預處理——缺失值處理
※泰坦尼克號預測(隨機森林預測)
※小派看數據|實戰演練:DataCastle競賽之藥物分子篩選——缺失值填充
※Python數據分析的學習計劃
※移動BI讓決策盡在「掌」握