Python 温度数据处理与可视化全流程:从读取到保存

120 阅读2分钟

1. 数据读取阶段

使用np.loadtxt读取 CSV 文件,关键参数说明:

  • delimiter=",":指定逗号为分隔符
  • dtype=bytes:先以字节类型读取,避免编码问题
  • skiprows=1:跳过标题行
  • usecols=(1):只读取第二列的温度数据
import numpy as np
# 1. 读取温度数据
temperature_str = np.loadtxt(
    "ug_detect.csv",
    delimiter=",",  # 分隔符
    dtype=bytes,    # 数据类型 字节类型
    skiprows=1,     # 跳过第一行标题
    usecols=(1)     # 只读取第二列数据
)
print("读取出来的温度原始数据:", temperature_str)

2. 数据转换与清洗

这一步主要完成:

  • 将字节类型转换为浮点数
  • 处理空值:将空字符串转换为 None(在 numpy 中会变为 nan)
  • 处理异常值:将高于 50°C 的温度值视为异常,同样转换为 None

# 2. 类型转换+缺失值与异常值处理
temperature = np.zeros(len(temperature_str))
print("初始化的数组temperature:", temperature)

for i in range(len(temperature_str)):
    item = temperature_str[i]  # 取出当前元素
    if item != b"":  # 如果当前元素非空
        item = float(item)  # 字符串转浮点数
        if item >= 50.0:    # 温度高于50°视为异常值
            item = None
    else:  # 空值处理
        item = None
    temperature[i] = item  # 赋值给新数组

3. 缺失值填充

采用邻近值填充法处理 nan 值:

  • 第一个元素缺失:用第二个元素填充
  • 最后一个元素缺失:用倒数第二个元素填充
  • 中间元素缺失:用前后两个元素的平均值填充

# 3. 处理nan值
for i in range(len(temperature)):
    if np.isnan(temperature[i]):  # 判断是否为nan值
        if i == 0:  # 第一个元素
            temperature[i] = temperature[i+1]
        elif i == len(temperature) - 1:  # 最后一个元素
            temperature[i] = temperature[i-1]
        else:  # 中间元素
            temperature[i] = 0.5 * (temperature[i-1] + temperature[i+1])

print("nan处理之后的数组temperature:", temperature)

4. 数据可视化

使用 matplotlib 绘制温度曲线:

  • 生成时间序列作为 x 轴
  • 同时绘制曲线和散点(红色心形标记)
  • 添加标题和坐标轴标签使图像更清晰

## 4. 可视化温度曲线
import matplotlib.pyplot as plt
t = np.arange(len(temperature))  # 生成时间序列
plt.plot(t, temperature)  # 绘制曲线
plt.plot(t, temperature, 'pr')  # 绘制红色心形点
plt.title('Temperature Variation Curve')  # 标题
plt.xlabel('Time')  # x轴标签
plt.ylabel('Temperature (°C)')  # y轴标签
plt.show()  # 显示图像

5. 将处理后的温度数据保存为新的 CSV 文件,保留两位小数

# 5. 结果写入文件
np.savetxt(
    "ug_temperature.csv",
    temperature,
    fmt="%.2f",  # 保留两位小数
    delimiter=",",
    encoding="utf-8"
)