#导入第三方库

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import datetime
import warnings
import re
from datetime import datetime
from pyecharts.charts import Bar,Line,Map,Page,Pie
from pyecharts import options as opts
from pyecharts.globals import SymbolType
#直接显示图形
%matplotlib inline
#设置中文编码和负号的正常显示
plt.rcParams['font.family'] = ['sans-serif']
plt.rcParams['font.sans-serif'] = ['SimHei']
warnings.filterwarnings('ignore')

1 数据导入,清洗

1 数据导入,清洗

df=pd.read_csv(r'D:\搜狗高速下载\电子产品销售分析.csv',engine='python',encoding='UTF-8')
df.head()


字段介绍:

Unnamed: 行号

event_time:下单时间

order_id:订单编号

product_id:产品标号

category_id :类别编号

category_code :类别

brand :品牌

price :价格

user_id :用户编号

age :年龄

sex :性别

local:省份

1.1查看数据重复情况

df.duplicated().sum()

结果确认数据无重复

1.2查看数据缺失情况

df.isnull().sum()/len(df)

df.isnull().sum()


有两列中有数据缺失值,类别列缺失129370条,品牌列缺失27224条,这两列数值缺失对店铺销售情况的分析和用户消费行为的分析没主要影响,但是其他数据有重要影响,所以这两列缺失值由missing填充。

df.fillna('missing',inplace=True) df.isnull().sum()

1.3产看数据整体状况

df.info()


将event_time转换为时间格式

df['event_time']=pd.to_datetime(df['event_time'])
df.dtypes

1.4数据拆分

df['Month']=df['event_time'].dt.month
df['Day']=df['event_time'].dt.day
df['Dayofweek']=df['event_time'].dt.dayofweek
df['Hour']=df['event_time'].dt.hour
df.head()

2 探索性数据分析

2.1 每月销售金额

# 创建画布
plt.figure(figsize=(6,3))
df[df['price']>0].groupby('Month')['price'].sum().plot()
plt.title('每月销售金额')
plt.xlabel('月份')
plt.ylabel('销售额')
plt.xticks(list(np.arange(14)))
#添加网格线
plt.grid(linestyle='dashed')
plt.show()

2.2 每月成交金额

# 创建画布
plt.figure(figsize=(6,3))
df.groupby('Month')['price'].sum().plot()
plt.title('每月成交金额')
plt.xlabel('月份')
plt.ylabel('成交金额')
plt.xticks(list(np.arange(14)))
#添加网格线
plt.grid(linestyle='dashed')
plt.show()

2.3 每月消费人数

plt.figure(figsize=(6,3))
df.groupby('Month')['user_id'].nunique().plot()
plt.title('每月消费人数')
plt.xlabel('月份')
plt.ylabel('消费人数')
plt.xticks(list(np.arange(14)))
#添加网格线
plt.grid(linestyle='dashed')
plt.show()


每月消费人数1月到8月呈上升趋势,8到11月呈现下降趋势,由两个高峰期,第一在5月份,第二个高峰期在6月到9月份,推测,可能是五一小长假、暑假和开学季引起了消费人数的上升。

2.4 每月订单数量

df.groupby('Month')['order_id'].nunique().plot()
plt.title('每月订单数')
plt.xlabel('月份')
plt.ylabel('订单个数')
plt.xticks(list(np.arange(14)))
#添加网格线
plt.grid(linestyle='dashed')
plt.show()


订单数量有三个小高峰,分别在5月,8月,19月,可能与五一小长假,开学季,十一小长假有关。

2.5 每月客单价

cost=df.groupby('Month')['price'].sum()
user_cnt=df.groupby('Month')['order_id'].nunique()
(cost/user_cnt).plot(c='red')
plt.title('每月客单价')
plt.xlabel('月份')
plt.ylabel('客单价')
plt.xticks(list(np.arange(14)))
#添加网格线
plt.grid(linestyle='dashed')
plt.show()


客单价由2个小高峰,分布在3月和8月,8月份的客单价最高,说明8月份的需求量最高,客单价、订单数量达到顶峰,每年八月份是店铺全年营收的关键期,店铺要提前准备,保证货源供应,满足客户需求量。

1、销售金额和成交金额曲线很相似,意味着销售金额约等于成交金额。

2、月订单数量、月消费人数、月成交金额、月销售额、月客单价趋势相似,在五月份有个小高峰,在八月份是最高峰,销售情况最好的月份集中在7-9月份。店铺可以在1-4月份减少营业人员,5-11月增加营业人员,应对销售高峰期。

