library(ggplot2)
source('~/R/odps_common.R')
sql<-c(
' select cust_name_cn,yyyymm as ds,gmv,amplitude,rn
from icbubi.dwa_en_ftrd_mon_cust_gmv_d
where ds=max_pt(\'icbubi.dwa_en_ftrd_mon_cust_gmv_d\') and rn<=100
'
,
'select
cust_name_cn
,max_gmv
,min_gmv
,minds
,maxds
,midds
,total_gmv
,rn
,prod_cn_name
from icbubi.dwa_en_ftrd_mon_cust_gmv_rank_d
where ds=max_pt(\'icbubi.dwa_en_ftrd_mon_cust_gmv_rank_d\') and rn<=100
'
,
'
select
x0.cust_name_cn
,x0.ds
,check_status
,rn
,x1.min_gmv
,x1.max_gmv
,day
,count(distinct day) over(partition by x0.cust_name_cn ) as days
,row_number() over(partition by x0.cust_name_cn order by day ) as dayrn
,( x1.max_gmv-x1.min_gmv)/30*cast(day as bigint) just2
from
(
select distinct
cust_name_cn
,to_char(gmt_ord_create,\'yyyymm\') as ds
,to_char(gmt_ord_create,\'dd\') as day
,case when check_status=0 then \'看货失败\'
when check_status=1 then \'看货成功\'
when check_status=2 then \'看货中\'
when check_status=3 then \'无法看货\'
end check_status
from icbubi.dwa_en_ftrd_clrc_prod_df
where ds=max_pt(\'icbubi.dwa_en_ftrd_clrc_prod_df\')
and check_status in(0,1,2,3)
)x0 join icbubi.dwa_en_ftrd_mon_cust_gmv_rank_d x1
on x0.cust_name_cn=x1.cust_name_cn
where x1.ds=max_pt(\'icbubi.dwa_en_ftrd_mon_cust_gmv_rank_d\'
)
'
)
d0<-exec_sql(sql[1])
##整体情况
d00<-exec_sql(sql[2])
###监装清苦
d3<-exec_sql(sql[3])
###调整,以免位置交错
b<-as.numeric(d3$ds)
##临时用
fjust<-function(a){
b<-rep(0,length(a))
i=1
for (j in a){ if(j%%2==0) b[i]<-8 else b[i]<-0;i=i+1}
return(b)
}
####
dx<-d0[as.numeric( d0$rn)<=15,]
dxtotal<-d00[as.numeric(d00$rn)<=15,]
dxcheck<-d3[as.numeric(d3$rn)<=15,]
just<-fjust(as.numeric(dxcheck$ds))
dxcheck<-cbind(dxcheck,just)
px<-ggplot(data=dx,aes(x=ds,y=gmv,group=cust_name_cn))
px<-px+geom_line()+
facet_wrap(~cust_name_cn,scales='free',ncol=3)+
geom_point(data=dxtotal,color='red',aes(x=maxds,y=max_gmv,group=cust_name_cn),size=3)+
geom_text(data=dxtotal,color='red',aes(x=maxds,y=max_gmv,label=paste('最大gmv=',round(max_gmv,1)),group=cust_name_cn,vjust=2,hjust=1.2),family='STKaiti')+
geom_point(data=dxtotal,color='red',aes(x=minds,y=min_gmv,group=cust_name_cn),size=3)+
geom_text(data=dxtotal,color='red',size=3,aes(x=minds,y=min_gmv,label=paste('最小gmv=',round(min_gmv,2)),group=cust_name_cn,vjust=-0.6,hjust=0.8),family='STKaiti')+
###gmv/2 的意义在于total的值可能会很高,导致图形畸变大,所以位置处理采用/2
geom_text(data=dxtotal,aes(x=midds,y=(max_gmv-min_gmv)/1.2,label=paste('主要产品:',prod_cn_name),group=cust_name_cn,vjust=0.5,hjust=1),family='STKaiti')+
geom_text(data=dxtotal,aes(x=midds,y=(max_gmv-min_gmv)/1.2,label=paste('总gmv=',round(total_gmv,1)),group=cust_name_cn,vjust=3,hjust=1),family='STKaiti')+
##看货
geom_point(data=dxcheck,aes(x=ds,y=min_gmv+(max_gmv-min_gmv)/(as.numeric(days)+1)*as.numeric( dayrn),color=check_status),shape=10,size=3)+
geom_text(data=dxcheck,aes(x=ds,y=min_gmv+(max_gmv-min_gmv)/(as.numeric(days)+1)*as.numeric( dayrn),label=day,group=cust_name_cn,hjust=2),size=3,family='STKaiti')+
labs(x='日期-月份',y='gmv-万美元',title='客户gmv趋势')+
theme_classic()+
theme(
text=element_text(family="STKaiti",size=6)
,title=element_text(family="STKaiti",size=5)
,plot.title=element_text(size=15,face='bold')
,axis.title=element_text(size=15)
,axis.text.x=element_text(angle = 30,size=9)
,axis.text.y=element_text(size=9)
,strip.text=element_text(size=10)
,legend.text=element_text(size=10)
)
px
##ggsave('A.png',width = 1000,height = 1500,limitsize = FALSE)
source('~/R/odps_common.R')
sql<-c(
' select cust_name_cn,yyyymm as ds,gmv,amplitude,rn
from icbubi.dwa_en_ftrd_mon_cust_gmv_d
where ds=max_pt(\'icbubi.dwa_en_ftrd_mon_cust_gmv_d\') and rn<=100
'
,
'select
cust_name_cn
,max_gmv
,min_gmv
,minds
,maxds
,midds
,total_gmv
,rn
,prod_cn_name
from icbubi.dwa_en_ftrd_mon_cust_gmv_rank_d
where ds=max_pt(\'icbubi.dwa_en_ftrd_mon_cust_gmv_rank_d\') and rn<=100
'
,
'
select
x0.cust_name_cn
,x0.ds
,check_status
,rn
,x1.min_gmv
,x1.max_gmv
,day
,count(distinct day) over(partition by x0.cust_name_cn ) as days
,row_number() over(partition by x0.cust_name_cn order by day ) as dayrn
,( x1.max_gmv-x1.min_gmv)/30*cast(day as bigint) just2
from
(
select distinct
cust_name_cn
,to_char(gmt_ord_create,\'yyyymm\') as ds
,to_char(gmt_ord_create,\'dd\') as day
,case when check_status=0 then \'看货失败\'
when check_status=1 then \'看货成功\'
when check_status=2 then \'看货中\'
when check_status=3 then \'无法看货\'
end check_status
from icbubi.dwa_en_ftrd_clrc_prod_df
where ds=max_pt(\'icbubi.dwa_en_ftrd_clrc_prod_df\')
and check_status in(0,1,2,3)
)x0 join icbubi.dwa_en_ftrd_mon_cust_gmv_rank_d x1
on x0.cust_name_cn=x1.cust_name_cn
where x1.ds=max_pt(\'icbubi.dwa_en_ftrd_mon_cust_gmv_rank_d\'
)
'
)
d0<-exec_sql(sql[1])
##整体情况
d00<-exec_sql(sql[2])
###监装清苦
d3<-exec_sql(sql[3])
###调整,以免位置交错
b<-as.numeric(d3$ds)
##临时用
fjust<-function(a){
b<-rep(0,length(a))
i=1
for (j in a){ if(j%%2==0) b[i]<-8 else b[i]<-0;i=i+1}
return(b)
}
####
dx<-d0[as.numeric( d0$rn)<=15,]
dxtotal<-d00[as.numeric(d00$rn)<=15,]
dxcheck<-d3[as.numeric(d3$rn)<=15,]
just<-fjust(as.numeric(dxcheck$ds))
dxcheck<-cbind(dxcheck,just)
px<-ggplot(data=dx,aes(x=ds,y=gmv,group=cust_name_cn))
px<-px+geom_line()+
facet_wrap(~cust_name_cn,scales='free',ncol=3)+
geom_point(data=dxtotal,color='red',aes(x=maxds,y=max_gmv,group=cust_name_cn),size=3)+
geom_text(data=dxtotal,color='red',aes(x=maxds,y=max_gmv,label=paste('最大gmv=',round(max_gmv,1)),group=cust_name_cn,vjust=2,hjust=1.2),family='STKaiti')+
geom_point(data=dxtotal,color='red',aes(x=minds,y=min_gmv,group=cust_name_cn),size=3)+
geom_text(data=dxtotal,color='red',size=3,aes(x=minds,y=min_gmv,label=paste('最小gmv=',round(min_gmv,2)),group=cust_name_cn,vjust=-0.6,hjust=0.8),family='STKaiti')+
###gmv/2 的意义在于total的值可能会很高,导致图形畸变大,所以位置处理采用/2
geom_text(data=dxtotal,aes(x=midds,y=(max_gmv-min_gmv)/1.2,label=paste('主要产品:',prod_cn_name),group=cust_name_cn,vjust=0.5,hjust=1),family='STKaiti')+
geom_text(data=dxtotal,aes(x=midds,y=(max_gmv-min_gmv)/1.2,label=paste('总gmv=',round(total_gmv,1)),group=cust_name_cn,vjust=3,hjust=1),family='STKaiti')+
##看货
geom_point(data=dxcheck,aes(x=ds,y=min_gmv+(max_gmv-min_gmv)/(as.numeric(days)+1)*as.numeric( dayrn),color=check_status),shape=10,size=3)+
geom_text(data=dxcheck,aes(x=ds,y=min_gmv+(max_gmv-min_gmv)/(as.numeric(days)+1)*as.numeric( dayrn),label=day,group=cust_name_cn,hjust=2),size=3,family='STKaiti')+
labs(x='日期-月份',y='gmv-万美元',title='客户gmv趋势')+
theme_classic()+
theme(
text=element_text(family="STKaiti",size=6)
,title=element_text(family="STKaiti",size=5)
,plot.title=element_text(size=15,face='bold')
,axis.title=element_text(size=15)
,axis.text.x=element_text(angle = 30,size=9)
,axis.text.y=element_text(size=9)
,strip.text=element_text(size=10)
,legend.text=element_text(size=10)
)
px
##ggsave('A.png',width = 1000,height = 1500,limitsize = FALSE)