#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")