利用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. 数据说明
利用Python简单实现网易云用户算法推荐系统文章插图
? 我们需要保存 歌单id=>歌单名 和 歌曲id=>歌曲名 的信息后期备用 。
歌曲id=>歌曲名:
利用Python简单实现网易云用户算法推荐系统文章插图
?
歌单id=>歌单名:
利用Python简单实现网易云用户算法推荐系统文章插图
?
6. 推荐系统常见的工程化做法project = offline modelling + online prediction 1)offline python脚本语言 2)online 效率至上 C++/Java 原则:能离线预先算好的 , 都离线算好 , 最优的形式:线上是一个K-V字典


推荐阅读