对朝阳区医院2016的销售数据进行分析

本文的数据源是朝阳区医院2016的销售数据,用python进行处理
要求的业务指标是:1)月均消费次数;2)月均消费金额;3)客单价;4)消费趋势
这几个指标主要判断了用户端的消费趋势,为了给医院更多的指导,再此基础上进行
了一定的扩展,个人增加了两个指标,也是为了多熟悉库的使用
5)列出各类药品售出数量的排名,这个指标可以指导医院多存储哪类药品,少存储哪
类药品,避免药物不足或过期
6)列出每周7天各有各有多少人来医院,这样可以提前安排每周各天的排班,避免某天
过了幸苦或空闲
![Uploading output_31_2_679026.png . . .]

数据分析过程:
一、预处理
1、读取数据
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df=pd.read_excel('朝阳医院2016年销售数据.xlsx',sheet_name='Sheel')

df[:3]

#2、删除缺失值
df=df.dropna(how='any',axis=0)

df[1:3]

time =df['购药时间']
time[:4]
0    2016-01-01 星期五
1    2016-01-02 星期六
2    2016-01-06 星期三
3    2016-01-11 星期一
Name: 购药时间, dtype: object
shebao=df['社保卡号']
shebao[:5]
0        1616528
1        1616528
2    10070343428
3       13389528
4      101554328
Name: 社保卡号, dtype: int64
#3.修改列名,中文名称是无法在dateframe中直接用字符串表示处出来
#改名
names=['time','cardNum','drugID','drugName','saleNum',
       'virtuaiMone','actualMoney']
df.columns=names

4.排序,一般按照时间排序

由于时间格式是“2016-01-01 星期五“这样日期星期混合的,

需要将中文切割出去,并将时间转换成datatimen格式

df1=df.copy()
df1['time']=pd.to_datetime(df['time'].str.split(' ').str.get(0))
df1.sort(columns='time',inplace=True)
df1[:3]

#由于接下来需要用到起始时间,最终时间以及时间间隔,所以对日期进行预处理
#D代表day,s代表秒
startTime=df1.iloc[0,0]
endTime=df1.iloc[-3,0]
delta=(endTime-startTime)/np.timedelta64(1,'D')
month=delta/30
month
6.666666666666667

二、业务指标分析
业务一、月均消费次数
月均消费次数=总消费次数/月份数

 def monthConsumeFF(dataframe):
    #按照日期及社保账号来清洗数据,将每个人一天的消费次数算作一次消费
    mcdif=dataframe.drop_duplicates(['time','cardNum'])
    consumeNumber=len(mcdif)
    monthConsume=int(consumeNumber/month)
    # 月消费次数
    print ('月消费次数:',monthConsume)
monthConsumeFF(df1)
月消费次数: 809
#这里结果有些不同,因为7月有19天,如果直接取整数算6个月那计算结果将会有较大偏差,
#所以我觉得平均月份取小数较好
#业务二、月均消费金额
#月均消费金额=总消费金额/月份数
def monthMoneyFF(dataframe):
    actualMoneySum=pd.Series.sum(dataframe['actualMoney'])
    #print(actualMoneySum
    monthMoney=int(actualMoneySum/month)
    print (monthMoney)
monthMoneyFF(df1)
45694
#业务三、客单价
#客单价=总消费金额/总消费次数
def ptsF(dataframe):
    actualMoneySum=pd.Series.sum(dataframe['actualMoney'])
    consumeNumber=len(dataframe.drop_duplicates(['time','cardNum']))
    pts=actualMoneySum/consumeNumber
    print('客单价:',pts)
ptsF(df1)
客单价: 56.4339125602
#业务四、消费趋势
#消费趋势是按周计算的
import matplotlib.pyplot as plt
#plt.rc('figure', figsize=(12, 10))
import matplotlib.pyplot as pltz
plt.rc('figure', figsize=(12, 5))
np.set_printoptions(precision=4)
def trendF(dataframe):
    trend=dataframe.loc[:,['time','actualMoney']]
    trend['time']=pd.to_datetime(trend['time'])
    trend=trend.set_index('time')
    #按周分割并计算周消费总和
    s=trend['actualMoney'].resample('W').sum()
    trendNew=pd.Series.to_frame(s)
    #index format 将年月日改为年周
    trendNew.index=trendNew.index.format(formatter=lambda x:x.strftime('%y-%W'))
    print (df1)
    trendNew.plot()

