有一个定律,对于内容的访问遵循80/20原则,也就是20%的内容,会占有80%的访问量。就是zipf分布[1]。
 根据MovieLens的数据集中的ratings.dat,我做了数据处理,获取得分最高的2000个条目。
ml-pro.py

import os
import heapq
from datetime import datetime
kMonthInSecond=30*24*60*60
def getUserInfo(filename,id,col,sep='::'):ret=[]with open(filename,'r') as f:for line in f.readlines():lineArr= line.strip().split(sep)if int(lineArr[0])==id:ret.append(lineArr[col])return ret
def unixTime2date(ts):return datetime.utcfromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
def getStartAndEnd(filename,col,sep='::'):minV=0maxV=0with open(filename,'r') as f:for line in f.readlines():lineArr= line.strip().split(sep)v=int(lineArr[col])if minV==0 and maxV==0:minV=maxV=velse:if v<minV:minV=vif v>maxV:maxV=vreturn minV,maxV
class Score(object):def __init__(self,id,v=0,c=0):self.id=idself.v=vself.count=cdef __lt__(self, other):if self.v<other.v:return Trueelse:return False
def processTopKRate(filename,dst,K,sep='::'):rate_dict={}heap=[]maxV=0poll_num=0with open(filename,'r') as f:for line in f.readlines():lineArr= line.strip().split(sep)id=int(lineArr[1])score=int(lineArr[2])obj=rate_dict.get(id)poll_num=poll_num+1if obj is None:rate_dict.update({id:Score(id,score,1)})else:obj.v=obj.v+scoreobj.count=obj.count+1if maxV is 0 or obj.v>maxV:maxV=obj.vif K>len(rate_dict):K=len(rate_dict)for item in rate_dict.items():heapq.heappush(heap, item[1])if len(heap)>K:heapq.heappop(heap)heap.sort(reverse=True)print(maxV)with open(dst,'w') as f:i=1accum=0for s in heap:accum=accum+s.countratio=100.0*accum/poll_numf.write(str(i)+"\t"+str(s.id)+"\t"+str(s.v)+"\t"+str(ratio)+"\n")i=i+1return heap
def processMovieTime(filename,movieId,col=3,sep='::'):minV=0maxV=0with open(filename,'r') as f:for line in f.readlines():lineArr= line.strip().split(sep)index=int(lineArr[1])v=int(lineArr[col])if index==movieId:if minV==0 and maxV==0:minV=maxV=velse:if v<minV:minV=vif v>maxV:maxV=vif maxV>minV:dst="movie_"+str(movieId)+".txt"slot=(maxV-minV+kMonthInSecond-1)/kMonthInSecondcount=[]for i in range(slot):count.append(0)with open(filename,'r') as f:for line in f.readlines():lineArr= line.strip().split(sep)index=int(lineArr[1])v=int(lineArr[col])if index==movieId: i=(v-minV)/kMonthInSecondcount[i]=count[i]+1with open(dst,'w') as f:i=1for v in count:f.write(str(i)+"\t"+str(v)+"\n")i=i+1return minV,maxV
if __name__=='__main__':filename="ratings.dat"data=getUserInfo(filename,1,3)minV,maxV=getStartAndEnd(filename,1)print(minV,maxV)res=processTopKRate(filename,"res.txt",2000)processMovieTime(filename,res[0].id)processMovieTime(filename,res[1].id)processMovieTime(filename,res[2].id)processMovieTime(filename,res[3].id)processMovieTime(filename,res[4].id)

 绘图脚本score-plot.sh:

#! /bin/sh
file1=res.txt
output=out
gnuplot<<!
set xlabel "index"
set ylabel "score"
set xrange [0:2000]
set yrange [0:15000]
set term "png"
set output "${output}.png"
plot "${file1}" u 1:3 title "flow1" with lines lw 2 lc 1
set output
exit
!

 结果out.png:

 大概有4000个电影id。上图中,当index为1200时,已经累计有80%的用户打分。内容占据比例:1200/4000=30%。
 函数processMovieTime处理用户对电影的打分时间,unix时间转化成月份序号。
 绘图脚本,req-plot.sh

#! /bin/sh
file1=movie_260.txt
file2=movie_1196.txt
file3=movie_1210.txt
file4=movie_2028.txt
file5=movie_2858.txt
output=req
gnuplot<<!
set xlabel "index"
set ylabel "score"
set xrange [0:40]
set yrange [0:800]
set term "png"
set output "${output}.png"
plot "${file1}" u 1:2 title "movie1" with lines lw 2 lc 1,\
"${file2}" u 1:2 title "movie2" with lines lw 2 lc 2,\
"${file3}" u 1:2 title "movie3" with lines lw 2 lc 3,\
"${file4}" u 1:2 title "movie3" with lines lw 2 lc 4,\
"${file5}" u 1:2 title "movie3" with lines lw 2 lc 5
set output
exit
!

 结果:

