基于OpenAPI工具包以及LSTM的CDN网络流量预测

基于LSTM的CDN网络流量预测

本案例是基于英特尔CDN以及英特尔 OpenAPI Intel® Extension for TensorFlow* Intel@ oneAPIDPC++ Library 的网络流量预测,CDN是构建在现有网络基础之上的智能虚拟网络,目的是将源站内容分发至最接近用户的节点,使用户可就近取得所需内容,提高用户访问的响应速度和成功率。CDN智能调度中的流量分配算法、95调度算法与错峰调度等算法的有效性高度依赖域名流量的趋势,若能较为准确的预测域名流量的趋势,则可以提升调度算法的效果。与此类似的还有零售预测、供需预测等相关场景。

时间序列预测按数据及场景类别主要可分为单元时序预测(单变量)、多元时序预测、单步预测(预测)、多步预测几类。时间序列预测算法有基于统计的、基于机器学习的和基于深度学习的等等。
本文根据实际场景(单元多步时序预测),针对多线路预测问题,从数据分析到模型预测,采用LSTM,端到端实现CDN网络流量预测模型。

实验步骤

1.代码和数据集
本案例使用的数据集是来自于脱敏过的CDN网络流量预测项目数据集,因此数据及模型精度较真实效果有点偏差,打开压缩包后使用代码和数据集

2 查看数据
构建任何模型之前,都需要先对数据集进行分析,了解数据集的规模、属性名、属性值等情况。因为我们要先了解数据,才能用好数据

2.1 读取csv文件
pandas是常用的python数据分析模块,我们先用它来加载数据集中的csv文件。以time_series_1.csv为例,我们先加载该文件来分析数据的情况

import pandas as pd
df_data = pd.read_csv("./network_traffic_forecast/data/time_series_1.csv")

2.2 查看单个csv文件数据的规模

print('单个csv文件数据的规模,行数:%d, 列数:%d' % (df_data.shape[0], df_data.shape[1]))
单个csv文件数据的规模,行数:68601, 列数:4

2.3 查看前20行数据
使用pandas加载csv后,得到的是一个DataFrame对象,可以理解为一个表格,调用该对象的head()函数,我们查看一下该表格的头20行数据

df_data.head(20)
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

在这里插入图片描述

如上所示是表格的头20行数据,表头是属性名,属性名下面是属性值,各属性含义如下:

属性名 属性含义
TimePoint	Unix时间戳
att1	区域
att2	运营商
Value	流量值(GB)

2.3.1 查看单条线路数据情况

df_data[(df_data['att1'] == 0) & (df_data['att2'] ==0)]
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

TimePoint	att1	att2	Value
0	1592496000	0	0	1.683235e+08
12	1592496060	0	0	7.017834e+07
24	1592496120	0	0	5.218320e+07
36	1592496180	0	0	4.973728e+07
48	1592496240	0	0	2.627043e+07
60	1592496300	0	0	2.516527e+07
72	1592496360	0	0	5.241541e+04
84	1592496420	0	0	5.126166e+02
92	1592496480	0	0	1.253282e+03
104	1592496600	0	0	1.975488e+02
119	1592496720	0	0	6.139325e+02
136	1592496900	0	0	5.598084e+03
147	1592496960	0	0	2.088519e+03
190	1592497320	0	0	8.426582e+02
199	1592497380	0	0	2.255806e+04
210	1592497440	0	0	1.048735e+04
218	1592497500	0	0	4.599218e+03
229	1592497560	0	0	5.261509e+02
237	1592497620	0	0	1.098636e+02
256	1592497740	0	0	1.977122e+02
274	1592497920	0	0	6.781617e+02
282	1592497980	0	0	9.741788e+01
292	1592498040	0	0	5.603992e+03
303	1592498100	0	0	4.493011e+02
313	1592498160	0	0	1.461330e+03
321	1592498220	0	0	2.241611e+03
326	1592498280	0	0	1.335533e+03
331	1592498340	0	0	3.136885e+02
340	1592498460	0	0	3.227209e+02
347	1592498520	0	0	2.783268e+02

… … … … …

5717 rows × 4 columns

如上所示,以att1=0,att2=0 查看单条线路{区域,运营商}数据情况,可以看到数据是1min采样一次,共4天。

2.3.2 查看数据时序性情况
画出每条线路数据曲线图,根据曲线图判断数据时序性

