原文链接:http://tecdat.cn/?p=12203


介绍

每个人都喜欢省钱。我们都试图充分利用我们的资金,有时候这是最简单的事情,可以造成最大的不同。长期以来,优惠券一直被带到超市拿到折扣,但使用优惠券从未如此简单,这要归功于Groupon。

Groupon是一个优惠券推荐服务,可以在您附近的餐馆和商店广播电子优惠券。其中一些优惠券可能非常重要,特别是在计划小组活动时,因为折扣可以高达60%。

相关视频:文本挖掘:主题模型(LDA)及R语言实现分析游记数据

文本挖掘:主题模型(LDA)及R语言实现分析游记数据

时长12:59


数据

这些数据是从Groupon网站的纽约市区域获得的。网站的布局分为所有不同groupon的专辑搜索,然后是每个特定groupon的深度页面。网站外观如下所示:

两个页面的布局都不是动态的,所以建立了一个自定义scrapy ,以便快速浏览所有的页面并检索要分析的信息。然而,评论,重要的信息,通过JavaScript呈现和加载 。Selenium脚本使用从scrapy获取的groupons的URL,实质上模仿了人类点击用户注释部分中的“next”按钮。

for url in url_list.url[0:50]:try:driver.get(url)time.sleep(2)#关闭出现的任何弹出窗口## if(driver.switch_to_alert()):try:close = driver.find_element_by_xpath('//a[@id="nothx"]')close.click()except:passtime.sleep(1)try:link = driver.find_element_by_xpath('//div[@id="all-tips-link"]')driver.execute_script("arguments[0].click();", link)time.sleep(2)except:nexti = 1print(url)while True:try:time.sleep(2)print("Scraping Page: " + str(i))reviews = driver.find_elements_by_xpath('//div[@class="tip-item classic-tip"]')next_bt = driver.find_element_by_link_text('Next')for review in reviews[3:]:review_dict = {}content = review.find_element_by_xpath('.//div[@class="twelve columns tip-text ugc-ellipsisable-tip ellipsis"]').textauthor = review.find_element_by_xpath('.//div[@class="user-text"]/span[@class="tips-reviewer-name"]').textdate = review.find_element_by_xpath('.//div[@class="user-text"]/span[@class="reviewer-reviewed-date"]').textreview_dict['author'] = authorreview_dict['date'] = datereview_dict['content'] = contentreview_dict['url'] = urlwriter.writerow(review_dict.values())i += 1 next_bt.click()except:breakexcept:nextcsv_file.close()
driver.close()

从每个组中检索的数据如下所示。

Groupon标题

分类信息

交易功能位置

总评分数网址

作者日期

评论网址

大约有89,000个用户评论。从每个评论中检索的数据如下所示。

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')

最后,由于大部分数据是通过文本:价格(原价),导出了一个正则表达式来解析价格信息,以及它们提供的交易数量。该信息显示在以下条形图中:


objects = list(offer_counts.keys())
y = list(offer_counts.values())
tst = np.arange(len(y))plt.bar(tst,y, align = 'center')
plt.xticks(tst, objects)
plt.ylabel('Total Number of Groupons')
plt.xlabel('Different Discounts Offers')
plt.show()


plt.ylabel('Number of Offerings')
plt.xticks(ind, ('Auto', 'Beauty', 'Food', 'Health', 'Home', 'Personal', 'Things'))
plt.xlabel('Category of Groupon')
plt.legend((p0[0], p1[0], p2[0], p3[0], p4[0], p5[0], p6[0], p7[0], p10[0]), ('0', '1', '2', '3', '4', '5', '6', '7', '10'))

sns.violinplot(data = savings_dataframe)

最后,利用用户评论数据生成一个文字云:

plt.rcParams['figure.figsize'] = (20,20)
wordcloud = WordCloud(width=4000, height=2000, max_words=150, background_color='white').generate(text)
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")

主题建模

为了进行主题建模,使用的两个最重要的软件包是gensimspacy。创建一个语料库的第一步是删除所有停用词,如“,”等。最后创造trigrams。

选择的模型是Latent Dirichlet Allocation,因为它能够区分来自不同文档的主题,并且存在一个可以清晰有效地将结果可视化的包。由于该方法是无监督的,因此必须事先选择主题数量,在模型的25次连续迭代中最优数目为3。结果如下:

上面的可视化是将主题投影到两个组件上,其中相似的主题会更接近,而不相似的主题会更远。右边的单词是组成每个主题的单词,lambda参数控制单词的排他性。0的lambda表示每个主题周围的最排斥的单词,而1的lambda表示每个主题周围的最频繁的单词。

第一个话题代表服务的质量和接待。第二个话题有描述锻炼和身体活动的词语。最后,第三个话题有属于食品类的词语。

结论

主题建模是无监督学习的一种形式,这个项目的范围是简要地检查在基础词语背后发现模式的功能。虽然我们认为我们对某些产品/服务的评论是独一无二的,但是这个模型清楚地表明,实际上,某些词汇在整个人群中被使用。

