在线销售数据分析–人货场三维分析角度

文章目录

  • 一、数据来源及理解
  • 二、分析思路
  • 三、数据处理
    • 数据预处理
    • 数据清洗
    • 数据转换
  • 四、数据描述性统计
  • 五、三维分析-人
    • 用户质量分析
    • 用户类别分析
    • DM(管理者)排名分析
  • 六、三维分析-货
    • 销售金额及销量分布情况
    • 商品退货率
  • 七、三维分析-场
  • 城市
  • 区域
  • 八、总结

一、数据来源及理解

此次分析数据来源于第二届Power BI 可视化大赛样例数据,共有四个表,分别为sales
,store,item,district,一共有七十万左右的数据。

二、分析思路

按照人-货-场三维分析角度进行分析,分析导图:
思维导图

三、数据处理

数据预处理

整个数据包括四张表,三十九个不同字段,但在实际分析过程中我们只用到了十五个字段,为了让数据分析更高效,所以我复制了一份并对其进行一个整合,成为一张表。

数据清洗

利用Python语言进行数据分析,开发工具有Jupyter Notebook,利用的包主要是pandas、numpy,matplotlib.pyplot。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
#coding=utf-8
file_name = 'D:\\Analysis.xlsx'
xls = pd.ExcelFile(file_name)
xs = xls.parse('salesdata',dtype='object')
plt.rcParams['font.sans-serif']=['SimHei'] #显示中文
plt.rcParams['axes.unicode_minus']=False #允许显示负数
xs.info()

数据集信息
数据总共为327047 条,包含15个特征,接下对数据进行观察并做数据清洗处理。本次数据集比较“干净”,不存在缺失值。另外有些特征的属性需要更改,例如金额及销量的数据类型。

数据转换

数据类型全为object类型,转换数据类型为数值型

xs['Sum_GrossMarginAmount']=pd.to_numeric(xs['Sum_GrossMarginAmount'], errors='coerce').fillna(0) ##数据文本型转换为数值型
xs['Sum_Regular_Sales_Dollars']=pd.to_numeric(xs['Sum_Regular_Sales_Dollars'], errors='coerce').fillna(0)
xs['Sum_Markdown_Sales_Dollars']=pd.to_numeric(xs['Sum_Markdown_Sales_Dollars'], errors='coerce').fillna(0)
xs['Sum_Regular_Sales_Units']=pd.to_numeric(xs['Sum_Regular_Sales_Units'], errors='coerce').fillna(0)
xs['Sum_Markdown_Sales_Units']=pd.to_numeric(xs['Sum_Markdown_Sales_Units'], errors='coerce').fillna(0)
xs['SellingAreaSize']=pd.to_numeric(xs['SellingAreaSize'], errors='coerce').fillna(0)

由于在本次数据集中没有明确的时间字段,所以我们在这不做时间维度的分析,如果要做时间维度的分析还需要对时间字段做一个类型转换。

四、数据描述性统计

xs[['Sum_GrossMarginAmount','Sum_Regular_Sales_Dollars','Sum_Markdown_Sales_Dollars','Sum_Regular_Sales_Units','Sum_Markdown_Sales_Units']].describe()

数据描述性统计
可以看到在销售金额中存在着负数,这可能是退货的订单,需要进行筛选。可以看出各字段的平均值都在百分之75的订单之下,表明存在了一些购买力极强的用户。我们可以将图做出来会更加明显。以’Sum_Regular_Sales_Dollars’字段为例:

plt.subplot(341)
xs['Sum_Regular_Sales_Dollars'].hist(figsize=(10,6),bins=100,color='c')
plt.subplot(342)
xs[xs['Sum_Regular_Sales_Dollars']<1000]['Sum_Regular_Sales_Dollars'].hist(figsize=(10,6),bins=10,color='c')
plt.subplot(343)
xs[xs['Sum_Regular_Sales_Dollars']>3150]['Sum_Regular_Sales_Dollars'].hist(figsize=(10,6),bins=10,color='c')
plt.subplot(344)
xs[xs['Sum_Regular_Sales_Dollars']<0]['Sum_Regular_Sales_Dollars'].hist(figsize=(10,6),bins=10,color='c')