import time
import matplotlib.pyplot as plt
from intel_tensorflow import IETensor

# 使用 Intel 的工具包 tensorflow

# 假设 df_data 包含 'att1', 'att2', 'TimePoint', 'Value' 列
# 如果列名不同,请修改下面的代码以匹配实际的列名

# 将时间戳转换为可读的时间格式
df_data["TimePoint"] = df_data["TimePoint"].apply(lambda x: time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(x)))
# 将数据按 'att1' 和 'att2' 分组,并绘制曲线图
fig, ax = plt.subplots(figsize=(20, 10))

for name, group in df_data.groupby(["att1", "att2"]):
    # 使用 Intel 工具包进行加速或优化操作,例如 IETensor 类
    x = IETensor(group['TimePoint'].values)
    y = IETensor(group['Value'].values)

    ax.plot(x, y, label=name)

plt.title('每条线路数据曲线图 (使用 Intel 工具包)')
plt.xlabel('时间')
plt.ylabel('数值')
plt.legend()
plt.show()


df_data.groupby(["att1","att2"]).describe()

print(df_data['Value'].min())
print(df_data['Value'].max()) 
INFO:matplotlib.font_manager:font search path ['/home/ma-user/anaconda3/envs/Pytorch-1.0.0/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf', '/home/ma-user/anaconda3/envs/Pytorch-1.0.0/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/afm', '/home/ma-user/anaconda3/envs/Pytorch-1.0.0/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/pdfcorefonts']

INFO:matplotlib.font_manager:generated new fontManager
att1  att2

0     0       AxesSubplot(0.125,0.125;0.775x0.755)

      1       AxesSubplot(0.125,0.125;0.775x0.755)

      2       AxesSubplot(0.125,0.125;0.775x0.755)

1     0       AxesSubplot(0.125,0.125;0.775x0.755)

      1       AxesSubplot(0.125,0.125;0.775x0.755)

      2       AxesSubplot(0.125,0.125;0.775x0.755)

2     0       AxesSubplot(0.125,0.125;0.775x0.755)

      1       AxesSubplot(0.125,0.125;0.775x0.755)

      2       AxesSubplot(0.125,0.125;0.775x0.755)

3     0       AxesSubplot(0.125,0.125;0.775x0.755)

      1       AxesSubplot(0.125,0.125;0.775x0.755)

      2       AxesSubplot(0.125,0.125;0.775x0.755)

Name: Value, dtype: object

在这里插入图片描述

时间序列数据构成要素:长期趋势,季节变动,循环变动,不规则变动。

  1. 长期趋势(T)现象在较长时期内受某种根本性因素作用而形成的总的变动趋势。
  2. 季节变动(S)现象在一年内随着季节的变化而发生的有规律的周期性变动。
  3. 循环变动(C)现象以若干年为周期所呈现出的波浪起伏形态的有规律的变动。
  4. 不规则变动(I)是一种无规律可循的变动,包括严格的随机变动和不规则的突发性影响很大的变动两种类型。
    分析:

如上图所示,是将数据按照(att1,att2)分组后,每条线路的曲线示意图,图上每条曲线则对应不同的线路,横轴为时间,纵轴为单条线路对应的Value值。根据图中曲线及以上时间序列数据特点,可得出以下结论:

  • 数据存在周期性 每天一个周期,同一线路各周期间数据范围大致相同,不存在趋势性,季节性由于数据较少,暂看不出来,
  • 共31个区域,每个{区域,运营商}]对应一条具体的线路,即共31*3条线路 每条线路大致趋势相同,但是量级不一样 需要进行归一化
    数据峰值处波动较大,其余部分较平缓
  • 整体数据质量较好,不需要进行数据平滑等使得数据变平稳的操作,后续建模预测未来10min,将主要依赖待预测点前一段时序数据进行预测。
  • 数据中无明显脱离整体趋势范围的异常值。
    2.4 数据分析
    查看数据的统计值及空值情况
df_data.groupby(["att1","att2"]).describe()
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead tr th {
    text-align: left;
}

