根据企业历史磁盘数据,采用时间序列的方法预测未来使用情况,据此判断预警级别。

目录

一、数据预处理

1.11 代码:

1.12 结果:

二、模型建立

2.1 平稳性检验

2.11 代码:

2.12 结果:

2.2 白噪声检验

2.21 代码:

2.22 结果:

2.3 模型的识别

2.31 代码:

2.32 结果:

2.4 模型的检验

2.41 代码:

2.42 结果:

2.5 模型的评价

2.51 代码:

2.52 结果:

三、模型应用


对以下形式的数据建立ARIMA模型

一、数据预处理

提取相关的数据,进行变换,得到建模所需的数量类型及格式。

1.11 代码:

# -*- coding: utf-8 -*-import pandas as pd# 1)参数初始化
discfile='.../data/discdata.xls'  # 磁盘原始数据
transformeddata='.../data/discdata_processed.xls'  #变换后数据data = pd.read_excel(discfile)  # 读取数据# 2)选择对象数据
discdata_select = data[data['TARGET_ID'] == 184].copy()  # 只保留TARGET_ID为184的数据# 3)属性变换
data_group = discdata_select.groupby('COLLECTTIME')  # 以时间分组def attr_trans(x):  # 定义属性变换函数result = pd.Series(index = ['SYS_NAME', 'CWXT_DB:184:C:\\', 'CWXT_DB:184:D:\\', 'COLLECTTIME'])result['SYS_NAME'] = x['SYS_NAME'].iloc[0]result['COLLECTTIME'] = x['COLLECTTIME'].iloc[0]result['CWXT_DB:184:C:\\'] = x['VALUE'].iloc[0]result['CWXT_DB:184:D:\\'] = x['VALUE'].iloc[1]return resultdata_processed = data_group.apply(attr_trans)  # 逐组处理
data_processed.to_excel(transformeddata, index = False)

1.12 结果:

data.head()
Out[16]: SYS_NAME     NAME  TARGET_ID DESCRIPTION ENTITY         VALUE COLLECTTIME
0   财务管理系统  CWXT_DB        184     磁盘已使用大小    C:\  3.427079e+07  2014-10-01
1   财务管理系统  CWXT_DB        184     磁盘已使用大小    D:\  8.026259e+07  2014-10-01
2   财务管理系统  CWXT_DB        183        磁盘容量    C:\  5.232332e+07  2014-10-01
3   财务管理系统  CWXT_DB        183        磁盘容量    D:\  1.572833e+08  2014-10-01
4   财务管理系统  CWXT_DB        184     磁盘已使用大小    C:\  3.432890e+07  2014-10-02discdata_select.head()
Out[18]: SYS_NAME     NAME  TARGET_ID DESCRIPTION ENTITY        VALUE COLLECTTIME
0   财务管理系统  CWXT_DB        184     磁盘已使用大小    C:\  34270787.33  2014-10-01
1   财务管理系统  CWXT_DB        184     磁盘已使用大小    D:\  80262592.65  2014-10-01
4   财务管理系统  CWXT_DB        184     磁盘已使用大小    C:\  34328899.02  2014-10-02
5   财务管理系统  CWXT_DB        184     磁盘已使用大小    D:\  83200151.65  2014-10-02
8   财务管理系统  CWXT_DB        184     磁盘已使用大小    C:\  34327553.50  2014-10-03data_processed.head()
Out[19]: SYS_NAME  CWXT_DB:184:C:\  CWXT_DB:184:D:\ COLLECTTIME
COLLECTTIME
2014-10-01    财务管理系统      34270787.33      80262592.65  2014-10-01
2014-10-02    财务管理系统      34328899.02      83200151.65  2014-10-02
2014-10-03    财务管理系统      34327553.50      83208320.00  2014-10-03
2014-10-04    财务管理系统      34288672.21      83099271.65  2014-10-04
2014-10-05    财务管理系统      34190978.41      82765171.65  2014-10-05

二、模型建立

2.1 平稳性检验

平稳性检验的方法一般有:1)时序图检验;2)自相关图检验;3)单位根检验

