R语言NLP案例:LDA主题文本挖掘优惠券推荐网站数据
原文链接:http://tecdat.cn/?p=12203
介绍
Groupon是一个优惠券推荐服务,您可以免费注册Groupon,并且Groupon每天都会向您发送包含该地区当天交易的电子邮件。如果您喜欢这笔交易,那么您可以立即从Groupon购买,并在餐馆/商店兑换。
数据
这些数据是从Groupon网站的纽约市区域获得的。网站外观如下所示:
两个页面的布局都不是动态的,所以建立了一个自定义scrapy,以便快速浏览所有的页面并检索要分析的信息。然而,评论,重要的信息,通过Java呈现和加载,因此硒是使用的脚本。Selenium脚本使用从scrapy获取的groupons的URL,实质上模仿了人类点击用户注释部分中的“next”按钮。
从每个组中检索的数据如下所示。
Groupon标题
分类信息
交易位置
总评分数
作者日期
评论网址
print(all_groupon_reviews[all_groupon_reviews.content.apply(lambda x: isinstance(x, float))])
indx = [10096]
all_groupon_reviews.content.iloc[indx]
author date content \
10096 Patricia D. 2017-02-15 NaN
15846 Pat H. 2016-09-24 NaN
19595 Tova F. 2012-12-20 NaN
40328 Phyllis H. 2015-06-28 NaN
80140 Andre A. 2013-03-26 NaN
url year month day
10096 https://www.groupon.com/deals/statler-grill-9 2017 2 15
15846 https://www.groupon.com/deals/impark-3 2016 9 24
19595 https://www.groupon.com/deals/hair-bar-nyc-1 2012 12 20
40328 https://www.groupon.com/deals/kumo-sushi-1 2015 6 28
80140 https://www.groupon.com/deals/woodburybus-com 2013 3 26
探索性数据分析
一个有趣的发现是在过去的几年里,群体的使用已经大大增加了。我们通过检查评论提供的日期来发现这一点。看下面的图像,其中x轴表示月/年和y轴,表示计数,这个结论变得明显。最后的小幅下滑是由于当时的一些小组可能是季节性的。
一个有趣的发现是在过去的几年里,群体的使用已经大大增加了。我们通过检查评论提供的日期来发现这一点。看下面的图像,其中x轴表示月/年和y轴,表示计数,这个结论变得明显。最后的小幅下滑是由于当时的一些小组可能是季节性的。
pie_chart_df = Groupons.groupby('categories').agg('count')
plt.rcParams['figure.figsize'] = (8,8)
sizes = list(pie_chart_df.mini_info)
labels = pie_chart_df.index
plt.pie(sizes, shadow=True, labels = labels, autopct='%1.1f%%', startangle=140)
# plt.legend(labels, loc="best")
plt.axis('equal')
最后,导出了一个正则表达式来解析价格信息,以及它们提供的交易数量。该信息显示在以下条形图中:
最后,利用用户评论数据生成一个文字云:
主题建模
创建一个语料库的第一步是删除所有停用词。最后创造trigrams。
选择的模型是Latent Dirichlet Allocation,因为它能够区分来自不同文档的主题,并且存在一个可以清晰有效地将结果可视化的包。由于该方法是无监督的,因此必须事先选择主题数量,在模型的25次连续迭代中最优数目为3。结果如下:
上面的可视化是将主题投影到两个组件上,其中相似的主题会更接近,而不相似的主题会更远。右边的单词是组成每个主题的单词,
结论
主题建模是无监督学习的一种形式,这个项目的范围是在基础词语背后发现模型。