描述性在第一张图中可以看出很明显的长尾效应,取了销售金额小于1000的数据可以看出大部分的销售金额都集中在0到250美元,另外,还存在几条销售金额大于3150美元订单。退货订单金额基本上在100美元以内,其具体原因后续可做具体分析(先找出退货的订单用户,查用户在退货之后是否有购物情况,是否为第一次购买就退货等)
将其打印出来可以看到是来自itemid为155579、及183620的订单,而其购买的原因不得而知,如果有相关的数据可以进行分析是否为异常数据。

xs[xs['Sum_Regular_Sales_Dollars']>3150]

极值

五、三维分析-人

用户质量分析

通过二八原则,去寻找关键的那20%决定性因素!

# 计算高质量用户贡献了多少份额(28倾向)
user_amount = xs.groupby('Buyer')['Sum_Regular_Sales_Dollars'].sum().sort_values(ascending=False).reset_index()
user_amount['amount_cumsum'] = user_amount['Sum_Regular_Sales_Dollars'].cumsum()
amount_total = user_amount['amount_cumsum'].max()
user_amount['percentage'] = user_amount['amount_cumsum'] / amount_total
#统计销量
user_count = xs.groupby('Buyer')['Sum_Regular_Sales_Units'].sum().sort_values(ascending=False).reset_index()
user_count['count_cumsum'] = user_count['Sum_Regular_Sales_Units'].cumsum()
count_total = user_count['count_cumsum'].max()
user_count['percentage'] = user_count['count_cumsum'] / count_total
#画图
plt.rc('font', family='simhei', size=9)
plt.subplot(221)
plt.title('零售消费额占比')
plt.ylabel("累计比率")
plt.plot(user_amount['percentage'])
plt.grid(color='#95a5a6', linestyle='--', linewidth=1, alpha=0.4)
plt.subplot(222)
plt.title('零售销量占比')
plt.ylabel("累计比率")
plt.plot(user_count['percentage'])
plt.grid(color='#95a5a6', linestyle='--', linewidth=1, alpha=0.4)
plt.show()
user_amount.head(20) 

二八用户20用户高效80额

用户类别分析

用户类别分析,看各类别用户占比分别为多少,针对不同类别推出不同的方案,提升销售额。

#用户类别分析
fig1 = plt.subplot(131)
category=xs.groupby('Category').Sum_Regular_Sales_Dollars.sum()/xs.Sum_Regular_Sales_Dollars.sum()
category.plot.pie(figsize=(12,10),autopct='%1.1f%%',shadow=True,startangle=90)
plt.title('零售分类占比')
fig2 = plt.subplot(133)
category=xs.groupby('Category').Sum_Markdown_Sales_Dollars.sum()/xs.Sum_Markdown_Sales_Dollars.sum()
category.plot.pie(figsize=(12,10),autopct='%1.1f%%',shadow=True,startangle=90)
plt.title('折扣分类占比')

类别占比

DM(管理者)排名分析

各DM管理下销量情况,按降序排列输出

order_DM = xs.groupby('DM')['Sum_Regular_Sales_Dollars'].sum().sort_values(ascending=False).plot.bar()

dm管理者

六、三维分析-货

销售金额及销量分布情况

零售销售额与数量情况,打折销售额与数量情况

plt.figure(figsize=(12,4))
plt.subplot(121)
plt.scatter(x = 'Sum_Regular_Sales_Dollars', y = 'Sum_Regular_Sales_Units',data=xs)
plt.xlabel('每笔零售订单消费金额')
plt.ylabel('每笔零售订单购买数量')
plt.subplot(122)
plt.scatter(x = 'Sum_Markdown_Sales_Dollars',y = 'Sum_Markdown_Sales_Units',data = xs) 
plt.xlabel('每位折扣消费金额')
plt.ylabel('每位折扣购买数量')
plt.show()

散点图观察散点图各点的分布发现呈现一个高度的集中,零散几个极值,符合零售行业规律,相比而言折扣消费的分布更具规律,初步估计这家店应该是按照金额数或者订单数进行一个折扣销售。

商品退货率

#零售商品退货率%
xs[xs['Sum_Regular_Sales_Dollars']<0]['Sum_Regular_Sales_Dollars'].sum()/xs['Sum_Regular_Sales_Dollars'].sum()*(-100)
#折扣商品退货率%
xs[xs['Sum_Markdown_Sales_Dollars']<0]['Sum_Markdown_Sales_Dollars'].sum()/xs['Sum_Markdown_Sales_Dollars'].sum()*(-100)

