双11,用Python爬取4000多条笔记本电脑的销售数据并分析

news2024/11/25 19:35:26

双11,用Python爬取4000多条笔记本电脑的销售数据并分析

2022年,大部分电子产品的销量都在下滑,比如手机,一方面,产品的创新和提升不足,另一方面,大部分人更愿意把钱存起来,降低生活中其他因素带来的风险。

至于手机、笔记本电脑这些电子产品,只要能用,大部分人都不会选择换新。

马上双11,本文爬取了4000多条某宝的笔记本电脑销售数据,分析当前笔记本的整体价格情况。

数据获取

先进入某宝首页,在搜索框输入关键词“笔记本电脑”,然后拖动滚动条到下方翻页处,点击几次“下一页”和“上一页”,把每个页面的url复制出来进行对比,观察url的变化。发现每次变化的参数都是页面相关的参数s,所以代码中改变s参数就可以依次获取每个页面的数据。

核心的代码如下(受篇幅限制,文末提供完整代码获取方式):

def get_taobao_data():
    df_data = pd.DataFrame()
    for p in range(PAGE):
        try:
            print("-----开始获取第{}页数据-------".format(p+1))
            url = 'https://s.taobao.com/search?q={}&s={}'.format(GOODS, 44*p)
            res = requests.get(url, headers=headers, timeout=30)
            print("---------获取第{}页数据成功---{}".format(p+1, res.status_code))
            df_res = data_parse(res.text)
            df_data = pd.concat([df_data, df_res])
        except Exception as e:
            time.sleep(10)
            print("---------获取第{}页数据失败---{}".format(p+1, e))
            continue
        time.sleep(10)
    df_data.to_excel('taobao_data_{}.xlsx'.format(GOODS))


if __name__ == '__main__':
    get_taobao_data()

本文获取了前100页数据,共4044条。

在这里插入图片描述
初步检查了数据,这份数据是很完整的,没有缺失值,只是其中的“付款人数”是数字加文字的字符串,可以先清洗成只有数字,也可以后面可视化时再解析。因为处理不复杂,所以本文等取数时再处理。

数据分析

本文的分析和可视化主要围绕“价格”和“购买人数”这两个特征,拿到数据后,你可以根据自己关注的点做更多的分析。

1.笔记本电脑的价格分布

def computer_price():
    """笔记本电脑的价格分布"""
    df = pd.read_excel('taobao_data_笔记本电脑.xlsx')
    price = df['售价']
    sections = [0, 2500, 5000, 7500, 10000, 12500, 15000, 100000]
    group_names = ['2500以下', '2500-5000', '5000-7500', '7500-10000', '10000-12500', '12500-15000', '15000以上']
    cuts = pd.cut(np.array(price), sections, labels=group_names)
    price_counts = pd.value_counts(cuts)
    pie = Pie(init_opts=opts.InitOpts(width='800px', height='600px', bg_color='white'))
    pie.add(
        '', [list(z) for z in zip([gen for gen in price_counts.index], price_counts)],
        radius=['0', '60%'], center=['50%', '50%'],
        itemstyle_opts=opts.ItemStyleOpts(border_width=2, border_color='white'),
    ).set_series_opts(
        label_opts=opts.LabelOpts(formatter="{d}%", position='top'),
    ).set_global_opts(
        title_opts=opts.TitleOpts(title='笔记本电脑价格区间分布', pos_left='300', pos_top='40',
            title_textstyle_opts=opts.TextStyleOpts(color='blue', font_size=20)),
        legend_opts=opts.LegendOpts(pos_right=20, pos_top=250, orient='vertical')
    ).set_colors(
        ['rgba(0, 0, 255, {a})'.format(a=0.9-0.1*x) for x in range(len(group_names))]
    ).render('computer_price_counts.html')

在这里插入图片描述
只看价格,分布最多的两个价格区间是2500-5000和5000-7500,超过1W的笔记本电脑加起来也不到8%。

2.笔记本电脑的购买人数分布

