资源简介

本资源是有关电视节目的推荐的,数据样本虽然少了一些,但是代码完整,希望有用

资源截图

代码片段和文件信息

# -*- coding: utf-8 -*-
“““
Created on Thu Nov  1 09:33:14 2018

@author: AZ
“““
import math
import pandas as pd
import numpy as np
import os
os.chdir(‘E:/广电大数据营销推荐项目案例/数据清洗/电视节目信息数据预处理‘)

# 创建节目画像
# 参数说明:
# items_profiles = {item1:{‘label1‘:1 ‘label2‘: 0 ‘label3‘: 0 ...} item2:{...}...}
def createItemsProfiles(data_array labels_names items_names):
    items_profiles = {}
    for i in range(len(items_names)):
        items_profiles[items_names[i]] = {}
        for j in range(len(labels_names)):
            items_profiles[items_names[i]][labels_names[j]] = data_array[i][j]
    return items_profiles

# 创建用户画像
# 参数说明:
# data_array: 所有用户对于其所看过的节目的评分矩阵 data_array = [[2 0 0 1.1 ...] [0 0 1.1 ...] ...]
# users_profiles = {user1:{‘label1‘:1.1 ‘label2‘: 0.5 ‘label3‘: 0.0 ...} user2:{...}...}
def createUsersProfiles(data_array users_names items_names labels_names items_profiles):
    users_profiles = {}
    # 计算每个用户对所看过的所有节目的平均隐性评分
    # users_average_scores_list = [1.2 2.2 4.3...]
    users_average_scores_list = []

    # 统计每个用户所看过的节目(不加入隐性评分信息)
    # items_users_saw = {user1:[item1 item3 item5] user2:[...]...}
    items_users_saw = {}
    # 统计每个用户所看过的节目及评分
    # items_users_saw_scores = {user1:[[item1 1.1] [item2 4.1]] user2:...}
    items_users_saw_scores = {}
    
    for i in range(len(users_names)):

        items_users_saw_scores[users_names[i]] = []
        items_users_saw[users_names[i]] = []
        count = 0
        sum = 0.0
        for j in range(len(items_names)):

            # 用户对该节目隐性评分为正,表示真正看过该节目
            if data_array[i][j] > 0:
                items_users_saw[users_names[i]].append(items_names[j])
                items_users_saw_scores[users_names[i]].append([items_names[j] data_array[i][j]])
                count += 1
                sum += data_array[i][j]

        if count == 0:
            users_average_scores_list.append(0)
        else:
            users_average_scores_list.append(sum / count)

    for i in range(len(users_names)):

        users_profiles[users_names[i]] = {}

        for j in range(len(labels_names)):
            count = 0
            score = 0.0

            for item in items_users_saw_scores[users_names[i]]:

                # 参数:
                # 用户user1对于类型label1的隐性评分: user1_score_to_label1
                # 用户user1对于其看过的含有类型label1的节目item i 的评分: score_to_item i
                # 用户user1对其所看过的所有节目的平均评分: user1_average_score
                # 用户user1看过的节目总数: items_count

                # 公式: user1_score_to_label1 = Sigma(score_to_item i - user1_average_score)/items_count

                # 该节目含有特定标签labels_names[j]
                if items_profiles[item[0]][labels_names[j]] > 0:
                    score += (item[1] - users_average_scores_list[i])
                    count += 1

            # 如果求出的值太小,直接置0
            if abs(score) < 1e-6:
                score = 0.0
            if count 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-11-01 11:15  电视节目推荐实例完整代码与数据\
     文件        9855  2018-11-01 10:16  电视节目推荐实例完整代码与数据\content_based_recommend.py
     文件        5690  2018-11-01 11:11  电视节目推荐实例完整代码与数据\mix_user_cb.py
     文件        5007  2018-11-01 08:49  电视节目推荐实例完整代码与数据\temp_movies_01mat.csv
     文件        3259  2018-11-01 08:49  电视节目推荐实例完整代码与数据\temp_users_movies_01mat.csv
     文件         717  2018-11-01 09:07  电视节目推荐实例完整代码与数据\temp_users_rating.csv
     文件         702  2018-11-01 10:45  电视节目推荐实例完整代码与数据\temp_user_scores_mat.csv
     文件         619  2018-11-01 10:46  电视节目推荐实例完整代码与数据\temp_user_scores_mat2.csv
     文件        7962  2018-11-01 10:56  电视节目推荐实例完整代码与数据\user_based_recommend.py

评论

共有 条评论