热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

数据分析实例——医院销售数据分析

1序言数据分析的基本步骤是:提出问题——理解数据——数据清洗——构建模型——数据可视化。本文基于Python中的Pandas包,对某医院销售数据进行分析。2分析目的根据原始销售数据

1 序言

数据分析的基本步骤是:提出问题——理解数据——数据清洗——构建模型——数据可视化。本文基于Python中的Pandas包,对某医院销售数据进行分析。

2 分析目的

根据原始销售数据,分析月均消费次数、月均消费金额、客单价、消费趋势4个业务指标。

3 理解数据

首先导入销售数据表:

# 导入pandas包,从文件读取Excel数据
import pandas as pd
fileNameStr='./朝阳医院2018年销售数据.xlsx'
xls = pd.ExcelFile(fileNameStr, dtype='object')
salesDf = xls.parse('Sheet1',dtype='object')
# 查看数据基本信息
salesDf.head()

《数据分析实例——医院销售数据分析》
《数据分析实例——医院销售数据分析》

# 查看数据集大小
salesDf.shape
(6578, 7)
# 查看数据类型
salesDf.dtypes
购药时间 object
社保卡号 object
商品编码 object
商品名称 object
销售数量 object
应收金额 object
实收金额 object
dtype: object

4 数据清洗

数据清洗的一般步骤包括:选择子集—列名重命名—缺失数据处理—数据类型转换—数据排序—异常值处理。下面将通过此例逐步实践上述过程。

1) 选择子集

本案例数据集能够满足分析要求,不需要选择子集。

2) 列名重命名

#创建旧列名和新列名对应关系,并在原数据框中进行重命名
colNameDict = {'购药时间':'销售时间'}
salesDf.rename(columns = colNameDict,inplace=True)
salesDf.head()

《数据分析实例——医院销售数据分析》
《数据分析实例——医院销售数据分析》

3) 缺失数据处理

pandas使用浮点值NaN表示浮点和非浮点数组里的缺失数据,可以用isnull()和notnull()函数来判断缺失情况。

对于缺失数据的一般处理方法是删除或者填充。本例对缺失数据进行删除处理。

print('删除缺失值前大小',salesDf.shape)
删除缺失值前大小 (6578, 7)
# 删除列(销售时间,社保卡号)中为空的行
salesDf=salesDf.dropna(subset=['销售时间','社保卡号'],how='any')
print('删除缺失后大小',salesDf.shape)
删除缺失后大小 (6575, 7)

4) 数据类型转换

读取数据时是按照字符串格式读取的,需要将数据列从字符串格式转换为数值型。

#字符串转换为数值(浮点型)
salesDf['销售数量'] = salesDf['销售数量'].astype('float')
salesDf['应收金额'] = salesDf['应收金额'].astype('float')
salesDf['实收金额'] = salesDf['实收金额'].astype('float')
print('转换后的数据类型:\n',salesDf.dtypes)
转换后的数据类型:
销售时间 object
社保卡号 object
商品编码 object
商品名称 object
销售数量 float64
应收金额 float64
实收金额 float64
dtype: object

数据集中,销售时间的格式为“2018-01-01 星期五”,分析中并不需要星期信息,因此需通过字符串分割,将其删除,只保留日期“2018-01-01”。

def splitSaletime(timeColSer):
timeList=[]
for value in timeColSer:
#例如2018-01-01 星期五,分割后为:2018-01-01
dateStr=value.split(' ')[0]
timeList.append(dateStr)
#将列表转行为一维数据Series类型
timeSer=pd.Series(timeList)
return timeSer
#获取“销售时间”列
timeSer=salesDf.loc[:,'销售时间']
#对字符串进行分割,获取销售日期
dateSer=splitSaletime(timeSer)
#修改销售时间这一列的值
salesDf.loc[:,'销售时间']=dateSer
salesDf.head()

《数据分析实例——医院销售数据分析》
《数据分析实例——医院销售数据分析》

# 将“销售时间”转换为日期格式
# format 是原始数据中日期的格式
salesDf.loc[:,'销售时间']=pd.to_datetime(salesDf.loc[:,'销售时间'],
format='%Y-%m-%d',
errors='coerce')
salesDf.dtypes
销售时间 datetime64[ns]
社保卡号 object
商品编码 object
商品名称 object
销售数量 float64
应收金额 float64
实收金额 float64
dtype: object
# 转换后出现空行,将其删除
salesDf=salesDf.dropna(subset=['销售时间','社保卡号'],how='any')

5) 数据排序

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

《数据分析实例——医院销售数据分析》
《数据分析实例——医院销售数据分析》

#重命名行名(index):排序后的列索引值是之前的行号,需要修改成从0到N按顺序的索引值
salesDf=salesDf.reset_index(drop=True)
salesDf.head()

《数据分析实例——医院销售数据分析》
《数据分析实例——医院销售数据分析》

6) 异常值处理

# 查看数据统计信息,“销售数量”值不能小于0
salesDf.describe()

《数据分析实例——医院销售数据分析》

# 删除异常值:通过条件判断筛选出数据
# 查询条件
querySer=salesDf.loc[:,'销售数量']>0
# 应用查询条件
salesDf=salesDf.loc[querySer,:]

4 构建模型

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

