一,数据分析基本步骤提出问题
理解数据
数据清洗
构建模型
数据可视化
以某医院药品销售为例进行操作说明
1,提出问题
要从销售数据中分析以下业务指标:
1)月均消费次数;
2)月均消费金额;
3)客单价;
4)消费趋势
首先,将数据.xlsx文件导入:
注意电脑中的文件路径默认使用"\",这个时候需要在路径前面加一个r(转义符),也可以不加,但是需要把路径里的"\"转换成“//”
文件中可能有多个sheet,通过设定sheet_name来指定,可以是具体的名字,也可以时顺序,从0开始计数
参数dtype=str 统一先按照字符串读入,之后再转换
salesDf.head(),表示打印出前5行,以确保导入数据正确。括号里可以写入数值,指定显示行数,如果写入n,则显示n*5行
第二部理解数据,比较容易理解,在这里不做说明。
2,数据清洗
在整个数据分析过程中,数据的清洗会占用很多的时间,因此我们要牢记清洗步骤,以提高效率。
1)选择子集
选择子集表示只选取我们要进行分析的数据,选取某一行,某一列等。我们要分析的问题需要所有数据集合,因此这里我们不做操作,只做说明。
可通过.loc在数据里进行选取
2)列名重命名
为了方便接下来的分析,可以把列名进行重命名操作
这里把列名“购药日期”重命名为“销售日期”
注意colums参数里前面是需要重命名的列名,后面是所需的重命名
inplace有两个参数,True表示在原表的基础上直接进行修改,如果是False,则要新增一列
3)缺失值处理
首先查看一下删除缺失值之前数据大小
用.dripna对空值进行删除操作
注意如果,执行之后空值并未删除,这是因为这里的nan实际是一个空字符串,.dropna在使用时并不会将空字符串当作缺失值处理。因此用replace将字符串nan替代为真正的缺失值np.nan,再进行.dropna
.dropna里的参数subset表示指定需要查找空值的列
.dropna里的参数how有两个参数,当用"any"时表示只要有空值就把所在行删除,取“all”时,表示只有一整行都为NaN时,把整行删除
删除之后,数据行数从6578变成6575,说明空值被删除
4)数据类型转换
在导入数据时,我们指定了数据类型为str,但是有些行的数据并非字符串类型,需要将字符串转换字符串转换为数值(浮点型)字符串转换为日期数据类型
数据里销售时间显示的形式为“2018-01-01 星期五”,我们只需要前面的年月日,后面的星期不需要,因此需要进行处理
这里用到了函数:定义函数:分割销售日期,获取销售日期
输入:timeColSer 销售时间这一列,是个Series数据类型
输出:分割后的时间,返回也是个Series数据类型
接下来将字符串转换为日期
转换日期时,不符合格式的日期会被转换成空值,因此要再一次删掉空值
5)数据排序
数据排序会使我们发现很多关键问题
注意.sort_values的ascending参数,ascending=True 表示升序排列,ascending=True表示降序排列
na_position='first'表示排序的时候,把空值放到前列,这样可以比较清晰的看到哪些地方有空值
重新排序之后,我们将索引也进行重置
6)异常值处理
可以通过.describe来查看数据的描述统计,发现销售数量的最小值为负值,肯定是存在异常值
4,构建模型指标1:月均消费次数=总消费次数/月份数
总消费次数:同一天内,同一个人发生的所有消费算作一次消费,因此,要进行删除重复值的操作
计算时间范围
第1步:按销售时间升序排序
第2步:获取时间范围
所以业务指标月均消费次数指标2:月均消费金额=总消费金额/月份数指标3:客单价=总消费金额/总消费次数指标4:消费趋势,画图:折线图(待续)