《智能运维实践 苏娜 孙琳 王鸽著 人工智能技术丛书 自然语言处理的常用算法 日志异常检测 根因定位 网络流量异常检测 清华大学出版社》【摘要 书评 试读】- 京东图书

数据转换是数据预处理中的关键步骤,用于将数据从原始格式转换为适合分析和建模的形式。这一过程能够提高数据质量,确保不同来源或格式的数据在分析时具有一致性和可比性。数据转换通常包括多种技术和方法,例如单位转换、标准化、格式化、归一化以及特征编码等。下面以传感器数据为例,详细介绍数据转换的方法和过程,如示例6-4所示,示例文件为demo/code/chapter6/Data_transformation.py。

1. 示例背景

运维团队需要处理来自不同系统的监控数据,这些数据可能存在以下问题:

  • 单位不统一:存储容量单位有GB、MB、KB,时间单位有毫秒(ms)、秒(s)、纳秒(ns)。
  • 格式不一致:时间戳格式有UNIX时间戳、ISO8601等多种格式。
  • 标准化缺失:状态码存在数字(如200)和文本(如"success")混用的情况。

2. 数据转换

具体数据转换如下:

  • 单位转换:将所有容量统一为GB,时间统一为秒。
  • 时间标准化:转换为UTC时区的ISO8601格式。
  • 状态码规范化:统一为HTTP状态码数字。
  • 数据格式化:输出为结构化的JSON格式文件。

【示例6-4】数据转换

import re
import json
from datetime import datetime
import pytz
from enum import Enum# 示例原始数据
raw_data = ['{"host": "server1", "disk_usage": "500GB", "response_time": 
120ms", "timestamp": 1678923456, "status": "success"}','{"host": "server2", "disk_usage": "250000MB", "response_time": 
0.45", "timestamp": "2023-03-15T12:30:45+08:00", "status": 200}','{"host": "server3", "disk_usage": "1000000KB", "response_time": 
1.2s", "timestamp": "15/Mar/2023:12:30:45", "status": "error"}'
]class StatusCode(Enum):SUCCESS = 200ERROR = 500UNKNOWN = 0def convert_size_to_gb(size_str):"""将存储容量统一转换为GB"""size_str = str(size_str).upper()if 'GB' in size_str:return float(size_str.replace('GB', ''))elif 'MB' in size_str:return float(size_str.replace('MB', '')) / 1024elif 'KB' in size_str:return float(size_str.replace('KB', '')) / (1024 * 1024)else:  # 无单位假定为GBreturn float(size_str)def convert_time_to_seconds(time_str):"""将时间统一转换为秒"""time_str = str(time_str).lower()if 'ms' in time_str:return float(time_str.replace('ms', '')) / 1000elif 's' in time_str:return float(time_str.replace('s', ''))elif 'ns' in time_str:return float(time_str.replace('ns', '')) / 1e9else:  # 无单位假定为秒return float(time_str)def standardize_timestamp(timestamp):"""标准化时间戳为UTC ISO8601格式"""if isinstance(timestamp, (int, float)):return datetime.fromtimestamp(timestamp, pytz.utc).isoformat()elif 'T' in str(timestamp):dt = datetime.fromisoformat(str(timestamp))if dt.tzinfo is None:dt = pytz.utc.localize(dt)else:dt = dt.astimezone(pytz.utc)return dt.isoformat()elif '/' in str(timestamp):dt = datetime.strptime(str(timestamp), '%d/%b/%Y:%H:%M:%S')dt = pytz.timezone('Asia/Shanghai').localize(dt). astimezone(pytz.utc)return dt.isoformat()return Nonedef standardize_status(status):"""标准化状态码"""status = str(status).lower()if status in ('success', 'ok', '200'):return StatusCode.SUCCESS.valueelif status in ('error', 'fail', '500'):return StatusCode.ERROR.valueelif status.isdigit():return int(status)return StatusCode.UNKNOWN.valuedef process_data_entry(entry):"""处理单个数据条目"""try:data = json.loads(entry)except json.JSONDecodeError:print(f"无效JSON格式: {entry}")return Nonereturn {'host': data['host'],'disk_usage_gb': convert_size_to_gb(data['disk_usage']),'response_time_seconds': 
onvert_time_to_seconds(data['response_time']),'timestamp_utc': standardize_timestamp(data['timestamp']),'status_code': standardize_status(data['status'])}def analyze_processed_data(processed_data):"""分析处理后的数据"""valid_data = [x for x in processed_data if x is not None]disk_usages = [x['disk_usage_gb'] for x in valid_data]response_times = [x['response_time_seconds'] for x in valid_data]status_codes = [x['status_code'] for x in valid_data]return {'total_entries': len(processed_data),'valid_entries': len(valid_data),'avg_disk_usage': sum(disk_usages) / len(disk_usages) if disk_usages else None,'avg_response_time': sum(response_times) / len(response_times) if response_times else None,'status_distribution': {code: status_codes.count(code) for code in set(status_codes)}}def main():print("原始数据示例:")for data in raw_data[:2]:print(data)print("\n正在处理数据...")processed_data = [process_data_entry(entry) for entry in raw_data]print("\n标准化后的数据示例:")for data in processed_data[:2]:print(json.dumps(data, indent=2))# 分析数据analysis = analyze_processed_data(processed_data)print("\n数据分析结果:")print(json.dumps(analysis, indent=2))# 保存结果with open('data\processed_data.json', 'w') as f:json.dump(processed_data, f, indent=2)print("\n结果已保存到 data\processed_data.json")if __name__ == "__main__":main()

