python大数据可视化分析淘宝商品,开专卖店不行啊_基于python的淘宝数码产品的数据分析与可视化(1)

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

https://s.taobao.com/search?q=小米手机&imgfile=&js=1&stats_click=search_radio_all%3A1&initiative_id=staobaoz_20200415&ie=utf8&sort=sale-desc&bcoffset=0&p4ppushleft=%2C44&s=0
https://s.taobao.com/search?q=小米手机&imgfile=&js=1&stats_click=search_radio_all%3A1&initiative_id=staobaoz_20200415&ie=utf8&sort=sale-desc&bcoffset=0&p4ppushleft=%2C44&s=44
https://s.taobao.com/search?q=小米手机&imgfile=&js=1&stats_click=search_radio_all%3A1&initiative_id=staobaoz_20200415&ie=utf8&sort=sale-desc&bcoffset=0&p4ppushleft=%2C44&s=88


分析得知:每个页面参请求数基本相同,只有最后一个页码参数不同,而且是规律的: *当前页面数据 (页数-1)* \*


所以当我们想要将前端页面跳转至下一页爬取数据只需要将url拼接上面逻辑


运算后的数据即可。


### 二、爬虫脚本编写


以男士衬衫商品为例子,开展的简单数据分析,其目的是了解淘宝网站线上销售男士内裤的方法和模式。通过获取到的淘宝网站男士衬衫销售数据情况,进一步分析和判断出哪个价格区间及品牌等信息更加受到网购消费者的青睐和偏好,从而给自己买一个性价比较好的衬衫。


### 1.1引入库


代码如下(局部):



-- coding: utf-8 --

import requests
import re
import pandas as pd
import time


如果上述的的库没有下载,请安装后在使用;(如果没有安装库,就会爆红)


## 1.2 获取页面信息



此处写入登录之后自己的cookies

cookie = ‘’

获取页面信息