这里使用ADF单位根检验法:
H0:有单位根;H1:无单位根

P<0.05,表示接受H1。

2.11 代码:

# -*- coding: utf-8 -*-# 平稳性检验
import pandas as pd# 参数初始化
discfile='.../data/discdata_processed.xls'data = pd.read_excel(discfile)
data = data.iloc[ : len(data)-5]  # 不检测最后5个数据# 平稳性检测
from statsmodels.tsa.stattools import adfuller as ADF
diff = 0
adf = ADF(data['CWXT_DB:184:D:\\'])
while adf[1] > 0.05:diff = diff + 1adf = ADF(data['CWXT_DB:184:D:\\'].diff(diff).dropna())print(u'原始序列经过%s阶差分后归于平稳,p值为%s' %(diff, adf[1]))

2.12 结果:

原始序列经过1阶差分后归于平稳,p值为4.792591263393756e-07

2.2 白噪声检验

白噪声检验也称为纯随机检验,当数据非白噪声时,才有必要进行下一步建模。常用的检验统计量有:1)Q统计量;2)LB统计量

这里使用LB统计量,

H0:白噪声;H1:非白噪声

P<0.05时,接受H1。

2.21 代码:

#-*- coding: utf-8 -*-# 白噪声检验
import pandas as pd# 参数初始化
discfile = '.../data/discdata_processed.xls'data = pd.read_excel(discfile)
data = data.iloc[: len(data)-5] #不使用最后5个数据# 白噪声检测
from statsmodels.stats.diagnostic import acorr_ljungbox[[lb], [p]] = acorr_ljungbox(data['CWXT_DB:184:D:\\'], lags = 1)
if p < 0.05:print(u'原始序列为非白噪声序列,对应的p值为:%s' %p)
else:print(u'原始该序列为白噪声序列,对应的p值为:%s' %p)[[lb], [p]] = acorr_ljungbox(data['CWXT_DB:184:D:\\'].diff().dropna(), lags = 1)
if p < 0.05:print(u'一阶差分序列为非白噪声序列,对应的p值为:%s' %p)
else:print(u'一阶差分该序列为白噪声序列,对应的p值为:%s' %p)

2.22 结果:

原始序列为非白噪声序列,对应的p值为:9.95850372977218e-06
一阶差分该序列为白噪声序列,对应的p值为:0.1143302597764247

2.3 模型的识别

AIC、BIC、HQIC越小越好,这里根据BIC来定阶。

2.31 代码:

# -*- coding: utf-8 -*-
# 确定最佳p、d、q值
import pandas as pd
import numpy as np# 参数初始化
discfile = '.../data/discdata_processed.xls'data = pd.read_excel(discfile, index_col = 'COLLECTTIME')
data = data.iloc[: len(data)-5]  #不使用最后5个数据
xdata = data['CWXT_DB:184:D:\\']from statsmodels.tsa.arima_model import ARIMA# 定阶
pmax = int(len(xdata)/10)  # 一般阶数不超过length/10
qmax = int(len(xdata)/10)  # 一般阶数不超过length/10
bic_matrix = []  # bic矩阵
for p in range(pmax+1):tmp = []for q in range(qmax+1):try:  # 存在部分报错,所以用try来跳过报错。tmp.append(ARIMA(xdata, (p,1,q)).fit().bic)except:tmp.append(np.nan)bic_matrix.append(tmp)bic_matrix = pd.DataFrame(bic_matrix)  # 从中可以找出最小值p,q = bic_matrix.stack().idxmin()  # 先用stack展平,然后用idxmin找出最小值位置。(注意:此处需要保证数据全部为数值型,不然会报错)
print(u'BIC最小的p值和q值为:%s、%s' %(p,q))

2.32 结果:

BIC最小的p值和q值为:1、1

2.4 模型的检验

这里检验残差是否为白噪声。如果不是白噪声,说明残差中还存在有用的信息,需要修改模型进一步提取。

2.41 代码:

# -*- coding: utf-8 -*-
# 模型检验
import pandas as pd# 参数初始化
discfile = '.../data/discdata_processed.xls'
lagnum = 12  # 残差延迟个数data = pd.read_excel(discfile, index_col = 'COLLECTTIME')
data_train = data.iloc[: len(data)-5]  # 不使用最后5个数据
xdata = data_train['CWXT_DB:184:D:\\']from statsmodels.tsa.arima_model import ARIMA  # 建立ARIMA(0,1,1)模型arima = ARIMA(xdata, (0, 1, 1)).fit()  # 建立并训练模型
xdata_pred = arima.predict(typ = 'levels') # 预测
pred_error = (xdata_pred - xdata).dropna()  # 计算残差from statsmodels.stats.diagnostic import acorr_ljungbox  # 白噪声检验lb, p= acorr_ljungbox(pred_error, lags = lagnum)
h = (p < 0.05).sum()  # p值小于0.05,认为是非白噪声。
if h > 0:print(u'模型ARIMA(0,1,1)不符合白噪声检验')
else:print(u'模型ARIMA(0,1,1)符合白噪声检验')

2.42 结果:

模型ARIMA(0,1,1)符合白噪声检验

2.5 模型的评价

这里用:1)平均决定误差、2)均方根误差、3)平均绝对百分比为误差 来反映算法的预测精度。

2.51 代码:

# -*- coding: utf-8 -*-import pandas as pd
from statsmodels.tsa.arima_model import ARIMA# 1)预测最后5个数据的情况
# 参数初始化
discfile = '.../data/discdata_processed.xls'data = pd.read_excel(discfile, index_col = 'COLLECTTIME')
data_train = data.iloc[: len(data)-5]  # 不使用最后5个数据
xdata = data_train['CWXT_DB:184:D:\\']arima = ARIMA(xdata, (0, 1, 1)).fit()  # 建立并训练ARIMA(0,1,1)模型# 预测后5个数据
temp = pd.DataFrame(arima.forecast(5))target = data[len(data)-5 :].iloc[:,-1]
predict = pd.DataFrame(temp[0:1].T.values, index=target.index)data_com = pd.concat([target,predict],axis=1)
data_com.columns = [u'实际值',u'预测值']resultfile = '.../data/data_com.xls'
data_com.to_excel(resultfile)# 2)计算预测误差
# 参数初始化
file = '.../data/data_com.xls'
data = pd.read_excel(file, index_col=0)# 计算误差
abs_ = (data[u'预测值'] - data[u'实际值']).abs()
mae_ = abs_.mean()  # mae
rmse_ = ((abs_**2).mean())**0.5  # rmse
mape_ = (abs_/data[u'实际值']).mean()  # mapeprint(u'平均绝对误差为:%0.4f,\n均方根误差为:%0.4f,\n平均绝对百分误差为:%0.6f。' %(mae_, rmse_, mape_))

2.52 结果:

data_com
Out[28]: 实际值          预测值
COLLECTTIME
2014-11-12   87249335.55  8.80343e+07
2014-11-13   86986142.20   8.8217e+07
2014-11-14   86678240.00  8.83997e+07
2014-11-15   89766600.00  8.85824e+07
2014-11-16   89377527.25  8.87651e+07平均绝对误差为:1106777.8545,
均方根误差为:1172347.7603,
平均绝对百分误差为:0.012610。

三、模型应用

将磁盘的使用量与总容量进行比较,根据使用率制定预警级别。

每日定时提取服务器的数据,预处理后运用该模型预测未来5天的磁盘已使用空间的大小,将预测值与磁盘的总容量进行比较,根据使用率的情况判断预警级别。

