[python]---药品数据分析及预测(包括数据集,源码,报告)

一 项目介绍

1.项目背景介绍

大数据的不断发展影响消费者生活的各个方面,也对企业的营销模式提出挑站对大数据量化分析,分析数据中的相关性分析,单因素分析等技术对消费者相关数据进行分析,能够挖掘出对企业真正有意义的信息。这就要求企业在有现的人力、物力资源下,更新并找出合理的销售方案。
对于医药企业来说,大数据为企业带来了危机也带来了商机,企业应根据自身发展阶段及药品特征,以及顾客价值最大化作为方向,以信息化为手段,并根据市场对药品需求的变化,把握消费者的个性需求,进行精准营销,与消费者建立起良性有效的互动,及时获得消费者反馈,整合传统媒体与新媒体宣传资源,选择合适的企业发展的营销战略。
随着经济的不断发展,人民生活水平文化水平的不断提升,药品超市和药房如雨后春笋般勃勃而生,很多市民都会自行购买一些常用于家庭健康的需求。药品知识由于其专业性很强 因此进行药品数据分析对医药销售起着非常重要的作用。

2.项目的目的和意义

目的:分析药品销售数据, 分析销售数据并根据历史数据预测未来的销售.
意义:便于医院提前储备未来的药品数量.

3.项目所需数据介绍

数据集网盘链接:https://pan.baidu.com/s/1oBipkEZkd4F0x1ZdZISY0g

提取码:4679
此次数据分析的数据是根据药品的销售数据,共有1461行13列数据。数据中主要包含日期, 复方胃蛋白酶颗粒, 胃肠宁片,强力VC银翘片, 腰腿痛丸,氨加黄敏胶囊,醒脑降压丸, 脑络通胶囊, 阿司匹林,年,月,小时,星期十三个基本单位。

4.项目所用算法介绍

时间序列算法
时间序列中常用预测技术 一个时间序列是一组对于某一变量连续时间点或连续时段上的观测值。

(1)移动平均法 (MA)

1.1. 简单移动平均法
设有一时间序列y1,y2,…, 则按数据点的顺序逐点推移求出N个数的平均数,即可得到一次移动平均数.
1.2 趋势移动平均法
当时间序列没有明显的趋势变动时,使用一次移动平均就能够准确地反映实际情况,直接用第t周期的一次移动平均数就可预测第1t+周期之值。
时间序列出现线性变动趋势时,用一次移动平均数来预测就会出现滞后偏差。修正的方法是在一次移动平均的基础上再做二次移动平均,利用移动平均滞后偏差的规律找出曲线的发展方向和发展趋势,然后才建立直线趋势的预测模型。故称为趋势移动平均法。

(2) 自回归模型(AR)

AR模型是一种线性预测,即已知N个数据,可由模型推出第N点前面或后面的数据(设推出P点).
本质类似于插值,其目的都是为了增加有效数据,只是AR模型是由N点递推,而插值是由两点(或少数几点)去推导多点,所以AR模型要比插值方法效果更好。

(3)自回归滑动平均模型(ARMA)

其建模思想可概括为:逐渐增加模型的阶数,拟合较高阶模型,直到再增加模型的阶数而剩余残差方差不再显著减小为止。

二项目制作过程

1.项目功能介绍

本案例的分析目标是从销售数据中分析以下几项:
(1)运用滑动平均法展示某种药品2018年~2020年情况
(2)运用时间序列预测某种药品在2022年整年的销售情况
(3)分析出某种药品在某一时间段销售情况
(4)运用不同的回归模型预测药品在2022年整年的销售情况

2.主要代码实现和解释说明

1.导入所需要的库

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import re
from statsmodels.graphics.tsaplots import plot_acf,plot_pacf
from statsmodels.tsa.arima_model import ARMA
import statsmodels.tsa.stattools as st
from statsmodels.graphics.api import qqplot
from statsmodels.stats.stattools import durbin_watson
# 设置字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus']=False

2.查看数据的缺失值和重复值并预览数据

data = pd.read_csv("C:\\Users\\山渐青\\Desktop\\数据分析实训\\drug_1.csv",engine='python')
# 缺失值
print(data.isnull().sum())
# 重复值
print(data.duplicated().sum())
data

[python]---药品数据分析及预测(包括数据集,源码,报告)_第1张图片

3.统计其中某一药品的销售数据随时间变化趋势

orig = pd.Series(data.胃肠宁片.tolist(),\
                index = pd.to_datetime(data.日期.tolist()))
orig.plot(style='k.',figsize=(16,8),rot=30)
# 散点图输出
orig=orig.resample('M').sum()
orig.plot(color = 'blue',figsize=(16,8))
# 折现图输出

[python]---药品数据分析及预测(包括数据集,源码,报告)_第2张图片

4.统计数据

