18143453325 在线咨询 在线咨询
18143453325 在线咨询
所在位置: 首页 > 营销资讯 > 电子商务 > python电商行业数据分析

python电商行业数据分析

时间:2023-03-16 00:58:01 | 来源:电子商务

时间:2023-03-16 00:58:01 来源:电子商务

我是一个从事商业地产5年的“中青年”每天起床都会对各种数据做思维上研究,最近广东的天气可是活了那么多年的我遇到最冷冬天,最冷的办公室,我忍不住上了某宝平台上买了“小太阳”结果还跟同事拼起了单,嘻~同时也想着最近几年电商的发展可谓迅猛,因此我拿了一些电商平台某产品品类的数据来进行分析。本次文章主要是记录本人对数据分析--电商行业所要掌握的基础工具python的运用与思维框架,无商业用途。(附上我在冬天的状态)

上分析框架:

数据表展示:

本项目数据共24列标签项,共51101条数据进行分析

一、读取数据

import pandas as pddata = pd.read_csv('C:/Users/Desktop/dataset.csv',encoding='ISO-8859-1')data

二、数据处理(提取业务相关数据)

①提取数据时,处理与业务不符合逻辑的数据,例如:售价为负

data[data.Sales<0]
没有发现售价为负的数据
②判断数据中是否存在不正常数据,例如:发货日期早于下单日期

# 1.发货日期与订单日期,转成datetime形式data['ShipDate'] = pd.to_datetime(data['ShipDate'])data['OrderDate'] = pd.to_datetime(data['OrderDate'])# 2.发货日期减去订单日期,秒数data['interval']=(data.ShipDate-data.OrderDate).dt.total_seconds()data[data.interval<0]发现了四条存在发货日期早于下单日期的不正常数据

③由于4条数据在全部数据的占比较小,况且也无从考证真正的时间段,因此选择删除

# 3.删除异常数据# drop(index=删除数据的index,inplace)data.drop(index=data[data.interval<0].index,inplace=True)data# 4.发货时间-下单时间data['interval'] = data.ShipDate-data.OrderDatedata
删除后剩下51097条数据

三、数据清洗

# 查看行列数量data.shape# 查看各列的非空数据量data.count()# NAN统计data.isna().sum()# 描述整体数据data.describe()# 数据信息data.info()由此可以发现ShipMode存在字符串缺失值,PostalCode存在缺失值,先放着稍后做处理

数据清洗的顺序:1、先按唯一字段处理一边重复值(本案的唯一字段是“RowID”,也就是订单顺序ID)2、处理异常值(补)先做成空值,然后再填补空值;3、处理空值(补);4、再处理一边重复值,确保数据正常

①处理重复值

# 清洗RowID# 助理重复的个数data.RowID.unique().sizedata[data.RowID.duplicated()]# data.drop(index=data[data.RowID.duplicated()].index,inplace=True)# data发现有三个RowID重复的值,打开excel数据表格进行核对

处理掉~

data.drop(index=data[data.RowID.duplicated()].index,inplace=True)data②处理Shipmode缺失值

# 处理Shipmode空值# 对付字符串的空值,弥补,众数data[data.ShipMode.isnull()]总共发现了11条因Shipmode存在空值的数据,由于在数据表中Shipmode是以字符串的形式存在的

因此我们在填入字符串时用Shipmode的众数来进行填入,利用mode()查看众数,然后填入空值栏中,结束后再次利用查空值代码查看是否填补完

data.ShipMode.mode()data['ShipMode'].fillna(value=data.ShipMode.mode()[0],inplace=True)data# 检查是否补完data[data.ShipMode.isnull()]当显示“0rows”,表示已经填补完Shipmode里的空值

③处理PostalCode缺失值

查看PostalCode列中的数据,发现是以数据形式存在的,这个具体要跟业务部门沟通缺失值的原因,在本案中无需分析,因此直接删除,代码如下:

# 邮编数据处理data.drop(columns=['PostalCode'],inplace=True)data④异常值处理,Discount数据处理

