4000 冷却算法综合排名改进模型-R实现代码
2016-07-22 22:06
344 查看
近期对投票模型中的牛顿冷却模型结合具体数据及含义进行了改进,并通过R语言进行了实现,模型逻辑并不复杂,在之后的博文中会添加上去,代码中存在各种条件句是由于实际可操作数据中存在各种情况,数据来源于爬虫累计数据。
R代码
##读入数据集 rankData<-read.csv("F://rankData.csv",header=T,as.is=T) qidian=rankData[which(rankData$vpuid==110350),]##提取指定条件下的数据集作品字典 works<-unique(qidian[,3]) times<-sort(unique(qidian[,11])) ##基于指定指标计算热度值 getHot<-function(rankData,works,value_col,time_col){ n=length(works) result<-data.frame() for(i in 1:n){ work<-rankData[grep(works[i],rankData[,3]),] m=nrow(work) #求增长量 create<-array(,m) time<-array(,m) hot<-array(,m) if(m<2){ hotList<-data.frame(work,hot) result<-rbind(result,hotList) }else{ ##求增量及相邻时间间隔 time[1]=0 create[1]=work[value_col][1,1] for(j in 2:m){ if(is.na(create[j-1])&&is.na(work[value_col][j,1])==FALSE){ create[j-1]=work[value_col][j,1] create[j]=work[value_col][j,1] }else if(is.na(work[value_col][j-1,1])==FALSE&&is.na(work[value_col][j,1])){ create[j]=work[value_col][j-1,1] }else if(is.na(work[value_col][j-1,1])&&is.na(work[value_col][j,1])){ create[j]=create[j-1] }else{ create[j]=(work[value_col][j,1]-work[value_col][j-1,1]) } time[j]=as.Date(work[time_col][j,1])-as.Date(work[time_col][j-1,1]) } ##求增长率及热度值 hot[1]=create[2] for(k in 2:m){ if(length(create)==0){ break }else{ if(create[k]==0){ hot[k]=hot[k-1]*exp(-time[k]) }else{ hot[k]=hot[k-1]*exp((create[k]-create[k-1])*time[k]/create[k-1]) } } } #print(work[1:8]) #print(hot) hotList<-data.frame(work,hot) result<-rbind(result,hotList) } } return (result) } ##基于hot值,得到秩 getRank<-function(times,result){ n<-length(times) rankResult<-data.frame() for(i in 1:n){ times[i] dayData<-result[grep(times[i],result[,11]),] rank<-order(dayData[ncol(dayData)]) rankTemp<-data.frame(dayData,rank) rankResult<-rbind(rankResult,rankTemp) } return(rankResult) } ##求加权综合秩 getResult<-function(info_cols,w,result){ x=info_cols m=nrow(result) n=ncol(result) #print(list(x,m,n)) len=length(w) ranklist<-data.frame() rankTemp<-array(,) for(i in 1: m ){ hot_cover=0 for(j in info_cols:n){ hot_cover=hot_cover+w[j-x+1]*result[i,j] } hot=hot_cover/len rankTemp[i]=hot } ranklist<-data.frame(result,rankTemp) return(ranklist) } ####方法调用#### rankData<-read.csv("F://分类别//排名算法//rankData.csv",header=T,as.is=T) qidian=rankData[which(rankData$vpuid==110350),]##提取指定条件下的数据集作品字典 works<-unique(qidian[,3]) times<-sort(unique(qidian[,11])) result_1<-getHot(qidian,works,7,11) rank_1<-getRank(times,result_1) result_2<-getHot(qidian,works,8,11) rank_2<-getRank(times,result_2) result_3<-getHot(qidian,works,9,11) rank_3<-getRank(times,result_3) #result_4<-getHot(qidian,works,19,11) #rank_4<-getRank(times,result_4) #result_5<-getHot(qidian,works,20,11) #rank_5<-getRank(times,result_5) #result_6<-getHot(qidian,works,21,11) #rank_6<-getRank(times,result_6) #result_7<-getHot(qidian,works,22,11) #rank_7<-getRank(times,result_7) #result<-data.frame(rank_1,rank_2[ncol(rank_2)],rank_3[ncol(rank_3)],rank_4[ncol(rank_4)],rank_5[ncol(rank_5)],rank_6[ncol(rank_6)],rank_7[ncol(rank_7)]) result<-data.frame(rank_1[1:ncol(rank_1)],rank_2[ncol(rank_2)],rank_3[ncol(rank_3)]) #result<-data.frame(rank_1[1:ncol(rank_1)],rank_2[ncol(rank_2)]) w=c(1/3,1/3,1/3) #w=c(1/2,1/2) info_cols=ncol(rank_1) lastResult<-getResult(info_cols,w,result) lastRank<-getRank(times,lastResult) write.csv(lastRank,"F://rank_qidian.csv")
相关文章推荐
- 设计模式之适配器模式代码示例
- [LeetCode刷题笔记]Math数学类型题目(二)字符串型数字计算
- [Asp.Net]登录协同工作平台安全解决方案(优化版)
- Struts1知识点、注意事项总结
- C语言位域
- PHP参数传递的方式
- Lua教程(二十二)
- 基数排序简单Java实现
- springMVC和Shiro框架整合使用简单示例
- 利用C#自带组件强壮程序日志
- GitHub控件之BadgeView(数字提醒)
- MachineLearning03_SVM算法
- Java ConcurrentModificationException异常原因和解决方法
- linphone-LinphoneCoreFactory.java文件分析
- Java编程思想学习笔记_4(异常机制,容器)
- [C#]Stack类的实现
- Devstack代码流程图
- asp.net总结
- java非阻塞笔记一
- JAVA面向对象-----this的概述