针对某医院18年销售记录,做简单的数据分析,熟悉相关语法及分析过程。

一、分析目的

以某医院18年销售数据为例,了解18年的销售情况,分析几个业务指标,例如:月均消费次数,月均消费金额、客单价以及消费趋势等,可以用于了解不同季节的病情、指导医院备货等。

二、 数据分析过程

数据分析过程基本包括:数据获取、数据清洗、模型构建、数据可视化、相关分析等

1、数据获取

根据已有的18年销售单据,提取相应的数据。(本次没有数据抓取过程)首先导入相关的python包,并获取数据集。

# coding: utf-8import xlrd
import openpyxl
import pandas as pd
from pandas import Series, DataFrame
import numpy as np#读取数据集,显示前5行
filename = r'C:\Users\Administrator\Desktop\朝阳医院2018年销售数据.xlsx'
datafile = pd.ExcelFile(filename)
data = datafile.parse('Sheet1')
#查看基本信息
data.shape

data.index

data.columns
data.count

显示信息如下:

总共有6578行7列数据,其中购药时间、社保卡号有6576行数据,其他的有6577行数据。所以此数据集中存在缺失值,需对缺失值进行处理。

2、数据清洗

数据清洗基本过程:选择子集、列重命名、缺失值处理、数据类型转换、数据排序、异常值处理等。

为便于分析,将其中列名:购买时间,更改为销售时间,消除歧义。

#列重命名
data.rename(columns={'购药时间':'销售时间'}, inplace = True)
print(data.head())
3、缺失值处理

从前面显示的信息中可以看出,数据集中存在缺失值。使用简单的方法,直接使用dropna函数删除缺失数据,具体如下:

#缺失值处理
print('删除缺失值前:',data.shape)

data.info()

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

print('删除缺失值后:',dataDF.shape)

dataDF.info()

4、数据类型转换

为便于数据导入,便于后续相关分析,最好对数据进行相应的转换。可以使用astype函数进行数据类型转换,并通过split函数对无用的时间信息进行分割,如下所示:

#数据类型转换
#转换各部分数据格式
dataDF['销售数量'] = dataDF['销售数量'].astype('str')#后面进行销售时间分割,不能为float类型

dataDF.dtypes#将销售时间中,星期与日期分开def split_time(timesale):

stime = sale_time.split(' ')[0]

timelist = [] for sale_time in timesale:

#将列表变成一个一维Series类型

timelist.append(stime)#分割销售时间,并提取时间部分,组成一个列表 STime = Series(timelist) return STime

dataDF.loc[:, '销售时间'] = time_data

#获取销售时间这一列,然后调用函数分割,并修改这一列saletime = dataDF.loc[:, '销售时间']time_data = split_time(saletime)

dataDF.head()

在把分割后的日期,转换为时间格式。

#把分割日期,转换为时间格式
dataDF.loc[:, '销售时间'] = pd.to_datetime(dataDF.loc[:, '销售时间'], format = '%Y-%m-%d', errors = 'coerce')

dataDF.dtypes#转换日期格式过程中,errors = 'coerce'不符合日期的格式,转换后的值为NaT#删除其中的空行

dataDF.info()

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

dataDF.shape

5、数据排序

对分割后的时间进行顺序排序,并按照此排序重置索引。

#(6)排序,排序之后,索引会被打断,需要重置索引
#(7)异常值处理

#查看描述统计信息

dataDF.describe()
#按销售时间排序sort_index报错,sort_value可行dataDF = dataDF.sort_index(by = '销售时间', ascending = True)dataDF.head()#重置索引dataDF = dataDF.reset_index(drop = True)dataDF.head()

6、异常值处理

先通过描述的统计信息,查看数据。通过min中有负数,判别出存在异常值。

#(7)异常值处理

#查看描述统计信息

dataDF.describe()

#排除异常值
pop = dataDF.loc[:,'销售数量'] > 0

dataDF = dataDF.loc[pop, :]

dataDF.describe()

7、数据可视化

#3.构建模型及可视化
#月均消费次数(总的消费次数/消费时间)

#(1)删除重复数据

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

total_row = data_unique.shape[0]

print('总的消费次数:', total_row)
#(2)消费时间
#按照消费时间重新排序,然后根据最大、最小时间计算月份数
data_unique = data_unique.sort_values(by = '销售时间', ascending = True)

#重置索引data_unique = data_unique.reset_index(drop = True)

endtime = data_unique.loc[total_row - 1, '销售时间']

starttime = data_unique.loc[0, '销售时间']days = (endtime - starttime).daysmonths = days // 30

print('月均消费次数:', kpil_M)

print('月份数:', months)

kpil_M = total_row // months

#月均消费金额
totalMoney = dataDF.loc[:, '实收金额'].sum()

monthMoney = totalMoney // months

print('月均消费金额:', monthMoney)

#消费趋势分析
import matplotlib.pyplot as plt

import matplotlib

mpl.rcParams['font.sans-serif'] = ['SimHei']#黑体
from pylab import mpl#用于显示中文
#复制一份数据
groupDF = dataDF

