python 数据分析 实际案例_python数据分析案例

按数据分析的一般步骤,对某药店销售数据进行分析:

  1. 提出问题
  2. 理解数据
  3. 数据清洗
  4. 构建模型
  5. 数据可视化

1、提出问题

根据已有的销售数据,对如下业务指标进行分析:月均消费次数、月均消费金额、客单价和消费趋势.

2、理解数据

fileNameStr='./朝阳医院2018年销售数据.xlsx'
salesDf = pd.read_excel(fileNameStr,sheet_name='Sheet1',dtype=str)
salesDf.head()

89f9c6995adefdc56f3bff37389dfe5e.png
#查看数据的一些信息
salesDf.shape
salesDf.dtypes
salesDf.info()
salesDf.describe()

3、数据清洗

  • 选择子集
  • 重命名
  • 缺失值处理
  • 数据类型转换
  • 数据排序
  • 异常值处理
#重命名
colNameDict = {'购药时间':'销售时间'}
salesDf.rename(columns = colNameDict,inplace=True)

缺失值有3种:None,NA,NaN

#删除列(销售时间,社保卡号)中为空的行
#how='any' 在给定的任何一列中有缺失值就删除
salesDf=salesDf.dropna(subset=['销售时间','社保卡号'],how='any')

数据类型转换

salesDf['销售数量'] = salesDf['销售数量'].astype('float')
salesDf['应收金额'] = salesDf['应收金额'].astype('float')
salesDf['实收金额'] = salesDf['实收金额'].astype('float')
print('转换后的数据类型:n',salesDf.dtypes)

使用分割函数取需要的日期

#自定义分割函数
def splitSaletime(timeColSer):
    timeList=[]
    for value in timeColSer:
        dateStr=value.split(' ')[0]
        timeList.append(dateStr)
    
    timeSer=pd.Series(timeList)
    return timeSer

#获取并分割
timeSer=salesDf.loc[:,'销售时间']
dateSer=splitSaletime(timeSer)

#看下结果
dateSer[0:3]

字符串转换为日期

salesDf.loc[:,'销售时间']=pd.to_datetime(salesDf.loc[:,'销售时间'],
                                    format='%Y-%m-%d', 
                                    errors='coerce')

#再清理一下时间不符合格式的数据
salesDf=salesDf.dropna(subset=['销售时间','社保卡号'],how='any')

排序

#按销售日期进行升序排列
salesDf=salesDf.sort_values(by='销售时间',
                    ascending=True,
                    na_position='first')

#重命名行名(index):排序后的列索引值是之前的行号,需要修改成从0到N按顺序的索引值
salesDf=salesDf.reset_index(drop=True)
salesDf.head()

异常值处理

salesDf.describe()

#删除异常值:通过条件判断筛选出数据
#查询条件
querySer=salesDf.loc[:,'销售数量']>0
#应用查询条件
print('删除异常值前:',salesDf.shape)
salesDf=salesDf.loc[querySer,:]
print('删除异常值后:',salesDf.shape)

构建模型

#业务指标1:月均消费次数=总消费次数 / 月份数
#删除重复数据
kpi1_Df=salesDf.drop_duplicates(
    subset=['销售时间', '社保卡号']
)

#总消费次数:有多少行
totalI=kpi1_Df.shape[0]
print('总消费次数=',totalI)

总次数:5346

#月份数
#获取时间范围
kpi1_Df=kpi1_Df.sort_values(by='销售时间',ascending=True)
kpi1_Df=kpi1_Df.reset_index(drop=True)

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

monthsI=daysI//30
print('月份数:',monthsI)

月份数: 6

#业务指标1:月均消费次数=总消费次数 / 月份数
kpi1_I=totalI // monthsI
print('业务指标1:月均消费次数=',kpi1_I)

业务指标1:月均消费次数= 891

指标2:月均消费金额 = 总消费金额 / 月份数

#总消费金额
totalMoneyF=salesDf.loc[:,'实收金额'].sum()
#月均消费金额
monthMoneyF=totalMoneyF / monthsI
print('业务指标2:月均消费金额=',monthMoneyF)

业务指标2:月均消费金额= 50674.13833333348

指标3:客单价=总消费金额 / 总消费次数

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

客单价: 56.9094178210404

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值