阿里音乐流行趋势预测大赛—浅尝辄止(三)

来源:互联网 发布:编程培训 编辑:程序博客网 时间:2024/05/09 15:19

    这篇博文是在阿里音乐大赛(一)和阿里音乐大赛(二)之后的,参考到以为博主的文章和代码给我带来了很多启发,发现了很多Pandas的新用法,所以在这里做一个记录总结;关于阿里音乐大赛的相关方法介绍可以参考前两篇文章,这里不再多说,下面直接进入本篇主题内容:


这里的目标是要做出这样的一个表格,它统计的是每一个用户对它所听过的歌曲的总统计,包括试听,下载,收藏的次数,


可以发现我们统计出来了每个用户所听过的歌曲,以及每个歌曲用户总的试听,下载,收藏的次数,可以很方便的帮助我们后续的数据分析工作,帮助后续我们对一个用户是否为歌迷粉丝的判断,比如我们可以进一步的根据试听下载收藏的次数来决定用户是否为歌手的特定粉丝;


在对数据处理之前我们的数据形式如下:



那么如何得出最后我们想要的表格,源程序如下:

<span style="font-size:14px;"># -*- coding: utf-8 -*-import pandas as pdimport numpy as npimport matplotlib.pyplot as plt# 生成用户-歌曲-行为统计表tianchi_user_actions = pd.read_csv('E:\\Tianchi\\Music\\test.csv',names=['user_id','song_id','gmt_creat','action_type','Ds','month','date','hour'])# 删除列gmt_creatdel tianchi_user_actions['gmt_creat']del tianchi_user_actions['Ds']# 将action_type做哑变量处理 temp = pd.get_dummies(tianchi_user_actions['action_type']).join(tianchi_user_actions)# 对操作类型对应的列名进行重命名  temp中新的哑变量的列被自动放到了最前面123列temp = temp.rename(columns={1:'play_num',2:'download_num',3:'collect_num'})# 删除列action_typedel temp['action_type']# 将数据按照user_id,song_id两级聚合grouped = temp.groupby([temp['user_id'],temp['song_id']])# 统计播放、下载、收藏的总量user_song_index = grouped.agg({'play_num':'sum','download_num':'sum','collect_num':'sum'})   #聚合之后不相关的其他列都去掉了 只剩这五个列# 导出为csv表格user_song_index.to_csv('E:\\Tianchi\\Music\\test_out.csv')    </span>


下面我们根据用户对歌曲的播放,下载,收藏的总量将用户分为粉丝用户和非粉丝用户两大类;

<span style="font-size:14px;"># -*- coding: utf-8 -*-import pandas as pdimport numpy as npimport matplotlib.pyplot as plttianchi_user_actions = pd.read_csv('E:\\Tianchi\\Music\\test.csv',names=['user_id','song_id','gmt_creat','action_type','Ds','month','date','hour'])# 用户分类:认为有下载、总播放量大于5的用户是粉丝用户,其他为非粉丝用户user_song_index = pd.read_csv('E:\\Tianchi\\Music\\test_out.csv')# 设置用户分类规则index = np.logical_and(user_song_index['download_num']>0,user_song_index['play_num']>5)fan_list_tmp= user_song_index[index]   #这里面是有重复用户的,我们要删掉重复的fan_list = sorted(set(fan_list_tmp['user_id']))    # user_id列表# in1d(x,y)表示得到一个x是否包含于y的 布尔型数组fan_index = np.in1d(tianchi_user_actions['user_id'],fan_list)non_fan_index = np.logical_not(fan_index)#得到了粉丝和非粉丝的index  布尔的fan_table = tianchi_user_actions[fan_index]non_fan_table = tianchi_user_actions[non_fan_index]fan_table.to_csv('E:\\Tianchi\\Music\\fan_table.csv')non_fan_table.to_csv('E:\\Tianchi\\Music\\non_fan_table.csv')</span>


粉丝用户表:



非粉丝用户表:





参考资料:http://blog.csdn.net/electech6/article/details/51670114

0 0
原创粉丝点击