智能運維中的數據轉換

《智能運維實踐 蘇娜 孫琳 王鴿著 人工智能技術叢書 自然語言處理的常用算法 日志異常檢測 根因定位 網絡流量異常檢測 清華大學出版社》【摘要 書評 試讀】- 京東圖書

數據轉換是數據預處理中的關鍵步驟,用于將數據從原始格式轉換為適合分析和建模的形式。這一過程能夠提高數據質量,確保不同來源或格式的數據在分析時具有一致性和可比性。數據轉換通常包括多種技術和方法,例如單位轉換、標準化、格式化、歸一化以及特征編碼等。下面以傳感器數據為例,詳細介紹數據轉換的方法和過程,如示例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…