为方便理解,将英文列名转换为中文,构建中文列名列表 chinese_columns ,包含 遗传因素 、 荷尔蒙变化 等特征,再重置数据集列名 :
python
chinese_columns = [
'遗传因素', '荷尔蒙变化', '医疗状况', '药物及治疗',
'营养缺乏', '压力水平', '年龄', '不良护发习惯',
'环境因素', '吸烟习惯', '体重减轻', '脱发标记'
]
df.columns = ['ID'] + chinese_columns
(二)缺失值与二值化处理
数据中存在标识为 No Data 的缺失值,统一转换为 pandas 标准缺失值 pd.NA :
python
df.replace("No Data", pd.NA, inplace=True)
针对 遗传因素 、 荷尔蒙变化 等二值特征(取值为 Yes 或 No ),通过 map 函数转换为数值 1 ( Yes )和 0 ( No ),缺失值转为 np.nan ,便于后续分析 :
python
import numpy as np
binary_cols = ['遗传因素', '荷尔蒙变化', '不良护发习惯', '环境因素', '吸烟习惯', '体重减轻']
for col in binary_cols:
df[col] = df[col].map({'Yes': 1, 'No': 0, pd.NA: np.nan})
另外,从 压力水平 衍生出 高压力 二值特征,若压力水平为 High 则标记为 1 ,否则为 0 :
python
df['高压力'] = df['压力水平'].apply(lambda x: 1 if x == 'High' else 0)
三、数据可视化分析
(一)脱发标记分布
先统计 脱发标记 中 脱发 和 不脱发 的人数占比,用饼图直观呈现:
python
import matplotlib.pyplot as plt
data = df['脱发标记'].value_counts()
plt.figure(figsize=(8, 5))
plt.pie(data, labels=['不脱发', '脱发'], autopct='%1.2f%%', startangle=90, shadow=True)
plt.title('脱发标记分布')
plt.show()
从饼图可快速了解样本中脱发人群的基础占比情况。
(二)二值特征与脱发关系
选取 遗传因素 、 荷尔蒙变化 等二值特征,分析它们与脱发的关联。通过 subplots 创建 3×2 布局的子图,循环遍历特征,按 脱发标记 分组统计特征取值频次,绘制分组柱状图:
python
features = ['遗传因素', '荷尔蒙变化', '不良护发习惯', '环境因素', '吸烟习惯', '体重减轻']
fig, axes = plt.subplots(3, 2, figsize=(15, 15))
axes = axes.flatten()
df['脱发标记'] = df['脱发标记'].astype('category')
categories = df['脱发标记'].cat.categories
num_categories = len(categories)
x = np.arange(num_categories)
width = 0.35
for i, feature in enumerate(features):
if i < len(axes):
ax = axes[i]
count = df.groupby('脱发标记')[feature].value_counts().unstack(fill_value=0)
rects1 = ax.bar(x - width/2, count[0], width)
rects2 = ax.bar(x + width/2, count[1], width)
ax.set_title(f'{feature}与脱发')
ax.set_xticks(x)
ax.set_xticklabels(categories)
ax.legend(['不脱发', '脱发'])
plt.tight_layout()
plt.show()
每组柱状图对比不同脱发情况(脱发 / 不脱发 )下,对应特征的分布差异,助力挖掘关键影响因素。
(三)年龄与脱发关系
利用箱线图展示脱发和不脱发人群的年龄分布差异,观察年龄对脱发的潜在影响:
python
plt.figure(figsize=(10, 6))
ax1 = plt.subplot(111)
df.boxplot(column='年龄', by='脱发标记', ax=ax1)
ax1.set_title('脱发人群年龄分布', fontsize=14)
ax1.set_ylabel('年龄')
plt.show()
箱线图呈现出年龄的中位数、离散程度等信息,辅助分析年龄与脱发的关联。
(四)特征相关性分析
选取 遗传因素 、 高压力 等特征,计算相关系数,用热力图可视化特征间关联,重点关注与 脱发标记 的相关性:
python
corr_features = ['遗传因素', '荷尔蒙变化', '高压力', '不良护发习惯', '吸烟习惯', '体重减轻', '脱发标记']
corr = df[corr_features].corr()
plt.figure(figsize=(12, 8))
plt.imshow(corr, cmap='hot', interpolation='nearest', alpha=0.9)
plt.colorbar()
plt.title('脱发相关因素相关系数热力图', fontsize=14)
plt.show()
热力图以颜色深浅直观呈现特征间相关程度,便于发现对脱发影响显著的因素。
(五)医疗状况与脱发分析
统计 医疗状况 字段的 Top10 类别,绘制横向柱状图,探索脱发人群常见医疗状况:
python
plt.figure(figsize=(12, 8))
top_conditions = df['医疗状况'].value_counts().head(10)
plt.barh(top_conditions.index, top_conditions)
plt.title('十大常见脱发相关医疗状况', fontsize=14)
plt.xlabel('样本数量', fontsize=12)
plt.ylabel('医疗状况', fontsize=12)
plt.tight_layout()
plt.show()
该图清晰展示与脱发关联紧密的医疗状况分布,为从医学角度分析脱发提供参考。
数据预处理总结
数据加载与探查
成功加载了脱发预测数据集
查看了数据的基本结构和内容
对短表数据和长表数据采用了不同的探查策略
数据清洗
处理了特殊缺失值表示("No Data")
对数值型和类别型缺失值采用了不同的填充策略
进行了缺失值统计和报告
特征工程
对二值型特征进行了 0/1 编码
对多类别特征进行了标签编码
从现有特征派生出了新特征(高压力特征)
对数值特征进行了标准化处理
数据准备
划分了特征矩阵和目标变量
创建了训练集和测试集
保存了预处理后的数据用于后续分析
下一步建议
模型训练与评估
使用预处理后的数据训练分类模型(如逻辑回归、随机森林、支持向量机等)
比较不同模型的性能表现
进行模型调优以提高预测准确率
特征重要性分析
确定哪些因素对脱发影响最大
基于特征重要性进行特征选择
解释模型预测结果,为预防脱发提供建议
结果可视化
可视化模型预测结果
创建特征重要性图表
生成脱发风险因素的直观展示
部署与应用
将模型部署为预测服务
开发用户界面,让用户可以输入自己的信息并得到脱发风险评估
定期更新模型
一、聚焦数据价值,赋能脱发分析
从加载原始数据,到完成缺失值处理、特征编码与工程化,每一步都在为挖掘脱发影响因素筑牢基础。经预处理的 “干净” 数据,已具备支撑机器学习建模的条件,后续可借算法探寻遗传、环境、生活习惯等因素与脱发间的潜在关联,为脱发预测、干预策略制定提供数据驱动的科学依据,助力解开脱发成因谜团,从数据视角为守护毛发健康添砖加瓦。
二、以数据预处理为起点,探索脱发预测新篇
至此,脱发数据完成从原始采集到规范可用的蜕变,缺失值妥善处理、特征含义清晰编码、新特征拓展维度。这不仅是数据清洗的终点,更是脱发预测建模的全新起点。后续借随机森林、SVM 等算法,可深度挖掘 “遗传 - 环境 - 行为” 等因素与脱发的关联规律,为个性化脱发风险评估、干预方案开发铺路,让数据真正成为破解毛发健康难题的 “密钥”,开启精准预测、科学防脱的探索新章 。
四、总结与展望
本项目围绕脱发影响因素展开深度分析。数据预处理阶段,完成列名汉化、缺失值转换与二值特征处理,为分析奠基。可视化环节,通过饼图呈现脱发标记分布,分组柱状图剖析遗传、护发习惯等二值特征与脱发关联,箱线图洞察年龄影响,热力图挖掘特征相关性,横向柱状图展现常见医疗状况。
从结果看,遗传、不良生活习惯等与脱发关联显著,年龄分布及医疗状况也暗藏脱发线索。后续可拓展分组统计(如年龄分箱、多因素交叉)、聚焦遗传等特定因素做多维度分析,结合机器学习建模预测,挖掘特征重要性,为脱发预防策略开发、健康行为建议提供数据支撑,助力解决脱发难题 。
当最后一行代码执行完毕,这份承载着脱发研究希望的数据集已完成从混沌到有序的蜕变。起初散落于Predict Hair Fall.csv中的原始信息 —— 从遗传因素的 "Yes/No" 记录,到压力水平的文本描述,再到医疗状况的复杂标签 —— 曾如未经雕琢的璞玉,暗藏着脱发诱因的密码,却因格式杂乱而难以直接解读。预处理过程恰似一场数据的 "基因测序":我们先以replace方法将 "No Data" 这类非标准缺失值转化为NaN,让数据瑕疵无所遁形;继而用均值与众数为不同类型特征填补缺口,如同为破损的拼图补全关键碎片。对于 "Genetics" 这类二值特征,我们用 0/1 编码赋予其数学生命力;面对 "Medical Conditions" 等多类别标签,LabelEncoder则像翻译官般将文本转化为模型可理解的数字语言。最关键的是,从 "Stress Level" 中提炼出 "High Stress" 这一衍生特征,犹如在数据丛林中开辟出一条直达核心的路径,让压力因素对脱发的影响得以量化呈现。标准化处理则为数据注入了统一的 "度量衡"—— 当Age列的数值被压缩至均值为 0、标准差为 1 的坐标系中,不同特征间的量纲差异被彻底消弭,确保后续无论选择敏感于数值分布的 SVM,还是擅长捕捉非线性关系的随机森林,模型都能在公平的起跑线上学习。而 8:2 的数据集划分,更像是为模型准备了 "模拟考" 与 "正式考",既保证其从多数数据中汲取规律,又能在少数样本中验证泛化能力。此刻躺在Predict Hair Fall_preprocessed.csv中的每一行数据,都已成为脱发研究的 "标准样本"。它们不再是孤立的观测记录,而是被赋予了数学意义的特征向量:1 可能代表 "有遗传史",0.5 可能对应 "标准化后的中等年龄",而新生成的 "High Stress" 列则像信号灯般标记出高风险群体。接下来,当算法开始在这些数据中寻找模式时,我们或许能发现:在遗传因素与压力水平的交互作用下,某类营养缺失会成为脱发的 "扳机";或是某种护发习惯能显著抵消环境因素的负面影响 —— 这些洞见将不再是经验之谈,而是建立在数据统计规律上的科学结论。从数据清洗到特征工程,每一步操作都在为 "智能防脱" 铺设基石。未来,当这套预处理流程与深度学习模型结合,或许能开发出个人化的脱发风险评估工具:输入年龄、生活习惯等信息,算法即可基于千万级预处理后的样本经验,给出精准的风险预警与干预建议。而这一切的起点,正是此刻完成的这场数据预处理
————————————————
版权声明:本文为优快云博主「cxyyyds123456」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/cxyyyds123456/article/details/148926906