退货率
产品的加起来退货率不足1%,在能接受的范围以内,没有前后的一个退货率进行一个对比,有对比的话更能做好总结。

七、三维分析-场

城市

1)城市销售前十

#各城市零售销售排名前十
xs.groupby('City Name')['Sum_Regular_Sales_Dollars'].sum().sort_values(ascending=False).head(10)
#各城市折扣销售排名前十
xs.groupby('City Name')['Sum_Markdown_Sales_Dollars'].sum().sort_values(ascending=False).head(10)

城市排名
2)退货率排名前十的城市

#各城市零售退货率排名前十的城市
fail=xs[xs['Sum_Regular_Sales_Dollars']<0].groupby('City Name')['Sum_Regular_Sales_Dollars'].sum()/xs['Sum_Regular_Sales_Dollars'].sum()*(-100)
fail.sort_values(ascending=False).head(10)
#各城市折扣退货率排名前十的城市
fail1=xs[xs['Sum_Markdown_Sales_Dollars']<0].groupby('City Name')['Sum_Markdown_Sales_Dollars'].sum()/xs['Sum_Markdown_Sales_Dollars'].sum()*(-100)
fail1.sort_values(ascending=False).head(10)

城市退货率

区域

1)区域排名

#区域零售销售排名
xs.groupby('Territory')['Sum_Regular_Sales_Dollars'].sum().sort_values(ascending=False)
#区域折扣销售排名
xs.groupby('Territory')['Sum_Markdown_Sales_Dollars'].sum().sort_values(ascending=False)

区域排名
折扣销售跟零售销售的排名区域是一模一样的,存在很强的正向相关。符合销售规律:购买越多,所享受的折扣越多
2)商店大小与销售额

#区域大小与零售销售额
xs.groupby('SellingAreaSize')['Sum_Regular_Sales_Dollars'].sum().sort_values(ascending=False)
#区域大小与折扣销售额
xs.groupby('SellingAreaSize')['Sum_Markdown_Sales_Dollars'].sum().sort_values(ascending=False)

商店大小
销售额跟商店大小没有很明显的相关关系,猜想对销售影响更多的可能是区域
3)区域质量分析

# 计算高质量区域用户贡献了多少份额(28倾向)零售
territory_amount = xs.groupby('Territory')['Sum_Regular_Sales_Dollars'].sum().sort_values(ascending=False).reset_index()
territory_amount['amount_cumsum'] = territory_amount['Sum_Regular_Sales_Dollars'].cumsum()
amount_total = territory_amount['amount_cumsum'].max()
territory_amount['percentage'] = territory_amount['amount_cumsum'] / amount_total
#折扣
territory_amount = xs.groupby('Territory')['Sum_Markdown_Sales_Dollars'].sum().sort_values(ascending=False).reset_index()
territory_amount['amount_cumsum'] = territory_amount['Sum_Markdown_Sales_Dollars'].cumsum()
amount_total = territory_amount['amount_cumsum'].max()
territory_amount['percentage'] = territory_amount['amount_cumsum'] / amount_total
#画图
plt.rc('font', family='simhei', size=9)
plt.subplot(221)
plt.title('区域零售消费额占比')
plt.ylabel("累计比率")
plt.plot(territory_amount['percentage'])
plt.grid(color='#95a5a6', linestyle='--', linewidth=1, alpha=0.4)
plt.rc('font', family='simhei', size=9)
plt.subplot(222)
plt.title('区域折扣消费额占比')
plt.ylabel("累计比率")
plt.plot(territory_amount['percentage'])
plt.grid(color='#95a5a6', linestyle='--', linewidth=1, alpha=0.4)
territory_amount.head(20) 

区域质量分析
结合图表可知:五个区域左右贡献了80%以上的销售额,还有很多区域市场等待开发,后续可关注一下高质量区域是否市场饱和。
4)新老店分析