# 同一天、同一个社保卡号视为一次消费,因此需删除重复记录
kpi1_Df=salesDf.drop_duplicates(
subset=['销售时间', '社保卡号']
)
# 总消费次数:有多少行
totalI=kpi1_Df.shape[0]
print('总消费次数=',totalI)
总消费次数= 5342
# 计算月份数
# 按销售时间升序排序
kpi1_Df=kpi1_Df.sort_values(by='销售时间',
ascending=True)
# 重命名行名(index)
kpi1_Df=kpi1_Df.reset_index(drop=True)
# 获取时间范围
startTime=kpi1_Df.loc[0,'销售时间']
endTime=kpi1_Df.loc[totalI-1,'销售时间']
#天数
daysI=(endTime-startTime).days
#月份数
monthsI=daysI//30
print('月份数:',monthsI)
月份数: 6
#业务指标1:月均消费次数=总消费次数 / 月份数
kpi1_I=totalI // monthsI
print('业务指标1:月均消费次数=',kpi1_I)
业务指标1:月均消费次数= 890

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

#总消费金额
totalMoneyF=salesDf.loc[:,'实收金额'].sum()
#月均消费金额
monthMoneyF=totalMoneyF / monthsI
print('业务指标2:月均消费金额=',monthMoneyF)
业务指标2:月均消费金额= 50668.35166666666

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

pct=totalMoneyF / totalI
print('客单价:',pct)
客单价: 56.909417821040805

4) 业务指标4:消费趋势

# 数据分组
groupDf=salesDf
# 重命名行名(index)为销售时间所在列的值
groupDf.index=groupDf['销售时间']
gb=groupDf.groupby(groupDf.index.month)
monthDf=gb.sum()
monthDf

《数据分析实例——医院销售数据分析》

import matplotlib.pyplot as plt
x = monthDf.loc[:,'销售数量']
x
plt.plot(x,marker='o',markerfacecolor='blue', markersize=8)
plt.title('Trend of change in sales volume')
plt.xlabel('Months')
plt.ylabel('sales volume')
plt.show()

《数据分析实例——医院销售数据分析》

y = monthDf.loc[:,'实收金额']
y
plt.plot(y,marker='o',markerfacecolor='blue', markersize=8)
plt.title('Trend of change in sales amount')
plt.xlabel('Months')
plt.ylabel('sales amount')
plt.show()

《数据分析实例——医院销售数据分析》


推荐阅读
  • 数据挖掘研讨课结束了,这门课的考核方法是每个同学根据班里面同学的课堂表现打分,然后老师再取截断平均值作为最后的分数。于是我就想,能否用p ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 2022年的风口:你看不起的行业,真的很挣钱!
    本文介绍了2022年的风口,探讨了一份稳定的副业收入对于普通人增加收入的重要性,以及如何抓住风口来实现赚钱的目标。文章指出,拼命工作并不一定能让人有钱,而是需要顺应时代的方向。 ... [详细]
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
  • 本文详细介绍了Python中正则表达式和re模块的使用方法。首先解释了转义符的作用,以及如何在字符串中包含特殊字符。然后介绍了re模块的功能和常用方法。通过学习本文,读者可以掌握正则表达式的基本概念和使用技巧,进一步提高Python编程能力。 ... [详细]
  • 腾讯安全平台部招聘安全工程师和数据分析工程师
    腾讯安全平台部正在招聘安全工程师和数据分析工程师。安全工程师负责安全问题和安全事件的跟踪和分析,提供安全测试技术支持;数据分析工程师负责安全产品相关系统数据统计和分析挖掘,通过用户行为数据建模为业务决策提供参考。招聘要求包括熟悉渗透测试和常见安全工具原理,精通Web漏洞,熟练使用多门编程语言等。有相关工作经验和在安全站点发表作品的候选人优先考虑。 ... [详细]
  • 本文总结了使用不同方式生成 Dataframe 的方法,包括通过CSV文件、Excel文件、python dictionary、List of tuples和List of dictionary。同时介绍了一些注意事项,如使用绝对路径引入文件和安装xlrd包来读取Excel文件。 ... [详细]
  • 本文介绍了一个Python函数same_set,用于判断两个相等长度的数组是否包含相同的元素。函数会忽略元素的顺序和重复次数,如果两个数组包含相同的元素,则返回1,否则返回0。文章还提供了函数的具体实现代码和样例输入输出。 ... [详细]
  • PHP组合工具以及开发所需的工具
    本文介绍了PHP开发中常用的组合工具和开发所需的工具。对于数据分析软件,包括Excel、hihidata、SPSS、SAS、MARLAB、Eview以及各种BI与报表工具等。同时还介绍了PHP开发所需的PHP MySQL Apache集成环境,包括推荐的AppServ等版本。 ... [详细]
  • Python 可视化 | Seaborn5 分钟入门 (六)——heatmap 热力图
    微信公众号:「Python读财」如有问题或建议,请公众号留言Seaborn是基于matplotlib的Python可视化库。它提供了一个高级界面来绘制有吸引力的统计图形。Seabo ... [详细]
  • python是一门简单灵动的语言。从今天开始我要每天都做笔记,每天都要写博客记录我所想,我所学到的。笔记提纲:1,pyt ... [详细]
author-avatar
垚垚8858
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有