任务描述
探索一个系统故障数据,去除重复值,绘制不同label下feature5的分布散点图,绘制feature86的KDE分布图,针对feature86进行最小-最大规范化操作后,再次绘制feature86的KDE分布图。 该数据已经做了脱敏处理,字段“label”为类别标签,0表示正常,1,2,3,4,5表示故障。
相关知识
- 去除重复值:
在模型训练过程中去除重复值是一个常见的预处理步骤,这能够降低模型训练过程中过拟合的风险,提升模型的泛化能力。
- 可视化:
最常规的可视化方式包括绘制与数据特征相关的散点图、柱状图、箱线图等,以此更好的查看数据特征与标签之间的关系。
- KDE:
即Kernel Density Estimation,是一种用于估计概率密度函数(PDF)的非参数统计方法。它在统计学、数据分析和机器学习中被广泛用于理解数据分布、可视化数据以及进行概率密度估计。
- 最小-最大规范化:
也被称为Min-Max缩放,用于将数值特征的取值范围缩放到指定的区间,通常是[0,1]之间。
编码提示
在去除重复值时,需要将sample_id列进行排除,如果直接进行比对,则会无法发现数据中的重复值。
编程要求
根据代码提示,补全需要的代码:
- 判断数据集中是否存在重复数据,统计数量,并去除
预期的结果为: - 针对feature5按照标签绘制对应的分布图
预期的结果为: - 绘制feature86的KDE分布图
预期的结果为: - 针对feature86进行最小-最大规范化(0,1之间)操作,并打印前10个数据的feature86的数值
预期的结果为: - 绘制最小-最大规范化操作后feature86的KDE分布图
预期的结果为:
测试说明
平台将根据最后的运行结果进行评测。 注意: (1)评测前,请注释题目未要求的所有print()语句,保留题目明确要求“打印”的语句; (2)请点击Jupyter的“保存”按钮,保存代码。 预期的结果为:
# -*-encoding:utf-8 -*-
# import package.
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')
data = pd.read_csv('/data/bigfiles/dataset.csv')
data.head()
# 利用tail()函数观察数据集中后10项
data.tail(10)
# 利用describe()函数观察数值型字段的描述信息
data.describe()
# 获取数据集数据标签
label = data['label']
# 获取数据集数据特征
feature = data.loc[:, 'feature0':'feature106']
# 利用drop_duplicates()方法去除重复数据,并将去重后的数据存储到data_unique中
feature_label = data.columns.tolist()
del feature_label[0]
data_unique = feature.drop_duplicates()
print('原始数据集中样本数量为:',len(data))
print('原始数据集中不重复样本数量为:',len(data_unique))
# 统计重复的数量
duplicate_count = len(data) - len(data_unique)
print("原始数据集中重复样本数量为:", duplicate_count)
# 删除重复数据并按顺序重新编号
data_unique = data.drop_duplicates(subset=feature_label).reset_index(drop=True)
# 使用均值填充空缺值和NaN值
data_unique.fillna(data_unique.mean(), inplace=True)
# 提取sample_id列,feature5列和label列
sample_id = data_unique['sample_id']
feature5 = data_unique['feature5']
labels = data_unique['label']
# 将不同标签的数据分开
label_data = {}
for label in set(labels):
label_data[label] = {'sample_id': sample_id[labels == label], 'feature5': feature5[labels == label]}
# 设置颜色映射,用于不同标签的散点图颜色
colors = {0: 'red', 1: 'blue', 2: 'green', 3: 'red', 4: 'blue', 5: 'green'}
# 创建两个子图
fig, axes = plt.subplots(1, 2, figsize=(12, 6))
# 绘制label为0~2的散点图
axes[0].set_title('Feature5 Distribution (Label 0~2)')
for label in range(3):
data_points = label_data[label]
axes[0].scatter(data_points['sample_id'], data_points['feature5'], color=colors[label], label=f'label {label}')
# 绘制label为3~5的散点图
axes[1].set_title('Feature5 Distribution (Label 3~5)')
for label in range(3, 6):
data_points = label_data[label]
axes[1].scatter(data_points['sample_id'], data_points['feature5'], color=colors[label], label=f'label {label}')
# 添加标签和图例
for ax in axes:
ax.set_xlabel('Sample ID')
ax.set_ylabel('Feature5 Value')
ax.legend()
# 自动调整布局
plt.tight_layout()
# 显示图形
plt.show()
# 提取feature86列
feature86 = data_unique['feature86']
# 设置画布大小
plt.figure(figsize=(10, 6))
# 绘制KDE分布图
sns.kdeplot(data=feature86, fill=True, color='blue', alpha=0.5)
# 添加标签和标题
plt.xlabel('Feature86 Value')
plt.ylabel('Density')
plt.title('KDE Distribution of Feature86')
# 显示图形
plt.show()
# 针对data_unique['feature86']使用最小最大规范化操作,使得数值大小在[0,1]之间
data_unique['feature86'] = [(x - min(data_unique['feature86'])) / (max(data_unique['feature86']) - min(data_unique['feature86'])) for x in data_unique['feature86']]
print('最小最大规范化操作后的feature86的前十项')
print(data_unique['feature86'][:10])
# 提取feature86列
feature86 = data_unique['feature86']
# 设置画布大小
plt.figure(figsize=(10, 6))
# 绘制KDE分布图
sns.kdeplot(data=feature86, fill=True, color='blue', alpha=0.5)
# 添加标签和标题
plt.xlabel('Feature86 Value')
plt.ylabel('Density')
plt.title('KDE Distribution of Feature86')
# 显示图形
plt.show()