2.1.5 · 建议 20 分钟 · 满分 16
健康与营养咨询数据预处理与数据规范设计
背景
在健康与营养咨询领域,客户的健康数据是评估其饮食和生活方式建议的重要依据。通过对客户健康数据的分析,可以帮助健康咨询师更准确地评估客户的健康状况,并制定个性化的营养和健康管理计划。现提供一份健康咨询客户数据集。请补全 2.1.5.ipynb 代码,完成下面的数据预处理任务。
工作任务
- 加载数据集:查看表的数据类型,表结构和显示每一列的空缺值数量。
- 缺失值处理:对于含有缺失值的行进行删除操作。
- 数据类型转换:将“Your age”列的数据类型转换为整数类型,并处理其中的异常值。
- 数据去重:检查数据集中的重复值并删除所有重复值,并记录删除的行数。
- 数据归一化处理:对“如何形容你的当前健身水平?”(How do you describe your current level of fitness ?)列中的数据进行归一化处理。
- 绘制健身频率分布的饼图。
- 对数据进行标注划分。
- 保存处理后的数据,并命名为:2.1.5_cleaned_data.csv。
- 制定数据清洗和数据标注规范,写到答题卷文件 2.1.5.docx。
素材预览
健康咨询客户数据集.csv
Timestamp,Your name,Your gender,Your age,How important is exercise to you ?,How do you describe your current level of fitness ?,How often do you exercise?,... 2019/07/03 11:48:07 PM GMT+5:30,Parkavi,Female,19 to 25,2,Good,Never,... 2019/07/03 11:51:22 PM GMT+5:30,Nithilaa,Female,19 to 25,4,Very good,Never,...
代码填空
import pandas as pd
# 加载数据集
data =
# 查看表结构基本信息
print()
# 显示每一列的空缺值数量
print()
# 删除含有缺失值的行
data_cleaned =
# 转换 'Your age' 列的数据类型为整数类型,并处理异常值
data_cleaned.loc[:, 'Your age'] = (, errors='coerce')
data_cleaned = data_cleaned.dropna(subset=['Your age'])
data_cleaned = data_cleaned[data_cleaned['Your age'] >= 0]
data_cleaned.loc[:, 'Your age'] = data_cleaned['Your age'].
print(data_cleaned['Your age'].dtype)
# 检查和删除重复值
duplicates_removed = data_cleaned.duplicated().sum()
data_cleaned =
print(f"Removed {duplicates_removed} duplicate rows")
from sklearn.preprocessing import LabelEncoder
# 归一化 'How do you describe your current level of fitness ?' 列
label_encoder = LabelEncoder()
data_cleaned[] =
print(data_cleaned['How do you describe your current level of fitness ?'].unique())
from sklearn.preprocessing import LabelEncoder
import matplotlib.pyplot as plt
# 去掉列名中的空格
data.columns = data.columns.str.strip()
# 显示数据集的列名
print(data.columns)
# 删除包含缺失值的行
data_cleaned = data.dropna(subset=['How often do you exercise?'])
# 统计不同健身频率的分布情况
exercise_frequency_counts = data_cleaned['How often do you exercise?'].value_counts()
# 绘制饼图
plt.figure(figsize=(10, 6))
(autopct='%1.1f%%', startangle=90, colors=plt.cm.Paired.colors)
plt.title('Distribution of Exercise Frequency')
plt.ylabel('')
plt.show()
import pandas as pd
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
# 填充缺失值
data_filled = data.apply(lambda x: x.fillna(x.mode()[0]))
# 划分数据(测试集占比20%)
train_data, test_data = (, random_state=42)
# 保存处理后的数据
cleaned_file_path = ''
(, index=False)