https://www.xin3721.com/eschool/pythonxin3721/

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

一般来说,数据分析的基本过程包括以下几个步骤:

1.提出问题——即我们所想要知道的指标(平均消费额、客户的年龄分布、营业额变化趋势等等)

2.导入数据——把原始数据源导入Jupyter Notebook中(网络爬虫、数据读取等)

3.数据清洗——数据清洗是指发现并纠正数据文件中可识别的错误(检查数据一致性,处理无效值和缺失值等)

4.构建模型(高级的模型构建会使用机器学习的算法)

5.数据可视化——matplotib库等

具体的numpy库等基础知识之前的文章已经介绍了:

Numy基础知识分享

Pandas入门基本知识

我们现在来看一个实例——医院药店销售数据分析

提出问题:

我们想知道的信息有——月均消费额、月均消费次数、客单价、消费趋势

理解数据:

1.读取Excel数据(路径中最好不要有中文,或者特殊符号啥的,不然路径会提示错误找不到。

最好将文件放到一个简单的英文路径下)

importpandas as pd

fileNameStr='D:\朝阳医院2018年销售数据.xlsx' #读取Ecxcel数据

xls = pd.ExcelFile(fileNameStr, dtype='object')

salesDf= xls.parse('Sheet1',dtype='object')

我们可以先查看下数据的基本信息:

salesDf.head() #打印出前5行,以确保数据运行正常

salesDf.shape #有多少行,多少列

salesDf.dtypes #查看每列的数据类型

数据清洗:

1.选择子集(本案例不用):

使用loc方法选择子集

#subSalesDf=salesDf.loc[0:4,'购药时间':'销售数量']

2.列名重命名:

colNameDict = {'购药时间':'销售时间'} #将‘购药时间’改为‘销售时间’

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

salesDf.head()#查看前五行

inplace=False,数据框本身不会变,而会创建一个改动后新的数据框,默认的inplace是False,inplace=True,数据框本身会改动

3.缺失数据处理:

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

1)Python内置的None值

2)在pandas中,将缺失值表示为NA,表示不可用not available。

3)对于数值数据,pandas使用浮点值NaN(Not a Number)表示缺失数据。

后面出来数据,如果遇到错误:......foloat错误,那就是有缺失值,需要处理掉

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

salesDf=salesDf.dropna(subset=['销售时间','社保卡号'],how='any') #删除列(销售时间,社保卡号)中为空的行

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

how='any'意为在给定的任何一列中有缺失值就删除

如果缺失数据太多,我们可以建立模型,使用插入值的方法来补充数据(以后机器学习的文章中介绍)

4.数据类型转换

一开始导入时我们将所有数据都按字符串类型导入的,现在需要将销售数量、应收金额、实收金额的数据类型改为数值类型。

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

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

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

使用astype()方法进行类型转换

我们再来修改日期的格式

用split()方法,用‘ ’分割字符串。返回列表的第一个元素,统一改成年-月-日格式,去掉星期几。

接下来我们分割销售时间,先定义一个分割字符串的函数:

defsplitSaletime(timeColSer):

timeList=[]for value in timeColSer: #例如2018-01-01 星期五,分割后为:2018-01-01

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

timeList.append(dateStr)

timeSer=pd.Series(timeList) #将列表转行为一维数据Series类型

return timeSer

输入:timeColSer——销售时间这一列,是个Series数据类型

输出:分割后的时间,返回也是个Series数据类型

timeSer=salesDf.loc[:,'销售时间'] #获取“销售时间”这一列

dateSer=splitSaletime(timeSer) #对字符串进行分割,获取销售日期

salesDf.loc[:,'销售时间']=dateSer #修改销售时间这一列的值

salesDf.head()

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

5.字符串转换日期

我们使用pd.to_datetime方法来将字符串转换为日期格式。传入的格式是原始数据的日期格式——format='%Y-%m-%d'固定写法:Y表示年、m表示月、d表示日。

salesDf.loc[:,'销售时间']=pd.to_datetime(salesDf.loc[:,'销售时间'],

format='%Y-%m-%d',

errors='coerce')

salesDf.dtypes