查看数据表中Discount异常值,代码如下:

data[data.Discount>1]data[data.Discount<0]发现Discount中存在折扣>1的情况,而且有13条数据中的折扣存在这种情况,那么我们就要开始修正异常值数据,代码如下:

把折扣大于1的数据,进行修正data['Discount'] = data['Discount'].mask(data['Discount']>1,None)# 查看空值data[data.Discount.isnull()]# 平均折扣meanDisount = round(data[data['Discount'].notnull()].Discount.sum()/data[data['Discount'].notnull()].Discount.size,2)meanDisountdata['Discount'].fillna(value = meanDisount,inplace=True)data在这里,我们先将折扣>1的数值进行空值替换,然后计算数据表中全部Discount的平均值,利用平均值对相应空值进行填补,搞掂~~

⑤再次验证是否有重复值:

data[data.RowID.duplicated()]ok~~搞掂~到了这一步,已经把全部数据清洗完毕,接下来就可以开展分析工作了!~

四、数据分析

按照我的惯例,我会先做数据规整,方便在之后的数据分析中单独提取想要的字段数据即可

# 拆分成年,季度,月份data['Order-year'] = data['OrderDate'].dt.yeardata['Order-month'] = data['OrderDate'].dt.monthdata['quarter'] = data['OrderDate'].dt.to_period('Q')res=data[['OrderDate','Order-year','Order-month','quarter']].head()res1、每年销售额增长情况

销售增长率=(本年销售额-上一年销售额)/上一年销售额*100%=本年销售额/上一年销售额-1

①计算每年销售额

sales_year = round(data.groupby('Order-year')['Sales'].sum(),2)
sales_year

②销售增长率及百分比形式

sales_rate_12 = sales_year[2012]/sales_year[2011]-1sales_rate_13 = sales_year[2013]/sales_year[2012]-1sales_rate_14 = sales_year[2014]/sales_year[2013]-1sales_rate_12_label = "%.2f%%" % (sales_rate_12*100)sales_rate_13_label = "%.2f%%" % (sales_rate_13*100)sales_rate_14_label = "%.2f%%" % (sales_rate_14*100)print(sales_rate_12_label,sales_rate_13_label,sales_rate_14_label)③将sales_year、sales_rate、sales_rate_label形成dataframe

sales_rate = pd.DataFrame( {'sales_all':sales_year, 'sales_rate':[0,sales_rate_12,sales_rate_13,sales_rate_14], 'sales_rate_label':['0.00%',sales_rate_12_label,sales_rate_13_label,sales_rate_14_label]})sales_rate④绘制成图形展现

import matplotlib.pyplot as pltimport matplotlib as mpl# 设置字体mpl.rcParams['font.sans-serif'] = 'SimHei'# 设置风格plt.style.use('ggplot')# 销售额y1 = sales_rate['sales_all'] # 增长率y2 = sales_rate['sales_rate']x = [str(value) for value in sales_rate.index.tolist()]# 新建figure对象fig = plt.figure()# 新建子图1fig,ax1 = plt.subplots(figsize=(20,12))# ax2与ax1共享x轴ax2 = ax1.twinx()ax1.bar(x,y1,color = 'blue')ax2.plot(x,y2,marker = '*',color = 'r')ax1.set_xlabel('年份')ax1.set_ylabel('销售额')ax2.set_ylabel('增长率')ax1.set_title('销售额与增长率')plt.savefig('电商销售额与增长率.png')plt.show()2、总销售占比

sales_area = data.groupby('Market')['Sales'].sum()sales_area.plot(kind='pie',autopct="%1.1f%%",title='总销售占比')plt.savefig('总销售占比.png')plt.show()3、各地区每一年的销售额

sales_area = data.groupby(['Market','Order-year'])['Sales'].sum()sales_area
输出结果部分截图
# 将分组后的多层索引设置成列数据sales_area = sales_area.reset_index(level=[0,1])sales_area
成为列数据后的部分截图
# 使用数据透视表重新整理数据sales_area = pd.pivot_table(sales_area, index='Market', columns='Order-year', values='Sales')sales_area

