转岗了,不用js了,开始用R了。。。下面是常用的脚本,做个备忘。。。
library(ggplot2)
library(scales)
library(grid)
#require(matlab)
csv = function(file, target="clipboard", key="key", value="value"){
msg = ""
switch(target,
"clipboard"=msg<-"clipboard",
"file"=msg<-paste(file, "csv", sep=".")
)
print(paste("start convert", msg, "at", as.POSIXlt(Sys.time())))
data = read.csv(paste(file, "csv", sep="."))
dfrm = data.frame()
inteval = which(is.na(data[[value]]))[1]
kIndex = 0
vIndex = 0
for(i in data[[key]]){
v = c()
if(i != ""){
kIndex = kIndex + 1
vIndex = vIndex + 1
v = c(v, i)
for(j in data[[value]]){
if(vIndex < inteval * kIndex){
v = c(v, data[[value]][vIndex])
vIndex = vIndex + 1
}
}
if(kIndex == 1){
dfrm = data.frame(v)
}else{
dfrm = data.frame(dfrm, v)
}
}
}
#write.table(dfrm, file=paste(file, paste(as.POSIXlt(Sys.time()),"csv", sep="."), sep="@"), sep=",", row.names = FALSE, col.names = FALSE)
#clipboard(dfrm)
switch(target,
"clipboard"=(function(){
clipboard(dfrm)
})(),
"file"=(function(){
write.table(dfrm, file=paste(file, paste(as.POSIXlt(Sys.time()),"csv", sep="."), sep="@"), sep=",", row.names = FALSE, col.names = FALSE)
})()
)
print(paste("finish convert", msg, "at",as.POSIXlt(Sys.time())))
}
purge = function(data.file, cond.file="cond"){
data = read.csv(paste(data.file, "csv", sep="."))
cond = read.csv(paste(cond.file, "csv", sep="."))
cond.key = as.vector((subset(cond["key"], key != ""))[["key"]])
cond.value = as.vector((subset(cond["value"], value != ""))[["value"]])
cond.remove = as.vector((subset(cond["remove"], remove != ""))[["remove"]])
i = 1
command = "data.frame("
while(i <= length(data)){
if(i < length(data)){
command = paste(command, colnames(data)[i], "=NA,", sep="")
}else{
command = paste(command, colnames(data)[i], "=NA", ")", sep="")
}
i = i + 1
}
emprow = eval(parse(text=command))
i = 1
rearr = ""
datatmp = ""
while(i <= length(cond.key)){
j = 1
while(j <= length(cond.value)){
if(i == 1){
tmp = subset(data, subset=(data[cond.key[i]] == cond.value[j]))
}else{
tmp = subset(datatmp, subset=(datatmp[cond.key[i]] == cond.value[j]))
}
if(j == 1){
rearr = tmp
rearr = rbind(rearr, emprow)
}else{
rearr = rbind(rearr, tmp)
rearr = rbind(rearr, emprow)
}
j = j + 1
}
datatmp = rearr
i = i + 1
}
#print(rearr)
if(typeof(cond.remove) != "logical"){
i = 1
rIndex = c()
while(i <= length(data)){
j = 1
while(j <= length(cond.remove)){
if(colnames(data)[i] == cond.remove[j]){
rIndex = c(rIndex, 0 - i)
}
j = j + 1
}
i = i + 1
}
clipboard(subset(rearr, select=rIndex), col.names=TRUE)
}else{
clipboard(rearr, col.names=TRUE)
}
}
test = function(){
df=read.csv(paste("dict", "csv", sep="."))
print(df[[1,2]])
}
join=function(key.file="sumup.cond"){
df=read.csv(paste(key.file, "csv", sep="."))
col=colnames(df)
#print(col)
i=1
df1=data.frame()
while(i<=length(col)){
command=paste("subset((subset(df,select=",col[[i]],")),(subset(df,select=",col[[i]],"))!=\"\")",sep="")
tmp=eval(parse(text=command))
#print(tmp)
if(i==1){
df1=tmp
}else{
df1=merge(df1,tmp)
}
i=i+1
}
#print(df1)
i=1
list=list()
while(i<=length(df1[[1]])){
j=1
vec=c()
while(j<=length(df1)){
vec=c(vec,as.character(df1[[j]][[i]]))
#print(vec)
j=j+1
}
list[[i]]=vec
i=i+1
}
#print(list)
return(list)
}
vfromk = function(key.file="key", value.file="value",key.col.name){
dfk=read.csv(paste(key.file, "csv", sep="."))
dfv=read.csv(paste(value.file, "csv", sep="."))
dfr=data.frame()
#print(length(dfv[[key.col.name]]))
i=1
while(i<=length(dfk[[key.col.name]])){
j=1
while(j<=length(dfv[[key.col.name]])){
if(as.character(dfk[[key.col.name]][[i]])==as.character(dfv[[key.col.name]][[j]])){
dfr=rbind(dfr,subset(dfv, subset=(as.character(dfv[[key.col.name]])==as.character(dfv[[key.col.name]][[j]]))))
#print(as.character(dfv[[key.col.name]]))
break
}
j=j+1
}
i=i+1
}
#print(dfr)
write.table(dfr, file=paste("vfromk", paste(as.POSIXlt(Sys.time()),"csv", sep="."), sep="@"), sep=",", row.names = FALSE, col.names = TRUE)
print(paste("output file is ", paste("vfromk", paste(as.POSIXlt(Sys.time()),"csv", sep="."), sep="@"), sep=""))
}
bdict = function(data.file,dict.file="dict",b.col.name){
df=read.csv(paste(data.file, "csv", sep="."))
dfd=read.csv(paste(dict.file, "csv", sep="."))
dfr=data.frame()
i=1
while(i<=length(dfd[[b.col.name]])){
j=1
while(j<=length(df[[b.col.name]])){
#print(as.character(dfd[[b.col.name]][[i]]))
if(as.character(dfd[[b.col.name]][[i]])==as.character(df[[b.col.name]][[j]])){
#print(subset(dfd,sebset=(as.character(dfd[[b.col.name]])=="北京"))) #as.character(df[[b.col.name]][[j]])
#break
tmp0=subset(df,subset=(as.character(df[[b.col.name]])==as.character(df[[b.col.name]][[j]])))
k=1
tmp1=data.frame()
while(k<=length(tmp0[[b.col.name]])){
tmp1=rbind(tmp1,subset(dfd,subset=(as.character(dfd[[b.col.name]])==as.character(dfd[[b.col.name]][[i]]))))
k=k+1
}
dfr=rbind(dfr,unique(merge(tmp0,tmp1)))
break
}
j=j+1
}
i=i+1
}
#print(dfr)
write.table(dfr, file=paste("bdict", paste(as.POSIXlt(Sys.time()),"csv", sep="."), sep="@"), sep=",", row.names = FALSE, col.names = TRUE)
print(paste("output file is ", paste("bdict", paste(as.POSIXlt(Sys.time()),"csv", sep="."), sep="@"), sep=""))
}
sumupall=function(data.file,key.file="sumup.cond"){
dfr=data.frame()
dfk=read.csv(paste(key.file, "csv", sep="."))
key=colnames(dfk)
value=join(key.file)
i=1
while(i<=length(value)){
tmp=sumup(data.file,key,value[[i]])
if(i==1){
dfr=tmp
}else{
dfr=rbind(dfr,tmp)
}
i=i+1
}
#print(dfr)
write.table(dfr, file=paste("sumpupall", paste(as.POSIXlt(Sys.time()),"csv", sep="."), sep="@"), sep=",", row.names = FALSE, col.names = TRUE)
print(paste("output file is ", paste("sumupall", paste(as.POSIXlt(Sys.time()),"csv", sep="."), sep="@"), sep=""))
}
sumup=function(data.file,key,value){
df=read.csv(paste(data.file, "csv", sep="."))
dfr=data.frame()
#print(key)
i=1
while(i<=length(key)){
df=subset(df,subset=(as.character(df[[key[[i]]]]) == as.character(value[[i]])))
#print(df)
i=i+1
}
i=1
first=TRUE
tmp0=data.frame()
while(i<=length(df)){
if(colnames(df)[[i]]=="注册月份"){
tmp0=dfbc(colnames(df)[[i]],df[[colnames(df)[[i]]]][[1]])
}else{
if(is.numeric(df[[i]])==TRUE){
tmp1=dfbc(colnames(df)[[i]],as.vector(colSums(df[i]))[[1]])
if(first==TRUE){
dfr=tmp1
first=FALSE
}else{
dfr=cbind(dfr, tmp1)
}
}
}
i=i+1
}
dfr=cbind(tmp0,dfr)
#print(dfr)
return(dfr)
}
#data frame by command
dfbc=function(col.name,value){
command=paste("data.frame(",col.name,"=",value,")",sep="")
tmp=eval(parse(text=command))
return(tmp)
}
#sumup for site data
sumupforsite=function(data.file, start, end, breaks="1 month", col.name){
df=read.csv(paste(data.file, "csv", sep="."))
df=subset(df, subset=(as.character(df[["城市"]]) != "整站"))
period=seq(as.Date(start, format="%Y-%m-%d"), as.Date(end, format="%Y-%m-%d"), by=breaks)
i=1
m=unique(subset(df,select="日期"))[[1]]
df0=as.data.frame(m)
names(df0)[names(df0) == "m"] = "日期"
while(i<=length(col.name)){
j=1
df1=data.frame()
per=FALSE
while(j<=length(period)){
command=paste('subset(df, subset=((paste(as.character(df[["日期"]]), "-01", sep="") == as.character(period[[j]]))), select=', col.name[[i]], ')',sep='')
tmp=eval(parse(text=command))
#att: make sure that the first value of a percentage column should be added on "%", especially checking for 0
if(j==1){
per=isperstr(as.character(tmp[[1]][[1]])) == TRUE
}
#print(tmp[[1]][[1]])
#print(isperstr(as.character(tmp[[1]][[1]])) == TRUE)
if(per == TRUE){
#tmp1=lapply(as.data.frame(per2num(tmp)), mean)
p=num2per(lapply(as.data.frame(per2num(tmp)), mean))
tmp1=as.data.frame(p)
#print(tmp1)
#return()
names(tmp1)[names(tmp1) == "p"] = col.name[[i]]
df1=rbind(df1,tmp1)
}else{
df1=rbind(df1,lapply(tmp, sum))
}
j=j+1
}
df0=cbind(df0,df1)
#print(df0)
i=i+1
}
#print(df0)
write.table(df0, file=paste(data.file, paste(as.POSIXlt(Sys.time()),"csv", sep="."), sep="@"), sep=",", row.names = FALSE, col.names = TRUE)
print(paste("output file is ", paste(data.file, paste(as.POSIXlt(Sys.time()),"csv", sep="."), sep="@"), sep=""))
}
#isperstr: is percentage string
isperstr = function(str){
pattern = "^\\d+\\.{0,1}\\d{0,2}\\%$"
return(regexpr(pattern, as.character(str)) == TRUE)
}
filter = function(data.file, key.col.name="分类", key.name, value.col.name){
df = read.csv(paste(data.file, "csv", sep="."))
i = 1
df1 = data.frame()
while(i<=length(key.name)){
command = paste("subset(df, select=c(", key.name[[i]], "))", sep="")
tmp = eval(parse(text=command))
#print(length(tmp[[1]]))
j = 1
tmp1 = c()
while(j <= length(tmp[[1]])){
tmp1 = c(tmp1, key.name[[i]])
j = j + 1
}
tmp = cbind(tmp, tmp1)
names(tmp)[names(tmp) == "tmp1"] = key.col.name
names(tmp)[names(tmp) == key.name[[i]]] = value.col.name
df1 = rbind(df1, tmp)
i = i + 1
}
write.table(df1, file=paste(value.col.name, paste(as.POSIXlt(Sys.time()),"csv", sep="."), sep="@"), sep=",", row.names = FALSE, col.names = TRUE)
print(paste("output file is ", paste(value.col.name, paste(as.POSIXlt(Sys.time()),"csv", sep="."), sep="@"), sep=""))
}
plot = function(data.file, cond.file="cond", cond.multi=FALSE, output.ext="jpg", y.label="comma", y.label.format=TRUE, graph.multi=FALSE, page.w=600, page.h=400, page.c=2){
if(graph.multi==TRUE){
#call jpeg() at first to make the pic as a device for print(plot) later
page.r=ceiling(length(data.file)/page.c)
jpeg(paste("multi.graph", paste(as.POSIXlt(Sys.time())), sep="@"), width=page.w*page.c, height=page.h*page.r)
grid.newpage()
pushViewport(viewport(layout = grid.layout(page.r, page.c)))
}
index = 1
while(index <= length(data.file)){
df = read.csv(paste(data.file[index], "csv", sep="."))
if(cond.multi==FALSE){
cond = read.csv(paste(cond.file, "csv", sep="."))
}else{
cond = read.csv(paste(cond.file,data.file[index],"csv", sep="."))
}
type = as.character(cond$type[1])
start = as.character(cond$period[1])
end = as.character(cond$period[2])
breaks = as.character(cond$period[3])
x = as.character(cond$x[1])
colour = as.character(cond$colour[1])
#title = as.character(cond$title[1])
if(graph.multi==TRUE && cond.multi==FALSE){
title = paste(data.file[index],as.character(cond$title[1]),sep=".")
}else{
title = as.character(cond$title[1])
}
width = as.integer(cond$size[1])
height = as.integer(cond$size[2])
path = (paste("./", data.file[index], "@",title, sep=""))
amt = length(levels(df[[colour]]))
if(graph.multi==FALSE){
if(direxist(path)){
dirremove(path)
}
dir.create(path)
}
if(type == "date"){
period = seq(as.Date(start, format="%Y-%m-%d"), as.Date(end, format="%Y-%m-%d"), by=breaks)
}else if(type == "posix"){
period =seq(as.POSIXlt(start, format="%H:%M:%S"), as.POSIXlt(end, format="%H:%M:%S"), by=breaks)
}
i = 1
while(i < amt){
if(type == "date"){
tmp = seq(as.Date(start, format="%Y-%m-%d"), as.Date(end, format="%Y-%m-%d"), by=breaks)
}else if(type == "posix"){
tmp =seq(as.POSIXlt(start, format="%H:%M:%S"), as.POSIXlt(end, format="%H:%M:%S"), by=breaks)
}
period = c(period, tmp)
i = i + 1
}
df = cbind(df, period)
names(df)[names(df) == "period"] = x
i = 1
ylen = firstempty(cond$y)
while(i <= ylen){
pattern = "^\\d+\\.{0,1}\\d{0,2}\\%$"
if(regexpr(pattern, as.character(df[[as.character(cond$y[i])]][[1]])) == TRUE){
k = 1
per = c()
while(k <= length(df[[as.character(cond$y[i])]])){
tmp = per2num(df[[as.character(cond$y[i])]][[k]])
per = c(per, tmp)
k = k + 1
}
command = paste("subset(df, select=c(-", cond$y[i], "))", sep="")
df = eval(parse(text=command))
df = cbind(df, per)
names(df)[names(df) == "per"] = as.character(cond$y[i])
y.label = "percent"
}
#print(df)
command = paste("ggplot(df, aes(x=", x, ", y=", cond$y[i], ", colour=", colour, "))", sep="")
plot = eval(parse(text=command))
plot = plot +
geom_line() +
geom_point(size = 4)
if(y.label == "comma"){
plot = plot + scale_y_continuous(labels = comma)
}
else if(y.label == "percent"){
plot = plot + scale_y_continuous(labels = percent)
}
if(type == "date"){
if(y.label.format==TRUE){
plot = plot + scale_x_date(labels = date_format("%y-%m"), breaks = date_breaks(breaks))
}else{
plot = plot + scale_x_date(labels = date_format(y.label.format), breaks = date_breaks(breaks))
}
}else if(type == "posix"){
if(y.label.format==TRUE){
plot = plot + scale_x_datetime(labels = date_format("%H:%M"), breaks = date_breaks(breaks))
}else{
plot = plot + scale_x_date(labels = date_format(y.label.format), breaks = date_breaks(breaks))
}
}
plot = plot + ggtitle(paste(cond$y[i],"@",title)) +
theme(plot.title=element_text(vjust = -2.5))
if(graph.multi==TRUE){
if(index%%page.c==0){
print(plot, vp=vplayout(as.integer(index/page.c),page.c))
}else{
print(plot, vp=vplayout(as.integer(index/page.c)+1,index%%page.c))
}
}else{
filename = paste(cond$y[i],"@",title,".", output.ext,sep="")
ggsave(filename=filename, path=path, width=width, height=height, units="cm")
print(paste(paste("finish saving", filename,"at"), as.POSIXlt(Sys.time())))
}
#print(plot)
i = i + 1
}
index = index + 1
}
#after all print(plot) the device should be closed
dev.off()
return("finish all")
}
#view port layout
vplayout=function(x, y){
viewport(layout.pos.row = x, layout.pos.col = y)
}
clipboard = function(x, sep=",", row.names=FALSE, col.names=FALSE){
con = pipe("xclip -selection clipboard -i", open="w")
write.table(x, con, sep=sep, row.names=row.names, col.names=col.names)
close(con)
}
num2per = function(num){
#print(length(num[[1]]))
if(length(num[[1]])==1){
return(paste((round(as.numeric(num),digits=4) * 100),"%",sep=""))
}else{
per=c()
for(x in num){
per=c(per,paste((round(x,digits=4) * 100),"%",sep=""))
}
return(per)
}
}
per2num = function(per){
#print(length(per[[1]]))
if(length(per[[1]])==1){
return(as.numeric(strsplit(as.character(per), "%")[[1]]) / 100)
}else{
i=1
num=c()
while(i<=length(per[[1]])){
#print(length(per[[1]]))
num=c(num,as.numeric(strsplit(as.character(per[[1]][[i]]), "%")[[1]]) / 100)
i=i+1
}
#print(nums)
return(num)
}
}
firstempty = function(cell){
i = 1
while(i<length(cell)){
if(cell[i] == ""){
return(i - 1)
}
i = i + 1
}
return(i)
}(subset(df,select=战区))
direxist = function(path){
if(is.na(file.info(path)$isdir) == TRUE){
return(FALSE)
}else{
return(file.info(path)$isdir)
}
}
dirremove = function(path){
i = 1
fileamt = length(list.files(path))
filename = list.files(path)
while(i <= fileamt){
file.remove(paste(path, "/", filename[i], sep=""))
i = i + 1
}
file.remove(path)
}