errors='coerce':如果原始数据不符合日期的格式,转换后的值为空值NaT

所以转换之后我们还要运行一次删除空值的代码,因为不符合格式的日期被转变为了空值需要删除。

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

6.数据排序

使用pd.sort_values方法对数据进行排序,by表示按那几列进行排序,ascending=True 表示升序排列,ascending=False表示降序排列

print('排序前的数据集')

salesDf.head()

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

ascending=True)print('排序后的数据集')

salesDf.head(3)

接下来我们重命名行号:reset_index方法生成从0到N按顺序的索引值

salesDf=salesDf.reset_index(drop=True)

salesDf.head()

7.异常值处理

首先我们用describe()方法查看数据框中所有数据每列的描述统计信息:

salesDf.describe()

(count:总数,mean:平均数,std:标准差,min:最小值,25%:下四分位数,50%:中位数,75%:上四分位数,max:最大值)

我们发现最小值出现了小于0的情况,分析应该是记录过程中出现错误所致。

我们接下来删除异常值:通过条件判断筛选出销售数量大于0的数据

#设置查询条件

querySer=salesDf.loc[:,'销售数量']>0#应用查询条件

print('删除异常值前:',salesDf.shape)

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

这样,我们就算基本完成数据清洗的步骤了。

构建模型:

第一个指标:月均消费次数=总消费次数/月数

注意:同一天内,同一个人发生的所有消费算作一次消费,根据列名(销售时间,社区卡号),如果这两个列值同时相同,只保留1条,使用drop_duplicates将重复的数据删除

kpi1_Df=salesDf.drop_duplicates(

subset=['销售时间', '社保卡号']

)

totalI=kpi1_Df.shape[0] #总消费次数————有多少行

print('总消费次数=',totalI)

计算月份数我们要知道最早一笔消费的时间和最晚一笔消费的时间:

#第1步:按销售时间升序排序

kpi1_Df=kpi1_Df.sort_values(by='销售时间',

ascending=True)

kpi1_Df=kpi1_Df.reset_index(drop=True) #重命名行名(index)

#第2步:获取时间范围

startTime=kpi1_Df.loc[0,'销售时间'] #最小时间值

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

#第3步:计算月份数

daysI=(endTime-startTime).days #天数

monthsI=daysI//30 #月份数: 运算符“//”表示取整除,返回商的整数部分,例如9//2 输出结果是4

print('月份数:',monthsI)

用天数/30计算月份数(舍弃余数)

最终计算月均消费次数=总消费次数 / 月份数

kpi1_I=totalI //monthsIprint('业务指标1:月均消费次数=',kpi1_I)

第二个指标:月均消费金额=总消费金额/月份数

总消费金额等于实收金额取和,用sum函数很快就能得出

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

monthMoneyF=totalMoneyF / monthsI #月均消费金额

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

第三个指标:客单价=平均交易金额=总消费金额/总消费次数

'''totalMoneyF:总消费金额

totalI:总消费次数'''pct=totalMoneyF /totalIprint('客单价:',pct)

第四个指标:消费趋势

#在进行操作之前,先把数据复制到另一个数据框中,防止对之前清洗后的数据框造成影响

groupDf=salesDf#第1步:重命名行名(index)为销售时间所在列的值

groupDf.index=groupDf['销售时间']#第2步:分组

gb=groupDf.groupby(groupDf.index.month)#第3步:应用函数,计算每个月的消费总额

mounthDf=gb.sum()

mounthDf

