欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

R语言实现电影评分相关性分析(曼哈顿算法)

程序员文章站 2022-04-03 21:15:17
...

R语言实现电影评分相关性分析(曼哈顿算法)

首先模拟一个数据框,横轴是不同用户的名字,纵轴是不同的电影名字,表格中的数字是该用户对该电影的评分,如果表格中为空,那么代表该用户没有看过该电影,通过计算任意两个用户的曼哈顿距离来计算两个人打分的相关程度,进而得到对电影的喜好情况,便于后续做用户分类,以及电影推荐。

先附上模拟出的数据框,文件格式为csv文件,csv文件的好处是在数据交换时,能够保证通用性和准确性。
R语言实现电影评分相关性分析(曼哈顿算法)
然后我们用R语言来进行数据分析,首先导入数据集:

movie_list=read.csv("D:\\电影评分测试.csv",header=T)

先写一个计算曼哈顿距离的函数:

Manhattan_Distance <- function(x,y){
	distance=0
	for(i in 1:16){
		if(!is.na(x[i])&!is.na(y[i])){
			distance=distance+abs(x[i]-y[i])
		}
	}
	return(distance)
}

为了后续作图方便,先保存一个原始矩阵的转置矩阵,然后导出一个人名字的向量,这里就先不导出电影名字的向量了,后续如果想实现更多功能的话可以自行导出,原理都一样。

new=t(movie_list)
a=row.names(new)[2:]

这里a导出的就是数据框里边所有人名字组成的一个字符向量,然后开始写主要的分析函数,其实在本例中这部分不用单独封装函数的,但是为了后续功能添加的方便,这里还是进行了封装。这部分的主要作用就是随意输入一个用户名的变量,要输出他和其他所有用户的曼哈顿距离,并做柱状图,并算出和他打分最相关的那个人。代码如下:

correlation_analysis <- function(x) {
	all_distance <- c()
	for(i in 2:11) {
		all_distance[i-1] <- Manhattan_Distance(x,movie_list[,i])
	}
	zero_location = which(all_distance==0)
	all_distance=all_distance[-zero_location]
	a=a[-zero_location]
	barplot(all_distance,names.arg=a,ylim=c(0,20))
	everyone <- all_distance
	least=min(everyone)
	least_location=which(everyone==least)
	who=a[least_location]
	cat("相关性最高的用户是",who,"他们的曼哈顿距离是",least)	
}

这里我们取个中间的人名,以sam为例输出

correlation_analysis(movie_list$Sam)

输出结果如下:

> correlation_analysis(movie_list$Sam)
相关性最高的用户是 Hailey 他们的曼哈顿距离是 9> 

输出图形如下,这里只是简单进行了仿真,未对图形做装饰。
R语言实现电影评分相关性分析(曼哈顿算法)
可以看到文字结果和图形结果完全相符。后续可以扩大用户量,扩大电影量,对曼哈顿距离加入阈值来判定两用户是否相关,从而相互推荐电影,也可以对电影的受欢迎情况做数据分析,对新用户打分情况做预测等