简单尝试一下阿里音乐,最多做到baseline吧,主要是想熟悉一下流程和工具
so,第一步将数据导入SQL中,百万级有Mysql就可以了,还是习惯windows下的XAMPP+NaviCat,简单好用。
http://www.site-digger.com/html/articles/20120525/34.html
导入数据到MySQL出现了小问题,104万的数据导入后变成了522万,初步估计是分隔符出现了问题。只好放弃导入向导,自定义sql语句:
load data infile 'D:\\alimusic\\mars_tianchi_user_actions.csv'
into table `mars_tianchi_user_actions`
fields terminated by ',' optionally enclosed by '"' escaped by '"'
lines terminated by '\n';
结果居然是566万。。。再导出来看,发现“数据表长度超过工作表外,会丢失部分有效数据。。。”原来真的是500万
用python读入:5652232
考虑用8月份数据做验证集:共1016225条数据
SELECT
mars_tianchi_songs.song_id,
mars_tianchi_songs.artist_id,
mars_tianchi_user_actions.user_id,
mars_tianchi_user_actions.song_id,
mars_tianchi_user_actions.Ds,
mars_tianchi_user_actions.action_type
FROM
mars_tianchi_songs ,
mars_tianchi_user_actions
WHERE
mars_tianchi_songs.song_id = mars_tianchi_user_actions.song_id AND
mars_tianchi_user_actions.Ds < 20150800
统计成提交结果:
SELECT
`0801(1016625)`.artist_id,
`0801(1016625)`.Ds,
count(*) AS plays
FROM
`0801(1016625)`
WHERE
`0801(1016625)`.action_type = 1
GROUP BY
`0801(1016625)`.artist_id,
`0801(1016625)`.Ds
这里先只统计action_type = 1的,文件名test_08_1(1500).csv
考虑自己的听歌习惯:1、每天打开“我喜欢”或者某个收藏的列表,任由其播放;2、如果某天有时间,可能会查看推荐歌单,或直接查找某一类型歌曲;3、如果观看了电视剧或电影觉得曲目不错会查找,听说某个喜欢的歌手出了一首新歌会查找,网络空降神曲会查找。
相信大部分的人习惯与我类似,(音乐发烧友的数据于统计无太大意义,暂不考虑)所以每个用户的每天可能有稳定的“播放”曲目,可以认为会一直播放,需要优先作出处理。之后是对个性化数据提取特征再建立模型求解,回归模型可能会好些。师兄说先建立分类模型,再尝试回归效果会好些。
对第一个用户进行分析,发现思路应该没错,但是该用户没有4月份之后的记录,所以要对这类突然“消失”的用户做出处理,第二个用户居然只有三条记录。。。
必须分析一下每个用户的记录数了:
SELECT
mars_tianchi_user_actions.user_id,
mars_tianchi_user_actions.song_id,
mars_tianchi_user_actions.gmt_create,
mars_tianchi_user_actions.action_type,
mars_tianchi_user_actions.Ds,
count(*) AS nums
FROM
mars_tianchi_user_actions
GROUP BY
mars_tianchi_user_actions.user_id
ORDER BY
nums DESC
本着不用也要先存下的原则设计”复杂“结构如下
用户字典:userdict 嵌套字典
{“user1”:{“ltime”:”最后记录时间”,”stime”:”最先记录时间”,”songl”:”歌曲列表”,”typel”:”用户行为列表”,”numl”:”歌曲播放计数列表”,”altimel”:”歌曲播放时间列表”,”sondict”:”常用歌曲字典”}}