背景介绍
陈粒,又名粒粒,1990年7月26日出生于贵州省贵阳市,中国内地民谣女歌手、独立音乐人、唱作人,前空想家乐队主唱,毕业于上海对外经贸大学。2012年,其所在乐队“空想家乐队”获得“Zippo炙热摇滚大赛”上海赛区冠军。2014年,随空想家乐队推出乐队首张EP专辑《万象》;同年,其演唱的歌曲《奇妙能力歌》入围“第四届阿比鹿音乐奖”年度民谣单曲。2015年,推出首张个人音乐专辑《如也》;同年,推出个人民谣单曲《远辰》。2016年1月,获得“第五届阿比鹿音乐奖”最受欢迎音乐人(民谣);同年3月8日,化身“粒粒”并推出首支单曲《幻期颐》;同年7月26日,推出第二张个人音乐专辑《小梦大半》。
数据分析
分析对象:陈粒歌曲评论数据
分析平台:网易云分析
本文从陈粒50首歌曲中选择前100的评论进行分析,将从
(1)歌手热门歌曲
(2)歌曲生命周期
(3)歌曲听众的区域分布
(4)听众性别分布
(5)评论词云分布
(6)网易云热评来分析
1、歌手的热门歌曲
其中的TOP10热门歌曲如下,其中最火的歌曲为《小半》
不敢回看
左顾右盼不自然的暗自喜欢
偷偷搭讪总没完地坐立难安
试探说晚安 多空泛又心酸
低头呢喃
对你的偏爱太过于明目张胆
在原地打转的小丑伤心不断
空空留遗憾 多难堪又为难
释然 慵懒 尽欢 时间风干后你与我再无关
没答案 怎么办 看不惯自我欺瞒
纵容着 喜欢的 讨厌的 宠溺的 厌倦的
一个个慢慢黯淡
纵容着 任性的 随意的 放肆的 轻易的
将所有欢脱倾翻
不应该 太心软 不大胆 太死板 不果断
玩弄着肆无忌惮
不应该 舍弃了 死心了 放手了 断念了
无可奈何不耐烦
不算
灯火阑珊
我的心借了你的光是明是暗
笑自己情绪太泛滥形只影单
自嘲成习惯 多敏感又难缠
低头呢喃
对你的偏爱太过于明目张胆
在原地打转的小丑伤心不断
空空留遗憾 多难堪又为难
释然 慵懒 尽欢 时间风干后你我再无关
没答案 怎么办 看不惯自我欺瞒
纵容着 喜欢的 讨厌的 宠溺的 厌倦的
一个个慢慢黯淡
纵容着 任性的 随意的 放肆的 轻易的
将所有欢脱倾翻
不应该 太心软 不大胆 太死板 不果断
玩弄着肆无忌惮
不应该 舍弃了 死心了 放手了 断念了
无可奈何不耐烦
任由着 你躲闪 我追赶 你走散 我呼喊
是谁在泛泛而谈
任由着 你来了 你笑了 你走了 不看我
与理所当然分摊
不明白 残存的 没用的 多余的 不必的
破烂也在手紧攥
不明白 谁赧然 谁无端 谁古板 谁极端
无辜不知所以然
纵容着 喜欢的 讨厌的 宠溺的 厌倦的(不管)
一个个慢慢黯淡
纵容着 任性的 随意的 放肆的 轻易的
将所有欢脱倾翻
不应该 太心软 不大胆 太死板 不果断
玩弄着肆无忌惮
不应该 舍弃了 死心了 放手了 断念了
无可奈何不耐烦
2、歌曲的生命周期
待定。。
3、歌曲地区分布
从下图可以看出喜欢陈粒歌曲的人分布在大江南北,各地区都有
4、听众性别分布
从听众的性别分布来看,女性占比大
5、歌曲词云分析
《小半》词云分析
6、网易云热评
歌曲评论点赞过10W的总共有30个,下面展示的是点赞数TOP的评论
特别篇:网易云音乐热评摘抄
小半
1、如果有一天,我爱的人离开我我只回答两个字:好的,绝口不问“你怎么能这样对我”“到底我哪里做得不对”,经历让我明白,若对方决定分开,必定准备好了理由,我不想听谋划许久冠冕堂皇的借口,凡是离开的必然本就不属于我,只祝好运,从此云淡风轻,过往一笔勾销人生短暂,我不活在记忆里
2、夜听小半,难安;独自呢喃,不堪;往事空叹,怅然;前景黯淡,凄惨;暗自喜欢,遗憾;情绪泛滥,心酸;不大胆,太死板;就自我欺瞒。心太软,又不甘;愿自己释然,好散。
3、不应该太心软,死不放手的样子是挺丑,我知道。
4、他未对我半分好,偏巧这感情疯长似野草
易燃易爆炸
1、张悬是大海,雷光夏是星空。陈绮贞是太阳,曹方是风。陈粒呢?陈粒是火和光。
2、你爱上了外向的姑娘,你得接受的闹腾。你爱上了清纯的姑娘,你得接受她的幼稚。你爱上了理性的姑娘,你得接受她的算计。你爱上了勇敢的姑娘,你得接受她的莽撞。你爱上了美丽的姑娘,你得接受她的过去。没有完美的爱人,好好对自己身边的女人。
3、这首歌基本就是论论床前明月光与胸口朱砂痣,红玫瑰与白玫瑰不可兼得。你是怨我呢,还是愿我。你是要我含苞待放还是要我欲盖拟彰,你是要我与你私奔还是与我做不二臣。把我的浪漫和极端都拿去慢慢品尝,红白玫瑰不可兼得,恋人最怕贪婪和性格易燃,你要易燃便爆炸。拿走我的浪漫和极端,请慢慢品尝。
虚拟
1、我见过你才知原来温柔是种天赋身负极高明的武功气场充盈润物无声于是我仰慕你如惊雀闯入深林 甚恐如溪水挠着脚心 甚欢如山谷荡漾回音 甚孤独新月载着晚风 咏言莫在酩酊无奈岁月鸿沟从此深情难付《小半》好,《虚拟》也好,都是你
2、"原来成年人的感情是不追问 是不解释是心照不宣 是突然走散是自然消减 是一种冰冷的默契" ??????
走马
1、现在终于听懂了这首《走马》,大概的理解就是:你在对岸走马观花,我在这里永久牵挂。
2、你不在对岸,我也不再勇敢
光
1、像张悬,像王菲,像陈绮贞,像莫文蔚,像蔡健雅。可陈粒就是陈粒[爱心]
2、你住进馄饨深海,你开始无碗等待
3、我正戴着耳机听陈粒,旁边一同学问我有没有什么好听的歌,我看了他一眼,顿了一下,“没有”
其他
1、风霜满面的将军下马问路边茶娘:“大婶,你知道附近那个说话很温柔的卖茶姑娘住在哪吗”茶娘笑笑:“她呀,嫁了个好人家,衣食无忧,听说过的很好”将军叹息,从怀中掏出块手绢,请您帮我把这个还给她,谢谢她当年的茶点心。日落马远,茶娘小心将手绢系在手腕,向食客吆喝老娘今天开心,所有茶水半价。《性空山》
2、我有那么多奇妙的能力,却留不住你《奇妙能力歌》
3、我听过清蒸的回忆酱汁浇过香菜绿听过被煮粥的小米没听过你我抓住散落的软糖香甜的牛奶让我紧张我抓住泡芙的遐想没抓住你我包容扭不断的棒冰包容掉色的沙冰包容草莓绵绵冰没包容你《奇妙能力歌》
4、第一次听,感动且震惊。像江湖,像边塞诗,像听过。少年不惧岁月长,尝遍异乡赠的糖,要的与人不一样,踏遍山水有故乡。《历历万乡》
5、我在有生以来最痛苦、最难熬、最无所适从的时候,从东北到西藏,走过半个中国。沿路遍寻大大小小十余座佛寺,听过诵经,住过禅房,与数十个主持僧侣相谈,无果。终于承认宗教不能救我分毫。三千世界三千佛,竟无一尊来点拨,于是甘踏这浮生,我自己来渡我。佛不渡我,我自渡。《自渡》
6、“感情淡了我们再培养,无话可说了我们就再去找话题。觉得腻了我们重新认识,要是累了就给彼此空间。人潮汹涌的,遇到你也不容易,也不想再推开了。”《绝对占有 相对自由》
代码展示
# 导入库
import requests
import json
import time
import pandas as pd
import csv
import random
# https://music.163.com/weapi/v1/resource/comments/R_SO_4_1313354324
'''
# 网易云音乐评论API,其中1313354324为音乐ID,limit为页面结果限制数,最大可设为100,offset为页面偏移量
http://music.163.com/api/v1/resource/comments/R_SO_4_1313354324?limit=20&offset=0
# 用户信息API
https://music.163.com/api/v1/user/detail/1717677690
而且网易云音乐对评论也做了限制,只放出了2千条的评论数据。
前后各一万,即评论的前50页和后50页。
'''
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.113 Safari/537.36'
}
def get_parse(result,j):
# 添加headers
items = result['comments']
# hotitems=result['hotComments']
sum1=result['total']
D=[]
for item in items:
# 用户名
user_name = item['user']['nickname'].replace(',', ',')
print(user_name)
# 用户ID
user_id = str(item['user']['userId'])
# 获取用户信息
user_message = get_user(user_id)
# 用户年龄
user_age = str(user_message['age'])
# 用户性别
user_gender = str(user_message['gender'])
# 用户所在地
user_city = str(user_message['city'])
print(user_city)
# 个人介绍
user_introduce = user_message['sign'].strip().replace("\n", "")
# 评论内容
comment = item['content'].strip().replace("\n", "")
# 评论ID
comment_id = str(item['commentId'])
# 评论点赞数
praise = str(item['likedCount'])
# 评论时间
date = time.localtime(int(str(item['time'])[:10]))
date = time.strftime('%Y-%m-%d %H:%M:%S', date)
# 评论总数
data=[j,user_id,user_name,user_age,user_gender,user_city,user_introduce,comment,comment_id,praise,date,sum1]
D.append(data)
get_save(D)
def get_user(user_id):
# 获取用户注册时间
data={}
url='https://music.163.com/api/v1/user/detail/'+str(user_id)
response=requests.get(url,headers=headers,verify=False)
# 将字符串转换为json格式
result=json.loads(response.text)
citys = {'11': '北京', '12': '天津', '13': '河北', '14': '山西', '15': '内蒙', '21': '辽宁', '22': '吉利', '23': '黑龙江','31': '上海',
'32': '江苏', '33': '浙江', '34': '安徽', '35': '福建', '36': '江西', '37': '山东', '41': '河南', '42': '湖北', '43': '湖南',
'44': '广东', '45': '广西', '46': '海南', '50': '重庆', '51': '四川', '52': '贵州', '53': '云南', '54': '西藏','61':'陕西',
'62':'甘肃','63':'青海','64':'宁夏','65':'新疆','71':'台湾'
}
if result['code']==200:
# 性别
data['gender']=result['profile']['gender']
# 城市
try:
city=result['profile']['city']
data['city']=citys[str(city)[:2]]
except:
data['city']='null'
# 个人介绍
data['sign']=result['profile']['signature']
# 出生时间
try:
a=result['profile']['birthday']
date = time.localtime(int(str(a)[:10]))
date = time.strftime('%Y-%m-%d %H:%M:%S', date)
data['age'] = date
except:
data['age'] = 'null'
else:
data['gender']='null'
data['city']='null'
data['sign']='null'
data['age'] ='null'
return data
def get_save(data):
with open('./陈粒1.csv','a', newline='', encoding='gb18030')as file:
writer = csv.writer(file)
writer.writerows(data)
def main():
header=['歌曲','id','昵称','出生日期','性别','城市','个人介绍','评论内容','评论id','点赞数','评论时间','评论总数']
with open('./陈粒1.csv','a', newline='', encoding='gb18030')as file:
writer = csv.writer(file)
writer.writerow(header)
# 陈粒
song_id = ['421563718','524148556','1413323991','30431369','421563715','30051773','1318430037','31789055']
# '29431061','1336131098','436147229','30431372','29753861','421563714','421563712','473440304','29431060','36308884','29753831','463840571','30431378','1340001872','1363504501','447925710']
for j in song_id:
time.sleep(120)
for i in range(1,51):
url = 'http://music.163.com/api/v1/resource/comments/R_SO_4_{}?limit=20&offset={}'.format(j, (i-1)*20)
print(url)
response=requests.get(url=url,headers=headers,verify=False)
result = json.loads(response.text)
get_parse(result,j)
time.sleep(2)
if __name__ == '__main__':
main()