利用Python简单实现网易云用户算法推荐系统( 二 )
4. 特征工程和数据预处理 , 提取我这次做推荐系统有用的特征信息 。 【利用Python简单实现网易云用户算法推荐系统】在原始的1291个json文件里面包含非常多的信息(风格 , 歌手 , 歌曲播放次数 , 歌曲时长 , 歌曲发行时间) , 其实大家思考后一定会想到如何使用它们进一步完善推荐系统 。 我这里依旧使用最基础的音乐信息 , 我们认为同一个歌单中的歌曲 , 有比较高的相似性 ,
其中 歌单数据=>推荐系统格式数据 , 主流的python推荐系统框架 , 支持的最基本数据格式为movielens dataset , 其评分数据格式为 user item rating timestamp , 为了简单 , 我们也把数据处理成这个格式 。
# -*- coding:utf-8-*-"""对网易云所有歌单爬虫的json文件进行数据预处理成csv文件python3.6环境"""from __future__ import (absolute_import, division, print_function, unicode_literals)import jsondef parse_playlist_item():""":return: 解析成userid itemid rating timestamp行格式"""file = open("neteasy_playlist_recommend_data.csv", 'a', encoding='utf8')for i in range(1, 1292):with open("neteasy_playlist_data/{0}.json".format(i), 'r', encoding='UTF-8') as load_f:load_dict = json.load(load_f)try:for item in load_dict['playlist']['tracks']:# playlist id # song id # score # datetimeline_result = [load_dict['playlist']['id'], item['id'], item['pop'], item['publishTime']]for k, v in enumerate(line_result):if k == len(line_result) - 1:file.write(str(v))else:file.write(str(v) + ',')file.write('\n')except Exception:print(i)continuefile.close()def parse_playlist_id_to_name():file = open("neteasy_playlist_id_to_name_data.csv", 'a', encoding='utf8')for i in range(1, 1292):with open("neteasy_playlist_data/{0}.json".format(i), 'r', encoding='UTF-8') as load_f:load_dict = json.load(load_f)try:line_result = [load_dict['playlist']['id'], load_dict['playlist']['name']]for k, v in enumerate(line_result):if k == len(line_result) - 1:file.write(str(v))else:file.write(str(v) + ',')file.write('\n')except Exception:print(i)continuefile.close()def parse_song_id_to_name():file = open("neteasy_song_id_to_name_data.csv", 'a', encoding='utf8')for i in range(1, 1292):with open("neteasy_playlist_data/{0}.json".format(i), 'r', encoding='UTF-8') as load_f:load_dict = json.load(load_f)try:for item in load_dict['playlist']['tracks']:# playlist id # song id # score # datetimeline_result = [item['id'], item['name'] + '-' + item['ar'][0]['name']]for k, v in enumerate(line_result):if k == len(line_result) - 1:file.write(str(v))else:file.write(str(v) + ',')file.write('\n')except Exception:print(i)continuefile.close()# parse_playlist_item()# parse_playlist_id_to_name()# parse_song_id_to_name()5. 数据说明
文章插图
? 我们需要保存 歌单id=>歌单名 和 歌曲id=>歌曲名 的信息后期备用 。
歌曲id=>歌曲名:
文章插图
?
歌单id=>歌单名:
文章插图
?
6. 推荐系统常见的工程化做法project = offline modelling + online prediction 1)offline python脚本语言 2)online 效率至上 C++/Java 原则:能离线预先算好的 , 都离线算好 , 最优的形式:线上是一个K-V字典
推荐阅读
- 大一非计算机专业的学生,如何利用寒假自学C语言
- 计算机专业大一下学期,该选择学习Java还是Python
- TikTok推出首个利用iPhone 12 Pro LiDAR技术的AR特效
- 想自学Python来开发爬虫,需要按照哪几个阶段制定学习计划
- 未来想进入AI领域,该学习Python还是Java大数据开发
- 1个手机怎么登录2个微信?方法很简单,看完我学会了
- 中消协点名大数据网络杀熟 反对利用消费者个人数据画像
- 原来华为手机拍视频还能添加字幕,方法很简单,一学就会
- Lip Factory利用人工智能现场为顾客创建定制口红
- 手机照片、视频怎样添加文字?原来很简单,4种方法一分钟搞定
