浅尝辄止(三)"/>
阿里音乐流行趋势预测大赛—浅尝辄止(三)
这篇博文是在阿里音乐大赛(一)和阿里音乐大赛(二)之后的,参考到以为博主的文章和代码给我带来了很多启发,发现了很多Pandas的新用法,所以在这里做一个记录总结;关于阿里音乐大赛的相关方法介绍可以参考前两篇文章,这里不再多说,下面直接进入本篇主题内容:
这里的目标是要做出这样的一个表格,它统计的是每一个用户对它所听过的歌曲的总统计,包括试听,下载,收藏的次数,
可以发现我们统计出来了每个用户所听过的歌曲,以及每个歌曲用户总的试听,下载,收藏的次数,可以很方便的帮助我们后续的数据分析工作,帮助后续我们对一个用户是否为歌迷粉丝的判断,比如我们可以进一步的根据试听下载收藏的次数来决定用户是否为歌手的特定粉丝;
在对数据处理之前我们的数据形式如下:
那么如何得出最后我们想要的表格,源程序如下:
<span style="font-size:14px;"># -*- coding: utf-8 -*-
import pandas as pd
import numpy as np
import 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_creat
del 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_type
del 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 pd
import numpy as np
import 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>
粉丝用户表:
非粉丝用户表:
参考资料:
更多推荐
阿里音乐流行趋势预测大赛—浅尝辄止(三)
发布评论