代码解释:

1)单位转换函数

  • convert_size_to_gb(): 将存储容量单位从GB、MB、KB统一转换为GB。
  • convert_time_to_seconds(): 将时间单位从毫秒(ms)、秒(s)、纳秒(ns)统一转换为秒。

2)标准化函数

  • standardize_timestamp(): 处理多种时间戳格式,并统一为UTC时区的ISO8601格式。
  • standardize_status(): 统一状态码表示,使用枚举规范状态码。

3)数据处理流程

  • 使用process_data_entry()处理单个数据条目,应用所有转换规则。
  • 保留原始数据以便追溯。
  • 简化处理逻辑,不处理缺失值情况。

4)数据分析

  • 计算平均磁盘使用量和响应时间。
  • 统计状态码分布。
  • 输出数据质量报告。

运行示例6-4,处理结果保存至.\data\processed_data.json,控制台输出如下:

原始数据示例:
{"host": "server1", "disk_usage": "500GB", "response_time": "120ms", "timestamp": 1678923456, "status": "success"}
{"host": "server2", "disk_usage": "250000MB", "response_time": "0.45", "timestamp": "2023-03-15T12:30:45+08:00", "status": 200}正在处理数据...标准化后的数据示例:
{"host": "server1","disk_usage_gb": 500.0,"response_time_seconds": 0.12,"timestamp_utc": "2023-03-15T23:37:36+00:00","status_code": 200
}
{"host": "server2","disk_usage_gb": 244.140625,"response_time_seconds": 0.45,"timestamp_utc": "2023-03-15T04:30:45+00:00","status_code": 200
}数据分析结果:
{"total_entries": 3,"valid_entries": 3,"avg_disk_usage": 248.3647664388021,"avg_response_time": 0.59,"status_distribution": {"200": 2,"500": 1}
}结果已保存到 data\processed_data.json

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/91087.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/91087.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/91087.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IAR编辑器如何让左侧的工具栏显示出来?

在IAR编辑器中恢复左侧工具栏显示,可通过以下方法操作: 一、通过菜单栏启用工具栏 ‌进入视图菜单‌ 点击顶部菜单栏的 ‌"View"‌ → 在弹出列表中勾选 ‌"Workspace"‌ 若工具栏仍不显示,查看菜单栏右侧是否有 ‌"…

ADB+Python控制(有线/无线) Scrcpy+按键映射(推荐)

要实现电脑通过键盘控制安卓平板屏幕点击的功能,可以采用以下方案: 方案一:ADBPython控制(有线/无线) 准备工具: 安卓平板开启开发者模式(设置→关于平板→连续点击版本号)启用USB调…

同态滤波算法详解:基于频域变换的光照不均匀校正

🎭 同态滤波:图像频域的调音师技术“如同调音师在音频处理中分离并调节不同频率成分,同态滤波能够在图像频域中精确分离光照与细节信息。”🎯 图像频域调音的技术挑战 在数字图像处理中,光照不均匀问题如同音频中的混响…

Ubuntu简述及部署系统

1.什么是Ubuntu1.1概述Ubuntu属于Debian系列,Debian是社区类Linux的典范,是迄今为止最遵循GNU规范的Linux系统。Debain最早由lan Murdock于1993年创建,分为三个版本分支(branch):stable,testing…

Claude Code安装部署

1️⃣安装 Node.js(已安装可跳过) 确保 Node.js 版本 ≥ 18.0 # Ubuntu / Debian 用户 curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo bash - sudo apt-get install -y nodejs node --version# macOS 用户 sudo xcode-select --install /b…

MATLAB近红外光谱分析技术及实践技术应用

专题一、MATLAB编程基础与进阶(一)1、MATLAB 安装、版本历史与编程环境2、MATLAB 基础操作(矩阵操作、逻辑与流程控制、函数与脚本文件)3、MATLAB文件读写(mat、txt、xls、csv、jpg、wav、avi等格式)专题二…

SQLFluff

