通过一个简单的电商零售数据集,了解数据分析流程
目录
数据分析流程
1.数据分析真实项目流程
2.数据分析方法
3.零售消费数据数据集介绍
4.分析内容
明确分析的目的
案例分析实战
1理解数据
2数据清洗
3数据分析和可视化
1.购买商品前十的国家是?
2.交易额前十的国家是?
3.哪些月份销售较佳?
4.客单价多少?
5.用户消费行为分析
数据分析流程
本文通过对一个简单的电商零售数据案例进行粗略分析,介绍做数据分析时的项目流程。(jupyter notebook)
完整项目文件:https://download.csdn.net/download/W_H_M_2018/12338118
1.数据分析真实项目流程
- 明确问题:明确问题是数据分析中的第一步,必须民却数据分析的真实需求
- 理解数据:数据获取和数据探索
- 数据清洗:一个数据分析项目大部分时间花在数据清洗上。
- 数据分析和可视化:对清洗后的数据进行分析,并且通过可视化展示出结果
- 结论和建议:对结果进行解读,得出有价值的结论且提出相关建议
2.数据分析方法
- 常用统计方法,例如计算常用统计量和构建相关指标
- 图表法,通过各种图形结合来展示数据里面的信息
- 机器学习算法,对于复杂的分析,会涉及到模型构建
3.零售消费数据数据集介绍
数据集下载地址:https://download.csdn.net/download/W_H_M_2018/12337579
该数据来源于kaggle,是一家注册在英国的电子商务网站的2010年12月份-2011年12月份之间的交易数据该公司主要销售独特的全天候礼品,大部分出售对象是批发商。
数据包含541910行,8个字段,字段内容为:
- InvoiceNo: 订单编号,每笔交易有6个整数,退货订单编号开头有字母’C’。
- StockCode: 产品编号,由5个整数组成。
- Description: 产品描述。
- Quantity: 产品数量,有负号的表示退货
- InvoiceDate: 订单日期和时间。
- UnitPrice: 单价(英镑),单位产品的价格。
- CustomerID:客户编号,每个客户编号由5位数字组成。
- Country: 国家的名称,每个客户所在国家/地区的名称。
4.分析内容
明确分析的目的
- 购买商品前十的国家是?
- 交易额前十的国家是?
- 哪些月份销售较佳?
- 客单价多少?
- 用户消费行为分析
案例分析实战
1理解数据
import pandas as pd
import matplotlib.pyplot as plt
import os
import numpy as npimport plotly as py
import plotly.graph_objs as go
py.offline.init_notebook_mode()
pyplot = py.offline.iplotos.chdir(r'C:\Users\W\Desktop')online_data = pd.read_csv('data.csv',encoding = 'ISO-8859-1',dtype = {'CustomerID':str})
online_data.head()
online_data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 541909 entries, 0 to 541908
Data columns (total 8 columns):
InvoiceNo 541909 non-null object
StockCode 541909 non-null object
Description 540455 non-null object
Quantity 541909 non-null int64
InvoiceDate 541909 non-null object
UnitPrice 541909 non-null float64
CustomerID 406829 non-null object
Country 541909 non-null object
dtypes: float64(1), int64(1), object(6)
memory usage: 33.1+ MB
查看退货订单
online_data[online_data['InvoiceNo'].str[0]=='C']
2数据清洗
CustomerID 缺失率较高
# 数据缺失率
online_data.apply(lambda x:sum(x.isnull())/len(x),axis=0)
InvoiceNo 0.000000
StockCode 0.000000
Description 0.002683
Quantity 0.000000
InvoiceDate 0.000000
UnitPrice 0.000000
CustomerID 0.249267
Country 0.000000
dtype: float64
删除带有空值的行
# 防止修改df1对online_data造成修改,使用copy对数据做一份拷贝
df1 = online_data.dropna(how='any').copy()df1.head()
# 将订单日期由字符串转换为标准日期格式
# errors = 'coerce' 错误转换为缺失值(容错处理)
df1['InvoiceDate'] = pd.to_datetime(df1['InvoiceDate'],errors = 'coerce')
# 提取日期部分
df1['InvoiceDate'] = df1['InvoiceDate'].dt.date
df1.head()
# 再次转换日期格式 object->datetime64[ns]
# df1['InvoiceDate'] = pd.to_datetime(df1['InvoiceDate'],errors = 'coerce')
df1.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 406829 entries, 0 to 541908
Data columns (total 8 columns):
InvoiceNo 406829 non-null object
StockCode 406829 non-null object
Description 406829 non-null object
Quantity 406829 non-null int64
InvoiceDate 406829 non-null object
UnitPrice 406829 non-null float64
CustomerID 406829 non-null object
Country 406829 non-null object
dtypes: float64(1), int64(1), object(6)
memory usage: 27.9+ MB
销售金额
df1['Price'] = df1.apply(lambda x:x[3]*x[5],axis=1)
df1.head()
3数据分析和可视化
1.购买商品前十的国家是?
quantity_first_10 = df1[df1['Quantity']>0].groupby('Country').sum()['Quantity'].sort_values(ascending=False).head(10)
print(quantity_first_10)
Country
United Kingdom 4269472
Netherlands 200937
EIRE 140525
Germany 119263
France 111472
Australia 84209
Sweden 36083
Switzerland 30083
Spain 27951
Japan 26016
Name: Quantity, dtype: int64
trace_basic = [go.Bar(x = quantity_first_10.index.tolist(), y = quantity_first_10.values.tolist(),marker = dict(color = 'red'),opacity = .5)]
layout = go.Layout(title = '购买商品前十的国家',xaxis = dict(title='国家'))
figure_basic = go.Figure(data = trace_basic,layout = layout)
pyplot(figure_basic)
2.交易额前十的国家是?
price_first_10 = df1[df1['Quantity']>0].groupby('Country').sum()['Price'].sort_values(ascending=False).head(10)
print(quantity_first_10)
Country
United Kingdom 4269472
Netherlands 200937
EIRE 140525
Germany 119263
France 111472
Australia 84209
Sweden 36083
Switzerland 30083
Spain 27951
Japan 26016
Name: Quantity, dtype: int64
trace_basic = [go.Bar(x = price_first_10.index.tolist(), y = price_first_10.values.tolist(),marker = dict(color = 'red'),opacity = .5)]
layout = go.Layout(title = '交易额前十的国家',xaxis = dict(title='国家'))
figure_basic = go.Figure(data = trace_basic,layout = layout)
pyplot(figure_basic)
3.哪些月份销售较佳?
df1.head()
df1['month'] = pd.to_datetime(df1['InvoiceDate'],errors = 'coerce').dt.monthdf1.head()
month_quantity = df1[df1['Quantity']>0].groupby('month').sum()['Quantity'].sort_values(ascending=False)
print(month_quantity)
month
11 681888
12 599693
10 593908
9 544899
8 398938
5 373685
7 369432
6 363699
1 349147
3 348544
4 292225
2 265638
Name: Quantity, dtype: int64
seaborn 绘图更简便
import seaborn as sns
sns.set(style = 'darkgrid',context='notebook',font_scale=1.2)month_quantity.plot(kind='bar')
plt.xticks(rotation=45) #标签旋转45
4.客单价多少?
三种维度
sumPrice = df1[df1['Quantity']>0]['Price'].sum()
sumPrice
8911407.904
1.按每次订单
#订单有重复 未去重
sum_InvoiceNo = df1[df1['Quantity']>0]['InvoiceNo'].count()
sum_InvoiceNo
397924
avgPrice = sumPrice/sum_InvoiceNo
avgPrice
22.394748504739596
2.按每个订单
# 去除重复订单号
sum_InvoiceNo = df1[df1['Quantity']>0]['InvoiceNo'].drop_duplicates().count()
sum_InvoiceNo
18536
avgPrice = sumPrice/sum_InvoiceNo
avgPrice
480.7621873111782
3.按每个客户
# 客单价
sum_CustomerID = df1[df1['Quantity']>0]['CustomerID'].drop_duplicates().count()
sum_CustomerID
4339
avgPrice = sumPrice/sum_CustomerID
avgPrice
2053.7930177460244
5.用户消费行为分析
customer = df1[df1['Quantity']>0].groupby('CustomerID').agg({'InvoiceNo':'nunique','Quantity':np.sum,'Price':np.sum})
customer
customer.describe()
结论和建议
- 用户平均消费4次,有的客户甚至消费高达210次,是产品的忠诚客户
- 用户平均消费金额为2053元,而75%的用户消费金额只有1661,可见,有些用户消费金额较大,属于非常有价值的用户,需要重点保持关注
- 用户购买产品数量平均高达1194件,由于销售对象主要是批发商,算是正常的数量数
通过一个简单的电商零售数据集,了解数据分析流程相关推荐
- 初识javaWeb:纯JSP+CSS+JS构建一个简单的电商平台
github地址:https://github.com/yaodebian/GoGoLe 初识java web,想在后端用java有一技之长.注:以下仅是自己的一个程序记录. 首先java web的动 ...
- C#队列Queue实现一个简单的电商网站秒杀程序
电商的秒杀和抢购,对程序员来说,都不是一个陌生的东西.然而,从技术的角度来说,这对于Web系统是一个巨大的考验.当一个Web系统,在一秒钟内收到数以万计甚至更多请求时,系统的优化和稳定至关重要. 我们 ...
- 一个简单的电商网站秒杀程序的实现
年关将至,各大电商网站火拼.沉迷于XXX网站前XX名免单,却百试不得其套路. 恰好刚好接触了selenium2.0,于是决定写一个自动抢购小程序. 1,首先是搭建selenium2.0环境. < ...
- html+css+js实现一个简单的电商商城首页
文章目录 2021.05.17更新 2020.11.24更新 声明:慕课网学习时的web大作业,题目慕课网老师给出,总算是成功实现. 1. 静态网页源码 1.1 index.html: 1.2 ind ...
- 如何构建一个好的电商搜索引擎?
分享嘉宾:邢少敏 第四范式 架构师 编辑整理:刘员京 出品平台:DataFunTalk 导读:机器学习算法的不断进步,搜索引擎巧妙的 ...
- 【Elasticsearch】如何构建一个好的电商搜索引擎?
1.概述 转载:https://mp.weixin.qq.com/s/eLhPMI38miBWlWxuMPv-2A 建议看原文,这个是防丢失 转载这篇文章的原因是,这篇文章详细的解释了如何做一个电商搜 ...
- Gavin老师Transformer直播课感悟 - Rasa项目实战之电商零售智能业务对话机器人业务功能微服务解析与调试演示(八十二)
本文继续围绕工业级业务对话平台和框架Rasa,对Rasa项目实战之电商零售Customer Service智能业务对话机器人主要业务功能所使用的微服务进行解析,并通过Rasa Interactive的 ...
- 【会计毕业论文】ERP系统在电商零售企业会计核算中的应用(节选)
摘要:网购的便捷性与高效性促进了电商的快速发展,电子商务正在改变着我们的生活习惯.近几年电商企业呈爆发式增长,具有平台店铺多.订单量大.产品多等特点,使企业在会计核算中出现了资产账实不符.会计信息失真 ...
- 微信罕见出手,再造一个万能的电商平台!
Python实战社群 Java实战社群 长按识别下方二维码,按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 作者:电商君 来源:电商报(ID:kandiansh ...
最新文章
- JS、Flash 实现复制功能 (浏览器兼容)
- python time智能等待_python中等待怎么表示
- 一种另类的解决URL中文乱码问题--对中文进行加密、解密处理
- JavaScript复制内容到剪贴板
- php文件的作用,php入口文件的作用-PHP问题
- Android 性能优化提示
- 下载最新的阿里云centos镜像和yum源
- c语言关于函数的程序源代码,c语言库函数源代码
- 值的珍藏!三分钟了解如何用elman神经网络进行预测
- 无刷直流电机计算转速
- 达叔走了,别只发声感叹就完了
- LeetCode题解(1564):把箱子放进仓库里I(Python)
- 2022计算机系统大作业——程序人生-Hello’s P2P
- 我开博的这一年!!!
- golang多版本管理工具g使用(windows)
- 基于at89c51单片机的led数字倒计时器设计c语言,课程设计(论文)-基于AT89C51单片机的LED数字倒计时器设计.docx...
- 美国征信巨头Equifax遭黑客入侵,1.43亿公民身份数据泄漏
- SpringMVC前端控制器的配置理解
- 西安地图 百度西安高清卫星地图 最高19级 可商用地图
- java 节电软件_[乱弹琴]IT人士如何节电