业务数据分析怎么做 excel业务数据分析_业务数据分析怎么做


数据分析笼统来说,大概分为五个步骤:提出问题、理解数据、数据清洗、构建模型、数据可视化。在数据分析中,很基础又关键的一步就是数据清洗,对原始数据的处理会花掉整个分析过程的很大一部分时间,这是因为如果前期数据没有处理好,会影响后续的分析以及建模。那么当我们拿到一份数据,该如何对数据进行处理和分析呢?下面以药店销售数据为例,进行如下分析:

导入pandas、numpy包及excel原始数据:


import pandas as pd
import numpy as np
filename = r'C:安装包朝阳医院2018年销售数据.xlsx'
salesDf = pd.read_excel(filename, sheet_name='Sheet1', dtype = 'object')
salesDf.head()
salesDf.shape


业务数据分析怎么做 excel业务数据分析_数据_02


1.提出问题

通过这些数据我要分析什么?这个可能一开始是来自于老板或者其他部门的需求,他们提出需求后,我们来进行分析,在这个案例里,我们收到的需求是分析“月均消费次数”、“月均消费金额”、“客单价”、“消费趋势”。

2.理解数据

明确了分析目的之后,对原始数据进行观察,这个数据是一个6578行、7列的数据集。列属性分别为:购药时间、社保卡号、商品编码、销售数量、应收金额、实收金额,type为object;除此之外,还要观察数据结构以及数据的一些逻辑关联,形成一个大概的分析思路后,再进行下一步数据清洗工作。


#查看数据集的shape及列属性的type
salesDf.shape
salesDf.dtypes


3.数据清洗

数据清洗是要反复多次,才可以拿到我们想要数据,大致有如下6个步骤:

  • 选择子集合

就是选择我们需要的字段,将多余的字段删掉

  • 列名重命名

有一些列名可能不是很直观,我们可以更改为更好理解的列名,如:将本案例中的‘购药时间’改为‘销售时间’。


salesColStr = {'购药时间':'销售时间'}
salesDf.rename(columns=salesColStr, inplace=True)
salesDf


业务数据分析怎么做 excel业务数据分析_业务数据分析怎么做_03


  • 缺失数据处理

python中数据有3种缺失值:

①None;②Na 表示 not available;③NaN 浮点型 not a number 表示缺失数据

再回到我们的案例中,我们要分析“月均消费次数”、“月均消费金额”、“客单价”、“消费趋势”,所以销售时间、社保卡号、消费金额 都不可以缺失,如果缺失了就是无意义的数据。在删除缺失值的过程中,要经常用shape监控删除后的数据集的大小变化。


salesDf = salesDf.dropna(subset=['销售时间','社保卡号'],how='any')


  • 数据类型转换

观察列属性的type,将金额数量转换成float,将日期的星期去掉,日期和星期之间是用空格隔开的,所以用split进行拆分,然后用pandas的to_datetime函数将目标字段type转换为datetime,并将格式设为'%Y-%m-%d'。转换完成后执行dtypes查看是否转换成功,然后再查看一下新的数据集,是否空值,如果有空值记得drop掉。


salesDf['销售数量'] = salesDf['销售数量'].astype('float')
salesDf['应收金额'] = salesDf['应收金额'].astype('float')
salesDf['实收金额'] = salesDf['实收金额'].astype('float')
def splitSalesTime(timeColStr):
    timelist=[]
    for value in timeColStr:
        dateStr=value.split(' ')[0]
        timelist.append(dateStr)
    timeSer = pd.Series(timelist)
    return timeSer
timeColStr = salesDf.loc[:,'销售时间']
datetime = splitSalesTime(timeColStr)
salesDf.loc[:,'销售时间'] = datetime
salesDf.loc[:,'销售时间'] = pd.to_datetime(salesDf.loc[:,'销售时间'],format='%Y-%m-%d',errors='coerce')
salesDf.dtypes
salesDf
salesDf = salesDf.dropna(subset='销售时间',how='any')
salesDf.shape


业务数据分析怎么做 excel业务数据分析_月均数据_04


业务数据分析怎么做 excel业务数据分析_数据清洗_05


  • 数据排序

