数据分析药店销售项目

字段

购药时间:格式为“2018-01-01 星期五”

社保卡号:一个卡号代表一个人

商品编码:一个编码未必只对应一个商品 还存在一个商品有两个编码的情况

商品名称:购买商品的名称

销售数量:售出的该商品数量

应收金额:应收取的金额

实收金额:实际收取的金额 有的与应收金额不同 可能是打折

                  但同样的应收金额也存在与实收金额相等的情况 所以也可能是价格波动或医保优惠导致

 

目标

参考:https://blog.csdn.net/huangxiaoyun1900/article/details/82357194

           https://blog.csdn.net/zgcr654321/article/details/88018806

           https://zhuanlan.zhihu.com/p/37457901?from_voters_page=true

1、客户月均消费次数

2、客户月均消费金额

3、客单价=销售总数/顾客总数 每位客户平均购买商品的金额

4、客户消费金额与消费件数的关系如何

5、医院月均销售金额

6、医院月均销售次数

7、医院每月销售金额趋势

8、医院每月销售次数趋势

9、医院每月平均每单销售金额

10、最大和最小日销售金额及对应日期

11、各个月单独的每日销售金额

12、周几销售金额趋势图

13、药品销售趋势&销量前十的药品

14、销量前三药品的天数销售分布

15、销量前三药品的星期销售分布

16、一周七天内每天卖的最多的药品

 

读取数据

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(style='darkgrid',font_scale=1.5)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False


data = pd.read_csv('朝阳医院2018年销售数据.csv',dtype={'社保卡号':str,'购药时间':str,'商品编码':str},encoding = 'gbk')

data.head()

data.info()

 

数据清洗

 

1、缺失值统计

data.isnull().sum()

 

2、缺失值处理

因为在6000+行中只有一两行有空值,而且购药时间、社保卡号、商品编码、商品名称没法补,所以干脆删掉

#删除缺失值
data.dropna(axis=0,inplace=True)

 

3、数据类型归一

其他需要归一类型的数据类型已经在读取数据时规定好了

#处理时间
data['date'] = [x.split(' ')[0] for x in data['购药时间']]
data['week'] = [x.split(' ')[1] for x in data['购药时间']]


data['year'] = [x.split('-')[0] for x in data['date']]
data['month'] = [x.split('-')[1] for x in data['date']]
data['day'] = [x.split('-')[2] for x in data['date']]

 

4、数值统计找到异常值

data.describe()

 

5、删除重复行

没有数据说明,无法确定带负数的是否为退货订单,先删掉

data.drop(data[data.销售数量 <= 0].index,inplace=True)

暂不删除重复值,因为可能是一人一天买了多次

整理删除后的数据

#按日期排序
data=data.sort_values(by='购药时间',ascending=True)

data.reset_index()
data.columns

 

数据分析

 

1、客户月均消费次数

客户月均消费次数=客户总消费次数/月份数7

user_times = data.groupby(['社保卡号']).count()['date']
user_times_by_month =  user_times/7
user_times_by_month

通过describe()查看最大值、中位数、平均值,来确定直方图的取值

bins = np.arange(0,1,0.1)#直方图的分布区间
plt.hist(user_times_by_month,bins)
#range只能整数
x = np.arange(0.1,1,0.1)
plt.xticks(x)
plt.locator_params('x',nbins=10)
plt.show()

ra

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值