.dataframe thead tr:last-of-type th {
    text-align: right;
}
att1att2countmeanstdmin25%50%75%max
0057172.756998e+081.471390e+0885.1079621.608420e+082.940786e+083.754438e+086.095700e+08
1056865.480488e+072.756697e+0751.3273403.322805e+075.950805e+077.381292e+071.162919e+08
2057242.188223e+081.181942e+0865.7113831.333125e+082.329354e+082.915056e+085.042825e+08
1157151.861563e+079.069485e+0638.3322341.034681e+072.209178e+072.592819e+073.338421e+07
1257251.258266e+086.321933e+074.3814806.769589e+071.459575e+081.770747e+082.377960e+08
2257465.218107e+072.650715e+074.7727772.804430e+076.088992e+077.308530e+079.835380e+07
2057321.179337e+086.204479e+0736.1913966.684485e+071.292305e+081.580988e+082.522959e+08
1156963.024132e+071.488895e+0749.3538601.792033e+073.356871e+074.138216e+075.848370e+07
2257561.024740e+085.487324e+07146.9276475.985492e+071.095121e+081.376453e+082.203716e+08
3057081.271339e+086.343431e+07109.5102947.234194e+071.381774e+081.783945e+082.426037e+08
1157114.340486e+072.045753e+076.8573712.588623e+074.660798e+076.067043e+077.981218e+07
2256851.991225e+089.818788e+071.1694891.234276e+082.079243e+082.744293e+083.993022e+08

数据在时间列采样上存在缺失值,需要进行缺失值填充

对于count列,不同的att1与att2组合(不同线路)对应的count长度不同,正常情况下,数据有4天,应该是1440*4 = 5760个点,说明数据在时间列采样上存在缺失值,需要进行缺失值填充

查看Value列的最大最小值

由于以上分析中,value的max和min显示并不直观,因此这里再做具体分析

print(df_data['Value'].min())
print(df_data['Value'].max()) 
1.1694885305466325

609569980.8860668

可以看到最小值是1.1694885305466325,最大值为609569980.8860668,无小于等于0的异常值;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/212673.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

视频生成的发展史及其原理解析:从Gen2、Emu Video到PixelDance、SVD、Pika 1.0

前言 考虑到文生视频开始爆发,比如11月份就是文生视频最火爆的一个月 11月3日,Runway的Gen-2发布里程碑式更新,支持4K超逼真的清晰度作品(runway是Stable Diffusion最早版本的开发商,Stability AI则开发的SD后续版本)11月16日&a…

Debian下载安装教程

目录 一.前言二.下载三.安装 一.前言 这篇文章展示如何使用VMware Workstation Player安装Debian12虚拟机。 二.下载 官网地址:官网 进入官网之后可以直接点击下载Debian选项,这样下载的是最新版的网络安装镜像。 三.安装 使用VMware Workstation P…

Concurrent Security of Anonymous Credentials Light, Revisited

目录 摘要引言 摘要 我们重新审视了著名的匿名证书轻(ACL)方案(Baldimtsi和Lysyanskaya,CCS’13)的并发安全保证。该方案最初被证明在按顺序执行时是安全的,其并发安全性仍然是一个悬而未决的问题。Benham…

GEE:Sobel算子卷积

作者:CSDN _养乐多_ 本文将深入探讨边缘检测中的一个经典算法,即Sobel算子卷积。我们将介绍该算法的基本原理,并演示如何在Google Earth Engine中应用Sobel算子进行图像卷积操作。并以试验区NDVI为例子,研究区真彩色影像、NDVI图…

Vue+SpringBoot解决session跨域问题

做了一个前后端分离,因为前后端的 session id不一致,导致前端请求时,后端的session读取不到对应的值,造成登录问题。 解决方法: SpringBoot项目: 添加一个跨域配置 代码如下: 或者controller使用CrossOrigin Conf…

单细胞个性化细胞注释

关于单细胞中级的课程内容,前面已经有了三次直播。欢迎回看~ 单细胞直播一理解seurat数据结构与pbmc处理流程 单细胞直播二从GSE104154中理解seurat结构 单细胞直播三seurat数据结构与数据可视化 本期主要内容 本期指哪打哪,自己选定细胞&…

玻色量子事件活动

2023年 2023.7 玻色量子携最新相干光量子计算机惊艳亮相2023数字经济大会 2023.6 打造“新型计算数据中心”!玻色量子与科华数据(002335.SZ)携手共创 2023.6 玻色量子“天工量子大脑”亮相中关村论坛,大放异彩 2023.5 100量…

