電視節目的混合協同過濾推薦例項

2021-08-30 15:17:22 字數 4480 閱讀 6015

# -*- coding: utf-8 -*-

"""created on thu nov 1 10:39:11 2018

@author: az

"""import sys

import content_based_recommend #呼叫content_based_recommend.py

import user_based_recommend #呼叫user_based_recommend.py

import numpy as np

import pandas as pd

import os

os.chdir('e:/廣電大資料營銷推薦專案案例/資料清洗/電視節目資訊資料預處理')

# 輸出推薦給該使用者的節目列表

# max_num:最多輸出的推薦節目數

def printrecommenditems(recommend_items_sorted, max_num):

count = 0

for item, degree in recommend_items_sorted:

count += 1

if count == max_num:

break

if __name__ == '__main__':

all_users_names = [3, 13, 23]

all_labels = ['劇情', '西部', '家庭', '驚悚', '動畫',

'愛情', '**', '運動', '**', '災難',

'懸疑', '兒童', '短片', '歷史', '動作',

'科幻', '傳記', '同性', '冒險', '歌舞',

'脫口秀', '真人騷', '新聞', '恐怖', '奇幻',

'犯罪', '喜劇', '紀錄片', '戰爭', '古裝',

'武俠', '綜藝' ,'電視劇集', '邵氏','電影']

labels_num = len(all_labels)

df1 = pd.read_csv('./wordsbag/dataprocess/data/week/mydata/temp_user_scores_mat2.csv',sep=',',encoding='gbk',header='infer',error_bad_lines=false)

(m1, n1) = df1.shape

# 所有使用者對其看過的節目的評分矩陣

# data_array1 = [[0.1804 0.042 0.11 0.07 0.19 0.56 0.14 0.3 0.32 0, ...], [...]]

data_array1 = np.array(df1.iloc[:m1 + 1, 1:])

# 按照"所有使用者對其看過的節目的評分矩陣"的列序排列的所有使用者**過的節目名稱

items_users_saw_names1 = df1.columns[1:].tolist()

# users_dict =

users_dict = createusersdict(df1)

# items_dict =

items_dict = createitemsdict(df1)

df2 = pd.read_csv('./wordsbag/dataprocess/data/week/mydata/temp_users_movies_01mat.csv',sep=',',encoding='gbk',header='infer',error_bad_lines=false)

(m2, n2) = df2.shape

data_array2 = np.array(df2.iloc[:m2 + 1, 1:])

# 按照"所有使用者看過的節目及所屬型別的01矩陣"的列序排列的所有使用者**過的節目名稱

items_users_saw_names2 = np.array(df2.iloc[:m2 + 1, 0]).tolist()

# 為使用者看過的節目建立節目畫像

items_users_saw_profiles = createitemsprofiles(data_array2, all_labels, items_users_saw_names2)

# 建立使用者畫像users_profiles和使用者看過的節目集items_users_saw

(users_profiles, items_users_saw) = createusersprofiles(data_array1, all_users_names, items_users_saw_names1,

all_labels, items_users_saw_profiles)

df3 = pd.read_csv('./wordsbag/dataprocess/data/week/mydata/temp_movies_01mat.csv',sep=',',encoding='gbk',header='infer',error_bad_lines=false)

(m3, n3) = df3.shape

data_array3 = np.array(df3.iloc[:m3 + 1, 1:])

# 按照"備選推薦節目集及所屬型別01矩陣"的列序排列的所有使用者**過的節目名稱

items_to_be_recommended_names = np.array(df3.iloc[:m3 + 1, 0]).tolist()

# 為備選推薦節目集建立節目畫像

items_to_be_recommended_profiles = createitemsprofiles(data_array3, all_labels, items_to_be_recommended_names)

# 兩種推薦演算法後融合,也就是將兩種推薦演算法對某個使用者分別產生的兩個推薦節目集按不同比例混合,得出最後的對該使用者的推薦結果

# 對於每個使用者推薦topn個節目,在兩種推薦演算法產生的推薦集中分別選取比例為w1和w2的推薦結果,cb佔w1, usercf佔w2

# w1 + w2 = 1 且 w1 * topn + w2 * topn = topn

topn = 5

w1 = 0.7

w2 = 0.3

# 從cb的推薦集中選出前topw1項

topw1 = int(w1 * topn)

# 從usercf的推薦集中選出前topw2項

topw2 = topn-topw1

for user in all_users_names:

# 對於使用者user的最終混合推薦節目集

recommend_items =

# cb

# recommend_items1 = [[節目名, 該節目與該使用者user畫像的相似度], ...]

recommend_items1 = contentbased(users_profiles[user], items_to_be_recommended_profiles, items_to_be_recommended_names, all_labels, items_users_saw[user])

len1 = len(recommend_items1)

if len1 <= topw1:

recommend_items = recommend_items + recommend_items1

else:

recommend_items = recommend_items + recommend_items1[:topw1]

# usercf

# recommend_item2 = [[節目名, 該使用者user對該節目的感興趣程度],...]

recommend_items2 = usercf(user, users_dict, items_dict, 2, items_to_be_recommended_names)

len2 = len(recommend_items2)

if len2 <= topw2:

recommend_items = recommend_items + recommend_items2

else:

recommend_items = recommend_items + recommend_items2[:topw2]

# 將推薦結果按推薦指數降序排序

recommend_items.sort(key=lambda item: item[1], reverse=true)

print("為使用者id為 %s 的推薦節目如下" % user)

printrecommenditems(recommend_items, 5)

print('該使用者的推薦任務完成')

print( )

為使用者id為 3 的推薦節目如下

該使用者的推薦任務完成

為使用者id為 13 的推薦節目如下

該使用者的推薦任務完成

為使用者id為 23 的推薦節目如下

該使用者的推薦任務完成

執行此例項需要在前兩篇博文的基礎上進行

**:

電視節目的話題營銷之道

非誠勿擾 是一檔非常成功的電視節目,但是 今夏 中國好聲音 開播以來,依靠連續不斷的話題轟炸,在收視排行榜獨占鰲頭,搶盡了 非誠勿擾 的風頭 不過最近,依靠 副鄉長遭全滅燈 這一話題的成功策劃,非誠勿擾 實際上話題營銷是有基本的操作流程的,今天我就以 非誠勿擾 的 副鄉長 話題為案例,跟大家講講電視...

問題 B 貪心 電視節目安排

題目描述 李旭琳發現小墨老師在班上是最頑劣的學生 沒有之一 但他也有安靜的時候,例如在看電視的時候。像什麼 諜戰劇 啊,翻拍劇 啊,婆媳戲 啊,後宮劇 啊都是他的最愛。他甚至會事先查詢所有喜歡看的電視節目的轉播時間表並煞有介事的用紅藍鉛筆列出計畫,然後合理安排,以看到盡量多的完整節目。輸入輸入資料報...

看電視節目管窺中日的創新

看電視論中日的創新 musicwind 2005 5 29 前一段時間,看了一篇台灣人寫的文章介紹日本各電視台有關綜合娛樂節目的介紹,裡面提到了 超級變!變!變!這個節目風靡日本全國,到現在仍然如此。引進到國內後,在許多電視台都播出了,也是擁者甚眾。我們暫時放下對小日本的厭惡,單論這個節目本身,應該...