全自动化数据洞察!数据分布对比可视化!⛵

💡 作者:韩信子@ShowMeAI
📘 数据分析实战系列https://www.showmeai.tech/tutorials/40
📘 本文地址https://www.showmeai.tech/article-detail/411
📢 声明:版权所有,转载请联系平台与作者并注明出处
📢 收藏ShowMeAI查看更多精彩内容

💡 引言

可视化是EDA的基础。当面对一个新的、未知的数据集时,视觉检查使我们能够了解可用的信息,绘制一些有关数据的模式,并诊断出我们可能需要解决的几个问题。在这方面,📘Pandas Profiling 一直是每个数据科学家工具箱中不可或缺的瑞士刀,可以帮助我们快速生成数据摘要报告,包括数据概览、变量属性、数据分布、重复值和其他指标。它能够在可视化中呈现这些信息,以便我们更好地理解数据集。但如果我们能够比较两个数据集呢,有没有快速的方式可以实现?

在本篇博客文章中,ShowMeAI将介绍如何利用 Pandas Profiling 的比较报告功能来提升数据探索分析 (EDA) 流程。我们会介绍到如何使用 Pandas Profiling 比较报告功能来比较两个不同的数据集,这可以帮助我们更快地对比分析数据,获取分布差异,为后续做准备。

我们本次用到的数据集是 🏆Kaggle 的 HCC 数据集,大家可以通过 ShowMeAI 的百度网盘地址下载。

🏆 实战数据集下载(百度网盘):公众号『ShowMeAI研究中心』回复『实战』,或者点击 这里 获取本文 [42]Pandas Profiling:使用高级EDA工具对比分析2个数据集HCC 数据集

ShowMeAI官方GitHubhttps://github.com/ShowMeAI-Hub

关于更多数据自动化探索工具,可以参考ShowMeAI过往文章 📘自动化数据分析 (EDA) 工具库大全

💡 全自动数据EDA工具 Pandas Profiling 功能回顾

我们回顾一下 Pandas Profiling 的安装与使用方式:

# 通过pip安装
pip install pandas-profiling==3.5.0

如果我们需要对 hcc 数据集进行分析,参考代码如下:

import pandas as pd
from pandas_profiling import ProfileReport


# Read the HCC Dataset
df = pd.read_csv("hcc.csv")


# Produce the data profiling report
original_report = ProfileReport(df, title='Original Data')
original_report.to_file("original_report.html")

我们会得到非常清晰的数据分析结果报告,如下是报告的头部信息:

Alerts部分对数据进行分析后,给出了4种主要类型的潜在分析结果,包含可能有的风险和处理方式:

  • Duplicates :数据中有 4 个重复行;
  • Constant :'O2'是常量字段,求职999
  • High Correlation :有强相关性的几个特征;
  • Missing :“Ferritin”字段存在缺失值。

💡 数据处理

这对这些问题我们可以做一些处理。

💦 删除重复行

在数据集中,有些特征非常具体,涉及到个人的生物测量值,比如血红蛋白、MCV、白蛋白等。所以,很难有多个患者报告所有特征的相同精确值。因此,我们可以从数据中删除这些重复项。

# Drop duplicate rows
df_transformed = df.copy()
df_transformed = df_transformed.drop_duplicates()

💦 删除不相关的特征

在数据分析过程中,有些特征可能不具有太多价值,比如 O2 常数值。删除这些特征将有助于模型的开发。

# Remove O2
df_transformed = df_transformed.drop(columns='O2')

💦 缺失数据插补

数据插补是用于处理缺失数据的方法。它允许我们在不删除观察值的情况下填补缺失值。均值插补是最常见和最简单的统计插补技术,它使用特征的均值来填充缺失值。我们将使用均值插补来处理 HCC 数据集中的缺失数据。

# Impute Missing Values
from sklearn.impute import SimpleImputer
mean_imputer = SimpleImputer(strategy="mean")
df_transformed['Ferritin'] = mean_imputer.fit_transform(df_transformed['Ferritin'].values.reshape(-1,1))

💡 数据并行对比分析

下面我们就进入高级功能部分了!我们在对1份数据分析后,如果希望有另外一份数据能够比对分析,怎么做呢。下面我们以处理前后的数据为例,来讲解这个分析的实现方式:

transformed_report = ProfileReport(df_transformed, title="Transformed Data")
comparison_report = original_report.compare(transformed_report)
comparison_report.to_file("original_vs_transformed.html") 

最后的对比报告如下:

我们可以从数据集概述中立即了解什么?

  • 转换后的数据集包含更少的分类特征("O2"已被删除)
  • 165个观察值(而原来的171个包括重复项)
  • 没有缺失值(与原始数据集中的79个缺失观察值形成对比)

这种转变如何影响我们的数据质量?这些决定是否很好?我们发现在删除重复记录方面,没有特别的影响,数据缺失和数据分布有一些变化,如下图所示:

从上述图解中,可以看出一些信息,比如对于“铁蛋白”字段,插补数据的均值估算值导致原始数据分布被扭曲。这样处理可能是有问题的,我们应该避免使用均值估算来替换缺失值。在这种情况下,应该使用其他方法来处理缺失值,例如删除缺失值或使用其他统计方法来估算缺失值。

也可以通过相互作用和相关性的可视化来观察到这一点,在“铁蛋白”与其他特征之间的关系中,会出现不一致的相互作用模式和更高的相关值。

上图为铁蛋白与年龄之间的相互作用,估算值显示在对应于平均值的垂直线上。

上图为相关性情况对比,铁蛋白相关值似乎在数据插补后增加。

💡 总结

在本篇内容中,ShowMeAI讲解了 pandas-profiling 工具对不同数据进行对比分析的方法,我们用处理前后的数据做了一个简单的讲解,实际这个方法也可以用到训练集和测试集的对比中,用于发现数据漂移等问题。

关于数据漂移,可以参考ShowMeAI的文章 📘机器学习数据漂移问题与解决方案

参考资料

推荐阅读

🌍 数据分析实战系列https://www.showmeai.tech/tutorials/40
🌍 机器学习数据分析实战系列https://www.showmeai.tech/tutorials/41
🌍 深度学习数据分析实战系列https://www.showmeai.tech/tutorials/42
🌍 TensorFlow数据分析实战系列https://www.showmeai.tech/tutorials/43
🌍 PyTorch数据分析实战系列https://www.showmeai.tech/tutorials/44
🌍 NLP实战数据分析实战系列https://www.showmeai.tech/tutorials/45
🌍 CV实战数据分析实战系列https://www.showmeai.tech/tutorials/46
🌍 AI 面试题库系列https://www.showmeai.tech/tutorials/48

posted @ 2022-12-16 16:44  ShowMeAI  阅读(502)  评论(0编辑  收藏  举报