//
下面这份数据是网易云音乐的歌单数据,把每个歌单当作一个用户 每手歌曲作为一个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/