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

此处写入登录之后自己的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.5 完整代码



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

商品价格分析

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

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

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

分析商品店名称聚集

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

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”,

img
img
img

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

       # 全局设置
        .set_global_opts(
        # 设置标题
        title_opts=opts.TitleOpts(
            # 名字
            title="销售店名称饼图分析",
            # 组件距离容器左侧的位置
            pos_left="center",
            # 组件距离容器上方的像素值
            pos_top="20",

[外链图片转存中…(img-qU01AKgk-4701988983197)]
[外链图片转存中…(img-KbalcpVZ-4701988983198)]
[外链图片转存中…(img-yrabcrdj-4701988983198)]

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

  • 11
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值