4.玩转热图(相关矩阵、缺失值、多维相关、聚类热图、时间序列)——Python数据挖掘代码实践

文章目录

  • [一、 数据热图对比表](#一、 数据热图对比表)
  • [二、 相关矩阵热图](#二、 相关矩阵热图)
    • [2.1 理论基础](#2.1 理论基础)
    • [2.2 实践操作:利用 Seaborn 绘制相关矩阵热图](#2.2 实践操作:利用 Seaborn 绘制相关矩阵热图)
  • [三、 缺失值热图](#三、 缺失值热图)
    • [3.1 理论基础](#3.1 理论基础)
    • [3.2 实践操作:绘制缺失值热图](#3.2 实践操作:绘制缺失值热图)
  • [四、 多维相关热图 (Pair Plot)](#四、 多维相关热图 (Pair Plot))
    • [4.1 理论基础](#4.1 理论基础)
    • [4.2 实践操作:Seaborn Pair Plot](#4.2 实践操作:Seaborn Pair Plot)
  • [五、 聚类热图 (Cluster Map)](#五、 聚类热图 (Cluster Map))
    • [5.1 理论基础](#5.1 理论基础)
    • [5.2 实践操作:使用 Seaborn 绘制聚类热图](#5.2 实践操作:使用 Seaborn 绘制聚类热图)
    • [5.3 参数调优与解读](#5.3 参数调优与解读)
  • [六、 时间序列热图 (Calendar Heatmap)](#六、 时间序列热图 (Calendar Heatmap))
    • [6.1 理论基础](#6.1 理论基础)
    • [6.2 实践操作:](#6.2 实践操作:)
  • 未完待续:

一、 数据热图对比表

下面的表格对比了 9 种常见热图类型,从定义与用途、适用场景、常用工具,到优缺点,帮助您从多个角度理解和选择适合业务需求的热图形式。这不仅有助于数据探索和特征筛选,也为数据治理提供了直观的支持。

热图类型 定义与用途 适用场景 常用工具 优点与局限
相关矩阵热图 显示变量间的相关系数,直观展示线性关系。 数据探索、特征筛选、变量关系检测 Seaborn, Matplotlib 优点:直观简单;局限:仅揭示线性关系,无法捕捉非线性关联。
缺失值热图 利用颜色深浅展示数据集缺失值的分布情况,便于识别数据完整性问题。 数据清洗、数据质量监控、缺失模式分析 missingno, Seaborn, Matplotlib 优点:快速定位缺失问题;局限:大数据集可能使热图信息过于密集。
多维相关热图 (Pair Plot) 绘制各变量两两散点图及单变量分布,全面展示多维数据的相互关系。 高维数据探索、特征工程、数据分布比较 Seaborn, Matplotlib 优点:全面展示多变量关系;局限:变量较多时图表数量激增,解读难度增大。
聚类热图 (Cluster Map) 结合聚类算法对行或列进行重排,突出相似性,便于发现数据内在分组结构。 基因表达、文本分析、客户分群、市场细分 Seaborn (clustermap) 优点:揭示数据内在分群;局限:结果依赖聚类参数和距离度量,调参要求较高。
时间序列热图 (Calendar Heatmap) 将时间数据映射到日历形式,通过颜色反映指标数值,展示时间变化趋势和周期性。 运营监控、网站流量、销售额、能耗监测 calmap, Seaborn, Matplotlib 优点:展示周期性趋势;局限:时间粒度选择不当可能影响可读性。
地理热图 (Choropleth) 将数据指标映射到地理区域,通过色阶展示各区域数值差异。 区域销售、人口统计、环境监测、市场分布分析 GeoPandas, Folium, Plotly 优点:直观展示空间分布;局限:依赖高质量地理数据,处理和投影技术要求较高。
矩阵式网络关系热图 (Adjacency Matrix) 将网络中节点间的连接关系以矩阵形式展示,颜色代表连接强度,揭示网络全局结构。 社交网络、供应链、复杂系统关系分析 Seaborn, Matplotlib, NetworkX 优点:适合展示大规模网络全局结构;局限:行列排序影响可读性,解读复杂度较高。
Pivot Table 热图 基于透视表数据展示不同维度组合下的聚合指标,采用颜色映射展示数据差异。 销售分析、订单统计、分类数据透视、业务指标汇总 Pandas, Seaborn 优点:直观显示多维组合数据;局限:主要适用于离散分类变量,不适用于连续数据。
三维/交互式热图 利用 3D 或交互技术增强热图信息承载能力,实现动态数据探索与实时监控。 大数据分析、实时监控、动态业务报表、决策支持系统 Plotly, Bokeh, Altair, D3.js 优点:高度互动、信息量丰富;局限:实现复杂,开发和计算资源要求较高。

中文乱码必备:

python 复制代码
import matplotlib.pyplot as plt
# 设置中文字体和解决负号显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体显示中文
plt.rcParams['axes.unicode_minus'] = False    # 正常显示负号

二、 相关矩阵热图

相关矩阵热图是一种直观展示多个变量之间线性关系的工具,通过颜色深浅表示变量间的相关系数。这不仅帮助我们识别数据的内在结构,还能在数据治理中发现异常值和多重共线性问题,从而为后续的特征工程和建模提供指导。

2.1 理论基础

相关矩阵的概念

  • 定义:相关矩阵是一个二维矩阵,其每个元素表示两个变量之间的相关系数(常用皮尔逊相关系数)。
  • 相关系数:衡量两个变量之间的线性关系,取值范围为 -1 到 1。正值表示正相关,负值表示负相关,接近 0 则说明线性关系较弱。

相关矩阵热图的作用

  • 揭示变量关系:直观展示数据中各变量之间的相关性,帮助识别高度相关或几乎无关的变量。
  • 辅助特征筛选:在模型构建前,通过检测多重共线性,决定是否需要剔除或合并某些高度相关的特征。
  • 数据治理:异常或不合理的相关性可能提示数据录入错误或数据采集环节的问题,从而支持数据质量检查。

专业术语解释

  • 皮尔逊相关系数:度量两个连续变量之间线性关系的统计指标。
  • 共线性与多重共线性:当多个变量高度相关时,可能会引发模型不稳定的问题。
  • Colormap(色阶):在热图中,不同颜色代表不同的相关系数值,通过调色板(如"coolwarm")传达数值大小信息。

2.2 实践操作:利用 Seaborn 绘制相关矩阵热图

以下步骤展示如何利用 Pandas 计算相关矩阵,并用 Seaborn 绘制热图。代码示例中详细介绍了各参数的作用。

数据准备与相关矩阵计算

python 复制代码
import pandas as pd
import numpy as np

# 模拟生成一个包含 4 个变量的数据集
np.random.seed(42)
data = pd.DataFrame({
    'A': np.random.randn(100),
    'B': np.random.randn(100) * 2 + 1,
    'C': np.random.randn(100) * 0.5 - 0.5,
    'D': np.random.randn(100) + np.random.randn(100) * 0.2
})

# 计算相关矩阵
corr_matrix = data.corr()
print("相关矩阵:")
print(corr_matrix)

说明

  • data.corr() 计算数据框中所有数值型变量之间的皮尔逊相关系数。

绘制相关矩阵热图

python 复制代码
import seaborn as sns
import matplotlib.pyplot as plt

plt.figure(figsize=(8, 6))
sns.heatmap(corr_matrix, 
            cmap='coolwarm',         # 使用 coolwarm 色阶,红色表示正相关,蓝色表示负相关
            annot=True,              # 在每个单元格内显示相关系数数值
            fmt=".2f",               # 格式化数值为两位小数
            linewidths=0.5,          # 设置单元格之间的分隔线宽度
            linecolor='white',       # 分隔线颜色
            vmin=-1, vmax=1)         # 设置颜色映射的最小值和最大值

plt.title("相关矩阵热图", fontsize=14)
plt.show()

代码解读

  • cmap='coolwarm':选择一个直观的色阶,使得正负相关区别明显。
  • annot=True:在热图上显示具体的相关系数,有助于精确解读。
  • linewidthslinecolor:为图表添加网格效果,增强可读性。
  • vminvmax 明确规定颜色映射范围,使颜色深浅准确反映相关性大小。
    常见问题解决博客:使用Seaborn画热力图,只有第一行单元格显示数值

数据治理与业务应用

数据质量检查

  • 异常检测:如果热图中出现异常高或低的相关系数,可能提示数据中存在错误或异常值。
  • 特征筛选:识别高度相关的变量,有助于在建模前剔除冗余特征,从而避免多重共线性问题。

业务场景实例

  • 营销分析:在客户数据中,若广告支出与销售额之间相关性异常低或高,可能需进一步检查数据采集过程。
  • 风控模型:检测风险指标之间的相关性,及时调整模型输入,降低系统风险。

三、 缺失值热图

在数据分析和数据治理过程中,缺失值常常是不可回避的问题。缺失值热图能够帮助我们快速洞察数据的完整性情况,定位可能存在的数据采集或业务流程问题,从而指导后续的数据修复与质量提升工作。下面将详细介绍缺失值热图的原理、绘制方法以及在数据治理中的应用。

3.1 理论基础

缺失值的类型与影响

  • 完全随机缺失(MCAR):缺失发生在数据集中无规律可循,对整体统计结果影响较小,但若缺失过多也会降低数据代表性。
  • 可忽略的非随机缺失(MAR):缺失与已知变量相关,而与自身变量无关;需要结合其他特征信息进行插值或修复。
  • 不可忽略的非随机缺失(MNAR):缺失与自身变量相关,通常在实际业务中最复杂,可能造成偏差较大的结果。

在数据分析和模型构建中,若对缺失值处理不当,会引发模型性能下降、偏差增大、决策失准等问题。因此,及早识别和修复缺失值对于数据治理至关重要。

缺失值热图的价值

  • 快速定位缺失分布:通过颜色深浅直观地标示哪些列(或行)缺失最严重,哪些列间可能存在联动缺失。
  • 发现数据采集问题:若某些列或时间段大范围缺失,可能提示采集脚本、API 或硬件设备出现故障。
  • 业务流程优化:结合 5W2H 分析,探究为何在特定时间或特定字段会产生大量缺失,以便调整业务逻辑或数据采集方式。

3.2 实践操作:绘制缺失值热图

在 Python 中,我们可以使用 missingno 库或 Seaborn /Matplotlib 的自定义方法来可视化缺失值分布。下面以 missingno 库为例进行演示,同时也简要介绍 Seaborn 的思路。

使用 missingno 库绘制缺失值热图

  1. 安装与导入

    bash 复制代码
    pip install missingno
    python 复制代码
    import missingno as msno
    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
  2. 数据准备

    python 复制代码
    # 构造一个模拟数据集,其中部分列含有缺失值
    np.random.seed(42)
    df = pd.DataFrame({
        'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
        'age': [25, np.nan, 30, 22, 28],
        'income': [5000, 6000, np.nan, np.nan, 7000],
        'city': ['NY', 'LA', None, 'SF', 'LA']
    })
    print(df)
  3. 绘制缺失值热图

    python 复制代码
    plt.figure(figsize=(8, 5))
    msno.matrix(df, sparkline=True, figsize=(8, 5))
    plt.title("缺失值热图 (missingno)", fontsize=14)
    plt.show()
    • msno.matrix():以矩阵形式展示每个数据行的缺失与否;sparkline 显示整体缺失趋势。
    • 若要更类似"热图"风格,可使用 msno.heatmap(df) 展示缺失之间的关联度。

使用 Seaborn 自定义缺失值热图

如果不想安装 missingno,也可以自行利用 Pandas 和 Seaborn 绘制简单的缺失值热图。

python 复制代码
import seaborn as sns

# 将缺失值标记为 1(True),非缺失为 0(False)
df_missing = df.isnull().astype(int)

plt.figure(figsize=(8, 5))
sns.heatmap(df_missing, cmap='Greys', cbar=False, linewidths=0.5)
plt.title("缺失值热图 (Seaborn 自定义)", fontsize=14)
plt.xlabel("列名", fontsize=12)
plt.ylabel("行索引", fontsize=12)
plt.show()
  • df.isnull().astype(int) 将缺失值转换为 1,非缺失值转换为 0,从而实现二元可视化。
  • cmap='Greys' 用灰度颜色显示缺失情况;可以根据需求使用其它颜色映射。

在数据治理中的应用

定位问题与溯源

  • 批量缺失:若发现某列在某时间段或某批次出现大量缺失,需回溯业务系统或数据采集脚本,排查是否存在字段名称变更、设备故障等。
  • 关键字段缺失:如用户 ID、订单号等关键字段若大规模缺失,可能严重影响后续分析与运营,需要优先修复。

缺失修复与决策

  • 删除或插值:对缺失行或列进行删除或使用均值、中位数、插值法等进行填补。
  • 业务规则填充:结合领域知识,如客户地址缺失可从注册信息或其他来源补齐。
  • 合规与风险:在金融或医疗等高风险领域,缺失值可能影响监管合规性,必须及时补齐或在建模中重点关注。

持续监控与告警

  • 自动化报表:定期生成缺失值热图,将其嵌入数据治理或BI系统中,实现可视化监控。
  • 异常告警:设定阈值,一旦缺失比例或特定字段缺失超过警戒线,触发告警并安排专人排查。

四、 多维相关热图 (Pair Plot)

在面对高维度数据时,仅仅使用二维相关矩阵或缺失值热图往往无法全面揭示变量之间的复杂关系。此时,多维相关热图(Pair Plot) 就能派上用场。它通过绘制各变量两两之间的散点图与单变量分布图,为我们提供了一个全局视角,帮助在数据治理、特征工程和业务决策中实现更全面的洞察。

4.1 理论基础

Pair Plot 的概念与优势

  • 核心思路:对数据集中的每对数值型变量绘制散点图,并在对角线上显示单变量分布(如直方图或核密度图)。
  • 主要用途
    1. 观察变量间关系:能直观识别线性、非线性或其他模式(如簇状分布)。
    2. 检测离群点:在散点图中寻找偏离大多数点群的异常样本。
    3. 单变量分布特征:对角线的直方图或密度图反映数据是否偏态、多峰或含大量极值。

多维数据探索在数据治理中的作用

  • 数据质量:若某些维度间出现明显异常或无法解释的关系,需检查数据源或采集流程。
  • 特征选择:通过 Pair Plot 观察多维度变量间的分布和相关性,筛除冗余或高共线性的特征,优化模型性能。
  • 业务洞察:在客户分析、金融风控或生产运营等领域,通过多维可视化寻找潜在分群或行为模式。

4.2 实践操作:Seaborn Pair Plot

Seaborn 提供了一个高层次的函数 pairplot(),能轻松绘制 Pair Plot,且支持颜色、形状等多种编码方式,帮助我们在多维数据中快速找到重要线索。

数据准备

python 复制代码
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 构造模拟数据,包含四个数值变量和一个类别变量
np.random.seed(42)
size = 100
df_pair = pd.DataFrame({
    'X1': np.random.normal(0, 1, size),
    'X2': np.random.normal(5, 2, size),
    'X3': np.random.normal(10, 3, size),
    'X4': np.random.normal(-3, 4, size),
    'Category': np.random.choice(['A', 'B'], size=size, p=[0.4, 0.6])
})

df_pair.head()

基础 Pair Plot

python 复制代码
# 基础 Pair Plot
sns.pairplot(df_pair[['X1','X2','X3','X4']])
plt.show()
  • 功能解读
    • 对每对数值型变量绘制散点图,对角线上绘制单变量分布图(默认直方图)。
    • 无颜色区分时,仅能看到整体分布。

带颜色编码与分类变量的 Pair Plot

在实际业务中,往往需要对数据按类别或标签区分,Pair Plot 提供了 hue 参数支持颜色编码,便于我们查看不同类别在多维度上的差异。

python 复制代码
sns.pairplot(df_pair, 
             vars=['X1','X2','X3','X4'], 
             hue='Category', 
             diag_kind='kde',    # 对角线上使用核密度图
             plot_kws={'alpha': 0.7}, 
             palette='Set1')
plt.show()
  • 参数说明
    • vars:指定要绘制散点图的数值变量列表;若不指定则会对全部数值列进行可视化。
    • hue='Category':根据"Category"字段上色,实现多类别区分。
    • diag_kind='kde':对角线单变量分布图使用核密度估计,展示更平滑的分布。
    • plot_kws:传递给散点图的参数,如 alpha=0.7 提高可读性。
    • palette='Set1':指定颜色风格。

读图要点

  1. 对角线
    • 查看单变量分布是否偏态、多峰或含大量极值。
    • 比较不同类别在某个变量上的分布差异,若明显分离可考虑将该变量作为强判别特征。
  2. 散点图
    • 判断变量间是否呈线性或非线性关系;
    • 检查离群点或聚类结构;
    • 对"Category"不同颜色进行区分,看各类别在不同变量维度上的分布重叠度。
  3. 颜色分布
    • 若不同类别在散点中几乎完全分离,说明类别间差异显著;
    • 若高度混杂,则可能需要进一步引入其他特征或做更深度的特征工程。

在数据治理与业务场景中的应用

异常检测与质量评估

  • 多维异常值:在二元散点中可能不明显,但在三元或更多维度上显著偏离。
  • 分布异常:若某类数据在对角线分布图中出现异常峰或凹陷,需检查数据采集或系统性缺失问题。

特征工程与建模

  • 特征筛选:对于高度相关或呈非线性关系的变量,可能需要做变换或降维。
  • 特征交互:通过观察散点图中的分类边界或分布形态,考虑新增交互特征或分段处理。

业务决策示例

  • 客户分群:根据 Pair Plot 中的聚类结构,结合业务指标判断客户类型,制定差异化营销策略。
  • 风险监控:在金融或医疗场景,通过多维特征散点图分析高风险人群或异常病例,及时预警。

五、 聚类热图 (Cluster Map)

聚类热图结合了热图与聚类分析的优点,通过对数据矩阵的行和/或列进行聚类重排,能直观展示数据内部的分组结构和相似性。这种可视化工具在生物信息、文本分析、客户分群等领域中广泛应用,能够帮助我们快速识别出具有相似特征的数据子集,从而为数据治理和特征工程提供深刻洞察。

5.1 理论基础

聚类热图的定义

  • 聚类热图:在常规热图的基础上,先对数据的行或列(或两者)进行聚类,然后按照聚类结果重新排列数据,使得相似的数据项彼此相邻。
  • 作用
    • 展示相似性:通过颜色梯度直观反映不同数据项之间的相似度。
    • 发现分群结构:利用生成的树状图(dendrogram),可以发现数据内部的分组或聚类模式。
    • 辅助特征选择:高相关性或结构相似的数据可能冗余,从而指导特征降维或剔除。

聚类热图在数据治理中的意义

  • 数据质量检测:聚类结果若与预期不符,可能提示数据采集或处理存在异常。
  • 业务洞察:例如在客户数据中,聚类热图能帮助识别具有相似消费行为的群体,为精准营销提供依据。
  • 决策支持:通过直观展示各数据子集间的关系,支持跨部门协同决策,降低运营风险。

5.2 实践操作:使用 Seaborn 绘制聚类热图

Python 的 Seaborn 库提供了强大的 clustermap() 函数,可以一键实现聚类热图的绘制。下面我们以一个示例数据集展示如何构建聚类热图,并解释各参数的作用。

数据准备与聚类热图绘制

python 复制代码
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 生成示例数据:构造一个 10x5 的随机数据矩阵,模拟不同特征的测量结果
np.random.seed(42)
data_matrix = pd.DataFrame(np.random.rand(10, 5), 
                           columns=['Feature_A', 'Feature_B', 'Feature_C', 'Feature_D', 'Feature_E'])
print("原始数据矩阵:")
print(data_matrix)

# 绘制聚类热图
g = sns.clustermap(data_matrix, 
                   cmap='viridis',           # 选择颜色映射
                   method='average',         # 聚类方法:平均链接法
                   metric='euclidean',       # 距离度量:欧氏距离
                   annot=True,               # 在单元格上显示数值
                   fmt=".2f",                # 格式化数值
                   linewidths=0.5,           # 设置单元格边界宽度
                   figsize=(8, 6))           # 图像尺寸

plt.title("聚类热图示例", fontsize=14)
plt.show()

代码讲解

  • sns.clustermap() 通过对数据矩阵的行与列同时进行聚类分析,生成带有树状图(dendrogram)的热图。
  • 参数 cmap='viridis' 选择一种视觉上舒适且易于区分的色阶;
  • method='average' 指定采用平均链接法进行聚类,可根据需求选择其他方法(如 'single'、'complete' 等);
  • metric='euclidean' 采用欧氏距离度量数据项之间的相似性;
  • annot=Truefmt=".2f" 使得每个单元格内显示数值,便于精确分析;
  • linewidthsfigsize 则分别控制边界线宽度和图形尺寸,确保图形清晰易读。

5.3 参数调优与解读

色阶与聚类方法选择

  • 色阶(Colormap) :不同的调色板(如 coolwarmRdBuviridis)可根据数据特点和业务需求选择。较亮的颜色通常代表低数值,较暗的颜色代表高数值。
  • 聚类方法:平均链接法、单链接法、完全链接法等不同的聚类方法会影响树状图结构,进而影响数据项的排列顺序。建议根据数据分布和实际需求尝试多种方法,比较结果的稳定性。

距离度量

  • 欧氏距离:适用于大多数连续数据,计算两个点之间的直线距离;
  • 曼哈顿距离:对异常值更为鲁棒,适用于数据分布不均的情况。
  • 根据业务场景调整距离度量参数,可以更好地反映数据项间的相似性。

树状图解读

  • 树状图(Dendrogram)展示了数据项聚类的层级结构。
  • 分支较短表示数据项之间相似度较高,较长的分支可能表明某一聚类内存在较大内部差异。
  • 通过观察树状图,可以确定聚类的数量以及是否需要进一步分解数据子集。

应用场景与业务案例

客户分群

  • 利用聚类热图对客户数据(如消费频次、消费金额、产品偏好)进行聚类,发现具有相似特征的客户群体,为精准营销和客户维护提供支持。

产品属性分析

  • 针对不同产品属性(如价格、功能、用户评分)构建聚类热图,识别产品间的相似性和差异,帮助企业进行产品定位和竞争策略制定。

风险控制

  • 在金融数据中,对资产风险指标构建聚类热图,识别潜在风险集群,辅助风控团队调整投资组合结构,降低系统性风险。

六、 时间序列热图 (Calendar Heatmap)

时间序列热图(Calendar Heatmap)是一种专门针对时间维度的数据可视化方法,常见于 GitHub 的代码提交记录图表。它能够在日历或表格式布局中,通过颜色深浅展示每天或每周、每月等时间粒度下的数据数值,帮助我们直观捕捉季节性、周期性以及异常波动。下面将详细介绍时间序列热图的原理、绘制方法及在数据治理中的应用场景。


6.1 理论基础

为什么要用时间序列热图

  1. 周期性与季节性
    • 对于有明显季节性或周期性的业务(如零售、流量、能源消耗),时间序列热图能让我们快速定位高峰期、低谷期。
  2. 异常检测
    • 如果某天(或某周)的数据异常突出,热图上的颜色会与周边日期差异明显,提示我们进一步排查数据源或业务事件。
  3. 可读性
    • 与传统折线图相比,时间序列热图更能在大范围内展示时间模式,特别适合年度或多年度的数据对比。

常见布局

  • 日历式布局:以日期为网格单元,每格表示一天的数据,如 GitHub 提交历史图。
  • 周/月份汇总:将每周或每月聚合后,以行列方式展示;可配合月份或季度进行更高层次对比。

6.2 实践操作:

数据准备

python 复制代码
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 模拟生成日期范围及对应数值
date_range = pd.date_range(start='2023-01-01', end='2023-12-31', freq='D')
np.random.seed(42)
values = np.random.randint(0, 100, len(date_range))

df_time = pd.DataFrame({'date': date_range, 'value': values})
df_time.head()

说明

  • 这里使用 pd.date_range() 生成了从 2023-01-01 到 2023-12-31 的每日日期;
  • values 为随机数,模拟某个指标(如访问量、销售额)的日度数据。

使用第三方库 calmap(可选)

calmap 是一个专门用于绘制日历热图的 Python 库,简单易用:

bash 复制代码
pip install calmap
python 复制代码
import calmap

df_cal = df_time.set_index('date')
plt.figure(figsize=(12, 5))
calmap.calendarplot(df_cal['value'], fillcolor='lightgrey', cmap='YlGn', 
                    how='sum', linewidth=0.5, daylabels='MTWTFSS')
plt.title("日历式时间序列热图示例", fontsize=14)
plt.show()

功能解读

  • fillcolor='lightgrey':无数据时的填充颜色;
  • cmap='YlGn':黄色到绿色渐变色阶;
  • how='sum':若数据为多重索引或多列,可指定聚合方式;
  • daylabels='MTWTFSS':自定义星期标签。

自定义周/月份热图(Seaborn + Pivot Table)

若不想安装 calmap,也可通过 Pandas 透视表与 Seaborn 绘制周或月份粒度的热图。

python 复制代码
# 将日期转换为周数与星期几
df_time['week'] = df_time['date'].dt.isocalendar().week
df_time['day'] = df_time['date'].dt.weekday  # 0=Monday,6=Sunday
df_time['year'] = df_time['date'].dt.year

# 仅示例:针对2023年的数据
df_2023 = df_time[df_time['year'] == 2023]

# 透视表:行=week, 列=day
pivot_df = df_2023.pivot_table(index='week', columns='day', values='value', aggfunc='mean')

plt.figure(figsize=(10, 6))
sns.heatmap(pivot_df, cmap='YlGn', linewidths=0.5, cbar=True)
plt.title("周 vs. 星期 时间序列热图", fontsize=14)
plt.xlabel("星期 (0=周一, 6=周日)", fontsize=12)
plt.ylabel("ISO Week Number", fontsize=12)
plt.show()

说明

  • pivot_table():将每周与星期几作为行列,聚合方式为均值;
  • day=0 表示周一,day=6 表示周日;
  • 这样可以看到每周不同天的数值分布,从而了解周期性或异常情况。

在数据治理中的应用

发现周期性与异常

  • 季节性分析:零售、旅游、能源等行业常有明显季节性,通过时间序列热图可一目了然。
  • 异常监控:若某天(或某周)颜色与周边差异巨大,需检查业务事件或数据采集故障。

优化业务流程

  • 排班与资源配置:如在客服或生产线中,观察高负载时段,合理安排人力与资源。
  • 营销策略:在促销或活动前后比较热图颜色变化,评估活动效果。

结合 5W2H 思考

  • Why:为什么在特定日期数据突然激增或骤减?是节假日、系统故障还是业务活动?
  • When:哪段时间最易出现数据缺失或异常?是否每逢月底、周末或特定假期?
  • Where:若是多地多店,多维度叠加地理信息热图,更好地定位区域问题。

未完待续:

地理热图 (Choropleth)
矩阵式网络关系热图 (Adjacency Matrix)
Pivot Table 热图
三维/交互式热图

相关推荐
IT古董42 分钟前
【漫话机器学习系列】146.Softmax 激活函数(Softmax Activation Function)
人工智能·机器学习
蹦蹦跳跳真可爱5891 小时前
Python----数据分析(Pandas三:一维数组Series的数据操作:数据清洗,数据转换,数据排序,数据筛选,数据拼接)
python·数据分析·pandas
*星星之火*2 小时前
【GPT入门】第20课 langchain的function calling 初步体验
python·gpt·langchain
李恩泽的博客2 小时前
Python Paramiko模块
python
色楠不哭2 小时前
python包filterpy安装失败ModuleNotFoundError: No module named ‘filterpy‘
开发语言·python
Aaron.Ma2 小时前
Django 问题
python·django·sqlite
范哥来了2 小时前
python web开发flask库安装与使用
前端·python·flask
爱做ppt的阿伟2 小时前
一键爬取b站视频
python·音视频
李恩泽的博客2 小时前
Python 使用PIL将图片或GIF转字符画
python
斯内普的小巨怪2 小时前
项目问答(自用记录)
python