本帖最后由 马猴烧酒 于 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的用户
数据集中关键词的频率可以形象地由下图表示,字体越大的单词频率越高。
图1-1
2 探索数据集
数据集的内容如下图所示。
图2-1
如上图,数据集有10列,id是行号,ProductId是产品Id,UserId是用户Id,ProfileName是用户的账号名称,HelpfulnessNumerator是认为这评论有帮助的人数,HelpfulnessDenominate是指出评论有帮助的人数,Score是评分,1-5星。Time是评论时间戳。Summary是评论的简要总结,Text是评论。
2.1 读取数据集
- import pandas as pd
- import numpy as np
- np.random.seed(0)
- def read_text_file(f):
- df_complete = pd.read_csv(f)
- return df_complete
- df = read_text_file("../input/Reviews.csv")
复制代码 2.2 查看评分分布
我首先查看了所有评论的评分分布。我们发现五星级的评论占所有评论的很大比例(64%)。其次是4星评价(14%),其次是1星评价(9%),3星评价(8%),最后是2星评价(5%)。
- df_count_prcnt = df.Score.value_counts()
- def compute_percentage(x):
- pct = float(x/df_count_prcnt.sum()) * 100
- return round(pct, 2)
- df_count_prcnt = df_count_prcnt.apply(compute_percentage)
- df_count_prcnt.plot(kind="bar", colormap='jet')
复制代码
图2.2-1
2.3 用户按评论产品数排序
对用户按评论的产品数量进行排序,最高的达到了448条。这里用条形图展现前15条评论产品数量比较多的用户。
- def top_n_counts (n, col, col_1):
- gb = df.groupby(col)[col_1].count()
- gb = gb.sort_values(ascending=False)
- top_n_counts(15, ['UserId'], 'UserId').plot(kind='bar', figsize=(20,10), colormap='winter')
复制代码
图2.3-1
2.4绘制不同评分数量随评论时间变化的曲线
- df['datetime'] = pd.to_datetime(df["Time"], unit='s')
- df_grp = df.groupby([df.datetime.dt.year, df.datetime.dt.month, df.Score]).count()['ProductId'].unstack().fillna(0)
- df_grp.plot(figsize=(20,10), rot=45, colormap='jet')
复制代码
图2.4-1
2.5 消极和积极评论的词频分析
下面代码生成词频图,积极词频图如图2.5-1,消极词频图如图2.5-2,从两者图中可以看出消极评论和积极评论使用频繁的那些词似乎没什么不同。
- import nltk
- from nltk.corpus import stopwords
- from wordcloud import WordCloud
- import string
- import matplotlib.pyplot as plt
- def create_Word_Corpus(df):
- words_corpus = ''
- for val in pos["Summary"]:
- text = val.lower()
- #text = text.translate(trantab)
- tokens = nltk.word_tokenize(text)
- tokens = [word for word in tokens if word not in stopwords.words('english')]
- for words in tokens:
- words_corpus = words_corpus + words + ' '
- return words_corpus
- # 生成词云图片
- pos_wordcloud = WordCloud(width=900, height=500).generate(create_Word_Corpus(pos))
- neg_wordcloud = WordCloud(width=900, height=500).generate(create_Word_Corpus(neg))
- # 绘制词云
- def plot_Cloud(wordCloud):
- plt.figure( figsize=(20,10), facecolor='k')
- plt.imshow(wordCloud)
- plt.axis("off")
- plt.tight_layout(pad=0)
- plt.show()
- plt.savefig('wordclouds.png', facecolor='k', bbox_inches='tight')
- #展示积极评论的词频
- plot_Cloud(pos_wordcloud)
- #展示消极评论的词频
- plot_Cloud(neg_wordcloud)
复制代码
图2.5-1
图2.5-2
3 总结
通过以上的数据的探索,我们知道时间季节,用户本身特性(比如爱好美食)影响评分,评论情绪等。亚马逊数据集包含了大量用户的评论,对平台的好处在于可以推出基于评论的推荐系统,吸引用户,增加用户留存率。对商户的好处在于可以借助数据分析改善自己的产品,使产品变得更加受欢迎。所以自然语言处理在餐饮产业这一块的应用有很大用武之地。
|