1)新老店分类分析
#新老店分析
fig1 = plt.subplot(131)
category=xs.groupby('Store Type').Sum_Regular_Sales_Dollars.sum()/xs.Sum_Regular_Sales_Dollars.sum()
category.plot.pie(figsize=(12,10),autopct='%1.1f%%',shadow=True,startangle=90)
plt.title('零售分类占比')
fig2 = plt.subplot(133)
category=xs.groupby('Store Type').Sum_Markdown_Sales_Dollars.sum()/xs.Sum_Markdown_Sales_Dollars.sum()
category.plot.pie(figsize=(12,10),autopct='%1.1f%%',shadow=True,startangle=90)
plt.title('折扣分类占比')
```![店类型](https://img-blog.csdnimg.cn/20191215142031860.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTg4Mjg5MA==,size_16,color_FFFFFF,t_70)
2)新老店退货率
```python
#新老店的退货率
fail1=xs[xs['Sum_Markdown_Sales_Dollars']<0].groupby('Store Type')['Sum_Markdown_Sales_Dollars'].sum()/xs['Sum_Markdown_Sales_Dollars'].sum()*(-100)
fail1.sort_values(ascending=False)

新老店退货率
新店的销售占比很小,可以大力开发一下新店的价值。新老店的退货率中,新店退货率显然更高,找一下原因,提升服务,增加粘性,思考打优质服务战还是高性价比产品。

八、总结

在本次分析中,主要利用了人货场分析思路进行分析,对退货率,用户质量等指标进行了量化分析。对数据的分布、对比进行了分析,由于缺少了时间维度无法对其进行变化、预测分析。

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

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

相关文章

LeetCode 348. 判定井字棋胜负(计数)

文章目录1. 题目2. 解题1. 题目 请在 n n 的棋盘上&#xff0c;实现一个判定井字棋&#xff08;Tic-Tac-Toe&#xff09;胜负的神器&#xff0c;判断每一次玩家落子后&#xff0c;是否有胜出的玩家。 在这个井字棋游戏中&#xff0c;会有 2 名玩家&#xff0c;他们将轮流在棋…

LeetCode 694. 不同岛屿的数量(BFS/DFS+set)

文章目录1. 题目2. 解题2.1 BFS2.2 DFS1. 题目 给定一个非空01二维数组表示的网格&#xff0c;一个岛屿由四连通&#xff08;上、下、左、右四个方向&#xff09;的 1 组成&#xff0c;你可以认为网格的四周被海水包围。 请你计算这个网格中共有多少个形状不同的岛屿。 两个岛…

数据分析-书籍整理(二)

业务书籍 《数据化管理-洞悉零售及电子商务》讲解了关于零售和电商的一些知识&#xff0c;有很多实用案例。很有借鉴意义。 《游戏数据分析实战》游戏各个阶段的数据分析&#xff0c;方法&#xff0c;数据来源&#xff0c;案例等。 《增长黑客》这本书我看了两遍&#xff0c…

LeetCode 1516. Move Sub-Tree of N-Ary Tree(DFS)

文章目录1. 题目2. 解题1. 题目 Given the root of an N-ary tree of unique values, and two nodes of the tree p and q. You should move the subtree of the node p to become a direct child of node q. If p is already a direct child of q, don’t change anything. …

空气质量指数(AQI)分析与预测

文章目录前言一、背景Ⅰ数据来源Ⅱ 数据背景Ⅲ 分析目的二、数据探索性分析Ⅰ 数据类型Ⅱ 描述性统计Ⅲ 数据预处理1.缺失值处理1&#xff09;删除缺失值2&#xff09;均值/中值填充2.异常值处理3.重复值处理三、数据分析Ⅰ空气质量排名Ⅱ 全国空气质量1.全国空气质量等级统计2…

LeetCode MySQL解题目录

已完成的 LeetCode MySQL 数据库题目。点击查看我的 LeetCode 算法解题目录。 已解决 123/123 - 简单 54 中等 51 困难 18 前置入门学习 MySQL 基本查询、条件查询、投影查询MySQL 排序、分页查询、聚合查询MySQL 多表查询、连接查询&#xff08;内连接、外连接&#xff09;…

