数据分析笼统来说,大概分为五个步骤:提出问题、理解数据、数据清洗、构建模型、数据可视化。在数据分析中,很基础又关键的一步就是数据清洗,对原始数据的处理会花掉整个分析过程的很大一部分时间,这是因为如果前期数据没有处理好,会影响后续的分析以及建模。那么当我们拿到一份数据,该如何对数据进行处理和分析呢?下面以药店销售数据为例,进行如下分析:

导入pandas、numpy包及excel原始数据:

import pandas as pd

import numpy as np

filename = r'C:\安装包\朝阳医院2018年销售数据.xlsx'

salesDf = pd.read_excel(filename, sheet_name='Sheet1', dtype = 'object')

salesDf.head()

salesDf.shape

1.提出问题

通过这些数据我要分析什么?这个可能一开始是来自于老板或者其他部门的需求,他们提出需求后,我们来进行分析,在这个案例里,我们收到的需求是分析“月均消费次数”、“月均消费金额”、“客单价”、“消费趋势”。

2.理解数据

明确了分析目的之后,对原始数据进行观察,这个数据是一个6578行、7列的数据集。列属性分别为:购药时间、社保卡号、商品编码、销售数量、应收金额、实收金额,type为object;除此之外,还要观察数据结构以及数据的一些逻辑关联,形成一个大概的分析思路后,再进行下一步数据清洗工作。

#查看数据集的shape及列属性的type

salesDf.shape

salesDf.dtypes

3.数据清洗

数据清洗是要反复多次,才可以拿到我们想要数据,大致有如下6个步骤:选择子集合

就是选择我们需要的字段,将多余的字段删掉列名重命名

有一些列名可能不是很直观,我们可以更改为更好理解的列名,如:将本案例中的‘购药时间’改为‘销售时间’。

salesColStr = {'购药时间':'销售时间'}

salesDf.rename(columns=salesColStr, inplace=True)

salesDf缺失数据处理

python中数据有3种缺失值:

①None;②Na 表示 not available;③NaN 浮点型 not a number 表示缺失数据

再回到我们的案例中,我们要分析“月均消费次数”、“月均消费金额”、“客单价”、“消费趋势”,所以销售时间、社保卡号、消费金额 都不可以缺失,如果缺失了就是无意义的数据。在删除缺失值的过程中,要经常用shape监控删除后的数据集的大小变化。

salesDf = salesDf.dropna(subset=['销售时间','社保卡号'],how='any')数据类型转换

观察列属性的type,将金额数量转换成float,将日期的星期去掉,日期和星期之间是用空格隔开的,所以用split进行拆分,然后用pandas的to_datetime函数将目标字段type转换为datetime,并将格式设为'%Y-%m-%d'。转换完成后执行dtypes查看是否转换成功,然后再查看一下新的数据集,是否空值,如果有空值记得drop掉。

salesDf['销售数量'] = salesDf['销售数量'].astype('float')

salesDf['应收金额'] = salesDf['应收金额'].astype('float')

salesDf['实收金额'] = salesDf['实收金额'].astype('float')

def splitSalesTime(timeColStr):

timelist=[]

for value in timeColStr:

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

timelist.append(dateStr)

timeSer = pd.Series(timelist)

return timeSer

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

datetime = splitSalesTime(timeColStr)

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

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

salesDf.dtypes

salesDf

salesDf = salesDf.dropna(subset='销售时间',how='any')

salesDf.shape数据排序

由于我们要分析“月均消费次数”和“月均消费金额”这两个跟销售时间有关的指标,所以我们先对新的数据集按“销售时间”进行排序,排序后发现index就乱掉了,reset一下index就可以。

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

salesDf = salesDf.reset_index(drop=True)

salesDf.head()reset之前的indexreset之后的index异常值处理

得到我们想要的数据集后,下一步可以进行简要的统计描述分析,执行descibe()函数,可以得到平均数、标准差、最大值、最小值以及四分位数。能从执行结果中最为直接的看到,最小值销售量、应收金额、实收金额都是负数,这个是不符合常理的,所以我们要将这个异常值用条件切片的方式剔除。

salesDf.describe()剔除异常值前的结果

#剔除异常值

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

salesDf.describe()剔除异常值后的结果

4.构建业务指标业务指标1:月均消费次数(所有人的总消费天数/月份数)

指标解读:月均消费次数,是一个人一天无论消费几次都记一次,其实就是消费天数的衡量,然后进行累加,最后把所有人的消费次数加在一起与月份做除法。需要注意的是数据中存在一天消费多次的人群,需要进行去重。

第一步,用 drop_duplicates() 去重,得到新子集 kpil_Df 并重复之前的操作进行排序和reset index;

kpil_Df = salesDf.drop_duplicates(subset=['销售时间','社保卡号'])

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

kpil_Df = kpil_Df.reset_index(drop=True)

第二步,求总消费次数 totalI;

totalI = kpi1_Df.shape[0]

第三步,求月份数monthI。注意日期相减后要加 '.days' 用来转化成 int;这里month是用地板除求商。

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

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

daysI=(endTime-startTime).days

monthI=daysI//30

最后,可得到月均消费次数为平均890次/月。

kpi1_I=totalI // monthsI

print('月均消费次数=',kpi1_I)

业务指标2:月均消费金额(总消费金额/月份)

指标解读:用总消费金额与月份做除法。(注意:之前去重得到结果不影响月份,月份可以沿用之前处理好的monthI,但消费金额要用 salesDf 这个数据集来计算)

执行如下代码,可得到月均消费结果为50,668.35元

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

monthMoneyF=totalMoneyF / monthsI

print('月均消费金额=',monthMoneyF)

