阿里音乐流行趋势预测大赛一起做-(3)思路

最近几个月忙着写论文,比赛给抛到脑后了(汗颜。。)。昨天阿里给了短信通知,说今天可以提交成绩了,于是抓紧搞起,结果也没赶上截止时间(早上10点)提交。无论如何今天也要提交一次成绩试试水。比赛的详细思路其实我也没怎么想好,有一些初步的想法和实践分享一下。

思路

我的想法比较简单,就是先用最简单的方法做一下,提交一次成绩,让自己有参与感,然后在后续不断的迭代更新中提升自己。我们采用倒推方式,首先从提交结果出发开始分析:
1、需要提交的结果如下:
阿里音乐流行趋势预测大赛一起做-(3)思路_第1张图片
要预测该表要求的60天数据,首先要将artist_id(表mars_tianchi_songs),Plays(表mars_tianchi_user_actions),Ds(表mars_tianchi_user_actions)统一到一个表中。
2、下一步就是,如何统一?
表mars_tianchi_songs和表mars_tianchi_user_actions有相同的一个列名就是song_id。所以可以将该列名作为key(键值)进行合并。这一步操作可以通过pandas (Python Data Analysis Library)中的merge函数实现。仔细观察后发现两个表的song_id行数不相等,不能直接合并,下一步就是对表做预处理使其能够合并。
3、如何对表做预处理?
歌曲艺人表mars_tianchi_songs是以10842首歌为index的,共有10843行(第一行为列名),基本不需要做预处理。该表部分内容如下:
阿里音乐流行趋势预测大赛一起做-(3)思路_第2张图片
用户行为表mars_tianchi_user_actions很大,接近500M,总共5652233行,所以必须做数据聚合。该表部分内容如下:
阿里音乐流行趋势预测大赛一起做-(3)思路_第3张图片
用户行为表有很多列,我们在此考虑最简单情况,只使用song_id, action_type, Ds三列。其中action_type中包含播放,下载和收藏三种情况,我们需要将该变量做成哑变量分离,也就是说最后自己处理后的用户行为表(暂且命名为my_user_actions)最后的列包含:
song_id, Ds, play_num, download_num, collect_num
其中后面的play_num, download_num, collect_num分别表示该song播放,下载和收藏的次数。然后表mars_tianchi_songs和表my_user_actions可以以song_id为key进行merge。假设merge后的表名为merge_data。那么该表内容应该如下:
阿里音乐流行趋势预测大赛一起做-(3)思路_第4张图片
到此已经非常接近于要提交结果的格式了。
4、下一步就是利用机器学习算法进行预测了。在此推荐先用时间序列分析相关算法。可以用python,R或者weka来做。

工具说明

不同的软件和语言各有其优势,以下是个人看法:
1、数据预处理阶段
该阶段推荐使用Python pandas,可以比较方便的实现数据清理、转换、合并等操作。推荐书籍《利用Python进行数据分析》。
2、算法预测阶段
目前还没有过多研究,感觉用R和weka比较方便。

一些参考

论坛里有不少大牛给出了一些结果和参考代码,首先感谢这些无私的分享者,在此给出几个链接:
1、阿里音乐流行趋势预测大赛,数据图像化模块函数
有代码,有图,赞一个!
github代码网址
阿里音乐流行趋势预测大赛一起做-(3)思路_第5张图片
2、样本数据50名艺人播放量折线图
在官方论坛的这里发布的,可以简单直观了解一下数据的样子,另外也可以和自己做的结果对比一下,保证自己不会出错。

结语

OK,以上就是我们团队的一个简单思路,希望对赛友有用,也希望各位大神能多交流分享思路。希望大家通过比赛能快速提升自己,取得好成绩!

你可能感兴趣的:(数据挖掘)