当前位置: 首页 > 后端技术 > Python

Python告诉你:《入海》到《消愁》毛不易唱的是什么歌?

时间:2023-03-25 20:51:11 Python

【简介】:今天我们要说的是哔哩哔哩和毛不易发布的毕业季主题曲《入海》,以及背后不一样的毛不易。Python的技术部分请参考第三部分。给我数据,用数据说话!今天我们要说的是毛不易的《入海》,没错,还是哔哩哔哩,又在520“搞事情”了,一个既浪漫又有营销价值的日子。5月20日,哔哩哔哩联合毛不易发布毕业季主题曲《入海》。这首歌的主题是“献给即将毕业或已经毕业的人”。歌曲MV以主人公毕业时的时光为原点,追忆往事,用大量篇幅展现了普通人毕业后的社会生活。这首歌一出,就成为了B站的热门话题,截至5月24日,B站的播放量达到了800万+,收获了5.2万个弹幕。全站日最高排名1,今天就带大家一起解读这首歌《入海》,以及背后不一样的毛不易。01.毛不易的歌里你喜欢唱什么?毛不易,本名王维嘉。原本毕业于杭州师范大学护理专业的他,一直梦想成为一名歌手。2017年,参加腾讯视频选秀节目《明日之子》获得全国总决赛冠军,从而正式进入演艺圈。谁能想到,这个长相平平,毫无优势,甚至有点腼腆老实的毛,最终很难夺得冠军。随着《消愁》《像我这样的人》等歌曲的热播,毛不易这个名字也被越来越多的人所熟知。同时,在今年鹅厂的女团选秀节目《创造营2020》中,毛不易更是作为导师加盟。可爱的毛老师这次也圈粉不少。听《消愁》里的《一杯向太阳,一杯向月光》,大概是天赋的缘故,毛不易能写出这个年纪的生活的无奈与纠结,是一种很大的勇气。那么毛不易唱的歌曲有哪些呢?下面一起来看看吧:我们在网易云音乐上对毛不易的歌曲进行了分析整理,共83首歌曲,歌词总字数45577字。我们使用Python来分析这些歌词。歌曲时长的分布首先是歌曲时长,4-5分钟的占比高达43.9%,3-4分钟的占比高达29.27%,2-3分钟的占比高达13.41%。要知道大部分歌曲的时长都在3分钟左右。看来毛不易歌曲的持续时间还是比较长的。SongPositiveEmotionScore我们使用玻色子库对每首歌歌词的情感进行打分。得分范围从0到100分。如果高于50,则为正值。得分越高,积极倾向越高。从分布图可以看出,83首歌曲中,大部分歌曲以正面为主。毛不易最喜欢的词TOP15毛不易喜欢在他最喜欢的歌曲中使用哪些词?我们分析整理出了歌词中出现频率最高的TOP15。可以看出,“等待”、“生命”、“时间”等词出现频率最高,位居前三。“慢慢地”、“相遇”、“河水”、“转角”等更多文艺词汇也榜上有名。有意思的是,“有钱”出现的频率也比较高,排在第四位。02.《入海》全站日排名第一,这首献给毕业季的歌有什么好听的?我们使用Python获取并分析了B站《入海》的MV的评论数据,经过去重后得到了19099个样本。下面让我们看看评论的具体分析。评论用户性别比例首先,评论用户性别比例方面,男性用户占比略高,男性用户占比54.69%,女性用户占比45.31%。评论用户客户端分布那么观看《入海》的用户在观看视频时使用的是什么移动设备呢?经过分析发现,使用iPhone的用户占比很大,远超Andrio系统的用户。第三个是使用ipad的用户。同时我们知道,b站的用户由于参与度等因素,从0到6分布,数字越大,等级越高。在评论这首歌《入海》的用户中,有36.1%的评论是5级的,其次是26.31%的是4级的,只有3.24%的是6级的。这也是因为要成为6级boss是必须的真的太难了。各时间段评论人数评论时间段方面,《入海》于5月20日8点30分发布。发布后,评论人数激增,12点左右评论达到顶峰。这段时间内有20,000条评论。超过7000人评论,远高于其他时间段。之后,评论人数随着时间的推移越来越少,趋于平缓。评论关键词TOP15评论中讨论最多的是什么?经过分析可以看出,“毕业”是被提及最多的词,其次是“后浪”。毕竟作为一个同样关注年轻人的话题,这次的《入海》很容易让大家接触到4日B站放出的5《后浪》视频。同时,“开心”、“入海”、“哭泣”等词也被频繁提及。03.Python分析:B站《入海》评论数据我们使用Python获取并分析了《入海》的MV在B站的评论数据。去重后得到19099个样本,我们来分析一下本周MV用户的评论。整个分析过程分为以下几个步骤:数据采集、数据整理、数据可视化、数据采集。在获取视频评论之前,我们首先要做的是分析它的网页结构,找到目标数据,也就是我们要评论的数据在哪里。经过抓包分析,在network-json标签下,很容易找到数据传输的地址。经过分析和简化,目标数据的url链接为:https://api.bilibili.com/x/v2...其中oid为视频的专属oid,pn为页码。从上图可以看出,评论数据以json数据的形式存在于网页中。目前显示页数976,每页20条评论,评论后数据暂不抓取。接下来,爬虫的思路就很清晰了。从第一页的JSON文件开始,爬取20条评论后,循环pn页面,直到爬取所有评论数据。代码如下:导入需要的包importrequestsimportjsonimportpandasaspdimporttimedefget_bili_comment_one(url):"""功能:定义一个获取一页信息的函数"""#Addheadersheaders={'Host':'api.bilibili.com','Referer':'https://www.bilibili.com/video...','User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/80.0.3987.149Safari/537.36'}#添加cookiescookies={"cookie":"Copyyourbrowsercookieinformation"}#发起请求try:sr=requests.get(url,headers=headers,=cookies,timeout=3)exceptExceptionase:print(e)r=requests.get(url,headers=headers,cookies=cookies,timeout=3)#解析为字典r_json=json.loads(r.text)#提取信息replies_data=r_json['data']['replies']#usernameuser_name=[i['member'].get('uname')foriinreplies_data]#gendersex=[i['member'].get('sex')foriinreplies_data]#Signaturesign=[i['member'].get('sign')foriinreplies_data]#用户级别current_level=[i['member']['level_info'].get('current_level')foriinreplies_data]#评论内容content=[i['content'].get('message')foriinreplies_data]#用户设备device=[i['content'].get('device')foriinreplies_data]#评论时间content_time=[i.get('ctime')foriinreplies_data]#replyNumberreply_count=[i['rcount']foriinreplies_data]#存储数据df=pd.DataFrame({'user_name':user_name,'sex':sex,'sign':sign,levelvel'current_'content':content,'device':device,'content_time':content_time,'reply_count':reply_count})returndfdefget_bili_comment_all(oid,num):"B"""获取指定页面视频的函数""#循环构建URLdf_all=pd.DataFrame()forpage_numinrange(1,num):try:#构建URLurl='https://api.bilibili.com/x/v2...{}&type=1&oid={}&sort=2'.format(page_num,oid)#df=get_bili_comment_one(url)#判断ifdf.shape[0]==0:Breakelse:#df_all=df_all.append(df,iGnore_INDEX=true)第{}'.format(page_num))页信息除外:break#休眠一秒.sleep(0.5)returndf_all《入海》bilibiliX头发不容易啊|'795637027',num=973)获取的数据以DataFrame的形式存储,格式如下:读取数据df.head()数据集有19099个样本,8个字段,字段名称为:用户名,用户性别,用户签名,用户等级,用户评论,设备名称,评论时间,点赞数df.info()rangeIndex:19099条目,0到19098data列(总计8列):user_name19099non-Nullobjectsex1909919099NON-NULLOBSICESSIGN9896NON-NULLOGRICTCURRENTCURRENTED1909NONNONNONNONNONNONNONNONNONNONNONNONNONNONNONNONEVER190999909990999099909年-NULLINT64CONTENT19099非零对象device4159non-nullobjectContent_Time19099non-nullint64reply_count19099non-nullint64dtypes:int64(3),object(3),对象(5)内存使用:1.2+mbmb数据mb数据数据进行部分清理工作,方便后续处理:重复值处理类型转换时间戳数据处理评论数据jieba分词处理-(代码暂时省略)importpackageimportnumpyasnpimportpandasaspdreaddatadf=pd.read_excel('../data/B站评论数据-入海5.23.xlsx')去重df=df.drop_duplicates()转换类型df['content']=[str(i)foriindf.content]定义转换时间deftransform_timestamp(time_second):timeArray=time.localtime(time_second)otherStyleTime=time.strftime('%Y-%m-%d%H:%M:%S',timeArray)returnotherStyleTime提取时间df['content_time']=df['content_time'].apply(lambdax:transform_timestamp(x))数据可视化分析这里我们将进行以下部分的数据可视化分析,首先导入需要的包,其中pyecharts用于绘制动态图形,stylecloud用于绘制词云图。关键代码如下:frompyecharts.chartsimportBar,Pie,Line,WordCloud,Pagefrompyechartsimportoptionsasoptsfrompyecharts.globalsimportSymbolTypeimportstylecloudfromIPython.displayimportImageCommentgenderratio总分分布sex_num=df['sex'].value_counts()sex_num.drop('Confidential',inplace=True)绘制饼图data_pair=[list(z)forzinzip(sex_num.index.tolist(),sex_num.values.tolist())]绘制饼图pie1=Pie(init_opts=opts.InitOpts(width='1350px',height='750px'))pie1.add('',data_pair,radius=['35%','60%'])pie1.set_global_opts(title_opts=opts.TitleOpts(title='评论用户性别比例'),legend_opts=opts.LegendOpts(orient='vertical',pos_top='15%',pos_left='2%'))pie1.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{d}%"))pie1.set_colors(['#EF9050','#3B7BA9','#6FB27C'])pie1.render()用户客户端分布device_num=df.device.value_counts(ascending=True)柱状图bar1=Bar(init_opts=opts.Initopts(width='1350px',height='750px'))bar1.add_xaxis(device_num.index.tolist())bar1.add_yaxis('',device_num.values.tolist(),label_opts=opts.LabelOpts(position='right'))bar1.set_global_opts(title_opts=opts.TitleOpts(title='评论客户端分布'),visualmap_opts=opts.VisualMapOpts(max_=3000))bar1.reversal_axis()bar1.render()用户等级分布userlevel_num=df.current_level.value_counts()data_pair2=[list(z)forzinzip(['LV'+iforiinlevel_num.index.astype('str').tolist()],level_num.values.tolist())]绘制饼图pie2=Pie(init_opts=opts.InitOpts(width='1350px',height='750px'))pie2.add('',data_pair=data_pair2,radius=['35%','60%'])pie2.set_global_opts(title_opts=opts.TitleOpts(title='评论用户等级分布'),legend_opts=opts.LegendOpts(orient='vertical',pos_top='15%',pos_left='2%'))pie2.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{c}({d}%)"))pie2.set_colors(['#EF9050','#3B7BA9','#6FB27C','#FFAF34'])pie2.render()注释时间图时间数据处理df['time']=df.content_time.str.split('-').str[1]+'-'+df.content_time.str.split('-').str[2]df['time']=df.time.str.split(':').str[0]time_num=df.time.value_counts().sort_index()生成数据x1_line1=time_num.index。values.astype('str').tolist()y1_line1=time_num.values.tolist()绘制区域图line1=Line(init_opts=opts.InitOpts(width='1350px',height='750px'))line1.add_xaxis(x1_line1)line1.add_yaxis('',y1_line1,aareastyle_opts=opts.AreaStyleOpts(opacity=0.3),markpoint_opts=opts.MarkPointOpts(data=[,aareastyle_opts='max',type]))line1.set_global_opts(title_opts=opts.titleopts('各各时段评论'),xaxis_opts=opts.axisopts(axislabel_opts=opts.labelopts(rotate='30'))line1.set_series_opts(label_opts=opts.labelopts=opts.labelopts=optlapts=firfs=firfs=seflilly=is_show=is_show=.AxisLineOpts())line1.render()注释词云图importstylecloudfromIPython.displayimportImage#用于在jupyterlab中显示本地图片stylecloud.gen_stylecloud(text=''.join(word_num),#txt需要以str格式传递collocations=False,ptonf_Windows'\Fonts\msyh.ttc',icon_name='FASFA-GRADUATION-CAP',SIZE=768,Output_name='B站评论词云图.png')(filename='B站评论.png')cda数据分析师出品作者:米卡数据:振达后期:泽龙、米卡