当前位置: 首页 > news >正文

wordpress会员功能南昌优化排名推广

wordpress会员功能,南昌优化排名推广,怎样做网络推广营销,优化大师平台目录 前言总体设计系统整体结构图系统流程图 运行环境Python 环境MySQL环境VUE环境 模块实现1. 数据请求和储存2. 数据处理计算歌曲、歌手、用户相似度计算用户推荐集 3. 数据存储与后台4. 数据展示 系统测试工程源代码下载其它资料下载 前言 本项目以丰富的网易云音乐数据为基… 目录 前言总体设计系统整体结构图系统流程图 运行环境Python 环境MySQL环境VUE环境 模块实现1. 数据请求和储存2. 数据处理计算歌曲、歌手、用户相似度计算用户推荐集 3. 数据存储与后台4. 数据展示 系统测试工程源代码下载其它资料下载 前言 本项目以丰富的网易云音乐数据为基础运用协同过滤和内容推荐算法作为核心方法旨在为不同用户量身定制音乐推荐。 首先我们充分利用网易云音乐的大量用户数据包括用户的收听历史、喜好歌手、喜欢的歌曲等信息。通过协同过滤算法我们可以分析不同用户之间的相似性找到具有相近音乐口味的用户群体。 其次我们引入内容推荐算法从音乐的特征、流派、歌手风格等方面进行深入分析。这种算法能够更精准地为用户推荐符合其喜好和兴趣的音乐作品。 综合协同过滤和内容推荐的结果我们为每位用户打造个性化的音乐推荐列表。这样不同用户将能够在网易云音乐平台上获得与其音乐喜好相符的歌曲从而提升他们的音乐体验。 本项目的目标是充分发挥大数据分析和智能推荐算法的优势为网易云音乐的用户提供更加个性化、多样化的音乐推荐服务。这将为用户带来更多的音乐发现和享受同时也促进了音乐平台的发展和用户满意度的提升。 总体设计 本部分包括系统整体结构图和系统流程图。 系统整体结构图 系统整体结构如图所示。 系统流程图 系统流程如图所示。 运行环境 本部分包括 Python 环境、MySQL 环境和 VUE 环境。 Python 环境 需要Python 3.6以上运行环境推荐使用PyCharm IDE。Python 包和对应的版本MusicRecSys/MusicRec/z-others/files/requirement.txt文件中安装命令为: pip install -r requirement.txt需要安装的依頼包为: Django 2.1、PyMySQL 0.9.2、jieba 0.39、xlrd 1.1.0、gensim 3.6.0 查看本机的IP地址修改MusicRecSys/MusicRec/Music Rec/settings.py文件中的ALLOWED_HOSTS 为本地IP地址和MySQL配置信息。 进入MusicRecSys/MusicRec, 执行pythonmanage.pyrunserver0.0.0.0: 8000。 Django后台访问地址为http://127.0.0.1:8000/admin/(admin, admin) MySQL环境 安装MySQL最新版本和Navicat可视化工具在命令行中创建并连接本机用户的数据库下载地址为https://pan.baidu.com/s/1dYtKQxnoSZywuRfgCOfPRQ, 提取码为qw8k 新建musicrec数据库导入文件MusicRecSys/MusicRec/z-others/fles/musicrec.sql VUE环境 安装node.js 10.13以上版本和npm包管理器(可以安装淘宝镜像cnpm提高速度)推荐使用VSCODEIDE。 修改MusicRecSys/MusicRec-Vue/config/index.js中的serverUrl为本机IP地址。 修改MusicRecSys/MusicRec-Vue/src/assets/js/linkBase.js中的serverUrl为本机IP地址。 进入MusicRecSys/MusicRec-Vue执行npminstall/npmrundev自动安装所需要的依赖包并用webpack打包运行。 在浏览器中输入http://127.0.0.1:8001 访问项目界面。 模块实现 本项目包括包括4个模块数据请求及存储、数据处理、数据存储与后台、数据展示下面分别介绍各模块的功能及相关代码。 1. 数据请求和储存 通过请求获取音乐和用户相关的所有数据。网易云API地址为https://api.imjad.cn。选择歌单数据作为出发点,是因为歌单与用户、歌曲、歌手都有联系包含数据的维度最广并且是用户的主观行为。歌单URL如下所示。 https://music163.com/playlist?id2308644764 https://music163.com/playlist?id2470855457 https://music163.com/playlist?id2291941158 https://music163.com/playlist?id2452844647 通过URL处理得到歌单ID请求所需要的数据存储每一步请求失败的数据在后续数据处理时跳过这些请求失败的数据URL。 1歌单信息 歌单信息如图所示。 歌单信息包含歌单ID、创建者ID、名字、创建时间、更新时间包含音乐数、播放次数、分享次数、评论次数、收藏次数、标签和歌单封面等。 2创建者信息 创建者信息如图所示。 创建者信息包含用户ID、昵称、生日、性别、省份、城市、类型、标签、头像链接、用户状态、账号状态、djStatus、vipStatus、 签名。 3歌曲音乐信息 歌曲ID信息如图所示。 歌曲信息如图所示。 歌曲信息包含歌曲ID、歌名、专辑ID、出版时间、歌手信息、总评论数、热门评论数、大小、歌曲链接。 4歌曲对应的歌手信息 歌手信息如图所示。 歌手信息包含歌手ID、歌名、音乐作品数、MV作品数、专辑数、头像链接等其数据文件结构如图所示。 最终获得所需的基础数据和请求失败的数据获取歌单信息并存储的相关代码如下: import requests import traceback #获取每个歌单的信息类 class PlayList:def __init__(self):self.playlist_file ./data/playlist_url/playlist_id_name_all.txt#获取出错的歌单ID保存文件self.error_id_file ./data/error_playlist_ids.txt#歌单创造者信息self.creator_mess ./data/user_mess/#每个歌单的json信息self.playlist_mess ./data/playlist_mess/#歌单包含的歌曲ID信息self.trackid_mess ./data/song_mess/self.ids_list self.getIDs()self.url https://api.imjad.cn/cloudmusic/?typeplaylistid#获得的歌单信息出错的歌单IDself.error_id list()#由歌单url 获取歌单IDdef getIDs(self):print(根据歌单链接获取歌单ID ...)ids_list list()for line in open(self.playlist_file,r,encodingutf-8).readlines():try:id line.strip().split(\t)[0].split(id)[1]ids_list.append(id)except Exception as e:print(e)passprint(获取歌单ID完成 ...)return ids_list #获取每个歌单的具体信息url #https://api.imjad.cn/cloudmusic/?typeplaylistid2340739428def getEveryPlayListMess(self):print(获取每个歌单的具体信息)i 0while self.ids_list.__len__() !0 :i 1id self.ids_list.pop()url self.url str(id)try:print(%s - 歌单ID为%s % (i,id))r requests.get(url)#解析信息self.getFormatPlayListMess(r.json())except Exception as e:#将出错ID写入记录及写入文件出错时进行跳过print(e)traceback.print_exc()print(歌单ID为%s 获取出错进行记录 % id)self.error_id.append(id)pass#breakself.writeToFile(self.error_id_file,,.join(self.error_id))print(歌单信息获取完毕写入文件: %s % self.playlist_mess)#每个歌单的内容进行格式化处理写入文件#需要获取的信息: 歌单信息、创建者信息、歌单音乐信息def getFormatPlayListMess(self,json_line):#创建者信息用户ID、昵称、生日、性别、省份、城市、类型、标签、头像链接、用户状态、账号状态、djStatus,vipStatus、签名creator json_line[playlist][creator]c_list (str(creator[userId]),str(creator[nickname]),str(creator[birthday]),str(creator[gender]),str(creator[province]),str(creator[city]),str(creator[userType]),str(creator[expertTags]),str(creator[avatarUrl]),str(creator[authStatus]),str(creator[accountStatus]),str(creator[djStatus]),str(creator[vipType]),str(creator[signature]).replace(\n,))self.writeToFile(self.creator_mess user_mess_all.txt, || .join(c_list))#歌单信息#歌单ID、创建者ID、名字、创建时间、更新时间、播放次数、分享次数、评论次数、收藏次数、标签、歌单封面、描述playlist json_line[playlist]p_list [str(playlist[id]),str(playlist[userId]),str(playlist[name]).replace(\n,),str(playlist[createTime]),str(playlist[updateTime]),str(playlist[trackCount]),str(playlist[playCount]),str(playlist[shareCount]),str(playlist[commentCount]),str(playlist[subscribedCount]),str(playlist[tags]),str(playlist[coverImgUrl]),str(playlist[description]).replace(\n,)]self.writeToFile(self.playlist_mess pl_mess_all.txt, || .join(p_list))#歌单包含的歌曲信息t_list list()trackids json_line[playlist][trackIds]for one in trackids:t_list.append(str(one[id]))self.writeToFile(self.trackid_mess ids_all1.txt,str(playlist[id])\t,.join(t_list))#写入文件def writeToFile(self,filename,one):fw open(filename,a,encodingutf8)fw.write(str(one) \n)fw.close() if __name__ __main__: #主函数print(开始获取歌单信息 ..)pl PlayList()pl.getEveryPlayListMess()print(歌单信息获取完毕 ... Bye !)2. 数据处理 本部分包含计算歌曲、歌手、用户相似度和计算用户推荐集。 计算歌曲、歌手、用户相似度 用户在创建歌单时指定了标签系统认为用户对该标签有偏好遍历用户创建的所有歌单会给出标签向量。 例如若系统中有3个标签(日语、嘻哈、沉默)用户张三在歌单中使用的标签为日语和嘻哈则其对应的标签向量为[110]根据用户的标签向量使用杰卡德距离算法计算用户相似度。歌单、歌手、歌曲的相似计算逻辑与用户相似度的计算逻辑相同。相关代码如下 #计算用户相似度全量用户存储数据量大所以这里只存储了20个用户并且要求相似度大于0.8 def getUserSim(self):sim dict()if os.path.exists(./data/user_sim.json): #路径sim json.load(open(./data/user_sim.json,r,encodingutf-8))else:i 0for use1 in self.userTags.keys():sim[use1] dict()for use2 in self.userTags.keys():if use1 ! use2:j_len len (self.userTags[use1] self.userTags[use2] )if j_len !0:result j_len / len(self.userTags[use1] | self.userTags[use2])if sim[use1].__len__() 20 or result 0.8:sim[use1][use2] resultelse:#找到最小值并删除minkey min(sim[use1], keysim[use1].get)del sim[use1][minkey]i 1print(str(i) \t use1)json.dump(sim, open(./data/user_sim.json,w,encodingutf-8))print(用户相似度计算完毕)return sim #将计算出的相似度转成导入mysql的格式 def transform(self):fw open(./data/user_sim.txt,a,encodingutf-8)for u1 in self.sim.keys():for u2 in self.sim[u1].keys():fw.write(u1 , u2 , str(self.sim[u1][u2]) \n)fw.close()print(Over!)计算用户推荐集 本部分主要介绍用户的协同过滤算法为用户产生歌曲推荐与歌单、用户、歌手的推荐算法相似。 (1)创建RecSong类 相关代码如下: class RecSong:def __init__(self):self.playlist_mess_file ../tomysql/data/pl_mess_all.txtself.playlist_song_mess_file ../tomysql/data/pl_sing_id.txtself.song_mess_file ../tomysql/data/song_mess_all.txt # 在__init__(self)中指定了所使用的文件2)构建用户和歌曲的对应关系 用户创建了歌单歌单中包含歌曲。当用户将一首歌曲归档到歌单中则认为该首歌曲的评分值为1如果对同一首歌多次归档则每次归档评分值加1。相关代码如下: #加载数据 用户对歌曲的对应关系 def load_data(self):#所有用户user_list list()#歌单和歌曲对应关系playlist_song_dict dict()for line in open(self.playlist_song_mess_file, r, encodingutf-8):#歌单 \t 歌曲splaylist_id, song_ids line.strip().split(\t)playlist_song_dict.setdefault(playlist_id, list())for song_id in song_ids.split(,):playlist_song_dict[playlist_id].append(song_id)#print(playlist_sing_dict)print(歌单和歌曲对应关系)#用户和歌曲对应关系user_song_dict dict()for line in open(self.playlist_mess_file, r, encodingutf-8):pl_mess_list line.strip().split( || )playlist_id, user_id pl_mess_list[0], pl_mess_list[1]if user_id not in user_list:user_list.append(user_id)user_song_dict.setdefault(user_id, {})for song_id in playlist_song_dict[playlist_id]:user_song_dict[user_id].setdefault(song_id, 0)user_song_dict[user_id][song_id] 1#print(user_song_dict)print(用户和歌曲对应信息统计完毕 )return user_song_dict, user_list3)计算用户相似度 为用户推荐歌曲采用的是基于协同过滤算法需要计算出用户相似度。计算分为两步构建倒排表和构建相似度矩阵计算公式为: w u v ∑ i ∈ N ( u ) ∩ N ( v ) 1 lg ⁡ ( 1 ∣ N ( i ) ∣ ) ∣ N ( u ) ∥ N ( v ) ∣ {w_{u v}}\frac{\sum_{i \in N(u) \cap N(v)} \frac{1}{\lg (1|N(i)|)}}{\sqrt{|N(u) \| N(v)|}} wuv​∣N(u)∥N(v)∣ ​∑i∈N(u)∩N(v)​lg(1∣N(i)∣)1​​ 相关代码如下 #计算用户之间的相似度采用惩罚热门商品和优化复杂度的算法 def UserSimilarityBest(self):#得到每个item被哪些user评价过tags_users dict()for user_id, tags in self.user_song_dict.items():for tag in tags.keys():tags_users.setdefault(tag,set())if self.user_song_dict[user_id][tag] 0:tags_users[tag].add(user_id)#构建倒排表C dict()N dict()for tags, users in tags_users.items():for u in users:N.setdefault(u,0)N[u] 1C.setdefault(u,{})for v in users:C[u].setdefault(v, 0)if u v:continueC[u][v] 1 / math.log(1len(users))#构建相似度矩阵W dict()for u, related_users in C.items():W.setdefault(u,{})for v, cuv in related_users.items():if uv:continueW[u].setdefault(v, 0.0)W[u][v] cuv / math.sqrt(N[u] * N[v])print(用户相似度计算完成)return W4)计算用户对歌曲的可能偏好 遍历所有的相似用户对于未产生过归档行为的歌曲计算用户对他们的偏好。相关代码如下: #为每个用户推荐歌曲 def recommend_song(self):#记录用户对歌手的评分user_song_score_dict dict()if os.path.exists(./data/user_song_prefer.json):user_song_score_dict json.load(open(./data/user_song_prefer.json, r, encodingutf-8))print(用户对歌手的偏好从文件加载完毕)return user_song_score_dictfor user in self.user_song_dict.keys():print(user)user_song_score_dict.setdefault(user, {})#遍历所有用户for user_sim in self.user_sim[user].keys():if user_sim user:continuefor song in self.user_song_dict[user_sim].keys():user_song_score_dict[user].setdefault(song,0.0)user_song_score_dict[user][song] self.user_sim[user][user_sim] * self.user_song_dict[user_sim][song]json.dump(user_song_score_dict, open(./data/user_song_prefer.json, w, encodingutf-8))print(用户对歌曲的偏好计算完成)return user_song_score_dict5)写入文件 对每首歌曲的偏好进行排序将用户最可能产生归档行为的前100首歌曲写入文件便于导入数据库供系统使用。相关代码如下: #写入文件 def write_to_file(self):fw open(./data/user_song_prefer.txt,a,encodingutf-8)for user in self.user_song_score_dict.keys():sort_user_song_prefer sorted(self.user_song_score_dict[user].items(), keylambda one:one[1], reverseTrue)for one in sort_user_song_prefer[:100]:fw.write(user,one[0],str(one[1])\n)fw.close()print(写入文件完成)user_song_prefer.txt文件内容如图所示。 同样歌单、歌手、用户的推荐结果也通过类似的方式进行计算。 3. 数据存储与后台 在PyCharm中创建新的Django项目及5个模板即主页、歌单、歌手、歌曲和用户。模板为文本文件用于分离表现形式和内容。下面以歌单模板为例介绍各文件用途。Django项目结构如图所示。 部分文件数据大使用Navicat软件工具导入其余部分使用Python代码连接数据库导入。以歌单信息导入数据库为例Django中创建的Model层相关代码如下: #歌单信息歌单ID、创建者ID、名字、创建时间、更新时间、包含音乐数 #播放次数、分享次数、评论次数、收藏次数、标签、歌单封面、描述 class PlayList(models.Model):pl_id models.CharField(blankFalse, max_length64, verbose_nameID, uniqueTrue)pl_creator models.ForeignKey(User, related_name创建者信息, on_deleteFalse)pl_name models.CharField(blankFalse, max_length64, verbose_name歌单名字)pl_create_time models.DateTimeField(blankTrue, verbose_name创建时间)pl_update_time models.DateTimeField(blankTrue, verbose_name更新时间)pl_songs_num models.IntegerField(blankTrue,verbose_name包含音乐数)pl_listen_num models.IntegerField(blankTrue,verbose_name播放次数)pl_share_num models.IntegerField(blankTrue,verbose_name分享次数)pl_comment_num models.IntegerField(blankTrue,verbose_name评论次数)pl_follow_num models.IntegerField(blankTrue,verbose_name收藏次数)pl_tags models.CharField(blankTrue, max_length1000, verbose_name歌单标签)pl_img_url models.CharField(blankTrue, max_length1000, verbose_name歌单封面)pl_desc models.TextField(blankTrue, verbose_name歌单描述)def __str__(self):return self.pl_idclass Meta:db_table playListverbose_name_plural 歌单信息 #歌单信息写入数据库 def playListMessToMysql(self):i0for line in open(./data/pl_mess_all.txt, r, encodingutf-8):pl_id, pl_creator, pl_name, pl_create_time, pl_update_time, pl_songs_num, pl_listen_num, \pl_share_num, pl_comment_num, pl_follow_num, pl_tags, pl_img_url, pl_desc line.split( || )try:user User.objects.filter(u_idpl_creator)[0]except:user User.objects.filter(u_idpl_creator)[0]pl PlayList(pl_id pl_id,pl_creator user,pl_name pl_name,pl_create_time self.TransFormTime(int(pl_create_time)/1000),pl_update_time self.TransFormTime(int(pl_update_time)/1000),pl_songs_num int (pl_songs_num),pl_listen_num int( pl_listen_num ),pl_share_num int( pl_share_num) ,pl_comment_num int (pl_comment_num),pl_follow_num int(pl_follow_num),pl_tags str(pl_tags).replace([,).replace(],).replace(\,),pl_img_url pl_img_url,pl_desc pl_desc)pl.save()i1print(i)执行完毕后在数据库可视化管理软件Navicat和Django自带的后台管理中可查看对应的数据表如图1和图2所示。 图1 Navicat中歌单信息表 图2 Django后台管理中歌单信息表 最终得到全部数据表如下两图所示。 图3 Django后台管理页面一 图4 Django后台管理页面二 4. 数据展示 前端实现的功能包括用户登录和选择偏好歌曲、歌手为你推荐(用户行为不同推荐也不同) ;进入各页面时基于内容的推荐算法为用户推荐歌单协同过滤算法为用户推荐歌曲、歌手单击时获取详细信息提供单个歌单、歌曲、歌手、用户的推荐个性化排行榜(将相似度由大到小排序)我的足迹展示用户在站内的行为(单击时记录)。 (1)Django后台处理前端请求获取推荐标签View层相关代码。 #首页推荐标签 由于标签个数原因且歌单、歌手、歌曲共用一套标签这里标签推荐基于1)用户进入系统时的选择2)用户在站内产生的单击行为3)热门标签进行补数def GetRecTags(request, base_click):#从接口中获取传入的歌手和歌曲IDsings request.session[sings].split(,)songs request.session[songs].split(,)#歌手标签sings_tags getSingRecTags(sings, base_click)#歌曲标签songs_tags,pl_tags getSongAndPlRecTags(songs, base_click)return {code: 1,data: {playlist: {cateid: 2, tags: list(pl_tags)},song: {cateid: 3, tags: list(songs_tags)},sing: {cateid: 4, tags: list(sings_tags)},}} #获得歌曲、歌单标签推荐 def getSongAndPlRecTags(songs, base_click):song_tags list()pl_tags list()#base_click 1 表示用户是在站内产生行为后返回推荐此时用户行为对象对应的标签排序在前#否则基于用户选择的标签排序在前if base_click 1: #表示前端是基于单击行为进入为你推荐模块click_songs UserBrowse.objects.filter(click_cate3).values(click_id)if click_songs.__len__() ! 0:for one in click_songs:filter_one SongTag.objects.filter(song_idone[click_id])if filter_one.__len__() ! 0 and filter_one[0].tag not in song_tags:song_tags.append(filter_one[0].tag)#歌单tagpl_one PlayListToSongs.objects.filter( song_idfilter_one[0].song_id )if pl_one.__len__() !0:for pl_tag_one in PlayListToTag.objects.filter(pl_idpl_one[0].song_id):if pl_tag_one.tag not in pl_tags:pl_tags.append(pl_tag_one.tag)if songs.__len__() ! 0: #表示前端选择了相关歌曲for sing in songs:choose_one SongTag.objects.filter(song_idsing)if choose_one.__len__() ! 0 and choose_one[0].tag not in song_tags:song_tags.append(choose_one[0].tag)#歌单tagpl_one layListToSongs.objects.filter(song_idchoose_one[0].song_id)if pl_one.__len__() ! 0:for pl_tag_one in PlayListToTag.objects.filter(pl_idpl_one[0].song_id):if pl_tag_one.tag not in pl_tags:pl_tags.append(pl_tag_one.tag)#print(songs_tags_by_click %s % songs_tags_by_click)#print(pl_tags_by_click %s % pl_tags_by_click)else: #表示用户是首次进入为你推荐模块if songs.__len__() ! 0: #表示前端选择了相关歌曲for sing in songs:choose_one SongTag.objects.filter(song_idsing)if choose_one.__len__() ! 0 and choose_one[0].tag not in song_tags:song_tags.append(choose_one[0].tag)#歌单tagpl_one PlayListToSongs.objects.filter(song_idchoose_one[0].song_id)if pl_one.__len__() ! 0:for pl_tag_one in PlayListToTag.objects.filter(pl_idpl_one[0].song_id):if pl_tag_one.tag not in pl_tags:pl_tags.append(pl_tag_one.tag)#print(songs_tags_by_choose: %s % songs_tags_by_choose)#print(pl_tags_by_choose: %s % pl_tags_by_choose)#如果click和choose的tag不够以hot来补充if song_tags.__len__() 15:hot_tag_dict dict()for one in SongTag.objects.all():hot_tag_dict.setdefault(one.tag, 0)hot_tag_dict[one.tag] 1tag_dict_song sorted(hot_tag_dict.items(), keylambda k: k[1], reverseTrue)[:15-song_tags.__len__()]for one in tag_dict_song:if one[0] not in song_tags:song_tags.append(one[0])#print(songs_tags_by_hot: %s % songs_tags_by_hot)#如果 click 和 choose的tag不够以 hot来补充if pl_tags.__len__() 15:hot_tag_dict dict()for one in PlayListToTag.objects.all():hot_tag_dict.setdefault(one.tag, 0)hot_tag_dict[one.tag] 1tag_dict_pl sorted(hot_tag_dict.items(), keylambda k: k[1], reverseTrue)[:15-pl_tags.__len__()]for one in tag_dict_pl:if one[0] not in pl_tags:pl_tags.append(one[0])#print(pl_tags_by_hot: %s % pl_tags_by_hot)return song_tags,pl_tags(2)进入各页面是基于内容的推荐算法给用户推荐歌单、协同过滤算法推荐歌曲、歌手这里以歌单为例 def rec_right_playlist(request): #推荐歌单user request.GET.get(username)u_id User.objects.filter(u_nameuser)[0].u_idrec_all UserPlayListRec.objects.filter(useru_id).order_by(-sim)[:12]_list list()for rec in rec_all:one PlayList.objects.filter(pl_idrec.related)[0]_list.append({pl_id: one.pl_id,pl_creator: one.pl_creator.u_name,pl_name: one.pl_name,pl_img_url: one.pl_img_url})return {code: 1,data: {recplaylist: _list}}(3)单击时获取详细信息并基于标签进行单个歌单、歌曲、歌手、用户的推荐这里以用户为例 def all(request):#接口传入的tag参数tag request.GET.get(tag)#接口传入的page参数_page_id int(request.GET.get(page))print(Tag : %s, page_id: %s % (tag,_page_id))_list list()#全部用户if tag all:sLists User.objects.all().order_by(-u_id)#拼接用户信息for one in sLists[(_page_id - 1) * 30:_page_id * 30]:_list.append({u_id: one.u_id,u_name: one.u_name,u_img_url: one.u_img_url})#指定标签下的用户else:sLists UserTag.objects.filter(tagtag).values(user_id).order_by(user_id)for sid in sLists[(_page_id - 1) * 30:_page_id * 30]:one User.objects.filter(u_idsid[user_id])if one.__len__() 1:one one[0]else:continue_list.append({u_id: one.u_id,u_name: one.u_name,u_img_url: one.u_img_url})total sLists.__len__()return {code: 1,data: {total: total,sings: _list,tags: getAllUserTags()}} #获取所有用户标签 def getAllUserTags():tags set()for one in UserTag.objects.all().values(tag).distinct().order_by(user_id):tags.add(one[tag])return list(tags) def one(request): #处理用户请求u_id request.GET.get(id)one User.objects.filter(u_idu_id)[0] wirteBrowse(user_namerequest.GET.get(username),click_idu_id,click_cate5, user_click_timegetLocalTime(), desc查看用户)return JsonResponse({code: 1,data: [{u_id: one.u_id,u_name: one.u_name,u_birthday:one.u_birthday,u_gender:one.u_gender,u_province:one.u_province,u_city:one.u_city,u_tags:one.u_tags,u_img_url: one.u_img_url,u_sign:one.u_sign,u_rec: getRecBasedOne(u_id),u_playlist:getUserCreatePL(u_id)}]}) #获取单个用户的推荐 def getRecBasedOne(u_id):result list()sim_users UserSim.objects.filter(user_idu_id).order_by(-sim).values(sim_user_id)[:10]for user in sim_users:one User.objects.filter(u_id user[sim_user_id])[0]result.append({id: one.u_id,name: one.u_name,img_url: one.u_img_url,cate:5})return result #获取用户创建的歌单 def getUserCreatePL(uid):pls PlayList.objects.filter(pl_creator__u_iduid)result list()for one in pls:result.append({pl_id: one.pl_id,pl_name:one.pl_name,pl_creator: one.pl_creator.u_name,pl_create_time: one.pl_create_time,pl_img_url: one.pl_img_url,pl_desc:one.pl_desc})return result #用户浏览信息进行记录 user_name models.CharField(blankFalse, max_length64, verbose_name用户名)click_id models.CharField(blankFalse, max_length64, verbose_nameID)click_cate models.CharField(blankFalse, max_length64, verbose_name类别)user_click_time models.DateTimeField(blankFalse, verbose_name浏览时间)desc models.CharField(blankFalse, max_length1000, verbose_name备注,defaultAre you ready!)def wirteBrowse(user_name,click_id,click_cate,user_click_time,desc):if 12797496 in click_id: click_id 12797496UserBrowse(user_nameuser_name,click_idclick_id,click_cateclick_cate,user_click_time user_click_time,descdesc).save()print(用户【 %s 】的行为记录【 %s 】写入数据库 % (user_name, desc)) #获取当前格式化的系统时间 def getLocalTime():return time.strftime(%Y-%m-%d %H:%M:%S, time.localtime())系统测试 本部分包括系统流程和测试效果。 (1)选择用户进入系统。每次随机从数据库中返回部分作为系统用户使用不同的用户是为了区分行为偏好如图所示。 (2)选择歌手、歌曲(3个及以上可以跳过)。用户与系统交互的过程解决系统的冷启动。当然用户也可以不选择歌手直接跳过此时系统中“为你推荐歌手标签部分为热度标签数据。界面如下两图所示。 (3)根据用户创建歌单的偏好推荐用户偏好的歌单、歌曲的。单击标签可以查看相应标签下的所有歌曲分别进入歌单、歌曲、歌手推荐页面如图所示。 (4)歌单推荐页面。左侧为按照标签分类的全部歌单右侧为基于内容的推荐算法为用户推荐的歌单如图所示。 (5) 歌单详情页。包含歌单的详细信息和歌单内的歌曲右侧为基于标签相似度提供的歌单推荐如图所示。 (6) 歌曲推荐页面。左侧为按照标签分类的全部歌曲右侧为基于协同过滤算法为用户推荐的歌曲如图所示。 (7)歌曲详情页。包含歌曲的信息和歌词右侧为基于标签相似度提供的歌单推荐如图所示 。 (8)歌手推荐页面。左侧为按照标签分类的全部歌手右侧为基于协同过滤算法为用户推荐的歌曲如图所示。 (9)歌手详情页。包含歌手的信息和歌曲右侧为基于标签相似度提供的歌手推荐如图所示。 (10)用户推荐页面。左侧为按照标签分类的全部用户右侧为基于协同过滤算法为用户推荐的用户如图所示。 (11) 用户详情页。包含用户的信息和创建的歌单,右侧为基于标签相似度提供的推荐如图所示 。 (12) 个性化排行榜。基于用户的偏好程度(协同过滤算法计算的结果)进行排序展示不同用户看到的显示界面不同如图5~图8所示。 图5 个性化推荐排行榜页面 图6 歌单推荐排行榜页面 图7 歌曲推荐排行榜页面 图8 歌手推荐排行榜页面 (13) 我的足迹。浏览歌单、歌曲、歌手时用户在系统中产生的行为记录如图所示。 工程源代码下载 详见本人博客资源下载页 其它资料下载 如果大家想继续了解人工智能相关学习路线和知识体系欢迎大家翻阅我的另外一篇博客《重磅 | 完备的人工智能AI 学习——基础知识学习路线所有资料免关注免套路直接网盘下载》 这篇博客参考了Github知名开源平台AI技术平台以及相关领域专家DatawhaleApacheCNAI有道和黄海广博士等约有近100G相关资料希望能帮助到所有小伙伴们。
文章转载自:
http://www.morning.lflnb.cn.gov.cn.lflnb.cn
http://www.morning.kjjbz.cn.gov.cn.kjjbz.cn
http://www.morning.tlrxp.cn.gov.cn.tlrxp.cn
http://www.morning.mjkqj.cn.gov.cn.mjkqj.cn
http://www.morning.hdhqg.cn.gov.cn.hdhqg.cn
http://www.morning.xkyqq.cn.gov.cn.xkyqq.cn
http://www.morning.hlfnh.cn.gov.cn.hlfnh.cn
http://www.morning.jqjnl.cn.gov.cn.jqjnl.cn
http://www.morning.mmosan.com.gov.cn.mmosan.com
http://www.morning.cthkh.cn.gov.cn.cthkh.cn
http://www.morning.hcgbm.cn.gov.cn.hcgbm.cn
http://www.morning.mfzyn.cn.gov.cn.mfzyn.cn
http://www.morning.lbywt.cn.gov.cn.lbywt.cn
http://www.morning.pymff.cn.gov.cn.pymff.cn
http://www.morning.ylrxd.cn.gov.cn.ylrxd.cn
http://www.morning.xnbd.cn.gov.cn.xnbd.cn
http://www.morning.mzcrs.cn.gov.cn.mzcrs.cn
http://www.morning.zckhn.cn.gov.cn.zckhn.cn
http://www.morning.dbsch.cn.gov.cn.dbsch.cn
http://www.morning.qhjkz.cn.gov.cn.qhjkz.cn
http://www.morning.plznfnh.cn.gov.cn.plznfnh.cn
http://www.morning.fmrd.cn.gov.cn.fmrd.cn
http://www.morning.dcdhj.cn.gov.cn.dcdhj.cn
http://www.morning.wwjft.cn.gov.cn.wwjft.cn
http://www.morning.hqmfn.cn.gov.cn.hqmfn.cn
http://www.morning.mrttc.cn.gov.cn.mrttc.cn
http://www.morning.lzjxn.cn.gov.cn.lzjxn.cn
http://www.morning.rqhdt.cn.gov.cn.rqhdt.cn
http://www.morning.bftr.cn.gov.cn.bftr.cn
http://www.morning.gsdbg.cn.gov.cn.gsdbg.cn
http://www.morning.ktcfl.cn.gov.cn.ktcfl.cn
http://www.morning.jbfjp.cn.gov.cn.jbfjp.cn
http://www.morning.cplym.cn.gov.cn.cplym.cn
http://www.morning.fnwny.cn.gov.cn.fnwny.cn
http://www.morning.wlsrd.cn.gov.cn.wlsrd.cn
http://www.morning.jzfrl.cn.gov.cn.jzfrl.cn
http://www.morning.bmsqq.cn.gov.cn.bmsqq.cn
http://www.morning.attorneysportorange.com.gov.cn.attorneysportorange.com
http://www.morning.kzslk.cn.gov.cn.kzslk.cn
http://www.morning.mfrb.cn.gov.cn.mfrb.cn
http://www.morning.nlygm.cn.gov.cn.nlygm.cn
http://www.morning.gnjtg.cn.gov.cn.gnjtg.cn
http://www.morning.tnwgc.cn.gov.cn.tnwgc.cn
http://www.morning.jmtrq.cn.gov.cn.jmtrq.cn
http://www.morning.znsyn.cn.gov.cn.znsyn.cn
http://www.morning.xcszl.cn.gov.cn.xcszl.cn
http://www.morning.knlyl.cn.gov.cn.knlyl.cn
http://www.morning.kmcby.cn.gov.cn.kmcby.cn
http://www.morning.kxypt.cn.gov.cn.kxypt.cn
http://www.morning.phxdc.cn.gov.cn.phxdc.cn
http://www.morning.tjndb.cn.gov.cn.tjndb.cn
http://www.morning.dytqf.cn.gov.cn.dytqf.cn
http://www.morning.jzykw.cn.gov.cn.jzykw.cn
http://www.morning.baguiwei.com.gov.cn.baguiwei.com
http://www.morning.ngqty.cn.gov.cn.ngqty.cn
http://www.morning.zmpsl.cn.gov.cn.zmpsl.cn
http://www.morning.cszbj.cn.gov.cn.cszbj.cn
http://www.morning.lqjpb.cn.gov.cn.lqjpb.cn
http://www.morning.ndltr.cn.gov.cn.ndltr.cn
http://www.morning.gkpgj.cn.gov.cn.gkpgj.cn
http://www.morning.rqmr.cn.gov.cn.rqmr.cn
http://www.morning.bfysg.cn.gov.cn.bfysg.cn
http://www.morning.xrksf.cn.gov.cn.xrksf.cn
http://www.morning.coffeedelsol.com.gov.cn.coffeedelsol.com
http://www.morning.nxwk.cn.gov.cn.nxwk.cn
http://www.morning.yxnkr.cn.gov.cn.yxnkr.cn
http://www.morning.gmmxh.cn.gov.cn.gmmxh.cn
http://www.morning.jydhl.cn.gov.cn.jydhl.cn
http://www.morning.rxwnc.cn.gov.cn.rxwnc.cn
http://www.morning.xqgh.cn.gov.cn.xqgh.cn
http://www.morning.dmtbs.cn.gov.cn.dmtbs.cn
http://www.morning.bmpjp.cn.gov.cn.bmpjp.cn
http://www.morning.bgpb.cn.gov.cn.bgpb.cn
http://www.morning.kpbn.cn.gov.cn.kpbn.cn
http://www.morning.bpmfr.cn.gov.cn.bpmfr.cn
http://www.morning.kdnrp.cn.gov.cn.kdnrp.cn
http://www.morning.bxyzr.cn.gov.cn.bxyzr.cn
http://www.morning.skdhm.cn.gov.cn.skdhm.cn
http://www.morning.rfmzs.cn.gov.cn.rfmzs.cn
http://www.morning.qlbmc.cn.gov.cn.qlbmc.cn
http://www.tj-hxxt.cn/news/234521.html

