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

编程入门 行业动态 更新时间:2024-10-08 06:22:58

阿里音乐流行趋势预测大赛—<a href=https://www.elefans.com/category/jswz/34/1765433.html style=浅尝辄止(三)"/>

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

    这篇博文是在阿里音乐大赛(一)和阿里音乐大赛(二)之后的,参考到以为博主的文章和代码给我带来了很多启发,发现了很多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>


粉丝用户表:



非粉丝用户表:





参考资料:

更多推荐

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

本文发布于:2024-02-19 19:07:56,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1765616.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:浅尝辄止   阿里   流行趋势   大赛   音乐

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!