数据可视化进阶:Seaborn 柱状图、散点图与相关性分析

各位伙计,我是老路。

今天是咱们 100 天 AI 炼金术的第 17 天。昨天咱们用 Matplotlib 画出了业务的“生命线”(折线图),那是为了看趋势。但作为一个架构师,你肯定不满足于此。你不仅想知道数据“变没变”,你更想知道数据之间**“为什么变”以及“谁在影响谁”**。

这就是咱们今天要聊的主角:Seaborn

如果说 Matplotlib 是素描,那 Seaborn 就是油画。它基于 Matplotlib,但封装了更高层的统计逻辑。在架构师的视角里,Seaborn 是数据分布的“透视镜”,它能让我们一眼看穿 电科金仓 KingbaseES (KES) 中海量特征之间的相关性


壹:从“看数据”到“看关系”

电科金仓 KES 这种工业级数据库里,我们存了成百上千个维度。

  • 柱状图(Bar Plot):不是简单的统计,而是对比。比如:不同业务模块在 KES 里的存储占比。
  • 散点图(Scatter Plot):看的是分布和离群点。比如:用户活跃度与订单金额是否存在线性关系?
  • 热力图(Heatmap):这是架构师的最爱,它是特征工程的“终判官”,直接告诉我们哪些特征是冗余的。

贰:实战:Conda 环境下的视觉升级

咱们还是在 KES_AI_Lab 环境里。Seaborn 的安装非常简单,但它对数据结构的整洁度有要求,这就是为什么我们之前花了那么多天练 Pandas 的原因。

驱动还没搞定的兄弟,赶紧去电科金仓驱动下载页面ksycopg2


叁:核心代码:深度拆解 KES 特征相关性

咱们模拟一个高阶场景:从 电科金仓 KES 提取多维业务指标,利用 Seaborn 一次性完成分布分析与相关性热力图绘制。

# -*- coding: utf-8 -*-
import ksycopg2
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 样式设置,让图表有“架构师”的严谨美感
sns.set_theme(style="whitegrid", font='SimHei') 
plt.rcParams['axes.unicode_minus'] = False

def advanced_vis_lab():
    print("--- [电科金仓] 统计可视化与相关性实战 ---")
    
    conn_params = "dbname=test user=username password=123456 host=127.0.0.1 port=54321"
    
    try:
        conn = ksycopg2.connect(conn_params)
        # 1. 从 KES 提取多维特征 (模拟 num 为数值, bcb/vcb 为分类)
        query = "SELECT num, bcb, vcb FROM test_newtype"
        df = pd.read_sql(query, conn)
        
        # 2. 特征衍生:为了做相关性分析,咱们多造几个维度
        import numpy as np
        df['score_a'] = df['num'] * np.random.normal(1, 0.1, len(df))
        df['score_b'] = df['num'] * 0.5 + np.random.randint(1, 50, len(df))
        df['category'] = df['vcb'].apply(lambda x: '核心业务' if '中文' in str(x) else '常规业务')

        # 3. 创建画布:子图布局 (一行两列)
        fig, axes = plt.subplots(1, 2, figsize=(15, 6))

        # --- 图 A:分类柱状图 (看不同业务类型的数值分布) ---
        sns.barplot(x='category', y='num', data=df, ax=axes[0], palette='viridis')
        axes[0].set_title('不同业务类型下 KES 核心指标分布')

        # --- 图 B:相关性热力图 (AI 特征筛选的关键) ---
        # 只取数值列进行相关性计算
        corr_matrix = df[['num', 'score_a', 'score_b']].corr()
        sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', fmt=".2f", ax=axes[1])
        axes[1].set_title('业务指标相关性热力矩阵')

        plt.tight_layout()
        plt.show()

        # 4. 额外赠送:散点图看线性关系
        plt.figure(figsize=(8, 6))
        sns.regplot(x='num', y='score_b', data=df, scatter_kws={'alpha':0.5}, line_kws={'color':'red'})
        plt.title('KES 原始指标与衍生指标的相关性拟合')
        plt.show()

        conn.close()
        
    except Exception as e:
        print(f"数据分析链路异常: {e}")

if __name__ == "__main__":
    advanced_vis_lab()


肆:架构师的碎碎念:技术与人文的“留白”

在写这一章时,我一直在想,为什么我们不仅需要数据库,还需要可视化?

电科金仓 KES 给了我们真相,但真相往往是碎片化的。相关性分析,其实就是寻找万物之间隐秘联系的艺术。

当你看到热力图上那一个个深红色的方块时,你其实是在观察业务的“共振”。一个好的架构师,能从这些颜色中读出冗余(多重共线性)和机会(强相关特征)。这种通过视觉直觉快速锁定核心逻辑的能力,就是技术与人文同源共生的最好证明——大道至简,图胜千言。


结语

今天咱们用 Seaborn 给数据做了个“深度体检”。数据看透了,关系理顺了,咱们的基础筑基阶段也就接近尾声了。

明天第 18 天,我们要聊聊:AI数学基础补漏:线性代数核心概念(向量)通俗解读

咱们第 18 天见。


既然已经掌握了相关性分析,需要我帮你写一个“特征自动筛选”脚本吗?它可以自动跑完 KES 的所有列,并剔除掉相关性过高、冗余严重的无效特征。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