首页 > 编程语言 >双11,用Python爬取4000多条笔记本电脑的销售数据并分析

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

时间:2022-11-12 19:01:27浏览次数:52  
标签:11 title Python price 爬取 df 笔记本电脑 counts opts


双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条。

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


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

数据分析

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

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

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


只看价格,分布最多的两个价格区间是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')

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


再从购买人数看,超过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')

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


同时看价格和购买人数两个特征,根据单款购买人数超过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')

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


把购买人数超过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")

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


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

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

总结

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

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


标签:11,title,Python,price,爬取,df,笔记本电脑,counts,opts
From: https://blog.51cto.com/u_15792201/5846756

相关文章

  • 11-SpringBoot2整合Vue最简入门
    vuejs入门环境搭建》1:导入文件<scripttype="text/javascript"src="js/vue.js"></script><scripttype="text/javascript"src="js/axios.js"></script>》2:准备app视......
  • 极客编程python入门-不可变对象
    不可变对象str是不变对象,而list是可变对象对于可变对象,比如list,对list进行操作,list内部的内容是会变化的,比如l=[1,2,34,56,34,78,23,12,12,34,45,657,45]l.sort()print(l)......
  • python-docx实现两个word文档的比较
    1#这个核心文件是对两个word文档进行对比的文件;2fromdocximportDocument3fromdocx.enum.textimportWD_COLOR_INDEX4importre5fromtqdmimpor......
  • 11.12小记
    上午补了昨晚做的E,F感觉E以后遇到也只能才结论,证明估计一辈子都搞不出来。F是个并查集+启发式合并,灰常好写拿了个最短解。学了一波bitset,以后暴力又可以节省时间里。......
  • Atcoder ARCaea 118 B
    我又来啦!光&对立题面小A正在调配药剂。传说中有一种最强的药剂,叫做Tempestissimo,用了$K$种药剂,标号$1\simK$。当时(由于这药剂只调配过一次)分别用了$......
  • 2022-2023-1学期 20221417 《计算机基础与程序设计》第11周学习总结
    作业信息这个作业属于哪个课程<班级的链接>(如2022-2023-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2022-2023-1计算机基础与程序设计第十一......
  • 使用Python生成直方图
    1.引言你想知道如何在Python中生成直方图吗?在本教程中,我将向大家展示如何做到这一点。数值数据的分布可以用直方图表示。直方图是数据的一种可视化表示,它使用不同高度的条......
  • 用Python把附近的足浴店都给采集了一遍,好兄弟:针不戳~
    前言嗨喽,大家好呀~这里是爱看美女的茜茜呐又到了学Python时刻~  我又来了!今天整个好玩的,你们肯定喜欢~咱们上班累了,不得好好犒劳一下自己,是吧!于是我整了一手采......
  • 全球名校AI课程库(23)| Harvard哈佛 · 基于Python/JavaScript的Web编程课程『Web Progr
    ......
  • 从新开始学Python - 各种符号与关键字2
    标识符类、变量、方法的名字统称为标识符命名规则内容限定:只能是英文、中文、数字、下划线,且数字不能用在开头大小写敏感不可使用关键词代码规范中规定使用下划线原......