Appearance
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'")- 打印完成信息