1. 程式人生 > >R語言第一次總結

R語言第一次總結

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