surprise协同过滤推荐系统实现数据处理逻辑

本文介绍如何利用Surprise库处理网易云音乐的歌单数据,将歌单视为用户,歌曲作为Item,进行基于用户的协同过滤推荐系统的数据预处理。
摘要由CSDN通过智能技术生成

//

下面这份数据是网易云音乐的歌单数据,把每个歌单当作一个用户  每手歌曲作为一个Item 来做基于用户的协同过滤

下面是数据处理部分

"""
**给大家原始数据和这份数据说明的原因是:里面包含非常多的信息(风格,歌手,歌曲播放次数,歌曲时长,歌曲发行时间...),
大家思考后一定会想到如何使用它们进一步完善推荐系统**<br>
我们这里依旧使用最基础的音乐信息,我们认为同一个歌单中的歌曲,有比较高的相似性,同时都是做单的同学喜欢的。<br>

### 2.1 原始数据=>歌单数据
抽取 _**歌单名称,歌单id,收藏数,所属分类**_ 4个歌单维度的信息 <br>
抽取 _**歌曲id,歌曲名,歌手,歌曲热度**_ 等4个维度信息歌曲的信息<br>

组织成如下格式:
```
漫步西欧小镇上##小语种,旅行##69413685##474	
18682332::Wäg vo dir::Joy Amelie::70.0	4335372::Only When I Sleep::The Corrs::60.0	2925502::Si Seulement::Lynnsha::100.0
21014930::Tu N'As Pas Cherché...::La Grande Sophie::100.0	20932638::Du behöver aldrig mer vara rädd::Lasse Lindh::25.0	
17100518::Silent Machine::Cat Power::60.0	3308096::Kor pai kon diew : ชอไปคนเดียว::Palmy::5.0	
1648250::les choristes::Petits Chanteurs De Saint Marc::100.0	
4376212::Paddy's Green Shamrock Shore::The High Kings::25.0	2925400::A Todo Color::Las Escarlatinas::95.0
19711402::Comme Toi::Vox Angeli::75.0	3977526::Stay::Blue Cafe::100.0	2538518::Shake::Elize::85.0	2866799::Mon Ange::Jena Lee::85.0	
5191949::Je M'appelle Helene::Hélène Rolles::85.0	20036323::Ich Lieb' Dich Immer Noch So Sehr::Kate & Ben::100.0
"""
#coding: utf-8
import json
import sys

def parse_song_line(in_line):
	data = json.loads(in_line)
	name = data['result']['name']
	tags = ",".join(data['result']['tags'])
	subscribed_count = data['result']['subscribedCount']
	if(subscribed_count<100):
		return False
	playlist_id = data['result']['id']
	song_info = ''
	songs = data['result']['tracks']
	for song in songs:
		try:
			song_info += "\t"+":::".join([str(song['id']),song['name'],song['artists'][0]['name'],str(song['popularity'])])
		except Exception:
			#print e
			#print song
			continue
	return name+"##"+tags+"##"+str(playlist_id)+"##"+str(subscribed_count)+song_info

def parse_file(in_file, out_file):
	out = open(out_file, 'wb')
	for line in open(in_file):
		result = parse_song_line(line)
		if(result):
            #这是因为encode返回的是bytes型的数据,不可以和str相加,将‘\n’前加b,write函数参数需要为str类型,转化为str即可
            #out.write(result.encode('utf-8').strip()+"\n")
			out.write(result.encode('utf-8').strip()+b"\n")
	out.close()

#将全量的Json数据转为固定格式的文本格式
parse_file("/root/torch/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值