3、店铺销售高峰估计和五一小长假、暑假、开学季、十一小长假有关,店铺应该在这几个关键的节点,提前布局,打造竞品,加大库存量,保证货源充足。

2.6 不同省份用户数量

df[df['price']>0].groupby(['local'])['user_id'].nunique().sort_values().plot.barh()
plt.title('不同省份用户数量')
plt.xlabel('用户数量')
plt.ylabel('省份')
#添加网格线
plt.grid(linestyle='dashed')
plt.show()

map1 = Map()
map1.add("",[list(i) for i in zip(local.index.tolist(),local.values.tolist())],maptype='china')
map1.set_global_opts(title_opts = opts.TitleOpts(title='不同省份用户数量'),visualmap_opts = opts.VisualMapOpts(max_=150000)
)
map1.render_notebook()

2.7 不同省份订单数量

province_order_cnt=df.groupby('local')['order_id'].nunique()
province_order_cnt.sort_values().plot(kind='barh')
plt.title('不同省份订单数量')
plt.xlabel('订单数量')
plt.ylabel('省份')
#添加网格线
plt.grid(linestyle='dashed')
plt.show()

2.8 不同省份成交金额

province_price_sum=df.groupby('local')['price'].sum()
province_price_sum.sort_values().plot(kind='barh')
plt.title('不同省份成交金额')
plt.xlabel('成交金额')
plt.ylabel('省份')
#添加网格线
plt.grid(linestyle='dashed')
plt.show()


1、北上广的用户数量、订单数量、成交金额都稳居前三。

2、湖南的客户数量,订单数仅次于北上广,潜力巨大,可以考虑加大宣传,增加客户数量。进而提升营业额。

2.9 下单星期分布

plt.figure()
df[df['price']>0].groupby('Dayofweek')['order_id'].nunique().plot.bar()
plt.xticks(range(7),['周一','周二','周三','周四','周五','周六','周日'],rotation=45)
plt.xlabel('星期')
plt.ylabel('订单数')
plt.grid(linestyle='dashed')
plt.title('订单数随星期变化',fontsize=15)
plt.show()


周一到周五订单数维持稳定,周六是订单数量最高,周日次之。

2.10 下单时间分布

plt.figure()
df[df['price']>0].groupby('Hour')['order_id'].nunique().plot()
plt.title('订单随小时数变化')
plt.xticks(range(25))
plt.xlabel('小时')
plt.ylabel('订单数')
plt.grid(linestyle='dashed')


订单集中在早晨,5点到13点是消费高峰期,这段时间要注意维持好网站的稳定性。

2.11未完成订单分析

df[df['price']<=0].shape

未完成支付的订单只有39单,对比完成支付订单可忽略不计,因此不做未完成订单数、订单金额的统计。

3 用户消费行为分析

3.1 用户消费次数

df[df['price']>0].groupby('user_id').agg({'order_id':'nunique','price':'sum'}).describe()


1、超过一半的用户消费了两次,甚至有用户消费了666次,猜测是批发商或企业用户。

2、客户平均消费金额是1252.4,标准差是4205.9,用户平均消费金额大于75分位数,存在高额消费用户。

3.2 用户消费金额

#消费次数与消费金额的关系
plt.figure()
plt.scatter(x=df[df['price']>0].groupby('user_id')['order_id'].nunique(),y=df[df['price']>0].groupby('user_id')['price'].sum())
plt.xlabel('消费次数')
plt.ylabel('消费金额')
plt.title('消费次数与消费金额关系',fontsize=15)
plt.show()


消费次数和消费金额存在较强的相关性,用户消费次数越大,消费金额越大,可以引导用户多次消费。

3.3 用户消费周期

purchase_time=df[df['price']>0].groupby('user_id').apply(lambda x:x['event_time']-x['event_time'].shift()).dt.days
purchase_time[purchase_time>0].describe()


至少消费两次的用户有一半是9天,75%的消费者消费金额在一个月,可以在8天、29天两个时间点对用户进行推送和提醒

3.4 复购率

复购率定义:一个月内,购买两次以上次数/当月客户数量

pivoted_counts=df[df['price']>0].pivot_table(index='user_id',columns='Month',values='order_id',aggfunc='nunique').fillna(0)
pivoted_counts.head(5)