def computer_sales_num():
    """笔记本电脑的购买人数"""
    df = pd.read_excel('taobao_data_笔记本电脑.xlsx')
    sales_num = df['付款人数'].apply(lambda x: int(re.findall(r'\d+', x)[0]))
    sections = [-1, 49, 99, 199, 499, 999, 100000]
    group_names = ['50以下', '50-100', '100-200', '200-500', '500-1000', '1000以上']
    cuts = pd.cut(np.array(sales_num), sections, labels=group_names)
    sales_num_counts = pd.value_counts(cuts)
    pie = Pie(init_opts=opts.InitOpts(width='800px', height='600px', bg_color='white'))
    pie.add(
        '', [list(z) for z in zip([gen for gen in sales_num_counts.index], sales_num_counts)],
        radius=['30%', '60%'], center=['50%', '50%'],
        itemstyle_opts=opts.ItemStyleOpts(border_width=2, border_color='white'),
    ).set_series_opts(
        label_opts=opts.LabelOpts(formatter="{c}", position='top'),
    ).set_global_opts(
        title_opts=opts.TitleOpts(title='笔记本电脑购买人数分布', pos_left='300', pos_top='40',
            title_textstyle_opts=opts.TextStyleOpts(color='rgba(60, 120, 60)', font_size=20)),
        legend_opts=opts.LegendOpts(pos_right=30, pos_top=250, orient='vertical')
    ).set_colors(
        ['rgba(60, 120, 60, {a})'.format(a=0.9-0.1*x) for x in range(len(group_names))]
    ).render('computer_sales_num_counts.html')

在这里插入图片描述
再从购买人数看,超过7成的电脑成交量在50台以下,同一家店铺同一款电脑能卖出500台以上的非常少。

3.购买人数超过500的价格分布

def computer_sales500_price():
    """购买人数超过500的笔记本电脑价格分布"""
    df = pd.read_excel('taobao_data_笔记本电脑.xlsx')
    df['人数'] = df['付款人数'].apply(lambda x: int(re.findall(r'\d+', x)[0]))
    sales500_price = df.loc[df['人数'] >= 500, '售价']
    sections = [0, 2500, 5000, 7500, 10000, 100000]
    group_names = ['2500以下', '2500-5000', '5000-7500', '7500-10000', '10000以上']
    cuts = pd.cut(np.array(sales500_price), sections, labels=group_names)
    price_counts = pd.value_counts(cuts)
    pie = Pie(init_opts=opts.InitOpts(width='800px', height='600px', bg_color='white'))
    pie.add(
        '', [list(z) for z in zip([gen for gen in price_counts.index], price_counts)],
        radius=['0', '60%'], center=['50%', '50%'],
        itemstyle_opts=opts.ItemStyleOpts(border_width=2, border_color='white'),
    ).set_series_opts(
        label_opts=opts.LabelOpts(formatter="{c}款:{d}%", position='top'),
    ).set_global_opts(
        title_opts=opts.TitleOpts(title='购买人数500以上的笔记本电脑价格分布', pos_left='250', pos_top='40',
            title_textstyle_opts=opts.TextStyleOpts(color='blue', font_size=20)),
        legend_opts=opts.LegendOpts(pos_right=10, pos_top=250, orient='vertical')
    ).set_colors(
        ['rgba(0, 0, 255, {a})'.format(a=0.9-0.1*x) for x in range(len(group_names))]
    ).render('computer_sales500_price_counts.html')

在这里插入图片描述
同时看价格和购买人数两个特征,根据单款购买人数超过500的笔记本电脑价格分布,分布最多的区间是5000-7500和2500-5000。

与不考虑购买人数时对比,5000-7500区间的占比提高了近10%,说明这个价格区间的购买人数最多。

4.购买人数超过500的价格Top20

def computer_sales500_price_Top20():
    """购买人数超过500的笔记本电脑价格Top20"""
    df = pd.read_excel('taobao_data_笔记本电脑.xlsx')
    df['人数'] = df['付款人数'].apply(lambda x: int(re.findall(r'\d+', x)[0]))
    sales500_price = df.loc[df['人数'] >= 500, '售价']
    sales500_price_top20 = sales500_price.sort_values(ascending=False)[0: 20]
    sales500_price_top20_shop = df.loc[sales500_price_top20.index, '店铺名']
    bar = Bar(init_opts=opts.InitOpts(width='1000px', height='400px', bg_color='white'))
    bar.add_xaxis(
        sales500_price_top20_shop.to_list()
    ).add_yaxis(
        '', sales500_price_top20.to_list(), category_gap=20
    ).set_global_opts(
        title_opts=opts.TitleOpts(title='购买人数超过500的笔记本电单价Top20', pos_left='350', pos_top='30',
            title_textstyle_opts=opts.TextStyleOpts(color='#4863C4', font_size=16)),
        xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=10, rotate=25, color='#4863C4'))
    ).set_colors('#4863C4').render('computer_sales500_price_top20.html')

