有一个定律,对于内容的访问遵循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. 早就听闻阿里开源的 Arthas 在做 Java 应用诊断上十分牛逼,没失望
  2. OPKG 软件包管理
  3. day1学python Hello Python
  4. C++STL的queue容器
  5. linux下启动oracle服务
  6. 极端情况下收缩 Go 进程的线程数
  7. 人类历史上有哪些逆天的文物?
  8. (二十六)深度学习目标检测:Fast-RCNN
  9. 楼板计算塑形弹性_楼板计算的塑性铰线理论原理与运用详解.doc
  10. SQL select详解(基于选课系统)
  11. Qt - 换肤功能实现
  12. 智慧小区智能化视频监控系统建设方案
  13. LibGDX_4.1: LibGDX 游戏开发框架
  14. 【你好,windows】Windows 10 X64 20H2 19042.868 纯净版2021.3.17
  15. 计算机组成原理-组成篇(下)
  16. Zookeepr分布式协调服务之基础铺垫(大数据工程师工作笔记)
  17. 【学习小记】狄利克雷卷积+杜教筛
  18. 代工大战改变台积电独霸地位?
  19. 【JZOJ3156】病毒传播
  20. 案例理解LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN 相关的 7 种用法

热门文章

  1. 是社会太浮躁、还是我们太浮躁
  2. 史上最全常用正则表达式
  3. 阿里云视频点播-->>>阿里云媒资上传工具类及配置
  4. HTML中引入外部CSS和JS
  5. 观察 | 回顾 DeFi 中的“蓝筹股”,DeFi 路在何方?
  6. Unity性能优化全攻略
  7. html投票,基于js实现投票的实例代码
  8. c语言实现采集设备snmp信息,使用snmpwalk采集设备的OID信息
  9. 聚华祥科技:数据分析对于店铺运营的意义
  10. 青软集团大数据和人工智能实训室 助力西北工业大学高端软件人才培养