探索性分析——某医院18年销售数据分析
针对某医院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、数据清洗
数据清洗基本过程:选择子集、列重命名、缺失值处理、数据类型转换、数据排序、异常值处理等。
为便于分析,将其中列名:购买时间,更改为销售时间,消除歧义。
从前面显示的信息中可以看出,数据集中存在缺失值。使用简单的方法,直接使用dropna函数删除缺失数据,具体如下:
#缺失值处理
print('删除缺失值前:',data.shape)
data.info()
dataDF = data.dropna(subset=['销售时间','社保卡号'], how = 'any')
print('删除缺失值后:',dataDF.shape)
dataDF.info()
4、数据类型转换
为便于数据导入,便于后续相关分析,最好对数据进行相应的转换。可以使用astype函数进行数据类型转换,并通过split函数对无用的时间信息进行分割,如下所示:
dataDF.dtypes#将销售时间中,星期与日期分开def split_time(timesale):
timelist = [] for sale_time in timesale:
timelist.append(stime)#分割销售时间,并提取时间部分,组成一个列表 STime = Series(timelist) return STime
#获取销售时间这一列,然后调用函数分割,并修改这一列saletime = dataDF.loc[:, '销售时间']time_data = split_time(saletime)
在把分割后的日期,转换为时间格式。
#把分割日期,转换为时间格式
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中有负数,判别出存在异常值。
#查看描述统计信息
#排除异常值
pop = dataDF.loc[:,'销售数量'] > 0
dataDF = dataDF.loc[pop, :]
dataDF.describe()
7、数据可视化
#(1)删除重复数据
total_row = data_unique.shape[0]
#(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
monthMoney = totalMoney // months
#消费趋势分析
import matplotlib.pyplot as plt
import matplotlib
mpl.rcParams['font.sans-serif'] = ['SimHei']#黑体
from pylab import mpl#用于显示中文
#将销售时间设置为index
#可视化绘图
plt.plot(groupDF['实收金额'])
plt.title('按天销售金额图')
plt.ylabel('实收金额')
plt.xlabel('时间')#保持图片
plt.savefig(r'C:\Users\Administrator\Desktop\sale_day.png')
#显示图片
plt.show()
all_medicine = medicine_list.sum()#对每种药品总量排序
all_medicine.head()#显示销售数量前十的药品top10 = all_medicine[:10]
#可视化前十种药品
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年销售数据分析相关推荐
- python数据分析的四阶段以及电商数据描述性分析和探索性分析
目录 数据分析的四阶段 1 需求 数据情况 需求 产出 2 数据规整(数据预处理,数据清洗,数据重构) 2.1 数据预处理 2.1.1 发现错误的对策 2.1.2 修正缺失值 2.2 修正错误数据 方 ...
- python药店销售数据分析_解析医院药店销售数据,看看Python数据分析结果有什么惊人的发现|python基础教程|python入门|python教程...
https://www.xin3721.com/eschool/pythonxin3721/ 前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时 ...
- python药店销售数据分析_解析医院药店销售数据,看看Python数据分析结果有什么惊人的发现...
Apple iPhone 11 (A2223) 128GB 黑色 移动联通电信4G手机 双卡双待 4999元包邮 去购买 > 前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业 ...
- 数据探索性分析_探索性数据分析
数据探索性分析 When we hear about Data science or Analytics , the first thing that comes to our mind is Mod ...
- python手机销售系统_京东手机销售数据分析kaggle复盘python+tableau分析
1.数据获取 由于手机的价格以及评论数是需要经过javascript渲染的动态信息,单纯用requests模块是爬取不到的.解决方案是首先使用selenium的webbrowser模块使用本地Chro ...
- 2023年泰迪杯数据挖掘挑战赛B题--产品订单数据分析与需求预测(2.数据探索性分析)
前言 继续上一片数据预处理进行续写,利用预处理之后的数据进行数据分析并且解决问题一相关的问题.问题一主要目的是让研究各种因素对于需求量的影响,然后找到确定影响需求量的主要因素并且进行数据分析和主要特征 ...
- spss数据分析(频数分析、描述性统计分析、探索性分析、连列表分析)
1频数分析 对平均数.四分位数.百分位数.标准差.方差.偏度等统计量进行分析 原始数据 分析-描述统计-频率 输出: 2描述性统计分析 分析-描述统计-描述 输出: 勾选了将标准化得分另存为变量后 ...
- 天池二手车交易价格预测Task2-赛题理解与数据探索性分析(EDA)
一.赛题理解 1.1赛题概述 赛题以预测二手车的交易价格为任务,该数据来自某交易平台的二手车交易记录,总数据量超过40w,包含31列变量信息,其中15列为匿名变量.为了保证比赛的公平性,将会从中抽取1 ...
- 月均数据_药品销售数据分析案例
今天用python去做一个简单的药品销售数据分析案例 一.数据分析的目的 数据分析是指用适当的统计分析方法对收集来的大量数据进行分析,提取有用信息和形成结论而对数据加以详细研究和概括总结的过程. 本篇 ...
最新文章
- zabbix 乱码的问题
- 百度开源业内首个口罩人脸检测及分类模型,携手开发者共同抗疫
- SAP SD基础知识之SD常见流程概述
- AtCoder ARC 090 E / AtCoder 3883: Avoiding Collision
- [Asp.net]SignalR实现实时日志监控
- Apache Commons:Commons-codec介绍
- Day3-字符串-数组-正则表达式
- 2017年前端该学些什么(译)
- linux系统用虚拟光驱装win7,用虚拟光驱加载win7或者xp iso镜像文件安装系统的图解步骤...
- php 模拟登陆新浪微博,[Javascript] 爬虫 模拟新浪微博登陆
- 2023中南大学计算机考研信息汇总
- 关于AI输电线路在线监测多目4G摄像头低功耗解决方案
- 二分类函数(机器学习)
- python-collections
- The Shawshank Redemption-17
- c语言 memset 段错误,memset 导致的一个段错误
- GD32F4xx创建工程
- Python 命令行参数详解
- DAC8531驱动代码(FPGA)
- 7z SFX Constructor 4.4中文版(文件自解压生成器)简介
热门文章
- 山东省谷歌地球高程DEM等高线下载
- Logstash的filter插件介绍
- 金融分析之基本ma5 及金叉、死叉
- 正义之心读书笔记:第7章 自由和保守主义的本质——5大道德基础
- CAN总线控制器SJA1000的使用
- ZOJ 1598 Spherical Triangle
- C#《原CSharp》第三回 万文疑谋生思绪 璃月港口见清玉
- 《神经科学:探索脑》学习笔记(第21章 精神疾病)
- 在网络中 计算机输出的信号是,2019陕西国家电网校园招聘计算机类笔试:计算机网络自测四...
- WLAN适配器的驱动程序可能出现了问题(连不了wifi)解决办法