本文以bikedata2011.rda(github源库链接:https://github.com/fben-eghan/Bike-Data/blob/main/bikedata2011.rdahttps://github.com/fben-eghan/Bike-Data/blob/main/bikedata2011.rda,建议提前了解该数据库的特征和意义)为研究数据库,进行了较为完整的EDA分析,可以作为大部分数据库EDA的一个参考流程。
首先,需要先加载数据库,加载所需的R packages(需提前安装)。
library(GGally)
library(MASS)
library(car)
library(RColorBrewer)
随后,总结数据库,进行大体观察。
summary(bikedata2011)
随后我们发现天气(weather)变量中,大雨(heavy)只出现了一次。
table(bikedata2011$weather)
为了避免拟合模型的不稳定性,我们将大雨(heavy)和小雨(light)合并为雨(rain)变量。
bikedata2011$weather <- factor(bikedata2011$weather,
levels=c("clear", "mist", "light", "heavy"),
labels=c("clear", "mist", "rain", "rain"))
table(bikedata2011$weather)
随后,进行缺失数据检查和判定。关于数据库的说明中指出,数据库中缺失了所有完全没有自行车被租用的小时数(例如02/01/2011,Hour 5)。现在需要将(casual, registered, cnt)三个变量设置为0后,重新将这些缺失的数据添加回数据库中。然后将其他缺失值从最后一条已知记录中转入。同时,不需要量化的量都考虑做factor,比如日期,节假日,星期等。
datetime <- expand.grid("date"=as.Date("2011-01-01") + 0:364, "hour"=0:23)
bikedata2011 <- merge(datetime, bikedata2011, all=TRUE)
norental <- which(is.na(bikedata2011$cnt))
for (i in norental) {
bikedata2011[i,-(1:2)] <- bikedata2011[i-1,-(1:2)]
bikedata2011[i, c("casual","registered","cnt")] <- 0
}
bikedata2011$month <- months(bikedata2011$date)
bikedata2011$month <- factor(bikedata2011$month)
bikedata2011$weekday <- weekdays(bikedata2011$date)
bikedata2011$weekday <- factor(bikedata2011$weekday,
levels=c("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday",
"Saturday"))
bikedata2011$season <- factor(bikedata2011$season)
bikedata2011$holiday <- factor(bikedata2011$holiday)
bikedata2011$hour <- factor(bikedata2011$hour)
如果出现日期中英文不统一的情况,请尝试以下代码。
Sys.setlocale("LC_TIME", "English")
运行完后可以再进行一次检查。
str(bikedata2011)
随后,我们对没有转变成factor的numerical变量进行箱形图检查,按其性质分为两组。
boxplot(bikedata2011$temp,bikedata2011$atemp,bikedata2011$humidity,
bikedata2011$windspeed,names=c("temp","atemp","humidity", "windspeed"),
horizontal=TRUE,col="blue")
boxplot(bikedata2011$casual,bikedata2011$registered,bikedata2011$cnt,
names=c("casual","registered","combined"),horizontal=TRUE,col="blue")
观察到第二组箱形图的结果后,可以尝试对其使用对数(log)变化。我们可以观察到的是,修改过后的箱型图标度确实更接近了。
boxplot(log(bikedata2011$casual),log(bikedata2011$registered),log(bikedata2011$cnt),
names=c("casual","registered","combined"),horizontal=TRUE,col="blue")
(未完待续)