def getHTMLText(url):
headers = {

    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'}
user_cookies = cookie
cookies = {

}

for a in user_cookies.split(';'):  # 因为cookies是字典形式,所以用spilt函数将之改为字典形式
    name, value = a.strip().split('=', 1)
    cookies[name] = value
try:
    r = requests.get(url, cookies=cookies, headers=headers, timeout=60)
    print(r.status_code)
    print(r.cookies)
    return r.text
except:
    print('获取页面信息失败')
    return ''

### 1.3 格式化页面,查找数据



格式化页面,查找数据

def parsePage(html):
list = []
try:
views_title = re.findall(‘“raw_title”:“(.?)“,“pic_url”‘, html)
print(len(views_title)) # 打印检索到数据信息的个数,如果此个数与后面的不一致,则数据信息不能加入列表
print(views_title)
views_price = re.findall(’“view_price”:”(.
?)”,“view_fee”’, html)
print(len(views_price))
print(views_price)
item_loc = re.findall(‘“item_loc”:“(.?)“,“view_sales”‘, html)
print(len(item_loc))
print(item_loc)
views_sales = re.findall(’“view_sales”:”(.
?)”,“comment_count”’, html)
print(len(views_sales))
print(views_sales)
comment_count = re.findall(‘“comment_count”:“(.?)“,“user_id”‘, html)
print(len(comment_count))
print(comment_count)
shop_name = re.findall(’“nick”:”(.
?)”,“shopcard”’, html)
print(len(shop_name))
for i in range(len(views_price)):
list.append([views_title[i], views_price[i], item_loc[i], comment_count[i], views_sales[i], shop_name[i]])
# print(list)
print(‘爬取数据成功’)
return list
except:
print(‘有数据信息不全,如某一页面中某一商品缺少地区信息’)


### 1.4 将数据存储到csv文件中



存储到csv文件中,为接下来的数据分析做准备

def save_to_file(list):
data = pd.DataFrame(list)
data.to_csv(‘F:\Github\pythonobject\taobao\商品数据.csv’, header=False, mode=‘a+’) # 用追加写入的方式


### 1.5 完整代码



-- coding: utf-8 --

import requests
import re
import pandas as pd
import time

此处写入登录之后自己的cookies

cookie = ‘’

获取页面信息

def getHTMLText(url):
headers = {

    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'}
user_cookies = cookie
cookies = {

}

for a in user_cookies.split(';'):  # 因为cookies是字典形式,所以用spilt函数将之改为字典形式
    name, value = a.strip().split('=', 1)
    cookies[name] = value
try:
    r = requests.get(url, cookies=cookies, headers=headers, timeout=60)
    print(r.status_code)
    print(r.cookies)
    return r.text
except:
    print('获取页面信息失败')
    return ''

格式化页面,查找数据

def parsePage(html):
list = []
try:
views_title = re.findall(‘“raw_title”:“(.?)“,“pic_url”‘, html)
print(len(views_title)) # 打印检索到数据信息的个数,如果此个数与后面的不一致,则数据信息不能加入列表
print(views_title)
views_price = re.findall(’“view_price”:”(.
?)”,“view_fee”’, html)
print(len(views_price))
print(views_price)
item_loc = re.findall(‘“item_loc”:“(.?)“,“view_sales”‘, html)
print(len(item_loc))
print(item_loc)
views_sales = re.findall(’“view_sales”:”(.
?)”,“comment_count”’, html)
print(len(views_sales))
print(views_sales)
comment_count = re.findall(‘“comment_count”:“(.?)“,“user_id”‘, html)
print(len(comment_count))
print(comment_count)
shop_name = re.findall(’“nick”:”(.
?)”,“shopcard”’, html)
print(len(shop_name))
for i in range(len(views_price)):
list.append([views_title[i], views_price[i], item_loc[i], comment_count[i], views_sales[i], shop_name[i]])
# print(list)
print(‘爬取数据成功’)
return list
except:
print(‘有数据信息不全,如某一页面中某一商品缺少地区信息’)

存储到csv文件中,为接下来的数据分析做准备

def save_to_file(list):
data = pd.DataFrame(list)
data.to_csv(‘F:\Github\pythonobject\taobao\商品数据.csv’, header=False, mode=‘a+’) # 用追加写入的方式

def main():
name = [[‘views_title’, ‘views_price’, ‘item_loc’, ‘comment_count’, ‘views_sales’, ‘shop_name’]]
data_name = pd.DataFrame(name)
data_name.to_csv(‘F:\Github\pythonobject\taobao\商品数据.csv’, header=False, mode=‘a+’) # 提前保存一行列名称
goods = input(‘请输入想查询的商品名称:’.strip()) # 输入想搜索的商品名称
depth = 5 # 爬取的页数
start_url = ‘https://s.taobao.com/search?q=’ + goods # 初始搜索地址
for i in range(depth):
time.sleep(3 + i)
try:
page = i + 1
print(‘正在爬取第%s页数据’ % page)
url = start_url + ‘imgfile=&js=1&stats_click=search_radio_all%3A1&initiative_id=staobaoz_20200408&ie=utf8&sort=sale-desc&bcoffset=0&p4ppushleft=%2C44&s=’ + str(
44 * i)
html = getHTMLText(url)
# print(html)
list = parsePage(html)
save_to_file(list)
except:
print(‘数据没保存成功’)

if name == ‘main’:
main()


运行项目,输入男士衬衫,回车,自动爬取数据


![img](https://img-blog.csdnimg.cn/img_convert/26c310f1f6491e299424033c04416bcc.png)


保存的商品信息csv文件:


![img](https://img-blog.csdnimg.cn/img_convert/5b7ea2c3310898d1352c801cb3d3ea46.jpeg)


### 三、数据可视化实现


数据可视化说白了,也就是通过数据分析,将得出的结果用图表的形式展示出来,图表的展示无非就是k,v的方式实现,所以我们可以借助pandas,将海量的数据分析出来,并且将分析后的数据处理成可视化表所识别的数据格式就可以实现数据可视化。我们这里可视化依赖于pyecharts和matplotlib。


### 1.1 引入依赖


没有以下库的请下载安装



import pandas as pd
import operator
from matplotlib import pyplot as plt
import matplotlib as mpl
from pyecharts.charts import Bar, Pie

用于设值全局配置和系列配置

from pyecharts import options as opts
mpl.rcParams[‘font.sans-serif’] = [‘KaiTi’] # 画图时显示中文
mpl.rcParams[‘font.serif’] = [‘KaiTi’]
data = pd.read_csv(‘F:\Github\pythonobject\taobao\商品数据.csv’, encoding=‘utf-8’)


### 1.2 价格分布直方图实现逻辑



商品价格分析

def priceshow():
print(data[‘views_price’].describe())
# 价格分布直方图
plt.figure(figsize=(16, 9)) # 这里是图片长宽比例
plt.hist(data[‘views_price’], bins=30, alpha=0.4, color=‘orange’)
plt.title(‘价格频数分布直方图’)
plt.xlabel(‘价格’)
plt.ylabel(‘频数’)
plt.savefig(‘价格分布直方图.png’)


![img](https://img-blog.csdnimg.cn/img_convert/cf0f5f2744fe738a48fcc9b1f3f57a48.png)


### 1.3 商品销售地分析实现逻辑



分析商品的数据(商品销售地分析)

def shop_localdatashow():
# 销售地分布
group_data = list(data.groupby(‘item_loc’))
loc_num = {
}
for i in range(len(group_data)):
loc_num[group_data[i][0]] = len(group_data[i][1])
print(loc_num)
plt.figure(figsize=(30, 10))
plt.title(‘销售地折线图’)
plt.scatter(list(loc_num.keys()), list(loc_num.values()), color=‘r’)
plt.plot(list(loc_num.keys()), list(loc_num.values()))
plt.xlabel(‘销售地区’)
plt.ylabel(‘个数’)
plt.savefig(‘销售地.png’)
sorted_loc_num = sorted(loc_num.items(), key=operator.itemgetter(1), reverse=True) # 排序
loc_num_10 = sorted_loc_num[:10] # 取前10
loc_10 = []
num_10 = []
for i in range(10):
loc_10.append(loc_num_10[i][0])
num_10.append(loc_num_10[i][1])
plt.figure(figsize=(16, 9))
plt.title(‘销售地TOP10’)
plt.xlabel(‘销售地区’)
plt.ylabel(‘个数’)
plt.bar(loc_10, num_10, facecolor=‘lightskyblue’, edgecolor=‘white’)
plt.savefig(‘销售地TOP10.png’)


![img](https://img-blog.csdnimg.cn/img_convert/f515b3f886bc3b83c4a6f699fcaaa634.jpeg)


top10生产地表


![img](https://img-blog.csdnimg.cn/img_convert/47d1a90dbecac9b794d04a65fbb67a93.jpeg)


### 1.4 商品店名称聚集实现逻辑


数据获取,通过pyecharts展示数据



分析商品店名称聚集

def shop_name():
# 店名称分析
df1 = data[‘shop_name’].str[-3:]
shop = list(df1.groupby(df1))
# print(shop)
shop_num = {
}
for i in range(len(shop)):
shop_num[shop[i][0]] = len(shop[i][1])
shop_num[‘其他’] =176 - shop_num[‘专卖店’] - shop_num[‘专营店’] - shop_num[‘旗舰店’]
data1 = sorted(shop_num.values(), reverse=True)[:4]
# print(shop_num)
label = [‘旗舰店’, ‘专卖店’, ‘其他’, ‘专营店’] # 定义饼图的标签,标签是列表
# explode = [0.01, 0.01, 0.01, 0.01] # 设定各项距离圆心n个半径
# attr = [“衬衫”, “羊毛衫”, “雪纺衫”, “裤子”, “高跟鞋”, “袜子”]
v = [shop_num[‘旗舰店’], shop_num[‘专卖店’], shop_num[‘其他’], shop_num[‘专卖店’]]
arr = [label, v]
return arr


这里注意:


* shop\_num[‘其他’] =176 - shop\_num[‘专卖店’] - shop\_num[‘专营店’] - shop\_num[‘旗舰店’]
* 176是指我爬出了多少条数据信息,文件第一行是表头,不算在内。
* 


### 销售店名称饼图



def text(x, y):
# 饼图用的数据格式是[(key1,value1),(key2,value2)],所以先使用 zip函数将二者进行组合
data_pair = [list(z) for z in zip(x, y)]
(
# 初始化配置项,内部可设置颜色
Pie(init_opts=opts.InitOpts(bg_color=“#2c343c”))
.add(
# 系列名称,即该饼图的名称
series_name=“销售店名称饼图分析”,
# 系列数据项,格式为[(key1,value1),(key2,value2)]
data_pair=data_pair,
# 通过半径区分数据大小 “radius” 和 “area” 两种
rosetype=“radius”,
# 饼图的半径,设置成默认百分比,相对于容器高宽中较小的一项的一半
radius=“60%”,
# 饼图的圆心,第一项是相对于容器的宽度,第二项是相对于容器的高度
center=[“50%”, “50%”],
# 标签配置项
label_opts=opts.LabelOpts(is_show=False, position=“center”),
)
# 全局设置
.set_global_opts(
# 设置标题
title_opts=opts.TitleOpts(
# 名字
title=“销售店名称饼图分析”,
# 组件距离容器左侧的位置
pos_left=“center”,
# 组件距离容器上方的像素值
pos_top=“20”,
# 设置标题颜色
title_textstyle_opts=opts.TextStyleOpts(color=“#ffffff”),
),
# 图例配置项,参数 是否显示图里组件
legend_opts=opts.LegendOpts(is_show=False),
)
# 系列设置
.set_series_opts(
tooltip_opts=opts.TooltipOpts(
trigger=“item”, formatter=“{a}
{b}: {c} ({d}%)”
),
# 设置标签颜色
label_opts=opts.LabelOpts(color=“rgba(255, 255, 255, 0.4)”),
)
.render(“销售店名称饼图分析.html”)
)


![img](https://img-blog.csdnimg.cn/img_convert/3721ca2f8069ad4963ee6ce560a7bfdb.png)


通过分析,旗舰店的商户占比较大,所以大部分用户都是在旗舰店购买的衣服。



**(1)Python所有方向的学习路线(新版)**  

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

最近我才对这些路线做了一下新的更新,知识体系更全面了。



![在这里插入图片描述](https://img-blog.csdnimg.cn/1f807758e039481fa866130abf71d796.png#pic_center)



**(2)Python学习视频**



包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。

![在这里插入图片描述](https://img-blog.csdnimg.cn/d66e3ad5592f4cdcb197de0dc0438ec5.png#pic_center)



**(3)100多个练手项目**

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。

![在这里插入图片描述](https://img-blog.csdnimg.cn/f5aeb4050ab547cf90b1a028d1aacb1d.png#pic_center)




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值