当前位置: 首页 > 科技观察

用Python分析网易云歌评论信息,通过视觉处理发现了这些有趣的规律

时间:2023-03-20 23:58:05 科技观察

大家好,我是Python进阶。前言前几天有个学生找我帮忙做一些视觉作业。作业内容包括收集网易云音乐热评和评论。1W的数据量做作业就够了,接下来就是做一些数据分析相关的工作。这项大作业包括网络爬虫、数据分析和数据处理以及可视化。这是一个大实验,需要提交实验报告。这里有一些知识点与大家分享。同学作业参考这篇文章:网易云音乐评论爬取。数据来源首先是数据来源,来自网易云音乐热评。这里就不放代码了。如果通过API获取,爬取难度就小很多,这里不再赘述。Analysisprocess时间处理下面的代码主要是对时间分布进行点评,主要是对时间列的数据处理,常规操作,还可以比较日期和月份,挖掘出有趣的东西。importpandasapdrompyechartsimportLine#读取数据df=pd.read_csv('music_comments.csv',header=None,names=['name','userid','age','gender','city','text','comment','commentid','praise','date'],encoding='utf-8-sig')#根据评论ID去重df=df.drop_duplicates('commentid')df=df.dropna()#获取时间df['time']=[int(i.split('')[1].split(':')[0])foriindf['date']]#groupsummarydate_message=df.groupby(['time'])date_com=date_message['time'].agg(['count'])date_com.reset_index(inplace=True)#绘制趋势图attr=date_com['time']v1=date_com['count']line=Line("歌曲被抄袭后-评论的时间分布",title_pos='center',title_top='18',width=800,height=400)line.add("",attr,v1,is_smooth=True,is_fill=True,area_color="#000",is_xaxislabel_align=True,xaxis_min="dataMin",area_opacity=0.3,mark_point=["max"],mark_point_symbol="pin",mark_point_symbolsize=55)line.render("歌曲被爆后抄袭-评论时间分布.html")runni后ng,得到的效果图如下:能看到评论的朋友喜欢在下午接近上班的时候和晚上评论。用户评论数的代码和上面类似,只需要改一下数据即可。importpandasaspd#读取数据df=pd.read_csv('music_comments.csv',header=None,names=['name','userid','age','gender','city','text','comment','commentid','praise','date'],encoding='utf-8-sig')#根据评论ID去重df=df.drop_duplicates('commentid')df=df.dropna()#分组聚合user_message=df.groupby(['userid'])user_com=user_message['userid'].agg(['count'])user_com.reset_index(inplace=True)user_com_last=user_com.sort_values('count',ascending=false)[0:10]运行print(user_com_last)后,结果如下:可以看到有忠实粉丝,有疯狂粉丝,还有几百条评论数据,很恐怖。评论词云词云是老生常谈,经常做,直接套用模板,换baseimage就行,代码如下:fromwordcloudimportWordCloudimportmatplotlib.pyplotaspltimportpandasaspdimportrandomimportjieba#Settextrandomcolordefrandom_color_func(word=None,font_size=None,position=None,orientation=无,font_path=无,random_state=无):h,s,l=random.choice([(188,72,53),(253,63,56),(12,78,69)])return"hsl({},{}%,{}%)".format(h,s,l)#读取信息df=pd.read_csv('music_comments.csv',header=None,names=['name','userid','age','gender','city','text','comment','commentid','praise','date'],encoding='utf-8-sig')#According对评论ID去重df=df.drop_duplicates('commentid')df=df.dropna()words=pd.read_csv('chineseStopWords.txt',encoding='gbk',sep='\t',names=['stopword'])#participletext=''forlineindf['comment']:text+=''.join(jieba.cut(str(line),cut_all=False))#stopwordstopwords=set('')stopwords.update(words['stopword'])backgroud_Image=plt.imread('music.jpg')wc=WordCloud(background_color='white',mask=backgroud_Image,font_path='FZSTK.TTF',max_words=2000,max_font_size=250,min_font_size=15,color_func=random_color_func,prefer_horizo??ntal=1,random_state=50,stopwords=stopwords)wc.generate_from_text(text)#img_colors=ImageColorGenerator(backgroud_Image)#看哪些词出现频率高process_word=WordCloud.process_text(wc,text)sort=sorted(process_word.items(),key=lambdae:e[1],reverse=True)print(sort[:50])plt.imshow(wc)plt.axis('off')wc.to_file("网易云音乐评论词云.jpg")print('词云生成成功!')最终生成的词云如下:用户年龄编码和上面类似,只需要改一下数据,这里是直接效果图就可以了,如下图:感觉还是有很多年轻粉丝的!区域分布的代码稍微复杂一点,毕竟涉及到地图。':'北京','12':'天津','31':'上海','50':'重庆','5e':'重庆','81':'香港','82':'澳门','13':'河北','14':'山西','15':'内蒙古','21':'辽宁','22':'吉林','23':'黑龙江','32':'江苏','33':'浙江','34':'安徽','35':'福建','36':'江西','37':'山东','41':'河南','42':'湖北','43':'湖南','44':'广东','45':'广西','46':'海南','51':'四川','52':'贵州','53':'云南','54':'西藏','61':'陕西','62':'甘肃','63':'青海','64':'宁夏','65':'新疆','71':'台湾','10':'其他',}cityCode=str(cityCode)returncity_map[cityCode[:2]]#读取数据df=pd.read_csv('music_comments.csv',header=None,names=['name','userid','age','gender','city','text','comment','commentid','praise','date'],encoding='utf-8-sig')#根据评论ID去重df=df.drop_duplicates('commentid')df=df.dropna()#匹配省份df['location']=df['city'].apply(city_group)#分组汇总loc_message=df.groupby(['location'])loc_com=loc_message['location'].agg(['count'])loc_com.reset_index(inplace=True)#绘制地图value=[iforiinloc_com['count']]attr=[iforiinloc_com['location']]print(value)打印(attr)map=Map("歌曲被抄袭后评论用户区域分布图",title_pos='center',title_top=0)map.add("",attr,value,maptype="china",is_visualmap=True,visual_text_color="#000",is_map_symbol_show=False,visual_range=[0,60])map.render('歌曲被抄袭后评论用户的区域分布图.html')最终效果图如下:YesSeeing那t四川和广东两省的评论数量居多,粉丝的性别代码和上面类似,这里就不多说了,直接上效果图。可见女性粉丝占据了大头。总结大家好,我是Python进阶。本文主要基于网易云热评数据,使用Python中的数据处理库pandas进行数据处理分析,并使用可视化库pyecharts与大家分享如何制作相关图形,发现了一些有趣的数据分析结果。