一、SQLFluff 是什么? SQLFluff 是一个​​开源的 SQL 代码质量工具​​,专注于通过自动化方式提升 SQL 代码的可读性、一致性和规范性。其核心功能包括: ​​代码格式化​​:自动调整缩进、空格、换行等格式问题,支…

盲盒抽卡机小程序系统开发:连接线上线下娱乐新桥梁

在互联网技术的推动下,线上线下融合已经成为娱乐行业发展的必然趋势。盲盒抽卡机,这一原本在线下备受欢迎的娱乐项目,通过小程序系统的开发,成功实现了线上线下的无缝对接,成为连接线上线下娱乐的新桥梁。盲盒抽卡机小…

【SSL证书校验问题】通过 monkey-patch 关掉 SSL 证书校验

标签:Python、SSL、monkey-patch、httpx、aiohttp、requests、OpenAI 1 为什么会有这篇文章? 在本地调试 OpenAI 代理、数据抓取、私有服务、访问外网 时,经常会碰到如下报错: SSLCertVerificationError: [SSL: CERTIFICATE_VER…

VMWARE -ESXI-ntp时间同步无法启动异常处理

从服务界面查看NTP服务是停止的(手动启动无效)尝试到系统-时间设置-添加服务-网络时间协议,添加阿里云NTP服务器(网络可达) ntp.aliyun.com 点击确定报错-无法更改主机配置出现上面的情况多半是DNS没有设置ssh登录到服…

yolo11分类一键训练工具免安装环境windows版使用教程

这个是windows上用于yolo11分类训练工具,不需要写代码只需要按照要求摆放好分类图片文件夹就可以训练。软件内置cuda和python模块,因此不需要安装python环境和cuda就可以使用。注意需要电脑配备有nvidia显卡才能使用。要求显存>4GB。首先我们打开软件…

2025年-ClickHouse 高性能实时分析数据库(大纲版)

告别等待,秒级响应!这不只是教程,这是你驾驭PB级数据的超能力!我的ClickHouse视频课,凝练十年实战精华,从入门到精通,从单机到集群。点开它,让数据处理速度快到飞起,让你…

深入理解 Scikit-learn:机器学习实战的科学之道与避坑指南

掌握工具易,领悟其道难——本文带你穿透API表面,直击工业级机器学习实践的核心逻辑。作为一名长期耕耘在机器学习研究与工业应用一线的从业者,我见过太多因误用 sklearn 而导致的模型失效案例。从数据泄露到评估失真,从特征处理失…

Android 调试桥 (adb) 基础知识点

Android 调试桥 (adb) 是一种功能多样的命令行工具,可让您与安卓手机进行通信。常用于辅助测试开发或定位问题。 一、adb的工作原理 🌟 启动服务器进程:检查是否adb服务器进程正在运行,若没有则启动。 启动或关闭adb服务&#xff…

AW2013 LED驱动芯片 工作方式介绍

根据您上传的 AW2013 芯片手册,我将为您分三个部分详细解读:一、芯片简介(AW2013 概述) AW2013 是一款 3 通道的 IC 控制恒流 LED 驱动芯片,支持以下功能:单通道最大恒流输出:15mA,支…

node.js中的fs与path模块

前言 什么是Node.js? Node.js 是一个开源和跨平台的 JavaScript 运行时环境 Node.js 在浏览器之外运行 V8 JavaScript 引擎,即 Google Chrome 的核心。一、fs模块基础 1. 引入fs模块 const fs require(fs);2. 同步与异步方法 fs模块提供了同步和异步两种…

C# 静态类_静态方法_静态字段(static 声明静态的关键字 )

静态类里面的所有成员都必须得是静态的,是不能被实例化的(不能用对象调用),不能在静态类中声明实例(非静态)字段 属性 方法 静态方法中也只能访问静态字段, 普通方法中不管数据是不是静态都能使用1、定义一个静态类 //…

MRDIMM对服务器总体拥有成本(TCO)影响的系统性分析

以下是针对MRDIMM对服务器总体拥有成本(TCO)影响的系统性分析,结合技术特性与经济性指标:一、MRDIMM降低TCO的核心机制带宽效率提升 MRDIMM通过数据缓冲器实现双Rank并行传输,单次数据传输量从标准RDIMM的64字节提升至…

c# openxml 打开加密 的word读取内容

using System; using System.IO; using System.Linq; using System.Text; using DocumentFormat.OpenXml; using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Wordprocessing;/// <summary> /// 使用OpenXML获取文档内容&#xff0c;替代Aspose方式…

【SpringAI实战】ChatPDF实现RAG知识库

一、前言 二、实现效果 三、代码实现 3.1 后端代码 3.2 前端代码 一、前言 Spring AI详解&#xff1a;【Spring AI详解】开启Java生态的智能应用开发新时代(附不同功能的Spring AI实战项目)-CSDN博客 二、实现效果 实现一个非常火爆的个人知识库AI应用&#xff0c;ChatPDF…