拓端tecdat|scrapy爬虫框架和selenium的使用:对优惠券推荐网站数据LDA文本挖掘相关推荐

  1. Scrapy爬虫框架学习_intermediate

    一.Scrapy爬虫框架介绍 Scrapy是功能强大的非常快速的网络爬虫框架,是非常重要的python第三方库.scrapy不是一个函数功能库,而是一个爬虫框架. 1.1 Scrapy库的安装 pip ...

  2. python的scrapy爬虫模块间进行传参_小猪的Python学习之旅 —— 4.Scrapy爬虫框架初体验...

    小猪的Python学习之旅 -- 4.Scrapy爬虫框架初体验 Python 引言: 经过前面两节的学习,我们学会了使用urllib去模拟请求,使用 Beautiful Soup和正则表达式来处理网 ...

  3. python3 scrapy爬虫_Python3 Scrapy爬虫框架(Scrapy/scrapy-redis)

    Python3 Scrapy爬虫框架(Scrapy/scrapy-redis) 本文由 Luzhuo 编写,转发请保留该信息. 原文: https://blog..net/Rozol/article/ ...

  4. scrapy爬虫框架及运行流程

    文章目录 1 scrapy 简介 1.1 什么是爬虫? 1.2 浏览网页的过程中发生了什么? 1.3 scrapy爬虫框架 1.4 scrapy爬虫框架优势 2 scrapy 构架图 3 Scrapy ...

  5. 第五章 Scrapy爬虫框架(5.1 Scrapy框架基础)

    Scrapy是一个高级Web爬虫框架,用于爬取网站并从页面中提取结构化数据.它可以用于数据挖掘.数据监控和自动化测试等多个方面.与之前讲过的Requests库和Selenium库不同,Scrapy更适 ...

  6. python创建scrapy_Python爬虫教程-31-创建 Scrapy 爬虫框架项目

    首先说一下,本篇是在 Anaconda 环境下,所以如果没有安装 Anaconda 请先到官网下载安装 Scrapy 爬虫框架项目的创建0.打开[cmd] 1.进入你要使用的 Anaconda 环境1 ...

  7. Python Scrapy爬虫框架实战应用

    通过上一节<Python Scrapy爬虫框架详解>的学习,您已经对 Scrapy 框架有了一个初步的认识,比如它的组件构成,配置文件,以及工作流程.本节将通过一个的简单爬虫项目对 Scr ...

  8. Python 网络爬虫笔记9 -- Scrapy爬虫框架

    Python 网络爬虫笔记9 – Scrapy爬虫框架 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程链接:Py ...

  9. 【数据分析】干货!一文教会你 Scrapy 爬虫框架的基本使用

    出品:Python数据之道 (ID:PyDataLab) 作者:叶庭云 编辑:Lemon 一.scrapy 爬虫框架介绍 在编写爬虫的时候,如果我们使用 requests.aiohttp 等库,需要从 ...

  10. python的scrapy框架的安装_Python3环境安装Scrapy爬虫框架过程及常见错误

    Windows •安装lxml 最好的安装方式是通过wheel文件来安装,http://www.lfd.uci.edu/~gohlke/pythonlibs/,从该网站找到lxml的相关文件.假如是P ...

最新文章

  1. Ubuntu常用快捷键
  2. matlab中欠定方程组超定方程组_《数值天气预报》:球坐标系中的基本方程组
  3. java选择题多选题系统小程序_单选题与多选题判断得分(自动考试小程序,入门级)...
  4. c语言线程经常段错误的是,由pthread_create引起的段异常
  5. linux总线错误无法删除文件,linux – 系统D-Bus不允许使用conf文件来破坏所有权...
  6. 硬盘安装Windows7--笔记
  7. byte 类型_java知识总结(九):基本类型转换
  8. 《CLR Via C# 第3版》笔记之(八) - 类型的转换构造器和方法
  9. 济安横断面为什么会有水印_PS差值模式是如何去水印的?你看的懂抖音的沙雕做法?...
  10. 实验一:线性表的基本操作实现及其应用
  11. matlab用DFT分析三频频谱,设计一DFT在信号频谱分析中的应用
  12. 博客园样式管理总结(个人博客园装修指南)
  13. 计算机双工模式,100M 全双工、100M 半双工、10M全双工几种模式分别测试
  14. Joel在耶鲁大学的演讲
  15. 【IM】网易lM聊天列表UI
  16. iOS项目开发中Git的使用
  17. [RTT][ENV][PACKAGE]如何制作软件包
  18. 信息安全概论 第一章 绪论
  19. arm-linux-gnueabihf-gcc 安装 OpenBLAS
  20. 微信公众号的常见问题

热门文章

  1. tomcat,tomcat7配置https
  2. [经典php视频]构建正则表达式解析网页中的图像标记img
  3. Hibernate 主键策略
  4. 浅谈Visual Studio 2010并行运算原理
  5. MySQL Workbench 如何连接 Amazon EC2 上的MySQL服务器?
  6. jdk AbstractStringBuilder实现
  7. pytorch dataset
  8. C++--第0课 - 学习C++的意义
  9. .net通用CMS快速开发框架——问题:Dapper通用的多表联合分页查询怎么破?
  10. ARTS打卡计划第5周-ALGORITHM