在这里插入图片描述
把购买人数超过500的单价Top20展示出来,发现仅有一款单价超过1W的。如果看店铺的名字,某品牌占了“半壁江山”。

5.销售标题信息提取

def computer_title_word_cloud():
    """笔记本电脑的标题词云"""
    df = pd.read_excel('taobao_data_笔记本电脑.xlsx')
    title_content = df['标题']
    all_word = ','.join([str(t) for t in title_content])
    cut_text = jieba.cut(all_word)
    result = ' '.join(cut_text)
    pic = Image.open("computer.png")
    shape = np.array(pic)
    exclude = {'代'}
    image_colors = ImageColorGenerator(shape)
    wc = WordCloud(font_path="simhei.ttf", width=800, height=600, max_words=800, max_font_size=80, min_font_size=5,
                   background_color='white', color_func=image_colors,
                   contour_width=3, contour_color='steelblue', stopwords=exclude,
                   prefer_horizontal=1, mask=shape, relative_scaling=0.5)
    wc.generate(result)
    wc.to_file("ciyun_computer_title.png")

在这里插入图片描述
现在的店铺标题普遍都起得很长,主要目的是为了包含更多的关键词,提高被搜索到的几率,所以本文将标题的信息制作成词云。

从结果来看,主要信息里的关键词都是与笔记本电脑强相关的,如英特尔、i5、i7等主要与性能相关,游戏本、办公、商务等主要与功能定位相关,轻薄、便携、全面屏等主要与电脑的特点相关。

总结

本文主要分为两个部分,一个部分是用爬虫获取某宝的数据,一个部分是用Python进行简单分析和可视化。

本文的内容仅供学习和练习Python相关知识使用和参考,勿作他用。

完整的代码可以在下方用WX关注“小斌哥ge”,然后在后台回复“笔记本电脑”获取。欢迎一键三连。

相关阅读
Python房价分析和可视化<fangtianxia新房>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/4487.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PolarDB for PostgreSQL透明加密

PolarDB for PostgreSQL透明加密简介透明加密TDE(Transparent Data Encryption)通过在数据库层执行静止数据加密,阻止可能的攻击者绕过数据库直接从存储读取敏感信息。经过数据库身份认证的应用和用户可以继续透明地访问数据,而尝试读取数据库文件中敏感…

基于BP神经网络的非线性函数拟合(一维高斯函数)研究-含Matlab代码

目录一、引言二、BP神经网络的结构与原理2.1 信息前向传播2.2 误差的反向传播过程三、基于BP神经网络的非线性函数拟合3.1 数据生成3.2 神经网络拟合结果四、参考文献五、Matlab代码获取一、引言 以生物学基础的BP网络为全局网络,于多变量函数逼近理论不同&#xf…

C语言之文件的使用(上)

目录 目录 前言 预备知识 一、为什么要使用文件? 二、什么是文件?文件有哪些分类? 1.程序文件 2.数据文件 三、文件名 四、对文件的操作 1.基础知识(含文件指针的介绍) 2.文件打开与关闭的相关函数 1.fope…

【前沿技术RPA】 RPA开发人员的日常

