R語言常用命令總結

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讓決策盡在「掌」握

TAG:R編程語言 | 數據分析 |