#update.packages(checkBuilt = TRUE)
install.packages("rootSolve")
library(rootSolve)
#install.packages("ggplot2")
library(ggplot2)
install.packages("dplyr")
library(dplyr)
install.packages("sqldf")
library(sqldf)
install.packages("lubridate")
library(lubridate)
library(reshape2)#melt函数
library(gcookbook)
workbook<-"D:/城市计算/data/data/2014-Q3-cabi-trip-history-data.csv"
myframe<-read.csv(workbook,header = T)#读取表格,存进数据框
1. #将表格的时间格式标准化,lubridate包,函数:wday/day/mdy_hm/hour
myframe$Start.date<-mdy_hm(myframe$Start.date)
#--------------------------------------------------------------------------------#
##找出工作日和非工作日的天数
#工作日/非工作日:66/26
2. #as.Date识别字符,存储为日期类型
begin_sev<-as.Date(mdy("7/1/2014"))
end_sev<-as.Date(mdy("9/30/2014"))
3. #difftime函数,求出两个时间点时间的单位数量
time_diff<-difftime(end_sev,begin_sev,units="days")+1
##三个月的时间间隔92天
#找到工作日、非工作日
nonday_count<-0
day_count<-0
a<-seq(from=as.Date('2014/7/1'),to=as.Date('2014/9/30'),by='1day')
b<-wday(a)
c<-table(b)
#1 2 3 4 5 6 7
#13 13 14 13 13 13 13
#-----------------------------------------------------------------------------------#
###-------------------------------------------------------------------###
#工作日/非工作日:记录
####将7/1--9/30的数据按天提取出来
##提取出每月的记录量
day_factor<-factor(month(myframe$Start.date),levels= c(7:9))
day_count<-summary(day_factor)
#提取出7月的记录,按照1-7分组##按照日子分开
#7月、8月、9月
4. #取出符合条件的子集subset
month_sev<-subset(myframe,month(myframe$Start.date)==7)
month_aug<-subset(myframe,month(myframe$Start.date)==8)
month_sep<-subset(myframe,month(myframe$Start.date)==9)
#msday<-day(as.Date(month_sev$Start.date))##1--31
#maday<-day(as.Date(month_saug$Start.date))
#msepday<-day(as.Date(month_sep$Start.date))
msevday<-wday(as.Date(month_sev$Start.date))##1--7
maugday<-wday(as.Date(month_aug$Start.date))
msepday<-wday(as.Date(month_sep$Start.date))
#------------------------------------------------------------------------#
###-------------------------------------------------------------------###
#区分工作日/非工作日
##对myframe修改,添加新列:月(month),日(day),时(hour),周几(wday),是否为注册用户(statr)(R、C)
5. #添加新列cbind添加新记录rbind
6. #删除bike ID<-{}
myframe<-cbind(myframe,month=month(myframe$Start.date),day=day(myframe$Start.date),hour=hour(myframe$Start.date),wday=wday(as.Date(myframe$Start.date)))
myframe$Bike.<-{}
myframe<-cbind(myframe,state=ifelse(myframe$wday%in% c(2:6),'W','N'))
#分为两个数据框:工作日、非工作日,根据,wday是否在2:6之间
workday_frame<-subset(myframe,myframe$wday%in%c(2:6))
weekend_frame<-subset(myframe,myframe$wday%in%c(1,7))
workday_frame$Start.Station<-{}
workday_frame$End.Station<-{}
weekend_frame$Start.Station<-{}
weekend_frame$End.Station<-{}
#工作日,每小时的记录总和和平均数
workday_regi<-subset(workday_frame,workday_frame$Subscription.Type=='Registered',select= c(5:8))
workday_casual<-subset(workday_frame,workday_frame$Subscription.Type=='Casual',select= c(5:8))
#求平均记录数。平均?
f<-function(x){
x/92
}
#regisyered
7. ##将因子转变为数据框factoe->table->as.data.frame
sum_regihour<-factor(workday_frame$hour,levels=c(0:23))
sum_regihour<-table(sum_regihour)
sum_regihour<-as.data.frame(sum_regihour)
sum_regihour$Freq<-mapply(f,sum_regihour$Freq)
8. #对列进行重命名names(data)<-
names(sum_regihour)<-c("Hour","Registered")
#casual
sum_casuhour<-factor(weekend_frame$hour,levels=c(0:23))
sum_casuhour<-table(sum_casuhour)
sum_casuhour<-as.data.frame(sum_casuhour)
sum_casuhour$Freq<-mapply(f,sum_casuhour$Freq)
names(sum_casuhour)<-c("Hour","Casual")
#根据时间合并,并且添加一列R、C
9. #根据形同名称的列进行两个数据框合并merge(data1,data2,by=” ”)
sum_frame<-merge(sum_regihour,sum_casuhour,by="Hour")
10. #对数据框按照某列的顺序进行排序data[order(q1),]
sum_frame<-sum_frame[order(sum_frame$Hour),]
11. #对因子类型作图
##对sum_frame2进行因子,作图
#加图例,改刻度
#将短数据改为长数据,再对某列进行因子化melt(data,id.vars=” ”)->as.factor
sum_frame2<-melt(sum_frame,id.vars= "Hour")
sum_frame2[,2]<-as.factor(sum_frame2[,2])
ggplot(sum_frame2,aes(x=Hour,y=value,color=variable,group=variable))+
geom_line()+
geom_point()+
xlab("Time of Day-Weekday/Hour")+
ylab("average trip records")
#法2,但是不能加散点图
# ggplot(sum_frame)+
# geom_line(aes(x=Hour,y=Freq.Regi,group=1),color="red")+
# geom_line(aes(x=Hour,y=Freq.Casu,group=1),color="green")+
# geom_point(aes(x=),shape=20,size=4)+
# xlab("Time of Day-Weekday/Hour")+
# ylab("average trip records")