美容院管理系统服务预约会员小程序效果如何

美容院在美业场景中需求度较高,尤其女性爱美悦己消费逐年增加,如清洁焕肤、祛皱抗衰、激光脱毛等美容项目都有不少需求者。 互联网深入美业行业多年,传统线下经营模式已经很难满足当今客户消费流程,如品牌寻找、服务预约、到店、…

用HeidiSQL在MySQL中创建新的数据库

用有权限的用户登录: 右键单击,选择: 输入要创建的数据库名称,然后点击“确定”: 刷新下,就看到新创建的数据库了: 在新创建的数据库中,就可以做其它操作了,例如…

Python标准库:random库【侯小啾python领航班系列(十七)】

Python标准库random【侯小啾python领航班系列(十七)】 大家好,我是博主侯小啾, 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ�…

【SpringMVC】Spring Web MVC入门(一)

文章目录 前言什么是Spring Web MVC?什么是MVC什么是Spring MVC? Spring Boot 和 Spring MVC 的区别什么是Spring Boot?关系和区别 Spring MVC 学习注解介绍1. SpringBootApplication2. RestController3. RequestMapping3.1 RequestMapping 使…

(c语言)作业讲解

例一&#xff1a; 题目&#xff1a; 答案&#xff1a; #include<stdio.h> #include<math.h> int main() {int x;double sum0; int g 0; int i 0;scanf("%d",&x);while (x > 0){g x % 10;if (g % 2 0){g 0;}else{g 1;}sum g*pow(10,i);…

电子印章管理系统:是什么、3个平台推荐

说到印章&#xff0c;相信看过近现代电视剧的人都见过&#xff0c;一般在订立合约时最常用到&#xff0c;双方在合约上加盖印鉴&#xff0c;即代表着合约的成立。 我小时候还见过我父亲的印章&#xff0c;只是随着时代的发展&#xff0c;印章因为不易携带&#xff0c;容易被盗…

Spring事务传播机制

在上篇文章中&#xff0c;小编带领大家了解了Spring事务&#xff1a;Spring事务-CSDN博客&#xff0c;那么&#xff0c;本篇文章将会带领大家深入了解&#xff1a;Spring事务传播机制&#xff0c;感兴趣的各位老铁&#xff0c;欢迎深入探讨&#xff01;&#xff01; 事务传播机…

10行代码实现vue路由最简单的登陆拦截

需求&#xff1a;不涉及任何角色权限&#xff0c;基本实现目标&#xff0c;有token就可查看任何页面&#xff0c;否则就去登陆&#xff0c;来一步步实现 1. 创建你的路由页面&#xff0c;此处略了 2. 导航守卫拦截判断思路 // 创建路由 const router createRouter({history…

深度学习手势识别算法实现 - opencv python 计算机竞赛

文章目录 1 前言2 项目背景3 任务描述4 环境搭配5 项目实现5.1 准备数据5.2 构建网络5.3 开始训练5.4 模型评估 6 识别效果7 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习手势识别算法实现 - opencv python 该项目较为新颖…

智能优化算法应用:基于狮群算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于狮群算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于狮群算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.狮群算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

rman 0级 1级备份结合的注意事项 obsolete 和 FRA自动清理

1. 当心0级备份从controlfile中删除&#xff0c;0级备份决定recover windows时间 &#xff0c;一级不算 Incremental backup cycle: Sundays: Level 0 Monday-Sat: cumulative level 1 Every Friday and Saturday, the time for the incremental level 1 backup sud…

创投课程研报专题课 | 如何写出高质量研报

协会邀请了来自GPTDAO的分析师——Will作为VC创投课程研报专题课的嘉宾&#xff0c;将于北京时间12月2日(周六)晚上21:00 PM-22:00 PM&#xff0c;与所有对Web3投资、创业心怀热忱的朋友一同探讨《如何写出高质量的研报》这个激动人心的话题。 浙江大学学生区块链协会&#xff…

mybatis整合(手动添加jar包方式)

操作步骤 创建数据库 建立user表 放入数据 1、创建javaweb工程并添加Jar包 用到的jar包 junit 用于测试 mybatis框架&#xff1a;mybatis-3.5.9.jar mysql数据库&#xff1a;mysql-connector-java-8.0.28.jar 2、添加MyBatis核心配置文件 <?xml version"1.0"…