• 大小: 19.8MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-07-03
  • 语言: Python
  • 标签: 数据挖掘  

资源简介

本压缩包为pycharm工程文件,其中movie文件夹内为movielens的数据集,100k条数据。代码为python3.6,注释详细。欢迎一起学习。

资源截图

代码片段和文件信息

import os
import pandas as pd
from collections import defaultdict
from operator import itemgetter

import sys

data_folder = os.path.join(os.path.expanduser(“~“) “Data“ “movie“)
ratings_filename = os.path.join(data_folder “u.data“)
# 由于第一行就是数据部分,所以要手动添加表头,设置各列名称

all_ratings = pd.read_csv(ratings_filename delimiter=“\t“ header=None
                          names=[“UserID“ “MovieID“ “Rating“ “Datetime“])
print(all_ratings[:5])
# 创建新特征。如果评分大于3,就设定用户喜欢这部电影
all_ratings[“Favorable“] = all_ratings[“Rating“] > 3
print(all_ratings[10:15])

# 取前200个用户的打分数据
ratings = all_ratings[all_ratings[‘UserID‘].isin(range(200))]
favorable_ratings = ratings[ratings[“Favorable“]]
# 每个用户各喜欢哪些电影
favorable_reviews_by_users = dict((k frozenset(v.values)) for k v in favorable_ratings.groupby(“UserID“)[“MovieID“])
# 每部电影的喜欢的人数量
num_favorable_by_movie = ratings[[“MovieID“ “Favorable“]].groupby(“MovieID“).sum()

# 最受欢迎的五部电影
print(num_favorable_by_movie.sort_values(by=“Favorable“ ascending=False).head())

# 实现Apriori算法
# 频繁项集
frequent_itemsets = {}
# 称为频繁项集的最小支持度
min_support = 50

# 为每一部电影生成只包含它自己的项集,检测它是否频繁
frequent_itemsets[1] = dict((frozenset((movie_id)) row[“Favorable“])
                            for movie_id row in num_favorable_by_movie.iterrows()
                            if row[“Favorable“] > min_support)
print(“有 {} 部电影有至少{} 个好评“.format(len(frequent_itemsets[1]) min_support))
sys.stdout.flush()


# 接收新发现的频繁项集,创建超集,检测频繁程度
def find_frequent_itemsets(favorable_reviews_by_users k_1_itemsets min_support):
    counts = defaultdict(int)
    # 遍历所有用户和他们的打分数据
    for user reviews in favorable_reviews_by_users.items():
        # 遍历前面找出的项集,判断是否是当前评分项集的子集,如果是,说明用户已经为子集中的电影评分
        for itemset in k_1_itemsets:
            if itemset.issubset(reviews):
                # 遍历用户打过分但是没有出现在项集里的电影,生成超集。更新该项集的计数。
                for other_reviewed_movie in reviews - itemset:
                    current_superset = itemset | frozenset((other_reviewed_movie))
                    counts[current_superset] += 1
    # 检测达到最小支持度的项集,看他频繁程度是否达到要求,返回频繁项集
    return dict([(itemset frequency) for itemset frequency in counts.items() if frequency >= min_support])


# 运行Apriori算法
for k in range(2 20):
    cur_frequent_itemsets = find_frequent_itemsets(favorable_reviews_by_users frequent_itemsets[k - 1]
                                                   min_support)
    if len(cur_frequent_itemsets) == 0:
        print(“没有找到长度为{}的频繁项集“.format(k))
        sys.stdout.flush()  # 确保代码还在运行时,把缓冲区内容输出到终端,保证即时输出
        break
    else:
        print(“找到了{}个长度为{}的频繁项集“.format(len(cur_frequent_itemsets) k))
        sys.stdout.flush()
        frequent_itemsets[k] = cur_frequent_itemsets
# 删除长度为1的项集
del frequent_itemsets[1]

# 为每个项集生成规则:  如果用户喜欢前提中的所有电影,那么他们也会喜欢结论中的电影
candidate_rules = []
for itemset_length itemset_counts in frequent_itemsets.items():
    for itemset in itemset_counts.keys():
        # 遍历每一

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-01-11 15:54  movie_pro\
     目录           0  2018-01-11 15:53  movie_pro\.idea\
     目录           0  2018-01-11 10:32  movie_pro\.idea\libraries\
     文件         128  2018-01-11 10:32  movie_pro\.idea\libraries\R_User_Library.xml
     文件         185  2018-01-11 10:34  movie_pro\.idea\misc.xml
     文件         270  2018-01-11 10:30  movie_pro\.idea\modules.xml
     文件         700  2018-01-11 10:34  movie_pro\.idea\movie_pro.iml
     文件       12020  2018-01-11 15:53  movie_pro\.idea\workspace.xml
     目录           0  2018-01-11 15:54  movie_pro\movie\
     文件        7729  2018-01-11 15:49  movie_pro\movie.py
     文件         716  2000-07-20 05:09  movie_pro\movie\allbut.pl
     文件         643  2000-07-20 05:09  movie_pro\movie\mku.sh
     文件        6750  2016-01-30 04:26  movie_pro\movie\README
     文件     1979173  2000-07-20 05:09  movie_pro\movie\u.data
     文件         202  2000-07-20 05:09  movie_pro\movie\u.genre
     文件          36  2000-07-20 05:09  movie_pro\movie\u.info
     文件      236344  2000-07-20 05:09  movie_pro\movie\u.item
     文件         193  2000-07-20 05:09  movie_pro\movie\u.occupation
     文件       22628  2000-07-20 05:09  movie_pro\movie\u.user
     文件     1586544  2001-03-09 02:33  movie_pro\movie\u1.base
     文件      392629  2001-03-09 02:32  movie_pro\movie\u1.test
     文件     1583948  2001-03-09 02:33  movie_pro\movie\u2.base
     文件      395225  2001-03-09 02:33  movie_pro\movie\u2.test
     文件     1582546  2001-03-09 02:33  movie_pro\movie\u3.base
     文件      396627  2001-03-09 02:33  movie_pro\movie\u3.test
     文件     1581878  2001-03-09 02:33  movie_pro\movie\u4.base
     文件      397295  2001-03-09 02:33  movie_pro\movie\u4.test
     文件     1581776  2001-03-09 02:34  movie_pro\movie\u5.base
     文件      397397  2001-03-09 02:33  movie_pro\movie\u5.test
     文件     1792501  2001-03-09 02:34  movie_pro\movie\ua.base
     文件      186672  2001-03-09 02:34  movie_pro\movie\ua.test
............此处省略696个文件信息

评论

共有 条评论