Python之数据爬取&数据可视化(1),Python事件分发面试

本文介绍了使用Python进行数据爬取,以淘宝月饼销售数据为例,展示了销量前十的产品及全国地区销量分布,并进行了数据清洗、处理和可视化,揭示了非旺季期间的销售特点。
摘要由CSDN通过智能技术生成

3

销量前十产品

从单个销量前十的图中可以看到,非旺季时间排名第一的竟是月饼模具。出乎意料,排名第二的是鲜花月饼。

4

全国销量图(非旺季)

因为非旺季,月销量到2.5w的很少。只有上海地区的月销量有3.6w,而包邮省份江浙地区的销量仅有3w和5w,而四川和重庆地区的月销量只有5k和2k。

python代码

数据爬取:

代码块

# -- coding: utf-8 --

from selenium import webdriver

import time

import csv

import re

# 搜索商品,获取商品页码

def search_product(key_word):

# 定位输入框    browser.find_element_by_id(“q”).send_keys(key_word)

# 定义点击按钮,并点击

browser.find_element_by_class_name(‘btn-search’).click()

# 最大化窗口:为了方便我们扫码

browser.maximize_window()

# 等待15秒,给足时间我们扫码

time.sleep(15)

# 定位这个“页码”,获取“共100页这个文本”

page_info = browser.find_element_by_xpath(‘//div[@class=“total”]’).text

# 需要注意的是:findall()返回的是一个列表,虽然此时只有一个元素它也是一个列表。

page = re.findall(“(\d+)”,page_info)[0]

return page

# 获取数据

def get_data():

# 通过页面分析发现:所有的信息都在items节点下

items = browser.find_elements_by_xpath(‘//div[@class=“items”]/div[@class="item J_MouserOnverReq  "]’)

for item in items:

# 参数信息

pro_desc = item.find_element_by_xpath(‘.//div[@class=“row row-2 title”]/a’).text

# 价格

pro_price = item.find_element_by_xpath(‘.//strong’).text

# 付款人数

buy_num = item.find_element_by_xpath(‘.//div[@class=“deal-cnt”]’).text

# 旗舰店

shop = item.find_element_by_xpath(‘.//div[@class=“shop”]/a’).text

# 发货地

address = item.find_element_by_xpath(‘.//div[@class=“location”]’).text

#print(pro_desc, pro_price, buy_num, shop, address)

with open(‘{}.csv’.format(key_word), mode=‘a’, newline=‘’, encoding=‘utf-8-sig’) as f:

csv_writer = csv.writer(f, delimiter=‘,’)

csv_writer.writerow([pro_desc, pro_price, buy_num, shop, address])

def main():

browser.get(‘https://www.taobao.com/’)

page = search_product(key_word)

print(page)

get_data()

page_num = 1

while int(page) != page_num:

print(“*” * 100)

print(“正在爬取第{}页”.format(page_num + 1))

browser.get(‘https://s.taobao.com/search?q={}&s={}’.format(key_word, page_num*44))

browser.implicitly_wait(15)

get_data()

page_num += 1

print(“数据爬取完毕!”)

if name == ‘main’:

key_word = “月饼”

browser = webdriver.Chrome()

main()

数据处理和可视化:

代码块

# 导包

import pandas as pd

import numpy as np

import re

# 导入爬取得到的数据

df = pd.read_csv(“月饼.csv”, engine=‘python’, encoding=‘utf-8-sig’, header=None)

df.columns = [“商品名”, “价格”, “付款人数”, “店铺”, “发货地址”]

df.head(10)

# 去除重复值

df.drop_duplicates(inplace=True)

# 处理购买人数为空的记录

df[‘付款人数’]=df[‘付款人数’].replace(np.nan,‘0人付款’)

# 提取数值

df[‘num’] = [re.findall(r’(\d+.{0,1}\d*)', i)[0] for i in df[‘付款人数’]]  # 提取数值

df[‘num’] = df[‘num’].astype(‘float’)  # 转化数值型

# 提取单位(万)

df[‘unit’] = [‘’.join(re.findall(r’(万)', i)) for i in df[‘付款人数’]]  # 提取单位(万)

df[‘unit’] = df[‘unit’].apply(lambda x:10000 if x==‘万’ else 1)

# 计算销量

df[‘销量’] = df[‘num’] * df[‘unit’]

# 删除无发货地址的商品,并提取省份

df = df[df[‘发货地址’].notna()]

df[‘省份’] = df[‘发货地址’].str.split(’ ').apply(lambda x:x[0])

# 删除多余的列

df.drop([‘付款人数’, ‘发货地址’, ‘num’, ‘unit’], axis=1, inplace=True)

# 重置索引

df = df.reset_index(drop=True)

df.head(10)

#df.to_csv(‘清洗完成数据.csv’)

df1 = df.sort_values(by=“价格”, axis=0, ascending=False)

df1.iloc[:5,:]

import jieba

import jieba.analyse

txt = df[‘商品名’].str.cat(sep=‘。’)

# 添加关键词

jieba.add_word(‘粽子’, 999, ‘五芳斋’)

# 读入停用词表

stop_words = []

with open(‘stop_words.txt’, ‘r’, encoding=‘utf-8’) as f:

lines = f.readlines()

for line in lines:

stop_words.append(line.strip())

# 添加停用词

stop_words.extend([‘logo’, ‘10’, ‘100’, ‘200g’, ‘100g’, ‘140g’, ‘130g’])

# 评论字段分词处理

word_num = jieba.analyse.extract_tags(txt,

topK=100,

withWeight=True,

allowPOS=())

# 去停用词

word_num_selected = []

for i in word_num:

if i[0] not in stop_words:

word_num_selected.append(i)

key_words = pd.DataFrame(word_num_selected, columns=[‘words’,‘num’])

import pyecharts

print(pyecharts.version)

# 导入包

from pyecharts.charts import Bar

from pyecharts import options as opts

# 计算top10店铺

shop_top10 = df.groupby(‘商品名’)[‘销量’].sum().sort_values(ascending=False).head(10)

# 绘制柱形图

bar0 = Bar(init_opts=opts.InitOpts(width=‘1350px’, height=‘750px’))

bar0.add_xaxis(shop_top10.index.tolist())

bar0.add_yaxis(‘sales_num’, shop_top10.values.tolist())

bar0.set_global_opts(title_opts=opts.TitleOpts(title=‘月饼商品销量Top10’),

xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),

visualmap_opts=opts.VisualMapOpts(max_=shop_top10.values.max()))

bar0.render(“月饼商品销量Top10.html”)

from pyecharts.charts import Map

# 计算销量

province_num = df.groupby(‘省份’)[‘销量’].sum().sort_values(ascending=False)

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
img

文末有福利领取哦~

👉一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。img

👉二、Python必备开发工具

img
👉三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
img

👉 四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。(文末领读者福利)
img

👉五、Python练习题

检查学习结果。
img

👉六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
img

img

👉因篇幅有限,仅展示部分资料,这份完整版的Python全套学习资料已经上传

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

a3f9.png)

👉因篇幅有限,仅展示部分资料,这份完整版的Python全套学习资料已经上传

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

  • 24
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值