业务指标3:客单价(总消费金额 / 总消费次数)

指标解读:客单价(per customer transaction)是指商场(超市)每一个顾客平均购买商品的金额,客单价也即是平均交易金额。

执行如下代码,可得到 客单价≈56.91元

pct=totalMoneyF / totalI

print('客单价:',pct)

业务指标4:消费趋势

指标解读:每个月消费额的波动趋势,要按月份进行聚类分析

先复制一份 salesDf 数据,避免聚类时对已清洗好的数据造成影响

groupDf = salesDf

第一步,重命名行名(index)为销售时间所在列的值

groupDf.index = goupDf['销售时间']

第二步,按销售月份进行分组

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

第三步,计算每个月的消费总额,并绘制折线图

mounthDf=gb.sum()

mouthDf

import matplotlib.pyplot as plt

monthDf.plot(kind='line')

从折线图中,我们可以看到1、4、6月份消费额较高,2、7月消费额较低,具体原因还要结合实际业务情况进行进一步分析。

到这里 月均消费次数、月均消费金额、客单价格、消费趋势这4个业务指标的数据,我们已经全部得到啦。

python 销售数据分析输出表格_Python处理Excel数据实例--销售数据分析相关推荐

  1. python 销售数据分析输出表格_Python实现将数据库一键导出为Excel表格的实例

    Python实现将数据库一键导出为Excel表格的实例 下面小编就为大家带来一篇Python实现将数据库一键导出为Excel表格的实例.小编觉得挺不错的,现在就分享给大家, 数据库数据导出为excel ...

  2. python的format输出报文_python构造IP报文实例

    我就废话不多说了,大家还是直接看代码吧! import socket import sys import time import struct HOST, PORT = "10.60.66. ...

  3. python 销售数据分析输出表格_Python 处理分析 128 张 Excel 表格竟不到3秒?| 附数据集...

    原标题:Python 处理分析 128 张 Excel 表格竟不到3秒?| 附数据集 作者 | 周志鹏 责编 | 刘静 有不少旁友想要了解怎么用Python提升处理数据的效率,或者说怎么用Python ...

  4. python实现dem输出三维模型_python实现DEM数据的阴影生成的方法

    相关的依赖库在我的github网站上 首先贴出代码: import solar from gradient import * from shadows import * import numpy as ...

  5. PDFPlumber使用入门+python实现PDF中表格转化为Excel的方法

    PDFPlumber使用入门:https://blog.csdn.net/weixin_48629601/article/details/107224376 python实现PDF中表格转化为Exce ...

  6. python2读取excel中文处理_Python处理Excel数据

    前段时间做了个小项目,帮个海洋系的教授做了个数据处理的软件.基本的功能很简单,就是对Excel里面的一些数据进行过滤,统计,对多个表的内容进行合并等.之前没有处理Excel数据的经验,甚至于自己都很少 ...

  7. python读取表格数据_Python读取Excel数据并根据列名取值

    一直想将自己接触到的东西梳理一遍,可就是迈不出第一步,希望从这篇总结开始不要再做行动的矮人了. 最近测试过程中需要用到python读取excel用例数据,于是去了解和学习了下xlrd库,这里只记录使用 ...

  8. python读写excel表格_Python读写Excel表格(简单实用)

    首先安装两个库:pip install xlrd.pip install xlwt! 1.python读excel--xlrd2.python写excel--xlwt 1.读excel数据,包括日期等 ...

  9. python批量读取excel表格数据_Python读取Excel数据并生成图表过程解析

    一.需求背景 自己一直在做一个周基金定投模拟,每周需要添加一行数据,并生成图表.以前一直是用Excel实现的.但数据行多后,图表大小调整总是不太方便,一般只能通过缩放比例解决. 二.需求实现目标 通过 ...

最新文章

  1. C++ Time类重载运算符
  2. 【数据挖掘知识点二】概率基础
  3. Leetcode 141. 环形链表 解题思路及C++实现
  4. python公里转海里_海里、公里、英里之间的转换
  5. git迁移MySQL数据库_Centos7下Gitlab迁移数据库mysql过程
  6. [sh]rm -rf*的防护和普通用户执行命令
  7. 智能贴图样机素材在手,海报逼格马上就有!
  8. ios 中如何应对UIScrollView快速滑动(暴力用户,暴力测试)
  9. java文件传输接口
  10. 深入理解计算机系统 csapp 家庭作业(第三章完整版)
  11. 游戏服务器和普通服务器的区别
  12. Graccvs文件正文提取开发组件--文件内容搜索的利器
  13. 直播平台开发中解决iOS 14 兼容问题和静默推送
  14. poi-tl导出word复杂表格(单元格合并,生成复杂表格)
  15. camel_使用Apache Camel进行负载平衡
  16. 原厂PW4203降压型1-3节锂电池充电芯片
  17. 腾讯开源的标星 12k 的力作
  18. android pad查看cpu,苹果还是安卓?一图教你如何选择适合自己的平板
  19. 软件工程应用于实践:AJ-Report项目 源码分析(8)
  20. 对比分析法、多维度拆解、辛普森悖论

热门文章

  1. ISO20000培训课
  2. CentOS虚拟化尝试
  3. 漫画:AOP 面试造火箭事件始末
  4. 4.react受控组件与非受控组件
  5. 笔记本电脑故障-内存条
  6. Citavi插件的安装和使用以及注意事项
  7. 运用深度学习预测肺癌
  8. 圆周分孔计算公式表图_圆周等分孔最小位置度计算方法与流程
  9. Thymeleaf th:each 循环迭代与 th:if、th:switch 条件判断
  10. 0基础学插画是报班还是自学