# 最常售出药物(胃肠宁片)的时间是星期几
df_1 = data[['胃肠宁片', '星期']]
result = df_1.groupby(['星期'], as_index=False).sum().sort_values('胃肠宁片', ascending=False)
resultDay = result.iloc[0,0]
resultValue = round(result.iloc[0,1], 2)
print('药品胃肠宁片通常销售时间在' + str(resultDay))
print('销售金额为' + str(resultValue))
df = pd.read_csv("C:\\Users\\山渐青\\Desktop\\数据分析实训\\drug_1.csv",engine='python')
# 那种药物在2019年的星期一最为频繁销售
df = df.loc[df['日期'].str.contains('2019', flags=re.I, regex=True) & (df['星期'] == '星期一')]
df = df.groupby(['星期'], as_index=False).sum()
df = df[['复方胃蛋白酶颗粒', '胃肠宁片', '强力VC银翘片', '腰腿痛丸', '氨加黄敏胶囊', '醒脑降压丸', '脑络通胶囊', '阿司匹林']]
result = df.sort_values(by=0, ascending=False, axis=1)
for field in result.columns.values[0:1]:
    print('2019年星期一最为受欢迎的药品是' + str(field))
    print('销售金额为' + str(round(result[field].iloc[0], 2)))

5.开始预测

# 设置训练集
train_x = orig['1/2/2018':'12/31/2021']
# 采用滑动平均法
smt = train_x.rolling(window=12)
plt.figure(figsize=(24,8))
plt.plot(train_x,color='blue',label='原始数据')
plt.plot(smt.mean(),color='red',label='滑动平均')
# 查看2018年到2021年的滑动平均值
plt.legend()

[python]---药品数据分析及预测(包括数据集,源码,报告)_第3张图片

def plot_diff(series,n):
    # 4阶差分预览
    color_bar = ['blue','red','purple','pink']
    diff_x = series
    for i in range(n):
        plt.figure(figsize=(24,8))
        plt.title('diff'+str(i+1))
        diff_x=diff_x.diff(1)
        diff_x.plot(color=color_bar[i%len(color_bar)])
plot_diff(train_x,4)
# 自相关系数与偏自相关系数
fig=plt.figure(figsize=(16,8))
ax1 = fig.add_subplot(211)
ax2 = fig.add_subplot(212)
# ACF
fig = plot_acf(train_x,lags=20,alpha=0.05,ax=ax1)
# PACF
fig = plot_pacf(train_x,lags=20,alpha=0.05,ax=ax2)
# 绘制AIC热力图
ax = sns.heatmap(res['aic'],annot=True,fmt=".2f",cmap="rainbow")
ax.set_title("AIC")
res.aic_min_order
# 绘制BIC热力图
ax = sns.heatmap(res['aic'],annot=True,fmt=".2f",cmap="rainbow")
ax.set_title("BIC")
res.bic_min_order
model = ARMA(train_x,order=(3,2)).fit()
resid = model.resid
plt.figure(figsize=(12,12))
qqplot(resid,line='q',fit=True)
# D-W检验
plt.title('DW:{}'.format(durbin_watson(resid.values)))
# 预测
pred = model.predict(start=0,end=len(train_x)+11)
# 查看拟合结果
plt.figure(figsize=(24,8))
plt.plot(orig,color='blue',label='原始数据')
plt.plot(pred,color='red',linestyle='-.',label="预测")
plt.legend(prop={'size':16})
plt.axvline(x=pd.to_datetime('12/31/2021'),ls='--',c='green')
plt.show()

[python]---药品数据分析及预测(包括数据集,源码,报告)_第4张图片

三项目结果分析

本次课设我主要是通过对医院2018~2021年药品销售数据进行分析并预测2022年药品销售情况,分析目标是从销售数据中分析以下几项:
(1)运用滑动平均法展示某种药品2018年~2021年情况
(2)运用时间序列预测某种药品在2022年整年的销售情况
(3)分析出某种药品在某一时间段销售情况
(4)运用不同的回归模型预测药品在2022年整年的销售情况
实验不足:
(1) 在实验中,没有运用到数据预处理的方法,比如缺失值,重复值和异常值的处理.
(2) 仅仅预测了平稳型时间序列,没有对非平稳型时间序列进行预测.

四总结和展望

总体体会:课程设计时对我这一学期以来学习成果的良好检验,在所有课题中,我选择了药品销售分析的数据分析项目。在这两周的课程设计中,我碰到了许多的困难,也有很多不懂的语句,在网络中找了很多相关资料来完善自己的课设内容,总的来说,在这次课程设计中,我对数据分析有了更深刻的认识,加强了我对数据分析的了解。
课程设计作为一门专业课,给我很多专业知识以及专业技能上的提升,课程设计让我感触很深,它让我对抽象的理论有了具体的认识。
我认为,在这两周的课程设计中,不仅培养了我独立思考,动手操作的能力,在各种其他能力上也有了提高。更重要的是,在课程设计中,我们学会了很多的方法。而这是日后最实用的。我们要面对社会的挑战,只有不断的学习、实践,再学习、再实践。这对于我们的将来也有很大的帮助。以后,不管有多苦,我想我们都能变苦为乐,找寻有趣的事情,发现其中珍贵的东西。
从理论到实践,在这段日子里,我学到了很多很多的东西,同时不仅可以巩固了以前学过的知识,而且学到了很多在书本上从来没有学到过的知识。

你可能感兴趣的:(数据分析,python,数据挖掘)