Chapter 11 应用系统负载分析及磁盘容量预测相关推荐

  1. 《Python数据分析与挖掘实战》第11章——应用系统负载分析与磁盘容量预测(时间序列)

    文章目录 1.背景与目标分析 2.2 数据探索 2.1 查看数据信息 2.2 数据平稳性分析 3 数据预处理 3.1 数据清洗 3.2 数据变换--属性构造 4 模型构建 4.1 确定模型-- ARM ...

  2. 大数据分析案例:应用系统负载分析与磁盘容量预测

    应用系统负载分析与磁盘容量预测 应用系统在日常运行时,会对底层软.硬件造成负荷,显著影响应用系统性能.应用系统性能的因素包括:服务器.数据库.中间件和存储设备.任何一种资源负载过大,都可能会引起应用系 ...

  3. 数据分析与挖掘实战-应用系统负载分析与磁盘容量预测

    应用系统负载分析与磁盘容量预测 背景 某大型企业为了信息化发展的需要,建设了办公自动化系统.人力资源管理系统.财务管理系统.企业信息门户系统等几大企业级应用系统.因应用系统在日常运行时,会对底层软硬件 ...

  4. 9 应用系统负载分析与磁盘容量预测

    9.1背景与挖掘目标 本案例通过分析存储设备中磁盘容量预测,通过对磁盘容量的预测,可预测磁盘未来的负载情况,避免应用系统因出现存储容量耗尽的情况而导致应用系统负载率过高,最终引发系统故障.针对历史磁盘 ...

  5. 应用系统负载分析与磁盘容量预测

    1 背景与目标分析 根据历史磁盘数据,采用时间序列分析法,来预测应用系统服务器磁盘已经使用空间的大小:为管理员提供定制化的预警提示. 实质:时间序列-回归 ARMA模型介绍 AR.MA.ARMA.AR ...

  6. 电脑系统磁盘容量预测

    详细分析及预测过程 一.背景及目的 (1)背景介绍 为了实现信息化发展,建设自动化办公系统.人力资源管理系统财务管理系统.企业信息门户系统等大型应用系统.某企业应用系统日常运行时,会对底层软硬件造成负 ...

  7. 【银河麒麟V10】【服务器】系统负载分析

    一.cpu负载 1.CPU基本概念 1.1.什么是物理cpu个数 物理cpu个数即主板上实际能够看到的cpu个数(也是cpu插槽数) 1.2. 什么是cpu核数 cpu核数指的是物理cpu个数 * 每 ...

  8. 【数据挖掘实战】——应用系统负载分析与容量预测(ARIMA模型)

  9. Linux分析操作系统磁盘容量

    一 运行脚本 1 ############################################################# 2 # File Name: system_monitor ...

最新文章

  1. PHP基本连接数据库
  2. codevs 1147 排座椅
  3. Spring 极速集成注解 Redis 实践
  4. 最强奥运会(互联网公司版)
  5. 【IOS】自定义UIAlertView样式,实现可替换背景和按钮
  6. 排序算法之——冒泡排序优化
  7. c语言简答程序源代码,C语言简答题答案
  8. Deeplink(深度链接)唤起App,怎样实现无缝跳转
  9. Asynchronous JS: Callbacks, Listeners, Control Flow Libs and Promises
  10. Enterprise Vault 2007 Series [PST Migration]
  11. python polar contour_13.极坐标系(Polar coordinate system)
  12. [SDOI2009] HH去散步 (矩阵乘法)
  13. 二叉搜索树(搜索二叉树)转换成一个双向链表
  14. DOS命令教程 第二章——ping命令
  15. CSS 中的层叠,层级关系
  16. IGBT的驱动功率计算
  17. Ubuntu16.04 n次装机血泪史(pixel2mesh)
  18. Gopher Daily (2020.05.02) ʕ◔ϖ◔ʔ
  19. CentOS8下Mosquitto安装使用指南
  20. Hibernate3 入门之Api,配置文件详解

热门文章

  1. 亲手打造自己的 Linux 桌面环境
  2. 吉林警方重击涉黑涉恶犯罪 一年打掉439个团伙
  3. 微信账号和语音文件的结构分析
  4. 搜狗微信爬虫获取文章信息
  5. 老师计算机组合照说说,关于老师的空间说说23句
  6. 西门子PLC状态字解释
  7. Spring源码解析【完整版】--【bilibili地址:https://www.bilibili.com/video/BV1oW41167AV】
  8. 2022最新u盘升级重装win10方法
  9. css3上下滑动,CSS3 上下浮动的页面滚动提示箭头
  10. 2023年全国最新工会考试精选真题及答案41