[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]---药品数据分析及预测(包括数据集,源码,报告)

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]---药品数据分析及预测(包括数据集,源码,报告)

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')

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='滑动平均')

plt.legend()

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

    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)

fig = plot_acf(train_x,lags=20,alpha=0.05,ax=ax1)

fig = plot_pacf(train_x,lags=20,alpha=0.05,ax=ax2)

ax = sns.heatmap(res['aic'],annot=True,fmt=".2f",cmap="rainbow")
ax.set_title("AIC")
res.aic_min_order

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)

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]---药品数据分析及预测(包括数据集,源码,报告)

三项目结果分析

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

(2) 仅仅预测了平稳型时间序列,没有对非平稳型时间序列进行预测.

四总结和展望

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

Original: https://blog.csdn.net/nhdzppx/article/details/122348460
Author: 天秤座的分析师
Title: [python]—药品数据分析及预测(包括数据集,源码,报告)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/694770/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球