#将销售时间设置为index

groupDF.index = groupDF['销售时间']
groupDF.head()

#可视化绘图
plt.plot(groupDF['实收金额'])

plt.title('按天销售金额图')

plt.ylabel('实收金额')

plt.xlabel('时间')#保持图片

plt.savefig(r'C:\Users\Administrator\Desktop\sale_day.png')

#显示图片

plt.show()

#(4)分析药品销售情况
#聚合统计各种药品的销售数量
medicineS = groupDF[['商品名称', '销售数量']]
medicine_list = medicineS.groupby('商品名称')['销售数量']

all_medicine = medicine_list.sum()#对每种药品总量排序

all_medicine = all_medicine.sort_values()#(by = '销售数量', ascending = 'False')

all_medicine.head()#显示销售数量前十的药品top10 = all_medicine[:10]

print(top10)

#可视化前十种药品
top10.plot(kind='bar')#柱状图

plt.title('销售前十药品')

plt.ylabel('销售数量')

plt.xlabel('药品种类')plt.legend(loc=0)

plt.savefig(r'C:\Users\Administrator\Desktop\medicine.png')
plt.show()

全部代码:

# coding: utf-8import xlrd
import openpyxl
import pandas as pd
from pandas import Series, DataFrame
import numpy as np#1.获取数据
#(1)读取数据集,显示前5行filename = r'C:\Users\Administrator\Desktop\朝阳医院2018年销售数据.xlsx'
datafile = pd.ExcelFile(filename)
data = datafile.parse('Sheet1')#data.head()#查看基本信息data.shape
data.index
data.columns
data.count###################################################################################2.数据清洗
#(1)列重命名
data.rename(columns={'购药时间':'销售时间'}, inplace = True)#print(data.head())#(2)缺失值处理print('删除缺失值前:',data.shape)
data.info()dataDF = data.dropna(subset=['销售时间','社保卡号'], how = 'any')print('删除缺失值后:',dataDF.shape)
dataDF.info()#(3)数据类型转换
#转换各部分数据格式
dataDF['销售数量'] = dataDF['销售数量'].astype('str')#后面进行销售时间分割,不能为float类型
dataDF.dtypes#将销售时间中,星期与日期分开
def split_time(timesale):timelist = []for sale_time in timesale:stime = sale_time.split(' ')[0]timelist.append(stime)#分割销售时间,并提取时间部分,组成一个列表#将列表变成一个一维Series类型STime = Series(timelist)return STime#获取销售时间这一列,然后调用函数分割,并修改这一列saletime = dataDF.loc[:, '销售时间']
time_data = split_time(saletime)
dataDF.loc[:, '销售时间'] = time_data
dataDF.head()#把分割日期,转换为时间格式dataDF.loc[:, '销售时间'] = pd.to_datetime(dataDF.loc[:, '销售时间'], format = '%Y-%m-%d', errors = 'coerce')
dataDF.dtypes#转换日期格式过程中,errors = 'coerce'不符合日期的格式,转换后的值为NaT
#删除其中的空行
dataDF = dataDF.dropna(subset = ['销售时间','社保卡号'], how = 'any')
dataDF.shape
dataDF.info()#(4)排序,排序之后,索引会被打断,需要重置索引
#按销售时间排序sort_index报错,sort_value可行
dataDF = dataDF.sort_index(by = '销售时间', ascending = True)
dataDF.head()#重置索引
dataDF = dataDF.reset_index(drop = True)
dataDF.head()#(5)异常值处理
#查看描述统计信息
dataDF.describe()#排除异常值
pop = dataDF.loc[:,'销售数量'] > 0
dataDF = dataDF.loc[pop, :]dataDF.describe()#3.构建模型及可视化
#(1)月均消费次数(总的消费次数/消费时间)
#1)删除重复数据
data_unique = dataDF.drop_duplicates(subset=['销售时间', '社保卡号'])
total_row = data_unique.shape[0]
print('总的消费次数:', total_row)#2)消费时间
#按照消费时间重新排序,然后根据最大、最小时间计算月份数
data_unique = data_unique.sort_values(by = '销售时间', ascending = True)
#重置索引
data_unique = data_unique.reset_index(drop = True)
starttime = data_unique.loc[0, '销售时间']
endtime = data_unique.loc[total_row - 1, '销售时间']days = (endtime - starttime).days
months = days // 30print('月份数:', months)kpil_M = total_row // months
print('月均消费次数:', kpil_M)#(2)月均消费金额
totalMoney = dataDF.loc[:, '实收金额'].sum()
monthMoney = totalMoney // months
print('月均消费金额:', monthMoney)#(3)消费趋势分析
import matplotlib.pyplot as plt
import matplotlib
from pylab import mpl#用于显示中文
mpl.rcParams['font.sans-serif'] = ['SimHei']#黑体#复制一份数据
groupDF = dataDF
#将销售时间设置为index
groupDF.index = groupDF['销售时间']
groupDF.head()#可视化绘图
plt.plot(groupDF['实收金额'])
plt.title('按天销售金额图')
plt.xlabel('时间')
plt.ylabel('实收金额')
#保持图片
plt.savefig(r'C:\Users\Administrator\Desktop\sale_day.png')
#显示图片
plt.show()#(4)分析药品销售情况
#聚合统计各种药品的销售数量
medicineS = groupDF[['商品名称', '销售数量']]
medicine_list = medicineS.groupby('商品名称')['销售数量']
all_medicine = medicine_list.sum()
#对每种药品总量排序
all_medicine = all_medicine.sort_values()#(by = '销售数量', ascending = 'False')
all_medicine.head()#显示销售数量前十的药品
top10 = all_medicine[0:10]
print(top10)#可视化前十种药品
top10.plot(kind='bar')#柱状图
plt.title('销售前十药品')
plt.xlabel('药品种类')
plt.ylabel('销售数量')
plt.legend(loc=0)
plt.savefig(r'C:\Users\Administrator\Desktop\medicine.png')
plt.show()

