python数据分析-数据分析流程、方法以及实例实战-在线零售业务的交易数据分析实战

数据分析流程

  • 明确问题:明确问题是数据分析中的第一步,必须明确数据分析的真实需求
  • 理解数据:数据获取和数据探索
  • 数据清洗:一个数据分析项目大部分时间花在数据清洗上
  • 数据分析和可视化:对清洗后的数据进行分析,并且通过可视化展示出结果
  • 结论和建议:对结果进行解读,得出有价值的结论并且提出相关建议。

数据分析方法

  • 常用统计方法,例如计算常用统计量和构建相关指标
  • 图表法,通过各种图形结合来展示数据里面信息
  • 机器学习算法,对于复杂的分析,会涉及到模型构建

接下来实战!
第一个例子是使用国外的在线零售业务的交易数据,数据下载地址

现在以表格的形式解释一下里面的字段:

字段 说明
InvoiceNo 订单编号,含有6个整数,退货订单编号开头有字母C
StockCode 产品编号,由5个整数构成
Description 产品描述
Quantity 产品数量,有负号表示退货
InvoiceDate 订单日期和时间
UnitPrice 单位 英镑 单位产品的价格
CustomerID 客户编号,由5位数字组成
Country 国家的名称 每个客户所在的国家/地区的名称

首先我们明确分析分析的目的

  1. 购买商品数量前十的国家是哪些
  2. 交易额前十的国家是哪个
  3. 哪些月的销量较佳
  4. 客单价多少(销售额/顾客数)
  5. 用户消费行为分析
  • 购买商品数量前十的国家是哪些
#购买商品数量前10的国家
result1 = data_copy[data_copy['Quantity']>0].groupby('Country').sum()['Quantity'].sort_values(ascending=False).head(10)
#可视化---购买商品数量前10的国家
batdata = go.Bar(x=result1.index.tolist(),y=result1.values.tolist())
layout = go.Layout(title='购买商品数量前10的国家',xaxis=dict(title='国家'),yaxis=dict(title='销量'))
fig = go.Figure(data=[batdata],layout=layout)
py.offline.plot(fig,filename='Top10Purchase.html')

在这里插入图片描述

  • 交易额前十的国家是哪个
#可视化---交易额前十的国家
#交易额前十的国家 --这里首先计算 Quantity*UnitPrice 单价*物品数量
data_copy['AllPrice'] = data_copy[data_copy['Quantity']>0]['Quantity']*data_copy[data_copy['Quantity']>0]['UnitPrice']
result2 = data_copy[data_copy['Quantity']>0].groupby('Country').sum()['AllPrice'].sort_values(ascending=False).head(10)
batdata = go.Bar(x=result2.index.tolist(),y=result2.values.tolist(),marker=dict(color='orange'),opacity=0.5)
layout = go.Layout(title='交易额前十的国家',xaxis=dict(title='国家'),yaxis=dict(title='金额'))
fig = go.Figure(data=[batdata],layout=layout)
py.offline.plot(fig,filename='Top10Transation.html')

在这里插入图片描述

  • 统计每个月的销售额
#统计哪个月份的销售额最多

result3 = data_copy[data_copy['Quantity']>0].groupby('InvoiceDate').sum()['AllPrice'].sort_values(ascending=False)
plt.rcParams['font.sans-serif']=['SimHei']#这两句作用为防止中文乱码
plt.rcParams['axes.unicode_minus']=False
sns.barplot(x=result3.index,y=result3.values,color='steelblue')
plt.title(label="统计每个月份的销量")
plt.xlabel(xlabel="月份")
plt.ylabel(ylabel="销售额")
plt.show()

在这里插入图片描述

  • 客单价
#客单价
#统计客户数量 4339
CustomerNumber = data_copy[data_copy['Quantity']>0]['CustomerID'].drop_duplicates().count()
print("客户数量:",CustomerNumber)
#统计总的订单金额
AllPrice =  data_copy[data_copy['Quantity']>0]['AllPrice'].sum()
print("总的订单金额:",AllPrice)
#客单价
PriceOfCustomer = AllPrice/CustomerNumber
print("客单价:",PriceOfCustomer)

输出:
在这里插入图片描述

  • 用户消费行为分析
#用户消费行为分析

#统计不同客户成交的的订单数、商品总量、订单金额

