本次分析的数据为某电商平台真实脱敏数据,数据格式如下:
字段名 | 字段说明 |
---|---|
Id | 行id |
orderID | 订单id |
UserID | 用户id |
goodsID | 商品id |
orderAmount | 订单金额 |
Payment | 支付金额 |
ChanelID | KOL广告渠道id |
platformType | 平台类型 |
orderTime | 订单时间 |
payTime | 支付时间 |
chargeback | 是否退货 |
加载处理数据需要的库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import warnings
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
warnings.filterwarnings('ignore')
读取数据文件,并将行id设置为index
data = pd.read_excel('order2019.xlsx', index_col='id')
data.head()
data.info()
根据业务需求,只提取2019年数据
time_index = data[(data['orderTime'].dt.year==2018) | (data['orderTime'].dt.year==2020)].index
data.drop(time_index, inplace=True)
处理与业务流程不符合的数据:1、支付时间间隔大于30分钟;2、支付时间早于下单时间
data['timeinterval'] = (data['payTime']-data['orderTime']).dt.total_seconds()
data.drop(data[data['timeinterval']>1800].index, inplace=True)
data.drop(data[data['timeinterval']<0].index, inplace=True)
处理支付金额为负数的数据
pay_index = data[data['payment']<0].index
data.drop(pay_index, inplace=True)
商品ID为PR000000的为已下架商品,需要处理
goods_index = data[data['goodsID']=='PR000000'].index
data.drop(goods_index, inplace=True)
删除订单ID重复的数据
data.drop_duplicates('orderID', inplace=True)
创建订单折扣列,如果订单折扣大于1,按照平均折扣重新填充支付金额
data['discount'] = round(data['payment']/data['orderAmount'], 2)
dis_mean = data['discount'][data['discount']<=1].mean()
dis_count = data['discount'][data['discount']>1]
# 直接调用replace()是替换整个元素,要对某个元素的部分进行修改,就必须转成字符串(.str),来实现字符串部分替换
data['discount'] = data['discount'].replace(dis_count, dis_mean)
data['payment'] = round(data['orderAmount']*data['discount'], 2)
去掉平台类型列中单元格中的空格
data['platformType'] = data['platformType'].str.replace(' ','')
将渠道列中的NaN,使用众数填充
mode_index = data['chanelID'].mode()[0]
data['chanelID'].fillna(mode_index, inplace=True)
查看处理后的数据
data.head()
data.info()
至此,数据处理完成,可以将此数据导出为excel文件,并使用Excel或Tableau进行可视化处理
data.to_excel('order2019_new.xlsx')
或直接使用Python直接进行可视化处理,处理过程可以参看 :电商行业场景化项目分析(下)——数据分析。