plt.legend(loc='best')
plt.show()
output_26_0.png
#业务五、列出各类药品售出数量的排名
plt.rcParams['font.sans-serif']=['SimHel']
plt.rcParams['axes.unicode_minus']=False
 def peng(dataframe):
    drug=dataframe.loc[:,['drugName','saleNum']]
    #按药品名进行归类并计算药品卖出总和
    s1=drug.groupby(drug.drugName.str[:])['saleNum'].sum()
    drugNew=pd.Series.to_frame(s1)
    drugNew=drugNew.sort_values(by='saleNum',ascending=False)
    print(df1)
    drugNew.plot()
      
    #太拥挤了分成两张图
    drugPart1=drugNew.iloc[0:34]
    drugPart2=drugNew.iloc[34:,:]
    ax1=drugPart1.plot.barh(alpha=0.75,rot=0,fontsize=8)
    ax2=drugPart2.plot.barh(alpha=0.75,rot=0,fontsize=8)
    ax1.set_xlim(0,2000)
    ax2.ser_xlim(0,2000)
    print(drugNew)
    peng.plot()

peng(df1)

plt.legend(loc='best')
plt.show()
/Users/zhongyaode/anaconda/lib/python3.6/site-packages/matplotlib/font_manager.py:1297: UserWarning: findfont: Font family ['sans-serif'] not found. Falling back to DejaVu Sans
  (prop.get_family(), self.defaultFamily[fontext]))
png
png
output_31_1.png
png
png
output_31_2.png
png
png
output_31_3.png
#业务六、列出每周7天各天各有多少人来医院
def weekday(dataframe):
    timeDF=dataframe.drop_duplicates(['time','cardNum'])
    timeDF=timeDF.loc[:,['time']]
    timeDF['num']=1
    timeDF['time']=pd.to_datetime(timeDF['time'])
    #将日期换算成周几
    timeDF['weekday']=timeDF['time'].dt.dayofweek
    weekday=timeDF.loc[:,['weekday','num']]
    s2=weekday.groupby('weekday')['num'].sum()
    weekdayNew=pd.Series.to_frame(s2)
    weekdayNew['weekdays']=['Sunday','Monday','Tuesday','Wednesday','Thurday','Friday','Saturday']
    weekdayNew=weekdayNew.set_index('weekdays')
    print (weekdayNew)
    weekdayNew.plot(kind='bar')
    
    plt.show()
weekday(df1)
           num
weekdays      
Sunday     703
Monday     796
Tuesday    732
Wednesday  633
Thurday    986
Friday     808
Saturday   740
png
png
output_34_1.png
#可以看出周三来的人最少,周四最多,所以可以据此来分配人手
#简单的数据分析,主要是熟悉pandas的使用并更多的了解数据分析流程,
#接下来进行更加复杂的数据分析学习
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353

推荐阅读更多精彩内容

  • 朝阳医院2016年销售数据分析 本关学习内容:R语言第三章(知识点链接https://zhuanlan.zhihu...
    十三学僧阅读 1,701评论 1 3
  • 目标:对给定的Excel数据表里的数据进行简单处理,解答相关问题。 源数据:朝阳医院2016年销售数据.xlsx ...
    胡阿白阅读 890评论 3 3
  • 我认为当一个奢侈品品牌进入更大的市场时,它非常有可能提高其奢侈品的价格而不是减价,这是出于以下几个原因。...
    小小杠杆阅读 190评论 0 2
  • 游戏是一个令人着迷,并且能够让人沉迷于此的东西,而游戏之所以如此迷人,不但是游戏的制作精良和剧情引人入胜。除此之外...
    Lzer0阅读 512评论 0 2
  • 毕业后,我便开始迷路。 原本很清晰的路,忽然变得很模糊;原本很容易说走就走的自己,忽然有很太多太多的顾虑和牵绊。 ...
    雨心阅读 324评论 0 2