Customer = data_copy[data_copy['Quantity']>0].groupby('CustomerID').agg({'InvoiceNo':'nunique','Quantity':np.sum,'AllPrice':np.sum })

#进行描述性统计方法
print(Customer.describe())

在这里插入图片描述

结果分析:

  • 用户平均消费4次,最多消费210次,算是忠实的用户
  • 用户平均消费2053元,但是百分之75 以下的人消费金额不高于1661元,可见,存在一些消费力比较高的客户,值得重点关注

全部代码:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import plotly as py
import  plotly.graph_objects as go
import seaborn as sns

data = pd.read_csv('data/data.csv')
# #获取数据前10行
print(data.head(10))
# #获取数据长度
print(len(data)) #共有541909
# #查看数据信息
print(data.info())

#数据清洗
#1 首先查看各列数据的缺失率
DataIsNull = data.apply(lambda x:sum(pd.isnull(x))/len(x),axis=0)
#print(DataIsNull)
#从输出结果中,可以看到 Description 缺失率为0.0026 CustomerID缺失率为0.2492
#2 去除掉缺失的数据
data_copy = data.dropna(how='any',axis=0).copy()
#查看是否还存在缺失值
#print(data_copy.info())#从结果中来看,已经将缺失的数据全部筛选完毕,还剩下406829条数据


#数据分析以及可视化
#购买商品数量前10的国家
result1 = data_copy[data_copy['Quantity']>0].groupby('Country').sum()['Quantity'].sort_values(ascending=False).head(10)
#可视化---购买商品数量前10的国家
batdata = go.Bar(x=result1.index.tolist(),y=result1.values.tolist())
layout = go.Layout(title='购买商品数量前10的国家',xaxis=dict(title='国家'),yaxis=dict(title='销量'))
fig = go.Figure(data=[batdata],layout=layout)
py.offline.plot(fig,filename='Top10Purchase.html')

#可视化---交易额前十的国家
#交易额前十的国家 --这里首先计算 Quantity*UnitPrice 单价*物品数量
data_copy['AllPrice'] = data_copy[data_copy['Quantity']>0]['Quantity']*data_copy[data_copy['Quantity']>0]['UnitPrice']
result2 = data_copy[data_copy['Quantity']>0].groupby('Country').sum()['AllPrice'].sort_values(ascending=False).head(10)
batdata = go.Bar(x=result2.index.tolist(),y=result2.values.tolist(),marker=dict(color='orange'),opacity=0.5)
layout = go.Layout(title='交易额前十的国家',xaxis=dict(title='国家'),yaxis=dict(title='金额'))
fig = go.Figure(data=[batdata],layout=layout)
py.offline.plot(fig,filename='Top10Transation.html')

#修改订单日期格式,因为当前日期格式是字符型,现在要转化成datatime型
data_copy['InvoiceDate'] = pd.to_datetime(data_copy['InvoiceDate'],errors='coerce').dt.month

#统计哪个月份的销售额最多

result3 = data_copy[data_copy['Quantity']>0].groupby('InvoiceDate').sum()['AllPrice'].sort_values(ascending=False)
plt.rcParams['font.sans-serif']=['SimHei']#这两句作用为防止中文乱码
plt.rcParams['axes.unicode_minus']=False
sns.barplot(x=result3.index,y=result3.values,color='steelblue')
plt.title(label="统计每个月份的销量")
plt.xlabel(xlabel="月份")
plt.ylabel(ylabel="销售额")
plt.show()

# #客单价
# #统计客户数量 4339
CustomerNumber = data_copy[data_copy['Quantity']>0]['CustomerID'].drop_duplicates().count()
print("客户数量:",CustomerNumber)
#统计总的订单金额
AllPrice =  data_copy[data_copy['Quantity']>0]['AllPrice'].sum()
print("总的订单金额:",AllPrice)
#客单价
PriceOfCustomer = AllPrice/CustomerNumber
print("客单价:",PriceOfCustomer)

#用户消费行为分析

#统计不同客户成交的的订单数、商品总量、订单金额

Customer = data_copy[data_copy['Quantity']>0].groupby('CustomerID').agg({'InvoiceNo':'nunique','Quantity':np.sum,'AllPrice':np.sum })
print(Customer)
#进行描述性统计方法
print(Customer.describe())
发布了67 篇原创文章 · 获赞 54 · 访问量 23万+

猜你喜欢

转载自blog.csdn.net/lzx159951/article/details/104438814