26个数据分析案例——第三站:基于python的药店销售数据分析

目录

26个数据分析案例——第三站:基于python的药店销售数据分析

实验环境

  • Python: Python 3.x;
  • jupyter

数据说明

当前数据为某医院销售记录,用于记录用户购买药品的相关信息。该数据集包含7个字段,分别是:
• 购药时间。
• 社保卡号。
• 商品编码。
• 商品名称。
• 销售数量。
• 应收金额。
• 实收金额。

资料包

链接:https://pan.baidu.com/s/1KdikbuBaTBGDwgZyPgVv4g
提取码:e46q

实验步骤

第一步:加载数据并查看数据详情

1、导入数据:需要用到Python中的xlrd包,代码如下所示。


import pandas as pd
'''
路径中最好不要有中文,或者特殊符号啥的,不然路径会提示错误找不到。
最后将文件放到一个简单的英文路径下
'''

salesDf=pd.read_csv('data.csv',dtype={'社保卡号':str,'商品编码':str})
'''
查看数据基本信息
'''

salesDf.head()

结果如图所示。

26个数据分析案例——第三站:基于python的药店销售数据分析

2、查看数据类型,代码如下所示。


salesDf.dtypes

26个数据分析案例——第三站:基于python的药店销售数据分析

第二步:数据清洗

1、选择子集:目的是选择需要分析的列,方法为切片法(loc),代码如下所示。

subset=salesDf.loc[0:3,'购药时间':'商品名称']
subset

结果如图所示。

26个数据分析案例——第三站:基于python的药店销售数据分析

2、列名重命名:把’购药时间’改为’销售时间’,代码如下所示。


colNameDict={'购药时间':'销售时间'}
'''
inplace=False,数据框本身不会变,而会创建一个改动后新的数据框,默认的inplace是False
inplace=True,数据框本身会改动
'''
salesDf.rename(columns =colNameDict,inplace=True)
salesDf.head()

结果如图所示。

26个数据分析案例——第三站:基于python的药店销售数据分析

3、缺失数据处理,用dropna 法处理缺失值,处理前数据大小,代码如下所示。

print('删除缺失值前大小',salesDf.shape)

结果如图所示。

26个数据分析案例——第三站:基于python的药店销售数据分析

4、处理后的数据大小,代码如下所示。


salesDf=salesDf.dropna(subset=['销售时间','社保卡号'],how='any')
print('删除缺失后大小',salesDf.shape)

结果如图所示。

26个数据分析案例——第三站:基于python的药店销售数据分析

5、数据类型转换:本文数据都是以字符串类型导入的,我们需要将字符串转换为我们需要的数据类型,字符串转换为数值(浮点型),代码如下所示。

'''
运行后,会报警告SettingWithCopyWarning一般信息有两列,一类是Warning警告信息,一类是Error错误信息。
警告的信息不用管,我们只关注错误类型的信息
'''

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

结果如图所示。

26个数据分析案例——第三站:基于python的药店销售数据分析

6、字符串转换为日期数据类型,定义一个用来分割日期数据的函数splitSaletime(),代码如下所示。

'''
定义函数:分割销售日期,获取销售日期
输入:timeColSer 销售时间这一列,是个Series数据类型
输出:分割后的时间,返回也是个Series数据类型
'''
def splitSaletime(timeColSer):
    timeList=[]
    for value in timeColSer:

        dateStr=value.split(' ')[0]
        timeList.append(dateStr)

    timeSer=pd.Series(timeList)
    return timeSer

7、调用splitSaletime()来处理销售时间,代码如下所示。

'''
注意:
如果运行后报错:AttributeError:float object has no attribute'split'
是因为Excel中的空的cell读入pandas中是空值(NaN),这个NaN是个浮点类型,一般当作空值处理。
所以要先去除NaN在进行分隔字符串
'''

timeSer=salesDf.loc[:,'销售时间']

dateSer=splitSaletime(timeSer)
dateSer.head()

运行结果为:

26个数据分析案例——第三站:基于python的药店销售数据分析

8、修改销售时间,代码如下所示。


salesDf.loc[:,'销售时间']=dateSer
salesDf.head()

结果如图所示。

26个数据分析案例——第三站:基于python的药店销售数据分析

9、将销售时间列数据字符串型转换为日期型,代码如下所示。

'''
数据类型转换:字符串转换为日期
'''

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

运行结果为:

26个数据分析案例——第三站:基于python的药店销售数据分析

10、通过转换,销售时间已经由字符串转换为日期,转换过程中不符合日期格式的数值会被转换为空值,需要将其删除,代码如下所示。


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

11、排序按销售时间的先后顺序进行排序,排序前的数据,代码如下所示。

print('排序前的数据集')
salesDf.head()

结果如图所示。

26个数据分析案例——第三站:基于python的药店销售数据分析

12、对销售时间按序排序,代码如下所示。

'''
by:按哪几列排序
ascending=True 表示升序排列,ascending=False表示降序排列
'''

salesDf=salesDf.sort_values(by='销售时间',ascending=True)
print('排序前的数据集')
salesDf.head()

运行结果为:

26个数据分析案例——第三站:基于python的药店销售数据分析

13、将索引值修改为从0到N按顺序,代码如下所示。


salesDf=salesDf.reset_index(drop=True)
salesDf.head()

结果如图所示。

26个数据分析案例——第三站:基于python的药店销售数据分析

14、异常值处理,查看数据看是否存在异常值,代码如下所示。


salesDf.describe()

结果如图所示。

