python 综合练习

条件:ML100k.data

注意 :程序对列表进行修改,为避免列表索引出现问题,避免使用for i in range(len(data)),而使用 for i in data可避免这一问题

python 复制代码
import pickle
data = []
with open("ML100k.data", 'r') as file:
    for line in file:
        data.append([int(item) for item in line.strip('\n').split('\t')])

user_dict = {}
film_dict = {}
for i in data:
    user = i[0]
    film = i[1]

    if user not in user_dict:
        user_dict[user] = [i]
    else:
        user_dict[user].append(i)
    if film not in film_dict:
        film_dict[film] = [i]
    else:
        film_dict[film].append(i)
#  删掉不活跃用户、冷门电影
for user in user_dict:
    if len(user_dict[user]) < 5:
        for _ in data:
            if _ in user_dict[user]:
                data.remove(_)
for film in film_dict:
    if len(film_dict[film]) < 5:
        for _ in data:
            if _ in film_dict[film]:
                data.remove(_)
# 统计用户数量user_num、电影数量item_num、评分数量rating_num
user_sum = {}
item_sum = {}
for i in data:
    user = i[0]
    item = i[1]
    if user not in user_sum:
        user_sum[user] = [i]
    else:
        user_sum[user].append(i)
    if item not in item_sum:
        item_sum[item] = [i]
    else:
        item_sum[item].append(i)
print(len(user_sum))
print(len(item_sum))
print(len(data))

#  计算稀疏度
sparsity = len(data)/(len(user_sum)*len(item_sum))
print(sparsity)

#  统计每个用户的平均评分user_average、每部电影的平均评分item_average、以及全部评分的平均评分global_average.
user_average = []
item_average = []
sorted_user = list(user_sum.keys())
sorted_item = list(item_sum.keys())
sorted_item.sort()
sorted_user.sort()
for user in sorted_user:
    user_average.append(sum(user_sum[user][2])/len(user_sum[user]))
for item in sorted_item:
    item_average.append(sum(item_sum[item][2])/len(item_sum[item]))
#  print(user_average)
#  print(item_average)

#  统计所有评分中1~5的分布情况rating_num
rating_num = [0, 0, 0, 0, 0]
for i in data:
    rating = i[2]
    rating_num[rating-1] += 1
print(rating_num)

# 将用户和电影分别从0开始标号,使得用户的最大编号为user_sum-1,电影最大编号为item_sum-1
user_num = {}
item_num = {}
count1, count2 = 0, 0
for i in data:
    user = i[0]
    item = i[1]
    if user not in user_num:
        user_num[user] = count1
        count1 += 1
    if item not in item_num:
        item_num[item] = count2
        count2 += 1
    i[0] = user_num[user]
    i[1] = item_num[item]
相关推荐
hyhrosewind26 分钟前
Python函数基础:说明文档(多行注释),函数嵌套调用,变量作用域(局部,全局,global关键字),综合案例
python·变量作用域·函数说明文档(多行注释)·函数嵌套调用·局部变量和全局变量·函数内修改全局变量·global关键字
mit6.8241 小时前
[Lc_week] 447 | 155 | Q1 | hash | pair {}调用
算法·leetcode·哈希算法·散列表
一点.点1 小时前
李沐动手深度学习(pycharm中运行笔记)——04.数据预处理
pytorch·笔记·python·深度学习·pycharm·动手深度学习
一点.点1 小时前
李沐动手深度学习(pycharm中运行笔记)——07.自动求导
pytorch·笔记·python·深度学习·pycharm·动手深度学习
jerry6092 小时前
优先队列、堆笔记(算法第四版)
java·笔记·算法
大霸王龙2 小时前
Python对比两张CAD图并标记差异的解决方案
python·opencv·计算机视觉
勤劳的牛马2 小时前
📚 小白学算法 | 每日一题 | 算法实战:加1!
算法
Epiphany.5562 小时前
基于c++的LCA倍增法实现
c++·算法·深度优先
萧鼎3 小时前
PDFMathTranslate:让数学公式在PDF翻译中不再痛苦
python·pdf
@_猿来如此3 小时前
Django 实现电影推荐系统:从搭建到功能完善(附源码)
数据库·后端·python·django