数据分析方法--回归分析方法((SPSS建模:多元线性回归案例)

文章目录回归定义最常用回归方法一、线性回归(Linear Regression)二、逻辑回归(Logistic Regression)三、多项式回归(Polynomial Regression)四、逐步回归(Stepwise Regression)五、岭回归(Ridge Regression)六、套索回归(Lasso Regression)七、回归(ElasticNet)如何正确选择回…

LeetCode MySQL 1511. Customer Order Frequency

文章目录1. 题目2. 解题1. 题目 Table: Customers ------------------------ | Column Name | Type | ------------------------ | customer_id | int | | name | varchar | | country | varchar | ------------------------ customer_id is the p…

LeetCode MySQL 1075. 项目员工 I

文章目录1. 题目2. 解题1. 题目 项目表 Project&#xff1a; ---------------------- | Column Name | Type | ---------------------- | project_id | int | | employee_id | int | ---------------------- 主键为 (project_id, employee_id)。 employee_id 是员…

数据分析-书籍整理(一)

入门书籍 《谁说菜鸟不会数据分析》讲解了一些常见的分析技巧&#xff0c;并附带 Excel 的一些知识以及职场可使用的基础数据分析。 《MYSQL必知必会》对于有sql基础的人来说&#xff0c;可以快速复习知识点&#xff0c;小白也能学习到很多&#xff0c;不会打击自信心。我是用…

数据分析统计学基础一

文章目录数据分析方法分类1、单纯的数据加工方法2、基于数理统计的数据分析方法3、基于数据挖掘的数据分析方法4、基于大数据的数据分析方法描述性统计分析1、数据的计量尺度2、数据的集中趋势3、数据的离中趋势4、数据分布的测定正态分布a. 偏态系数b. 数据峰度c. 偏度与峰度的…

LeetCode MySQL 1435. 制作会话柱状图

文章目录1. 题目2. 解题1. 题目 表&#xff1a;Sessions ------------------------------ | Column Name | Type | ------------------------------ | session_id | int | | duration | int | ------------------------------ sessio…

SharePoint2010网站备份还原简单介绍

今天尝试了SharePoint2010网站的备份和还原&#xff0c;从网上搜一些文档看看&#xff0c;然后自己试试&#xff0c;感觉和2007的操作没什么太大的区别&#xff0c;跟大家分享下自己尝试的命令行方式和数据库的方式&#xff0c;2007自己常用的也是这两种方式。 1、 命令行的方式…

LeetCode MySQL 1211. 查询结果的质量和占比

文章目录1. 题目2. 解题1. 题目 查询表 Queries&#xff1a; ---------------------- | Column Name | Type | ---------------------- | query_name | varchar | | result | varchar | | position | int | | rating | int | ---------------------…

数据分析方法-聚类算法

文章目录一、定义二、聚类、分类区别分类三、聚类常用算法1.划分聚类 k-means、k-medoids、k-modes、k-medians、kernel k-means2.层次聚类 Agglomerative 、divisive、BIRCH、ROCK、Chameleon3.密度聚类 DBSCAN、OPTICS5.模型聚类 GMM6.图聚类 Spectral Clustering&#xff08…

Java6 WebService学习

参考了网络上中资料&#xff0c;自己学习实践了一个Java6 WebService. 首先&#xff0c;建立一个WebService: package garfield;import javax.jws.WebService;import javax.xml.ws.Endpoint;WebServicepublic class MyJ6WebService {public String SayHello(String strName) {r…

公司人员离职情况分析及预测(工具:python)

前言 目前社会上呈现出一种公司招不到人&#xff0c;大批失业人员的矛盾现象&#xff0c;且大部分公司的离职率居高不下&#xff0c;很多入职没多久就辞职&#xff0c;所花费的培训招聘等资源都浪费了。为了弄清楚公司员工离职原因&#xff0c;通过kaggle上某一家企业员工离职…

LeetCode MySQL 1241. 每个帖子的评论数

文章目录1. 题目2. 解题1. 题目 表 Submissions 结构如下&#xff1a; ------------------------- | 列名 | 类型 | ------------------------- | sub_id | int | | parent_id | int | ------------------------- 上表没有主键, 所以可能…

新浪微博数据网络舆情分析客户端软件

这是我们北邮某实验室完全自主开发的数据挖掘和分析软件&#xff0c;用于处理海量数据&#xff0c;建立从数据采集&#xff0c;整理&#xff0c;分析&#xff0c;可视化&#xff0c;存储的全部服务。目前程序正在不断开发中。将在后期发布其测试版本。 转载于:https://www.cnbl…