数据分析主要分为以下步骤:
1.首先是提出问题,明确需要具体解决的问题
2.采集可以用于分析的数据,并对数据集进行理解
3.对数据进行清洗,目的是使数据结构更有利于我们的后续分析
4.进行模型的构建,解决问题,并实现可视化

下面对药品销售数据进行初步分析
数据来源为已有的某药店药品销售情况文件
一. 提出问题
需要解决的问题是,从销售数据中分析出以下业务指标:
月均消费次数,月均消费金额,客单价,消费趋势
首先对数据进行初步了解,读取数据:read_excel

查看数据基本信息:

从而得知数据包含的信息有
1. 购药时间
2.社保卡号:代表购买药物的人
3.商品编码:药物的编码
4.商品名称:药物的名称
5.销售数量:购买的数量
6.应收金额:商品标价
7.实收金额:实际卖出的金额,打折促销等
二.数据清洗
对数据进行基本清洗,从而进行后续分析
1.选择子集(本案例不需要选择子集)
方法:salesDf.loc[0:4,'购药时间':'销售数量']
2.列名重命名
为了使列名更直观,更容易理解其含义,对列名进行重新命名
rename(columns={},index={},inplace=False)
columns修改列名,index修改行名,默认inplace=False数据框本身不会变,而会创建一个改动后新的数据框,inplace=True,数据框本身会改动

3.缺失数据处理
数据中通常有很多缺失值,需要进行去除,否则影响分析结果
python缺失值有3种:None,NA,NaN
1)Python内置的None值
2)在pandas中,将缺失值表示为NA,表示不可用not available。
3)对于数值数据,pandas使用浮点值NaN(Not a Number)表示缺失数据。
dropna:how='any' 在给定的任何一列中有缺失值就删除

4.数据类型转换
字符串转换为数值(浮点型):astype

字符串转换为日期数据类型:
方法1:split字符串分割后获取日期

方法二:
to_datetime函数
errors='coerce' 如果原始数据不符合日期的格式,转换后的值为空值NaT
format 是原始数据中日期的格式

处理后的数据类型

转换日期过程中不符合日期格式的数值会被转换为空值
注意再次删除列(销售时间,社保卡号)中为空的行
salesDf=salesDf.dropna(subset=['销售时间','社保卡号'],how='any')
5.数据排序
sort_values
by:按哪几列排序
ascending=True 表示升序排列,ascending=True表示降序排列
na_position=True表示排序的时候,把空值放到前列,这样可以比较清晰的看到哪些地方有空值

排序后的列索引值是之前的行号,需要修改成从0到N按顺序的索引值
reset_index

6.异常值处理

通过描述指标:查看出“销售数量”值不能小于0
删除异常值的方法:通过条件判断筛选出数据

三.构建模型
业务指标1:月均消费次数=总消费次数 / 月份数
总消费次数:同一天内,同一个人发生的所有消费算作一次消费
根据列名(销售时间,社区卡号),如果这两个列值同时相同,只保留1条,将重复的数据删除

月份数:销售时间的跨度
第1步:按销售时间升序排序

第2步:获取时间范围

第3步:
days 转为天数
运算符“//”表示取整除

业务指标1:月均消费次数=总消费次数 / 月份数

指标2:月均消费金额 = 总消费金额 / 月份数
sum() 求和

指标3:客单价=总消费金额 / 总消费次数
客单价(per customer transaction)是指商场(超市)每一个顾客平均购买商品的金额,客单价也即是平均交易金额。