Reference
[1]Zipf分布
[2]推荐系统–MovieLens数据集

MovieLens数据集处理相关推荐

  1. movielens数据集下载

    movielens数据集下载 主要是原网站下载速度太慢 百度云: 复制这段内容后打开百度网盘App,操作更方便哦. 链接:https://pan.baidu.com/s/1QO99QeUa-GEacl ...

  2. 使用文本卷积神经网络,并使用MovieLens数据集完成电影推荐的任务

    使用文本卷积神经网络,并使用MovieLens数据集完成电影推荐的任务 import pandas as pd from sklearn.model_selection import train_te ...

  3. Movielens数据集详细介绍

     MovieLens数据集包含多个用户对多部电影的评级数据,也包括电影元数据信息和用户属性信息.下载地址为:http://files.grouplens.org/datasets/movielens/ ...

  4. movielens数据集导入mysql_GitHub - Colaplusice/movielens_recommend: 基于movielens数据集的电影推荐系统...

    毕业设计--基于Django的电影推荐系统和论坛 说明 注册普通用户通过web界面来设置,创建创建用户通过creeatsuperuser创建.下文有详细命令 导入电影信息通过insert_movies ...

  5. python亲和性分析法推荐电影论文_数据挖掘-MovieLens数据集_电影推荐_亲和性分析_Aprioro算法...

    #!/usr/bin/env python2 # -*- coding: utf-8 -*- """ Created on Tue Feb  7 14:38:33 201 ...

  6. grouplens上的movielens数据集_ItemCF算法的Python实现,数据基于MovieLens

    数据从 MovieLens数据下载地址 https://grouplens.org/datasets/movielens/ 下载. 我选的是1MB版本,大约10W+评分,9K+电影,600+用户. 使 ...

  7. movielens数据集导入mysql_我来做数据--如何对数据进行处理以满足机器学习技术(一):MovieLens数据...

    标签(空格分隔): 数据分析 python 数据挖掘 MovieLens 1M数据集 一组从20世纪90年末到21世纪初由MovieLens用户提供的电影评分数据.这些数据中包括电影评分.电影元数据( ...

  8. Learning: 利用Python进行数据分析 - MovieLens 数据集的探索

    MovieLens 1M数据集含有来自6000名用户对4000部电影的100万条评分数据,分为三个表,movies.ratings.users 数据处理 通过pandas.read_table将各表转 ...

  9. 《Spark机器学习》笔记——基于MovieLens数据集使用Spark进行电影数据分析

    1.数据集下载 https://grouplens.org/datasets/movielens 2.数据集下文件格式 u.user用户属性文件 包含user.id用户ID    gender性别   ...

最新文章

  1. Symfony2 学习笔记之命令app/console
  2. /bin/bash: jar: command not found
  3. centos7下安全访问远程服务器
  4. Java JUC工具类--CyclicBarrier
  5. 多态应用-打印商品价格案例
  6. GNUstep 运行gui程序
  7. 关于appium的下载安装及环境配置(含nodejs下载安装)
  8. 如何将国际音标插入到Word中? | 怎么打48个国际音标?
  9. 阿里云主要产品及功能介绍,阿里云产品分为6大分类:云计算基础/安全/大数据/人工智能/企业应用/物联网
  10. 新知实验室 TRTC在线上教育场景中的一种应用实践
  11. muma很可能在陪你玩游戏
  12. python爬虫概述及简单实践
  13. CentOS8 编译安装tsar nagios + nagios-plugins + nsca
  14. Oracle 19C 下载和安装
  15. sql基础_SQL基础
  16. 机器学习从零到一的基础知识总集篇
  17. 【mysql入门笔记01 2022.9.27】
  18. WOE(Weight of Evidence)证据权重
  19. 汽车零部件行业应用APS的必要性
  20. 点阵LCD12864的显示原理(不带字库)

热门文章

  1. 小学计算机程序竞赛,25届宁波市中小学计算机程序设计竞赛初赛试题
  2. 公钥密码学中的公钥和私钥
  3. AdminLTE入门使用
  4. 微信小程序图片空白问题处理
  5. 为什么我要用GoEasy替代WebSocket
  6. 网络编程 网络地址点分十进制和二进制之间的转换
  7. python大神代码_求python大神写一个windows可运行的代码,学习学习。
  8. 安卓下的c语言ide,C语言编译器IDE安卓版下载-C语言编译器IDE下载v1.7 最新版-腾牛安卓网...
  9. 阿里巴巴的 eclipse 代码检查工具如何安装?
  10. windows server 2003的驱动