前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一日一技:如何从大量商品数据里面找到降价商品?

一日一技:如何从大量商品数据里面找到降价商品?

作者头像
青南
发布2022-05-23 14:47:37
3840
发布2022-05-23 14:47:37
举报
文章被收录于专栏:未闻Code未闻Code

相信很多做爬虫的同学都会爬电商网站,每天爬一次,然后监控商品是否降价。如果你只监控一个商品,那么是否降价这非常容易判断,但如果你要找到这个网站里面所有降价的商品,那就非常麻烦了。

如下图所示,是美国电商沃尔玛的全站商品数据:

每个商品每天都会爬一次,一共有61w+条数据。里面有N个商品降价了,现在需要把这些降价的商品找出来。

商品有十几万个,如果你分别找到每个商品的ID,然后用ID再找到这个商品每一天的数据,最后看它是否降价,这个工作量非常大,速度也会非常慢。

Pandas内部使用了SIMB技术来对并行计算进行优化,我们需要尽量在不使用for循环的情况下,完成这个任务。

为了简单起见,我们假设降价就是指今天比昨天的价格低,不考虑先涨价再降价的情况。

要解决这个问题,我们需要使用DataFrame的pct_change()方法。它就像是reduce一样,给出一系列数据,它会计算数据改变量的百分比——第二条相对于第一条数据的改变,第三条数据相对于第二条数据的改变,第四条数据相对于第三条数据的改变。

首先我们使用date字段对数据进行排序,确保价格是按时间排列的。然后对商品的id进行分组,这样就能拿到每一个商品每天的价格了。然后对price字段使用pct_change()

代码语言:javascript
复制
df2['pct'] = df2.sort_values(['date', 'id']).groupby(['id']).price.pct_change()

运行效果如下图所示:

图中最右侧pct字段是NaN,是因为这是这些商品的第一条数据,所以始终是NaN.

我们筛选出今天(2022-05-16),pct小于0的商品:

这些就是降价的商品了。我们可以随便筛选一个商品来检查一下:

使用pct_change()速度非常快,60w数据几乎秒出。比for循环快多了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-05-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 未闻Code 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
GPU 云服务器
GPU 云服务器(Cloud GPU Service,GPU)是提供 GPU 算力的弹性计算服务,具有超强的并行计算能力,作为 IaaS 层的尖兵利器,服务于深度学习训练、科学计算、图形图像处理、视频编解码等场景。腾讯云随时提供触手可得的算力,有效缓解您的计算压力,提升业务效率与竞争力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档