3. 环境搭建:Python环境配置、依赖库安装与测试数据集准备
说实话,很多做遥测的同事把精力都花在写过滤规则上,结果环境没配好,一跑就报错。我见过太多人卡在「pip install 失败」这种基础问题上。所以这一章,咱们先把地基打牢。
我会带你一步步配好 Python 环境,装好三个核心库,再准备一份真实的测试数据。整个过程大概 15 分钟。嗯,咱们开始吧。
3.1 Python 版本选择与环境隔离
我个人习惯用 Python 3.9 或 3.10。为什么?因为 3.8 以下对 pandas 的新特性支持不好,3.11 以上有些第三方库还没完全适配。我在项目中踩过这个坑——用 3.12 跑一个老项目,结果某个依赖库直接报「不兼容」,折腾了半天才降级。
这里我推荐用 venv,Python 自带的虚拟环境工具,轻量又好用。操作很简单:
# 创建虚拟环境
python3 -m venv telemetry_env
# 激活环境(Windows)
telemetry_env\Scripts\activate
# 激活环境(macOS/Linux)
source telemetry_env/bin/activate
激活后,你会看到终端前面多了个 (telemetry_env) 前缀。这说明你已经在隔离环境里了。所有安装的包都不会污染系统 Python。
3.2 核心依赖库安装
咱们这门课主要用三个库:pandas、re、json。其中 re 和 json 是 Python 内置的,不用装。真正需要动手的是 pandas。
| 库名 | 用途 | 安装方式 |
|---|---|---|
| pandas | 数据清洗、过滤、统计分析 | pip install pandas |
| re | 正则表达式匹配与替换 | 内置,无需安装 |
| json | 遥测数据解析与序列化 | 内置,无需安装 |
安装 pandas 时,我建议指定版本号,避免未来升级导致不兼容:
pip install pandas==2.0.3
装完之后,验证一下:
python -c "import pandas; print(pandas.__version__)"
如果输出了 2.0.3,说明安装成功。我曾经遇到一个学员,装完 pandas 后导入报错,结果发现他同时装了多个 Python 版本,pip 装到了另一个版本上。所以一定要在虚拟环境里操作。
pip list 查看当前环境所有已安装的包。如果 pandas 没出现,说明装错地方了。
3.3 测试数据集准备
光有环境还不够,咱们得有一份能练手的数据。我准备了一份模拟的遥测日志,包含常见的字段:时间戳、设备ID、指标名称、数值、状态码。
你想想看,真实场景下遥测数据长什么样?一般是 JSON 格式,每条记录包含几十个字段。但为了教学,我精简到 5 个核心字段:
| 字段名 | 类型 | 示例值 | 说明 |
|---|---|---|---|
| timestamp | 字符串 | "2024-03-15 10:30:00" | 事件发生时间 |
| device_id | 字符串 | "DEV-001" | 设备唯一标识 |
| metric | 字符串 | "cpu_usage" | 指标名称 |
| value | 浮点数 | 78.5 | 指标数值 |
| status | 整数 | 200 | 状态码(200正常,500异常) |
下面这段代码会生成 1000 条模拟数据,保存为 JSON 文件:
import json
import random
from datetime import datetime, timedelta
# 生成测试数据
records = []
base_time = datetime(2024, 3, 15, 0, 0, 0)
for i in range(1000):
record = {
"timestamp": (base_time + timedelta(seconds=i*30)).strftime("%Y-%m-%d %H:%M:%S"),
"device_id": f"DEV-{random.randint(1, 50):03d}",
"metric": random.choice(["cpu_usage", "memory_usage", "disk_io", "network_in", "network_out"]),
"value": round(random.uniform(0, 100), 2),
"status": 200 if random.random() > 0.1 else 500
}
records.append(record)
# 写入文件
with open("telemetry_data.json", "w") as f:
json.dump(records, f, indent=2)
print(f"生成 {len(records)} 条遥测数据,保存至 telemetry_data.json")
运行后,你会得到一个 telemetry_data.json 文件。我故意在数据里混了 10% 的异常状态码(status=500),后面章节咱们就用这些数据练手。
3.4 环境验证:跑一个简单的过滤脚本
环境搭好了,数据也有了。咱们跑个简单的脚本,验证一切是否正常。这个脚本会读取 JSON 文件,用 pandas 过滤出所有 status=500 的异常记录:
import pandas as pd
import json
# 读取数据
with open("telemetry_data.json", "r") as f:
data = json.load(f)
# 转为 DataFrame
df = pd.DataFrame(data)
# 过滤异常记录
error_df = df[df["status"] == 500]
print(f"总记录数: {len(df)}")
print(f"异常记录数: {len(error_df)}")
print(error_df.head())
如果输出类似下面这样,说明环境配置成功:
总记录数: 1000
异常记录数: 97
timestamp device_id metric value status
12 2024-03-15 00:06:00 DEV-023 memory_usage 12.34 500
45 2024-03-15 00:22:30 DEV-008 disk_io 67.89 500
...
为什么会这样?因为咱们的数据生成时,有 10% 的概率把 status 设为 500。这个比例刚好模拟了真实系统中偶发的异常情况。
read_json() 读取遥测数据,结果因为 JSON 里嵌套了多层结构,读出来全是 NaN。后来改用 json.load() 先解析,再转 DataFrame,问题就解决了。所以这里我推荐两步走。
3.5 本章知识体系总览
下面这张图总结了咱们这一章的核心内容:从环境搭建到数据准备,再到验证测试。你可以把它当作一个快速参考。
环境搭好了,数据也验证通过了。接下来咱们就可以正式进入遥测过滤的核心内容了。记住,基础打牢了,后面写规则、调性能才会顺手。