Skip to content

1.导入库

python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
  • pandas 用于数据处理和分析,简写为 pd
  • numpy 用于数值计算,简写为 np
  • matplotlib.pyplot 用于数据可视化,简写为 plt (虽然代码中未实际使⽤绘图功能)

2.读取数据

python
data = pd.read_csv('sensor_data.csv')
  • 使⽤ pandas 的 read_csv 函数读取名为 'sensor_data.csv' 的 传感器数据集文件
  • 将数据存储在名为 data 的 DataFrame 中

3.传感器数据统计

python
sensor_stats = data.groupby('SensorType')['Value'].agg(['count', 'mean'])
  • 按 ' SensorType' (传感器类型)对数据进⾏分组
  • 对每组中的 'Value' (数值)列进⾏聚合计算
  • agg(['count', 'mean']) 计算每个传感器类型的数据数量和平均值
  • 结果存储在 sensor_stats 变量中
python
print("传感器数据数量和平均值:")
print(sensor_stats)
  • 打印标题
  • 打印统计结果

4.按位置统计温度和湿度数据

python
location_stats = data[data['SensorType'].isin(['Temperature', 'Humidity'])].groupby(['Location', 'SensorType'])['Value'].mean().unstack()
  • data['SensorType'].isin(['Temperature', 'Humidity']) 筛选出传感器类型为温度或湿度的数据
  • .groupby(['Location', 'SensorType']) 按位置和传感器类型双重分组
  • ['Value'].mean() 计算每组数值的平均值
  • .unstack() 将分组结果转换为更易读的表格形式(将SensorType 从⾏索引转为列名)
  • 结果存储在 location_stats 变量中
python
print("每个位置的温度和湿度数据平均值:")
print(location_stats)
  • 打印标题
  • 打印统计结果

5.数据清洗和异常值处理

python
data['is_abnormal'] = np.where(((data['SensorType'] == 'Temperature') & ((data['Value'] < -10) | (data['Value'] > 50))) |
((data['SensorType'] == 'Humidity') & ((data['Value'] < 0) | (data['Value'] > 100))),True, False)
  • 创建新列 'is_abnormal' 标记异常值

  • 使用 numpy.where 进⾏条件判断:

    • 如果是温度传感器且数值 < -10 或 > 5
    • 或者是湿度传感器且数值 < 0 或 > 100
  • 满足条件标记为 True (异常),否则为 False (正常)

python
print("异常值数量:", data['is_abnormal'].sum())
  • 统计并打印异常值数量(True 会被视为 1 ,False 为 0 ,所以 sum() 可以计算异常值数量)

6.填补缺失值

python
data['Value'].fillna(method='ffill', inplace=True)
  • 使用前向填充( forward fill )方法填补缺失值( NaN )
  • 用前⼀个有效值填充后⾯的缺失值
  • inplace=True 表示直接修改原 DataFrame
python
data['Value'].fillna(method='bfill', inplace=True)
  • 使用后向填充( backward fill )方法填补剩余的缺失值
  • 用后⼀个有效值填充前⾯的缺失值
  • 这样可以确保所有缺失值都被填补(如果开头有缺失值, ffill ⽆法处理)

7.保存清洗后的数据

python
cleaned_data = data.drop(columns=['is_abnormal']) // [!code warning]
  • 创建清洗后的数据集 cleaned_data
  • 删除用于标记异常值的列 'is_abnormal'
python
cleaned_data.to_csv('cleaned_sensor_data.csv', index=False)
  • 将清洗后的数据保存到新的 CSV ⽂件 'cleaned_sensor_data.csv'
  • index=False 表示不保存行索引
python
print("数据清洗完成,已保存为 'cleaned_sensor_data.csv'")
  • 打印完成信息