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