相关文章:

  • 企业手机端网站源码设计一个电商网站
  • 深圳网站建设三把火用php做网站需要什么
  • 带漂浮广告的网站建网360 网站建设
  • 永州网站建设求职简历永康网站定制
  • 深圳做响应式网站网页传奇打金
  • 网站建设情况说明书wordpress 搬家 问题
  • 合肥网站建设设计科技网页模板
  • 佘山做网站如何建设自己的淘宝客网站
  • 南昌做网站建设公司网站开发合作运营平台合同
  • 源码论坛网站创意设计网站大全
  • 商城网站带宽控制建筑公司网站广告宣传语
  • 做视频网站怎么备案网站服务器租用恒创
  • 制作网站的公司不干了wordpress zendesk
  • pc开奖网站开发外贸公司推广
  • 网站建设版块分类西宁建设网站软件
  • 车险网站模版哎呀哎呀在线观看视频高清国语
  • dw怎么做百度页面网站ui界面设计说明范文
  • 网页建站工具微网站系统
  • 南宁网站建设科技公司做网站没有数据
  • 青岛商城网站建设微信公众号 视频网站开发
  • 图片类网站欣赏电商网站建设源代码
  • 如何代做网站asp 网站模板
  • 三亚房地产网站制作品牌建设论文参考文献
  • 自己电脑做网站主机怎么看别的网站是那个公司做的
  • 网站建设和维护费用网页设计代码是怎么加链接
  • 成都网站建设常凡云找室内设计师上哪个网站
  • 开网店卖什么最赚钱福州高级seo经理
  • 网站轮播图制作南通电商网站建设
  • 富阳网站用什么做网站比较好
  • 网站备案 太烦做卖东西的网站多少钱