🐋作者简介:博主是一位.Net开发者,同时也是RPA和低代码平台的践行者。 🐬个人主页:会敲键盘的肘子 🐰系列专栏:UiPath 🦀专栏简介:UiPath在传统的RPA(Robotic…

C语言经典题目之青蛙跳台阶问题

目录 一、问题描述 二、问题分析 1.当n1时 2.当n2时 3.当n3时 4.n4,n5........nn时 三、代码实现 总结 一、问题描述 一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级。求该青蛙跳上一个n 级的台阶总共有多少种跳法。 二、问题分析 青蛙跳台阶&a…

python的opencv操作记录(八)——小波变换

文章目录什么是小波从一个例子入手把例子再深化一下各种个样的小波基哈尔小波其他小波小波分解图像(二维)小波变换什么是小波 上一篇里提到了stft,短时傅里叶变换,是针对不稳定信号进行加窗来做每一个小窗口的频谱分析。然后一个一个的时间窗就可以理解…

STM32F103 UART4串口使用DMA接收不定长数据和DMA中断发送

一、前言 使用DMA通信的好处是,不占用单片机资源(不像普通串口中断,发送一个字节触发一次中断,发送100个字节触发100次中断;接收一个字节触发一次中断,接收200个字节触发200次中断),…

第五章 栈的讲解与实现

初阶数据结构 第一章 时间复杂度和空间复杂度 第二章 动态顺序表的实现 第三章 单向链表的讲解与实现 第四章 带头双向链表的讲解与实现 第五章 栈的讲解与实现 文章目录初阶数据结构前言一、栈1、什么是栈?二、栈的定义三、接口函数的实现1、初始化2、判断是否为空…

前端js手写面试题看这篇就够了

实现一个JSON.stringify JSON.stringify(value[, replacer [, space]]):Boolean | Number| String类型会自动转换成对应的原始值。undefined、任意函数以及symbol,会被忽略(出现在非数组对象的属性值中时),或者被转换…

利用opencv 做一个疲劳检测系统(2)

文章目录杂谈实现步骤核心算法交互界面界面代码检测效果源代码杂谈 最近发现视力下降严重, 可能跟我的过度用眼有关,于是想着能不能做一个检测用眼疲劳的,灵感来自特斯拉的疲劳检测系统。 效果如下: 实现步骤 实现核心算法制作…

【消息队列笔记】chp2-如何选择消息队列

一、选择消息队列的基本标准 不同的消息队列产品在功能和特性方面是各有优劣的,但是我们在选择的时候应尽量保证一个通用的最低标准。 1.必须是开源的产品 开源很重要,如果在使用该产品时遇到了影响业务的bug,可以通过修改源代码来进行修复…

音视频开发基础概念

目录一、音视频如何采集和表示1、音视频录制原理2、音视频播放原理二、视频基础概念1、图像基础概念2、RGB、 YUV深入讲解3、RGB和YUV的转换4、YUV Stride对齐问题三、视频为什么要做编码四、音频基础概念1、基本概念2、声音的物理性质-频率-音频采样率3、数字声音的表示4、音频…

【数据结构】——顺序表

目录 1.线性表 2.顺序表 2.1概念及结构 3.静态顺序表 4.动态顺序表 1.定义一个顺序表 2.顺序表的初始化和销毁 3.顺序表尾插 4.顺序表打印 5.顺序表尾删 6.顺序表头插 7.顺序表头删 8.在pos(任意)位置的插入 9.在pos(任意&#…

[附源码]计算机毕业设计JAVAjsp美容院业务管理系统

[附源码]计算机毕业设计JAVAjsp美容院业务管理系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM m…

用DIV+CSS技术设计的体育篮球主题 校园体育网页与实现制作(web前端网页制作课作业)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

SpringBoot(二):基础配置文件、yaml语法、多环境开发配置

目录 一、配置文件 1、配置文件格式 2、自动提示功能失灵解决方案 3、SpringBoot配置文件加载顺序 二、yaml 1、yaml介绍 2、yaml语法规则 3、yaml数组数据 4、yaml数据读取 三、多环境开发配置 1、多环境启动配置 2、多环境启动命令格式 3、多环境开发控制 四、…

VS Code常用操作

文章目录常用快捷键修改VS Code底部状态栏颜色VS Code添加Anaconda的Python源常用快捷键 (1) 对于 行 的操作: 重开一行:光标在行尾的话,回车即可;      不在行尾,Ctrl Enter 向下重开一行;    …

手拉手一起学HTML(下)——表格标签和列表标签,表单标签

🍓个人主页:bit.. 🍒系列专栏:Linux(Ubuntu)入门必看 C语言刷题 数据结构与算法 目录 一.表格标签 1.1表格的主要作用 1.2表格的基本语法 1.3表头单元格标签 1.4表格属性 1.5表格结构标签 1.6合并单元格&#xff08…

prometheus 监控

【00】结构原理微服务中的监控分根据作用领域分为三大类,Logging,Tracing,Metrics。* Logging - 用于记录离散的事件。例如,应用程序的调试信息或错误信息。它是我们诊断问题的依据。比如我们说的ELK就是基于Logging。* Metrics -…

HTTP协议详解

1.HTTP协议介绍 先来给大家介绍以下HTTP: HTTP(Hyper Text Transfer Protocol): 全称超文本传输协议,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。HTTP 是一种…