由于我们要分析“月均消费次数”和“月均消费金额”这两个跟销售时间有关的指标,所以我们先对新的数据集按“销售时间”进行排序,排序后发现index就乱掉了,reset一下index就可以。


salesDf = salesDf.sort_values(by='销售时间',ascending=True)
salesDf = salesDf.reset_index(drop=True)
salesDf.head()


业务数据分析怎么做 excel业务数据分析_数据_06

reset之前的index

业务数据分析怎么做 excel业务数据分析_业务数据分析怎么做_07

reset之后的index

  • 异常值处理

得到我们想要的数据集后,下一步可以进行简要的统计描述分析,执行descibe()函数,可以得到平均数、标准差、最大值、最小值以及四分位数。能从执行结果中最为直接的看到,最小值销售量、应收金额、实收金额都是负数,这个是不符合常理的,所以我们要将这个异常值用条件切片的方式剔除。


salesDf.describe()


业务数据分析怎么做 excel业务数据分析_数据_08

剔除异常值前的结果

#剔除异常值
salesDf = salesDf.loc[salesDf.loc[:,'销售数量']>0,:]
salesDf.describe()


业务数据分析怎么做 excel业务数据分析_数据清洗_09

剔除异常值后的结果

4.构建业务指标

  • 业务指标1:月均消费次数(所有人的总消费天数/月份数)

指标解读:月均消费次数,是一个人一天无论消费几次都记一次,其实就是消费天数的衡量,然后进行累加,最后把所有人的消费次数加在一起与月份做除法。需要注意的是数据中存在一天消费多次的人群,需要进行去重。

第一步,用 drop_duplicates() 去重,得到新子集 kpil_Df 并重复之前的操作进行排序和reset index;


kpil_Df = salesDf.drop_duplicates(subset=['销售时间','社保卡号'])
kpil_Df = kpil_Df.sort_values(by='销售时间',ascending=True)
kpil_Df = kpil_Df.reset_index(drop=True)


第二步,求总消费次数 totalI;


totalI = kpi1_Df.shape[0]


第三步,求月份数monthI。注意日期相减后要加 '.days' 用来转化成 int;这里month是用地板除求商。


startTime=kpi1_Df.loc[0,'销售时间']
endTime=kpi1_Df.loc[totalI-1,'销售时间']
daysI=(endTime-startTime).days
monthI=daysI//30


最后,可得到月均消费次数为平均890次/月


kpi1_I=totalI // monthsI
print('月均消费次数=',kpi1_I)


业务指标2:月均消费金额(总消费金额/月份)

指标解读:用总消费金额与月份做除法。(注意:之前去重得到结果不影响月份,月份可以沿用之前处理好的monthI,但消费金额要用 salesDf 这个数据集来计算)

执行如下代码,可得到月均消费结果为50,668.35元


totalMoneyF=salesDf.loc[:,'实收金额'].sum()
monthMoneyF=totalMoneyF / monthsI
print('月均消费金额=',monthMoneyF)


业务指标3:客单价(总消费金额 / 总消费次数)

指标解读:客单价(per customer transaction)是指商场(超市)每一个顾客平均购买商品的金额,客单价也即是平均交易金额。

执行如下代码,可得到 客单价≈56.91元


pct=totalMoneyF / totalI
print('客单价:',pct)


业务指标4:消费趋势

指标解读:每个月消费额的波动趋势,要按月份进行聚类分析

先复制一份 salesDf 数据,避免聚类时对已清洗好的数据造成影响


groupDf = salesDf


第一步,重命名行名(index)为销售时间所在列的值


groupDf.index = goupDf['销售时间']


第二步,按销售月份进行分组


gb = groupDf.groupby(groupDf.index.month)


第三步,计算每个月的消费总额,并绘制折线图


mounthDf=gb.sum()
mouthDf
import matplotlib.pyplot as plt
monthDf.plot(kind='line')


业务数据分析怎么做 excel业务数据分析_月均数据_10


业务数据分析怎么做 excel业务数据分析_业务数据分析怎么做_11


从折线图中,我们可以看到1、4、6月份消费额较高,2、7月消费额较低,具体原因还要结合实际业务情况进行进一步分析。

到这里 月均消费次数、月均消费金额、客单价格、消费趋势 这4个业务指标的数据,我们已经全部得到啦。