pivoted_counts_transf = pivoted_counts.applymap(lambda x: 1 if x>1 else np.NaN if x==0 else 0)
(pivoted_counts_transf.sum()/pivoted_counts_transf.count()).plot(kind='bar')
plt.show()


复购率3月、5月、10月有三个小高峰,其中10月份复购率最高,从6月开始到10月复购率一直保持增长。一直保持较高的复购率。其中三个小高峰估计和清明小长假、五一小长假、十一小长假有关。

4 消费人群分层情况

4.1 按性别分析

df['sex'].value_counts().plot.pie(figsize=(5,5),autopct='%.2f%%')
plt.title('男女占比',size=15)
plt.show()


消费人群男女占比几乎是1:1的情况。

4.2 按年龄段分析

df['age'].describe()

#对年龄分段分析
bins=[10,20,30,40,50]
df['age_box'] = pd.cut(df['age'],bins,labels=['10-20','20-30','30-40','40-50'])
age_box = df['age_box'].value_counts()
age_box

plt.figure()
plt.bar(age_box.index,age_box.values,width=0.5)
plt.ylabel('购买数量',size=12)
plt.xlabel('年龄分段',size=12)
plt.xticks(size=12)
plt.yticks(size=12)
for a,b in zip(age_box.index,age_box.values):plt.text(a,b+500,"%d"%b,ha='center',size=12)
plt.grid()
plt.show()


40-50岁的人群是购买主力,20-20岁,30-40岁的购买情况差距不大,10-20岁最少,主要和人群的购买力有关。

4.3 按喜好品牌分析

df_brand = df['brand'].value_counts().head(10)
df_brand

plt.figure(figsize=(16,5))
plt.bar(range(len(df_brand)),df_brand.values)
# df_brand.plot(kind='bar')
plt.xticks(range(len(df_brand)),list(df_brand.index),size=16)
plt.yticks(size=16)
plt.xlabel("品牌名称",size=12)
plt.ylabel("购买数量",size=12)
plt.title('品牌名称与购买数量的情况',size=28)
plt.show()

最受欢迎的品牌是samsung、apple、ava(由于部分手机品牌信息缺失用missing代替,missing可能包含很多品牌。所以最喜欢的品牌忽略missing)。

df[df['brand'].isin(df_brand.index)].groupby('sex')['price'].describe()


男性和女性对价格的在价格的75分位及以下消费情况一致,但是男性对高价格的产品的消费能力远超女性。

4.4 价格分析

df[df['price']>0].price.describe()


75%的人群的购买价格是393,说明75%的人群购买力低,后25%的人群对高价格产品的购买力强。

df['price'].quantile([0,0.25,0.5,0.75,1]).tolist() df['price_box'] = pd.cut(df['price'],df['price'].quantile([0,0.25,0.5,0.75,1]).tolist(),labels=['0.02-23.13','23.13-87.94','87.94-277.75','277.75-18328.68'])
df['price_box'].value_counts()


把价格分为四层,每层的购买人数大致相当。

5 结论

1、销售金额、订单量、消费人数、客单价在清明小长假、五一小长假、暑假、开学季、十一小长假,几个假期节点表现不错,尤其是开学季(八-九月)的情况最好,在几个关键的节点开始前,店铺一定要提前储备库存,保证货源。

2、北上广销售金额、订单量、消费人数、客单价都优于其他省份,湖南省消费人数少,但是客单价、订单量都表现优异,湖南省潜力巨大,因此要加大对湖南省的宣传力度,增加湖南省的消费人数。

3、75%的消费人群购买力不高,对30岁以下的人群主要推荐亲民价格的商品。

4、40-50岁的人群购买力高,而且男性对高价格的商品购买力强,因此给40-50岁的男性推荐高价格的商品。

5、多数用户至少消费了两次,且消费金额与购物次数有较强的正相关,用户消费次数越多销售额越大。可在8天、28天对用户进行召回,引导客户消费。

6、订单集中在早晨,8点到13点是消费高峰期,这段时间要注意维持好网站的稳定性。

7、店铺可以在1-4月份减少营业人员,5-11月增加营业人员,应对销售高峰期。

