易学智能

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2779|回复: 4

自然语言处理-亚马逊美食评论数据集

[复制链接]

22

主题

107

帖子

266

积分

中级会员

Rank: 3Rank: 3

积分
266
发表于 2018-8-28 12:00:54 | 显示全部楼层 |阅读模式
本帖最后由 马猴烧酒 于 2018-8-29 08:05 编辑

1 简介
     这个亚马逊美食评论数据集包含亚马逊截至2012年10月的所有50万次评论。内容包括产品和用户信息、评级和纯文本评论。它还包括所有其他亚马逊类别的评论。可以用来做情感分析,推荐,评分多种应用。数据集有两种格式,一种是csv,另一种是sqlite数据库中的数据表,两种格式的数据集是相同的内容。选取其中一种即可,这里选用csv格式的数据集进行情感分析,判断评论是积极的还是消极的。数据集下载地址:https://www.kaggle.com/snap/amazon-fine-food-reviews/downloads/Reviews.csv/2
    数据集包括:

      - 1999年10月- 2012年10月的数据

      - 568454条评论

      - 256059个用户

      - 74258个产品

      - 260个评论次数超过50的用户
    数据集中关键词的频率可以形象地由下图表示,字体越大的单词频率越高。

111.png

图1-1



2 探索数据集

  数据集的内容如下图所示。
6.png

图2-1

    如上图,数据集有10列,id是行号,ProductId是产品Id,UserId是用户Id,ProfileName是用户的账号名称,HelpfulnessNumerator是认为这评论有帮助的人数,HelpfulnessDenominate是指出评论有帮助的人数,Score是评分,1-5星。Time是评论时间戳。Summary是评论的简要总结,Text是评论。

2.1 读取数据集

  1. import pandas as pd
  2. import numpy as np

  3. np.random.seed(0)

  4. def read_text_file(f):
  5.     df_complete = pd.read_csv(f)
  6.     return df_complete

  7. df = read_text_file("../input/Reviews.csv")
复制代码
2.2 查看评分分布

    我首先查看了所有评论的评分分布。我们发现五星级的评论占所有评论的很大比例(64%)。其次是4星评价(14%),其次是1星评价(9%),3星评价(8%),最后是2星评价(5%)。

  1. df_count_prcnt = df.Score.value_counts()

  2. def compute_percentage(x):
  3.     pct = float(x/df_count_prcnt.sum()) * 100
  4.     return round(pct, 2)

  5. df_count_prcnt = df_count_prcnt.apply(compute_percentage)

  6. df_count_prcnt.plot(kind="bar", colormap='jet')
复制代码
1.png

图2.2-1

2.3 用户按评论产品数排序

    对用户按评论的产品数量进行排序,最高的达到了448条。这里用条形图展现前15条评论产品数量比较多的用户。

  1. def top_n_counts (n, col, col_1):
  2.     gb = df.groupby(col)[col_1].count()
  3.     gb = gb.sort_values(ascending=False)
  4. top_n_counts(15, ['UserId'], 'UserId').plot(kind='bar', figsize=(20,10), colormap='winter')
复制代码
1.png

图2.3-1

2.4绘制不同评分数量随评论时间变化的曲线

  1. df['datetime'] = pd.to_datetime(df["Time"], unit='s')
  2. df_grp = df.groupby([df.datetime.dt.year, df.datetime.dt.month, df.Score]).count()['ProductId'].unstack().fillna(0)

  3. df_grp.plot(figsize=(20,10), rot=45, colormap='jet')
复制代码
1.png

图2.4-1

2.5 消极和积极评论的词频分析

下面代码生成词频图,积极词频图如图2.5-1,消极词频图如图2.5-2,从两者图中可以看出消极评论和积极评论使用频繁的那些词似乎没什么不同。

  1. import nltk
  2. from nltk.corpus import stopwords
  3. from wordcloud import WordCloud
  4. import string
  5. import matplotlib.pyplot as plt

  6. def create_Word_Corpus(df):
  7.     words_corpus = ''
  8. for val in pos["Summary"]:
  9. text = val.lower()
  10. #text = text.translate(trantab)
  11. tokens = nltk.word_tokenize(text)
  12. tokens = [word for word in tokens if word not in stopwords.words('english')]
  13. for words in tokens:
  14. words_corpus = words_corpus + words + ' '
  15. return words_corpus

  16. # 生成词云图片
  17. pos_wordcloud = WordCloud(width=900, height=500).generate(create_Word_Corpus(pos))
  18. neg_wordcloud = WordCloud(width=900, height=500).generate(create_Word_Corpus(neg))

  19. # 绘制词云
  20. def plot_Cloud(wordCloud):
  21. plt.figure( figsize=(20,10), facecolor='k')
  22. plt.imshow(wordCloud)
  23. plt.axis("off")
  24. plt.tight_layout(pad=0)
  25. plt.show()
  26. plt.savefig('wordclouds.png', facecolor='k', bbox_inches='tight')
  27. #展示积极评论的词频
  28. plot_Cloud(pos_wordcloud)
  29. #展示消极评论的词频
  30. plot_Cloud(neg_wordcloud)
复制代码
1.png

图2.5-1

1.png

图2.5-2

3 总结

    通过以上的数据的探索,我们知道时间季节,用户本身特性(比如爱好美食)影响评分,评论情绪等。亚马逊数据集包含了大量用户的评论,对平台的好处在于可以推出基于评论的推荐系统,吸引用户,增加用户留存率。对商户的好处在于可以借助数据分析改善自己的产品,使产品变得更加受欢迎。所以自然语言处理在餐饮产业这一块的应用有很大用武之地。




回复

使用道具 举报

9

主题

74

帖子

185

积分

注册会员

Rank: 2

积分
185
发表于 2018-9-10 08:56:05 | 显示全部楼层
老哥分享资源好多啊,佩服佩服
回复

使用道具 举报

22

主题

107

帖子

266

积分

中级会员

Rank: 3Rank: 3

积分
266
 楼主| 发表于 2018-9-11 17:34:07 | 显示全部楼层
蛋蛋超人 发表于 2018-9-10 08:56
老哥分享资源好多啊,佩服佩服

额,我是资源的搬运工
回复

使用道具 举报

5

主题

53

帖子

130

积分

注册会员

Rank: 2

积分
130
发表于 2018-10-9 08:12:58 | 显示全部楼层
大佬真棒
回复

使用道具 举报

22

主题

107

帖子

266

积分

中级会员

Rank: 3Rank: 3

积分
266
 楼主| 发表于 2018-10-10 08:38:52 | 显示全部楼层

哈哈,是这样的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|易学智能

GMT+8, 2024-12-22 13:21 , Processed in 0.019920 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表