探索性分析——某医院18年销售数据分析相关推荐

  1. python数据分析的四阶段以及电商数据描述性分析和探索性分析

    目录 数据分析的四阶段 1 需求 数据情况 需求 产出 2 数据规整(数据预处理,数据清洗,数据重构) 2.1 数据预处理 2.1.1 发现错误的对策 2.1.2 修正缺失值 2.2 修正错误数据 方 ...

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

    https://www.xin3721.com/eschool/pythonxin3721/ 前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时 ...

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

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

  4. 数据探索性分析_探索性数据分析

    数据探索性分析 When we hear about Data science or Analytics , the first thing that comes to our mind is Mod ...

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

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

  6. 2023年泰迪杯数据挖掘挑战赛B题--产品订单数据分析与需求预测(2.数据探索性分析)

    前言 继续上一片数据预处理进行续写,利用预处理之后的数据进行数据分析并且解决问题一相关的问题.问题一主要目的是让研究各种因素对于需求量的影响,然后找到确定影响需求量的主要因素并且进行数据分析和主要特征 ...

  7. spss数据分析(频数分析、描述性统计分析、探索性分析、连列表分析)

    1频数分析 对平均数.四分位数.百分位数.标准差.方差.偏度等统计量进行分析 原始数据 分析-描述统计-频率 输出:   2描述性统计分析 分析-描述统计-描述 输出: 勾选了将标准化得分另存为变量后 ...

  8. 天池二手车交易价格预测Task2-赛题理解与数据探索性分析(EDA)

    一.赛题理解 1.1赛题概述 赛题以预测二手车的交易价格为任务,该数据来自某交易平台的二手车交易记录,总数据量超过40w,包含31列变量信息,其中15列为匿名变量.为了保证比赛的公平性,将会从中抽取1 ...

  9. 月均数据_药品销售数据分析案例

    今天用python去做一个简单的药品销售数据分析案例 一.数据分析的目的 数据分析是指用适当的统计分析方法对收集来的大量数据进行分析,提取有用信息和形成结论而对数据加以详细研究和概括总结的过程. 本篇 ...

最新文章

  1. zabbix 乱码的问题
  2. 百度开源业内首个口罩人脸检测及分类模型,携手开发者共同抗疫
  3. SAP SD基础知识之SD常见流程概述
  4. AtCoder ARC 090 E / AtCoder 3883: Avoiding Collision
  5. [Asp.net]SignalR实现实时日志监控
  6. Apache Commons:Commons-codec介绍
  7. Day3-字符串-数组-正则表达式
  8. 2017年前端该学些什么(译)
  9. linux系统用虚拟光驱装win7,用虚拟光驱加载win7或者xp iso镜像文件安装系统的图解步骤...
  10. php 模拟登陆新浪微博,[Javascript] 爬虫 模拟新浪微博登陆
  11. 2023中南大学计算机考研信息汇总
  12. 关于AI输电线路在线监测多目4G摄像头低功耗解决方案
  13. 二分类函数(机器学习)
  14. python-collections
  15. The Shawshank Redemption-17
  16. c语言 memset 段错误,memset 导致的一个段错误
  17. GD32F4xx创建工程
  18. Python 命令行参数详解
  19. DAC8531驱动代码(FPGA)
  20. 7z SFX Constructor 4.4中文版(文件自解压生成器)简介

热门文章

  1. 山东省谷歌地球高程DEM等高线下载
  2. Logstash的filter插件介绍
  3. 金融分析之基本ma5 及金叉、死叉
  4. 正义之心读书笔记:第7章 自由和保守主义的本质——5大道德基础
  5. CAN总线控制器SJA1000的使用
  6. ZOJ 1598 Spherical Triangle
  7. C#《原CSharp》第三回 万文疑谋生思绪 璃月港口见清玉
  8. 《神经科学:探索脑》学习笔记(第21章 精神疾病)
  9. 在网络中 计算机输出的信号是,2019陕西国家电网校园招聘计算机类笔试:计算机网络自测四...
  10. WLAN适配器的驱动程序可能出现了问题(连不了wifi)解决办法