当前位置:   article > 正文

数据挖掘|商品评论关键词抽取、情感分析及情感可视化_商品评论,从评论中提取关键词,预测哪些商品名称分别对应于附录iii和附录 iv ,并对

商品评论,从评论中提取关键词,预测哪些商品名称分别对应于附录iii和附录 iv ,并对

1 任务定义

        给定商品评论数据集,对商品评论进行关键词抽取、情感分析,并对情感分值按月份聚类后用可视化图表呈现。本任务涉及的数据源为2020年美赛C题的三个tsv文件(csv文件以逗号分隔,而tsv文件以\t分隔,在利用pandas读取时需要增加sep参数,并设置为'\t'),本文主要使用该数据集中的最后两个字段:review_body和review_date。

  1. import pandas as pd
  2. hair_dryer=pd.read_csv("./Dataset/hair_dryer.tsv",sep='\t')
  3. microwave=pd.read_csv("./Dataset/microwave.tsv",sep='\t')
  4. pacifier=pd.read_csv("./Dataset/pacifier.tsv",sep='\t')
  5. # 查看hair_dryer的数据
  6. hair_dryer.head(10)

2 实现过程

  1. from snownlp import SnowNLP
  2. import time
  3. import yake
  4. import random
  5. import pandas as pd

2.1 日期数据处理

        将字符形式的日期数据转为时间戳保存下来,有利于后续对时间的其它处理(自己的小习惯,当前的小任务用不上时间戳~);将日期转换为年-月格式,有助于后续在可视化时减少横轴的数据项(如果以天为单位会太多啦)。

  1. # 将日期转换为时间戳
  2. def toTimeStamp(review_date):
  3. ## 数据中的日期格式为: %m/%d/%Y, 例如: 8/31/2015
  4. timeArray=time.strptime(review_date,'%m/%d/%Y')
  5. timeStamp=int(time.mktime(timeArray))
  6. return timeStamp
  7. # 将日期转换为年-月形式
  8. def year_month(review_date):
  9. month,day,year=review_date.split("/")
  10. ## 月份用2位数字表示, 不足两位用0填充
  11. return year+'-{:0>2}'.format(month)

2.2 关键词与情感

  1. 计算情感得分:使用SnowNLP库的情感得分计算
  2. 提取关键词:数据为英文文本,这里用yake库的KeywordExtractor对象进行提取
  3. 保存中间数据:把三种商品的情感得分和关键词都存储到相应的csv文件中
  1. # 三种类型的商品
  2. names={'hair_dryer','microwave','pacifier'}
  3. # 计算情感得分+抽取关键词
  4. def sentiment_count_keyword(name):
  5. ## 读取特定商品对应的数据文件(该文件以\t隔开)
  6. df=pd.read_csv("./Dataset/{}.tsv".format(name),sep='\t')
  7. ## 将日期转换为时间戳和年-月形式
  8. df['review_stamp']=df['review_date'].apply(toTimeStamp)
  9. df['year_month']=df['review_date'].apply(year_month)
  10. ## 创建新DataFrame, 字段包括'review_date','review_body','review_stamp','year_month'
  11. date_comments = df[['review_date','review_body','review_stamp','year_month']]
  12. ## 使用SnowNLP计算情感得分
  13. sentiment_list = []
  14. for comment in date_comments['review_body']:
  15. try:
  16. sentiment_list.append(SnowNLP(comment).sentiments)
  17. except:
  18. sentiment_list.append(random.random())
  19. date_comments['sentiment']=sentiment_list
  20. ## 使用年-月聚类, 按月份计算情感平均值
  21. sort_comments=date_comments.groupby('year_month')['sentiment'].agg('mean').reset_index().sort_values(by='year_month')
  22. sort_comments['review_count']=date_comments.groupby('year_month')['review_body'].count().tolist()
  23. sort_comments.to_csv('./DataSet/[{}]sentiment_count.csv'.format(name),index=False)
  24. ## 使用yake进行关键词抽取
  25. language = "en"
  26. max_ngram_size = 2 #最大关键词语长度
  27. deduplication_threshold = 0.9 #设置在关键词中是否可以重复单词
  28. numOfKeywords = 20
  29. custom_kw_extractor = yake.KeywordExtractor(lan=language, n=max_ngram_size, dedupLim=deduplication_threshold, top=numOfKeywords, features=None)
  30. keywords=[]
  31. for i in range(date_comments.shape[0]):
  32. keyword=custom_kw_extractor.extract_keywords(date_comments.loc[i,'review_body'])
  33. keywords.append([i[0] for i in keyword])
  34. date_comments['keywords']=keywords
  35. date_comments.to_csv("./DataSet/[{}]keywords.csv".format(name),index=False)

        查看情感和关键词结果,以microwave商品为例:


2.3 情感趋势可视化

        以microwave的情感得分为例,利用pyecharts绘制折线图如下。

  1. from pyecharts.charts import Line
  2. from pyecharts import options as opts
  3. sort_comments=pd.read_csv("./Dataset/[microwave]sentiment_count.csv")
  4. line = (
  5. Line()
  6. .add_xaxis(list(sort_comments['year_month'].unique()))
  7. .add_yaxis("情感", sort_comments['sentiment'].to_list(), is_smooth=True)
  8. .set_series_opts(
  9. areastyle_opts=opts.AreaStyleOpts(opacity=0.5),
  10. label_opts=opts.LabelOpts(is_show=False),
  11. )
  12. .set_global_opts(
  13. title_opts=opts.TitleOpts(title="评论情感趋势"),
  14. datazoom_opts=opts.DataZoomOpts()
  15. # xaxis_opts=opts.AxisOpts(
  16. # axistick_opts=opts.AxisTickOpts(is_align_with_label=True),
  17. # is_scale=False,
  18. # boundary_gap=False,
  19. # ),
  20. )
  21. .render("./Visual/评论情感趋势.html")
  22. )

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/691921
推荐阅读
相关标签
  

闽ICP备14008679号