python药店销售数据分析_解析医院药店销售数据,看看Python数据分析结果有什么惊人的发现|python基础教程|python入门|python教程...相关推荐

  1. python药店销售数据分析_解析医院药店销售数据,看看Python数据分析结果有什么惊人的发现...

    Apple iPhone 11 (A2223) 128GB 黑色 移动联通电信4G手机 双卡双待 4999元包邮 去购买 > 前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业 ...

  2. python与cad交互_与命令行进行交互_Python数据分析实战应用_数据挖掘与分析视频-51CTO学院...

    为什么学Python: 重要:数据分析是职业技能必备,Python是大数据分析** 趋势:Python是目前非常火的编程语言,使用人多 好学:学习简单,容易上手,使用灵活,可扩展强 **:会Pytho ...

  3. python语法详解_解析 Python3 基础语法

    行与缩进 python最具特色的就是使用缩进来表示代码块,不需要使用大括号 {} . 缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数.实例如下: if True: print ( ...

  4. 【Python基础】快速入门Python(讲解、习题)

    0.导语 Python是一种跨平台的计算机程序设计语言.是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的.大型项目的 ...

  5. 零基础如何快速入门python(学习路线)

    目前Python这门语言在人工智能.机器学习.大数据.数据分析.网络爬虫等... 领域有了比较高的地位,可以说前景是非常好的,在编程领域也是非常适合作为兴趣培养的一门语言,相比较其他不少主流编程语言, ...

  6. python程序是由一系列代码组成的_0基础7日入门Python

    Python是世界上最容易学的编程语言,从没接触过编程的人也能搞定. 从现在开始跟随极客学院成长计划,每天进取,怒赞自己. 给大家整理的这套 python 学习路线图,按照此教程一步步的学习来,肯定会 ...

  7. python面向对象教程_Python入门系列教程3-面向对象

    课程咨询.获取课件.技术交流直接加入博学谷在线学习:631731828 课程简介 本课程是Python系列入门课程的第三阶段,该阶段我们会学习面向对象(OOP)这一重要的编程思想.学习的知识点主要包括 ...

  8. python教程推荐-入门python有什么好的书籍推荐?

    Python 越来越火爆,最近自己也在学习.整理下一些 Python 资料,和练手的项目.希望对你学习 Python 有所帮助. 如果大家想要文中 10G Python 编程视频,点击下面的卡片即可免 ...

  9. python手机销售系统_京东手机销售数据分析kaggle复盘python+tableau分析

    1.数据获取 由于手机的价格以及评论数是需要经过javascript渲染的动态信息,单纯用requests模块是爬取不到的.解决方案是首先使用selenium的webbrowser模块使用本地Chro ...

最新文章

  1. 控制编译文件控制代码质量
  2. 091028 工作记录
  3. Python基础 基本数据类型
  4. mysql登陆三小时平均值图片_Mysql每小时平均值,间隔从半小时开始
  5. Unity-多核优化1-C#JobSystem
  6. android 蓝牙连接obd,Android蓝牙连接汽车OBD设备
  7. 柬埔寨程序员的计算机梦想
  8. 网页嵌套:一个html嵌套到另一个html中
  9. 理解Python装饰器(Decorator)
  10. 吴恩达机器学习入门(配合吴恩达机器学习视频篇)
  11. access 套用表格_将ACCESS数据库导入到EXCEL表格
  12. IPFS(DRAFT 3) 中文版白皮书
  13. 【Vue】实现出生日期计算年龄
  14. TTF、TOF、WOFF 和 WOFF2 的相关概念
  15. 淘宝x-sign签名算法
  16. 数据结构习题及解析三
  17. java 时间格式 外语,java-如何使用ERA设置日语的英语日期格式
  18. 团队的英文翻译缩写_动漫团队名称-团队英文名称~~人数不限的、 最好是** – 手机爱问...
  19. 为什么我不建议你轻易入上位机的“坑”?
  20. linux中python怎么退出_linux 怎么退出python

热门文章

  1. Flex4 Skinning 1: 自定义一个简单按钮的皮肤
  2. java中字符类型的转换
  3. maven checkstyle 文件_flink教程-在IntelliJ IDEA 中玩转 checkstyle
  4. 系统定时任务linux,Linux系统管理之定时任务
  5. 如何用python做俄罗斯方块_你的童年有俄罗斯方块吗?教你用 Python 实现俄罗斯方块!...
  6. diff命令两个服务器文件,LINUX命令diff-文件管理-比较给定的两个文件的不同
  7. python汉字转到ascii码_python中ASCII码字符与int之间的转换方法
  8. jetson windows_生命不息,折腾不止:Jetson Nano填坑之软件篇
  9. Java 数组转字符串
  10. linux不同机器之间的拷贝,Linux下不同机器之间的文件拷贝