Python数值计算优惠金额 python计算总金额_Python数值计算优惠金额


接着上篇Python基础篇:一维数据分析和二维数据分析,我们此篇为第二大部分:

我们先看一下本次的实战数据吧~


Python数值计算优惠金额 python计算总金额_python中商品金额累加_02


Python实战篇:业务中的Python操作

在前期用Excel进行数据分析时,我们有讲过数据分析的步骤,此次我们对步骤进行再温习一遍:

  • 提出问题
  • 理解数据
  • 数据预处理
  • 构建模型
  • 数据可视化

明确问题

此次我们有以下几个问题:

  • 月均消费次数是多少?
  • 月均销售额是多少?
  • 客单价是多少?

问题我们知道了,接下来我们需要对手里的数据和这些业务指标进行理解。

理解数据

导入数据,先看一下整体情况:


df = pd.read_excel('朝阳医院2018年销售数据.xlsx')
print(df.columns)


我们的数据有'购药时间', '社保卡号', '商品编码', '商品名称', '销售数量', '应收金额', '实收金额'7列;


Python数值计算优惠金额 python计算总金额_数据_03

目前读取进来的数据均为数字型,一会儿再做调整。

现在明白了我们有哪些数据,再和我们的问题联系起来:

  • 月均销售次数 = 总消费次数/月份数;
  • 月均销售金额 = 总消费金额/月数;
  • 客单价 = 总消费金额/总消费次数;

看起来,只要我们找到了总消费次数、总月份数、消费总金额,这些问题便可迎刃而解了。

总消费次数:我们需要根据“购药时间”&“社保卡号”是否一致来判断是否重复,去重后变可得到总的消费次数;

总消费金额:只需要对“实收金额”求和便得到总消费金额;

总月份数:可以从“购药时间”来看最小日期和最大日期,作差就是相差日,然后除30就是月份数。

接下来,就需要我们对数据进行预处理,处理成我们需要的样子。

数据预处理

  • 选择子集

此次分析需要全部字段,故无需选择子集。

  • 列名重命名

我们将“购药时间”更改为“销售时间”更易理解:


# 更改“购药时间”为“销售时间”
df.rename(columns={'购药时间':'销售时间'} , inplace=True)


Python数值计算优惠金额 python计算总金额_数据_04


  • 缺失值处理

因为我们需要根据“购药时间”&“社保卡号”是否一致来判断是否重复,所以删除“销售时间”、“社保卡”号中为空的行:


# 删除“销售时间”、“社保卡”号中为空的行
df = df.dropna(subset=['销售时间','社保卡号'],how ='any')


Python数值计算优惠金额 python计算总金额_python中商品金额累加_05


  • 数据类型转换

可以看到“社保卡号”“商品编码”此时都是浮点型:


print(type(df['社保卡号'][0]),type(df['商品编码'][0]))


Python数值计算优惠金额 python计算总金额_Python数值计算优惠金额_06


① 我们需要把浮点型转换成字符串,这里我们先自定义函数再使用apply对数据进行预处理


# 将浮点型转为字符串
def col(st):
    x = str(int(st))
    return x
# 使用apply对数据进行预处理
df['社保卡号'] = df['社保卡号'].apply(col)
df['商品编码'] = df['商品编码'].apply(col)
print(type(df['社保卡号'][0]),type(df['商品编码'][0]))


Python数值计算优惠金额 python计算总金额_字符串_07


② 需要把“销售时间”的“2018-01-06 星期三”的格式转成“2018-01-06”格式:


# 将时间中的星期去掉
def datetm(st):
    x = st.split(' ')[0]
    return x
df['销售时间'] = df['销售时间'].apply(datetm)


Python数值计算优惠金额 python计算总金额_Python数值计算优惠金额_08


③ 现在需要把转出字符串的时间转换日期格式:


# 将字符串转换成日期
def dt(st):
    x = pd.to_datetime(st,format='%Y-%m-%d',errors='coerce')
    return x
df['销售时间'] = df['销售时间'].apply(dt)


Python数值计算优惠金额 python计算总金额_数据_09


我们可以检查一下“销售时间”格式:


type(df['销售时间'][0])


Python数值计算优惠金额 python计算总金额_Python数值计算优惠金额_10


我们还需要对df的异常值处理。

  • 数据排序

因为要计算总月份,最小日期和最大日期作差,所以我们需要把数据集按照时间进行排序——升序:


# 按照“销售时间”排序
df.sort_values(by = '销售时间',ascending =True)


Python数值计算优惠金额 python计算总金额_python中商品金额累加_11


  • 异常值处理

通过describe()对df每一列检查描述统计信息,发现出现负数,销售数量应该>0,所以出现不符合条件的异常值;


# 描述统计信息
df.describe()


Python数值计算优惠金额 python计算总金额_数据分析_12


我们对异常值进行处理,删除不符合条件的值:


# 删除不符合条件的异常值(销售数量>0)
df = df[df.loc[:,'销售数量']>0]


Python数值计算优惠金额 python计算总金额_Python数值计算优惠金额_13


现在我们需要把index重命名:


df.reset_index(drop =True)


Python数值计算优惠金额 python计算总金额_数据_14


构建模型

对各指标进行计算:

① 总销售次数


# 计算总销售次数
sale_counts = df.drop_duplicates(subset = ['销售时间','社保卡号']).shape[0]


Python数值计算优惠金额 python计算总金额_python中商品金额累加_15


② 总销售金额


# 计算总销售金额
sale_money = df['实收金额'].sum()


Python数值计算优惠金额 python计算总金额_数据分析_16


③ 总月份数


# 计算总月份数
days = df['销售时间'].max()-df['销售时间'].min()
# 计算月份数
months = days.days//30


Python数值计算优惠金额 python计算总金额_字符串_17


故:

月平均销售次数 = 总销售次数 / 总月数 = 890


# 月平均销售次数
months_sale_counts = int(sale_counts / months)


Python数值计算优惠金额 python计算总金额_数据分析_18


月平均销售金额 = 总销售金额 / 总月数 = 50,672.50


# 月平均销售金额
months_sale_money = sale_money / months


Python数值计算优惠金额 python计算总金额_python中商品金额累加_19


客单价 = 总销售金额 / 总销售次数


# 计算客单价
pct = sale_money /sale_counts


Python数值计算优惠金额 python计算总金额_数据分析_20