26个数据分析案例——第三站:基于python的药店销售数据分析

15、处理异常值,代码如下所示。


querySer=salesDf.loc[:,'销售数量']>0

print('删除异常值前:',salesDf.shape)
salesDf=salesDf.loc[querySer,:]
print('删除异常值后:',salesDf.shape)

结果如图所示。

26个数据分析案例——第三站:基于python的药店销售数据分析

16、对异常值进行处理之后,再使用描述指标查询一次,无异常值,代码如下所示。


salesDf.describe()

结果如图所示。

26个数据分析案例——第三站:基于python的药店销售数据分析

第三步:构建模型

业务指标1:月均消费次数=总消费次数/月份数。获取总消费次数,代码如下所示。

'''
总消费次数:同一天内,同一个人发生的所有消费算作一次消费
根据列名(销售时间,社区卡号),如果这两个列值同时相同,只保留1条,将重复的数据删除
'''
kpi1_Df=salesDf.drop_duplicates(
    subset=['销售时间','社保卡号']
)

totall=kpi1_Df.shape[0]
print('总消费次数=',totall)

结果如图所示。

26个数据分析案例——第三站:基于python的药店销售数据分析

2、获取时间范围,代码如下所示。

'''
计算月份数:时间范围
'''

kpil_Df=kpi1_Df.sort_values(by='销售时间',ascending=True)

kpi1_Df=kpil_Df.reset_index(drop=True)
kpi1_Df.head()

结果如图所示。

26个数据分析案例——第三站:基于python的药店销售数据分析

3、获取最小时间值,代码如下所示。


startTime=kpil_Df.loc[0,'销售时间']
startTime

结果如图所示。

26个数据分析案例——第三站:基于python的药店销售数据分析

4、获取最大时间值,代码如下所示。


endTime=kpi1_Df.loc[totall-1,'销售时间']
endTime

结果如图所示。

26个数据分析案例——第三站:基于python的药店销售数据分析

5、计算总天数,代码如下所示。


daysl=(endTime-startTime).days
daysl

结果如图所示。

26个数据分析案例——第三站:基于python的药店销售数据分析

6、计算月份数,代码如下所示。


monthsl=daysl//30
print('月份数:',monthsl)

结果如图所示。

26个数据分析案例——第三站:基于python的药店销售数据分析

7、获取月均消费次数,代码如下所示。


kpil_l=totall//monthsl
print('业务指标1:月均消费次数=',kpil_l)

结果如图所示。

26个数据分析案例——第三站:基于python的药店销售数据分析

8、获取总消费金额,代码如下所示。


totalMoneyF=salesDf.loc[:,'实收金额'].sum()
totalMoneyF

结果如图所示。

26个数据分析案例——第三站:基于python的药店销售数据分析

9、业务指标2:月均消费金额=总消费金额/月份数,获取月均消费金额,代码如下所示。


monthMoneyF=totalMoneyF/monthsl
print('业务指标2:月均消费金额=',monthMoneyF)

结果如图所示。

26个数据分析案例——第三站:基于python的药店销售数据分析
10、业务指标3:客单价=总消费金额 / 总消费次数,客单价(per customer transaction)是指商场(超市)每一个顾客平均购买商品的金额,客单价也即是平均交易金额,代码如下所示。
'''
totalMoneyF:总消费金额
totall:总消费次数
'''
pct=totalMoneyF/totall
print('客单价:',pct)

结果如图所示。

26个数据分析案例——第三站:基于python的药店销售数据分析
11、重命名行名(index)为销售时间所在列的值,代码如下所示。

groupDf=salesDf

groupDf.index=groupDf['销售时间']
groupDf.head()

结果如图所示。

26个数据分析案例——第三站:基于python的药店销售数据分析

12、分组,代码如下所示。


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

结果如图所示。

26个数据分析案例——第三站:基于python的药店销售数据分析

13、应用函数,计算每个月的消费总额,代码如下所示。


mounthDf=gb.sum()
mounthDf

结果如图所示。

26个数据分析案例——第三站:基于python的药店销售数据分析

后续案例持续更新

01 基于Python的HBase冠字号查询系统
02基于Hive的民航客户价值分析
03 基于python的药店销售数据分析
04基于Flume与Kafka的web服务器日志数据采集
05 基于Scrapy的架构的数据采集
06 Linux操作系统实时日志采集并处理
07 医疗行业案例-中医病症辩证关联规则分析
08教育行业案例-高校学生生活数据分析
10 娱乐行业案例-广告收益回归预测模型
11网络行业案例-网站访问行为分析
12零售行业案例-店铺热门商品实时统计
13 营业额数据可视化
14金融行业案例-基于上市公司股票信息及其衍生变量的金融数据分析
15银行信用卡风险数据可视化
16 滴滴出行城市运营分析
17 幸福指数可视化
18 员工主动离职预警模型
19 歌手推荐模型
20 2020新冠肺炎疫情数据分析
21 淘宝购物狂欢节数据分析
22 共享单车数据分析
23人脸检测系统
24服装分拣系统
25口罩佩戴识别系统
26 imdb电影数据分析
20 2020新冠肺炎疫情数据分析
21 淘宝购物狂欢节数据分析
22 共享单车数据分析
23人脸检测系统
24服装分拣系统
25口罩佩戴识别系统
26 imdb电影数据分析

Original: https://blog.csdn.net/u014552259/article/details/119493370
Author: 一个爱好编程的业余人士
Title: 26个数据分析案例——第三站:基于python的药店销售数据分析

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/600746/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球