将列数据转换成为数据透视表,目的是整理数据,使其用在下一步绘制成可视化图形

# # 绘制图形sales_area.plot(kind = 'bar',title = '2011年-2014年不同地区销售额对比')plt.savefig('2011年-2014年不同地区销售额对比.png')plt.show()4、不同类型产品在不同地区销售额对比

category_sales_area = data.groupby(['Market','Category'])['Sales'].sum()category_sales_areacategory_sales_area = category_sales_area.reset_index(level=[0,1])category_sales_areacategory_sales_area = pd.pivot_table(category_sales_area, index='Market', columns='Category', values='Sales')category_sales_area.plot(kind = 'bar',title = '不同类型产品在不同地区销售额对比',figsize=(10,8))plt.savefig('不同类型产品在不同地区销售额对比.png')plt.show()5、销售淡旺季分析

# 销售淡旺季分析year_month = data.groupby(['Order-year','Order-month'])['Sales'].sum()year_month# 将分组后的多层索引设置成列数据year_month = year_month.reset_index(level=[0,1])year_month# 使用数据透视表重新整理数据year_month = pd.pivot_table(year_month, index='Order-month', columns='Order-year', values='Sales')# 绘制图形year_month.plot(title='销售淡旺季分析')plt.savefig('销售淡旺季分析.png')plt.show()6、新增客户

由于为了不干扰原数据表里面的数据,我先将数据表进行复制再进行数据处理

# 1.复制data_customer = data.copy()# 2.处理数据data_customer = data_customer.drop_duplicates(subset = ['CustomerID'])data_customer在代码撰写上,我利用了drop_duplicates(subset = ['CustomerID'])来对customerID进行去重,得到输出结果如下:

剩下1590条客户数据

接下来我对去重完毕的数据进行分组整理、设置成列数据

# 3.分组new_customer = data_customer.groupby(by=['Order-year','Order-month']).size()new_customer# 将分组后的多层索引设置成列数据new_customer = new_customer.reset_index(level=[0,1])new_customer
部分列数据截图
然后再利用可视化图表来对数据进行展示,代码如下:

# 使用数据透视表重新整理数据new_customer = pd.pivot_table(new_customer, index='Order-month', columns='Order-year', values=0,fill_value=0)new_customernew_customer.plot(kind = 'bar',title = '新增客户',figsize=(10,8))plt.savefig('新增客户.png')plt.show()好啦~到了这里我对电商数据的分析步骤差不多尾声了,其实在这庞大的数量里面还有很多可以挖掘的价值点,但在这里就分享一些操作的方式以及代码的运用,在此,也做个总结方便小伙伴们在做数据分析能够灵活运用。

①sales_year = round(data.groupby('Order-year')['Sales'].sum(),2)sales_year#round(主值,2)这里的“2”表示主值得出的数值小数点保留2位#groupby('')['']为分析测算数值的聚合形式②year_month = pd.pivot_table(year_month, index='Order-month', columns='Order-year', values='Sales')# 使用数据透视表重新整理数据 # 透视表与excel一致# # data,数据# # index,索引# # columns,列# # values,单元数据# # fill_value 补空数据③data_customer = data_customer.drop_duplicates(subset = ['CustomerID'])#去重数据下一篇会重点向大家分享RFM模型的python语法,【PS:由于数据是进行了脱敏处理的,所以存在多少商业价值取决于你关注哪个方面,再次重申:本文主要说明分析方法以及一些代码展示,请勿利用于商业】最后也希望各位正往数据分析师发展的小伙伴们一路共勉,有空聊聊~

关键词:数据,分析,商行

74
73
25
news

版权所有© 亿企邦 1997-2025 保留一切法律许可权利。

为了最佳展示效果,本站不支持IE9及以下版本的浏览器,建议您使用谷歌Chrome浏览器。 点击下载Chrome浏览器
关闭