Python数据分析_电商数据分析报告相关推荐

  1. python电商_电商数据分析(python)

    一.背景及目的 从多维度对某平台2016年电商数据进行分析,总结销售规律,为来年销售计划做准备,指导之后的产品销售. 二.理解数据 三.提出分析思路 四.数据清洗 此部分请见我之前写的文章:电商数据分 ...

  2. python数据分析与数据化运营_电商数据分析与数据化运营.pdf

    作 者 :刘振华 出版发行 : 北京:机械工业出版社 , 2018.06 ISBN号 :978-7-111-59819-0 页 数 : 194 丛书名 : 数据分析与决策技术丛书 原书定价 : 69. ...

  3. 账龄分析表excel模板_电商数据分析统计模板工作表

    目录:/电商运营统计数据表格 [39.4M]       ┣━━"数据化运营"之"运营专员是如何蜕变的?".doc [74K]       ┣━━[大促]大促成 ...

  4. python爬虫学习:电商数据分析

    六月 北京 | 高性能计算之GPU CUDA培训 6月22-24日三天密集式学习  快速带你入门阅读全文> 正文共769,11图,预计阅读时间6分钟. 通常我们在使用爬虫的时候会爬取很多数据,而 ...

  5. 电商数据分析方案和BI强强联合,一站式做分析

    搭建一个电商大数据分析平台需要哪些条件?总的来说需要一套满足电商数据分析需求的方案,一个能够提供强大数据计算分析功能和数据可视化图表的平台,比如电商数据分析方案和奥威BI软件这样的组合. 电商数据分析 ...

  6. 电商数据分析常用报告指标

    大家好,我是小五???? 很多初入行的小伙伴们,学习了一堆的数据分析工具,如excel.sql.python.spss.r.tableau等. 工具用的很溜,但是对业务指标却不知情,面试的时候技术笔试 ...

  7. 简要讨论python对于1688的关键字搜索、商品详情在电商运营大数据分析、电商选品、竞品分析上的帮助

    目录 1688商品详情简要描述 1688商品详情请求URL 请求方式 参数 关键信息 淘宝天猫以及1688.京东.拼多多平台不断地在改变人们的消费习惯,人们从传统购物模式不断走向线上模式,作为电商行业 ...

  8. 电商数据分析案例 与 职责要求

    一.数据分析的流程.数据分析的流程主要分为六步骤, 遵循这种方法,一个完整的数据分析项目就出来了. (1)明确分析目的:我们接到一个分析任务,首先要弄清楚我们分析的对象是什么,要达成怎样的目的,不能陷 ...

  9. Amazon电商数据分析——数据获取

    最近一段时间主要重心在Amazon电商数据分析上,这是一个偏数据分析和可视化的项目.具体来说就是先获取Amazon的商品数据,数据清洗和持久化存储后作为我们自己的数据源.分析模块和可视化模块基于数据进 ...

最新文章

  1. 阿里云系列——3.企业网站备案步骤---2018-1-4
  2. 内存溢出分析之工具篇
  3. 连接mongodb,kafka异步处理代码
  4. 芒果TV会员,月卡最低9.9元,年卡最低128元!
  5. Netty简单样例分析[转]
  6. 10 mins 搞懂“倒排索引”
  7. java des 加密 字符串_Java使用DES加密字符串
  8. linux 常见开机故障解决办法
  9. 简析语音识别技术的工作原理
  10. 【编程珠玑】读书笔记 第五章 编程小事
  11. AOP与自定义注解与反射
  12. docker image 重命名
  13. 分子量(Molar Mass, ACM/ICPC Seoul 2007, UVa1586)
  14. AopAutoConfiguration matched: - @ConditionalOnProperty (spring.aop.auto=true) matched (OnPrope.
  15. 微信公共平台OAuth接口消息接口服务中间件-wechat-oauth
  16. 「JAVA」通过抢气球案例,来梳理线程基础知识
  17. 电脑安装虚拟机网络适配器上面没有虚拟机的网络
  18. 2020语数英小学初中课程百度云学而思Python笔记
  19. 深入学习Gremlin(5):查询路径path
  20. 九龙证券|动力锂离子电池的能量密度可达多少?

热门文章

  1. 【测控电路】信号分离电路 二阶滤波器 RC滤波电路
  2. electron-vue通过配置文件设置baseUrl
  3. matlab怎么调用filter函数,如何在matlab中建立和调用filter函数
  4. AnyviewC编程作业系统——支持程序可视化运行、调试和测评
  5. 修复自定义标题word题注错误:错误,文档中没有指定样式的文字以及编号无法随章节变化问题
  6. 技术博客那些事儿-如何写好博客
  7. explicit关键字的作用
  8. PPT修改幻灯片大小
  9. 应广单片机例程EERPOM页写中一个BUG
  10. 【UML】— 用例图