一图胜千言!Python 数据可视化多维讲解 您所在的位置:网站首页 python可视化数据处理 一图胜千言!Python 数据可视化多维讲解

一图胜千言!Python 数据可视化多维讲解

2024-07-15 04:16| 来源: 网络整理| 查看: 265

作者:Dipanjan,来源:机器之心

数据聚合、汇总和可视化是支撑数据分析领域的三大支柱。长久以来,数据可视化都是一个强有力的工具,被业界广泛使用,却受限于 2 维。在本文中,作者将探索一些有效的多维数据可视化策略(范围从 1 维到 6 维)。

一、可视化介绍

描述性分析(descriptive analytics)是任何分析生命周期的数据科学项目或特定研究的核心组成部分之一。数据聚合(aggregation)、汇总(summarization)和可视化(visualization)是支撑数据分析领域的主要支柱。从传统商业智能(Business Intelligence)开始,甚至到如今人工智能时代,数据可视化都是一个强有力的工具;由于其能有效抽取正确的信息,同时清楚容易地理解和解释结果,可视化被业界组织广泛使用。然而,处理多维数据集(通常具有 2 个以上属性)开始引起问题,因为我们的数据分析和通信的媒介通常限于 2 个维度。在本文中,我们将探索一些有效的多维数据可视化策略(范围从 1 维到 6 维)。

二、可视化动机

「一图胜千言」

这是一句我们熟悉的非常流行的英语习语,可以充当将数据可视化作为分析的有效工具的灵感和动力。永远记住:「有效的数据可视化既是一门艺术,也是一门科学。」在开始之前,我还要提及下面一句非常相关的引言,它强调了数据可视化的必要性。

「一张图片的最大价值在于,它迫使我们注意到我们从未期望看到的东西。」

——John Tukey

三、快速回顾可视化

本文假设一般读者知道用于绘图和可视化数据的基本图表类型,因此这里不再赘述,但在本文随后的实践中,我们将会涉及大部分图表类型。著名的可视化先驱和统计学家 Edward Tufte 说过,数据可视化应该在数据的基础上,以清晰、精确和高效的方式传达数据模式和洞察信息。

结构化数据通常包括由行和特征表征的数据观测值或由列表征的数据属性。每列也可以被称为数据集的某特定维度。最常见的数据类型包括连续型数值数据和离散型分类数据。因此,任何数据可视化将基本上以散点图、直方图、箱线图等简单易懂的形式描述一个或多个数据属性。本文将涵盖单变量(1 维)和多变量(多维)数据可视化策略。这里将使用 Python 机器学习生态系统,我们建议先检查用于数据分析和可视化的框架,包括 pandas、matplotlib、seaborn、plotly 和 bokeh。除此之外,如果你有兴趣用数据制作精美而有意义的可视化文件,那么了解 D3.js(https://d3js.org/)也是必须的。有兴趣的读者可以阅读 Edward Tufte 的「The Visual Display of Quantitative Information」。

闲话至此,让我们来看看可视化(和代码)吧!

别在这儿谈论理论和概念了,让我们开始进入正题吧。我们将使用 UCI 机器学习库(https://archive.ics.uci.edu/ml/index.php)中的 Wine Quality Data Set。这些数据实际上是由两个数据集组成的,这两个数据集描述了葡萄牙「Vinho Verde」葡萄酒中红色和白色酒的各种成分。本文中的所有分析都在我的 GitHub 存储库中,你可以用 Jupyter Notebook 中的代码来尝试一下!

我们将首先加载以下必要的依赖包进行分析。

import pandas as pd import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D import matplotlib as mpl import numpy as np import seaborn as sns %matplotlib inline

我们将主要使用 matplotlib 和 seaborn 作为我们的可视化框架,但你可以自由选择并尝试任何其它框架。首先进行基本的数据预处理步骤。

white_wine = pd.read_csv('winequality-white.csv', sep=';') red_wine = pd.read_csv('winequality-red.csv', sep=';') # store wine type as an attribute red_wine['wine_type'] = 'red'   white_wine['wine_type'] = 'white' # bucket wine quality scores into qualitative quality labels red_wine['quality_label'] = red_wine['quality'].apply(lambda value: 'low'                                                          if value 1 categorical attributes g = sns.FacetGrid(wines, col="wine_type", hue='quality_label',                  col_order=['red', 'white'], hue_order=['low', 'medium', 'high'],                  aspect=1.2, size=3.5, palette=sns.light_palette('navy', 4)[1:]) g.map(plt.scatter, "volatile acidity", "alcohol", alpha=0.9,      edgecolor='white', linewidth=0.5, s=100) fig = g.fig fig.subplots_adjust(top=0.8, wspace=0.3) fig.suptitle('Wine Type - Alcohol - Quality - Acidity', fontsize=14) l = g.add_legend(title='Wine Quality Class')

通过利用散点图以及色调和分面的概念可视化 4 维数据

我们清楚地看到,高品质的葡萄酒有较低的二氧化硫含量,这是非常相关的,与葡萄酒成分的相关领域知识一致。我们也看到红葡萄酒的二氧化硫总量低于白葡萄酒。在几个数据点中,红葡萄酒的挥发性酸度水平较高。

可视化 5 维数据(5-D)

我们照旧遵从上文提出的策略,要想可视化 5 维数据,我们要利用各种绘图组件。我们使用深度、色调、大小来表征其中的三个维度。其它两维仍为常规轴。因为我们还会用到大小这个概念,并借此画出一个三维气泡图。

# Visualizing 5-D mix data using bubble charts # leveraging the concepts of hue, size and depth fig = plt.figure(figsize=(8, 6)) ax = fig.add_subplot(111, projection='3d') t = fig.suptitle('Wine Residual Sugar - Alcohol Content - Acidity - Total Sulfur Dioxide - Type', fontsize=14) xs = list(wines['residual sugar']) ys = list(wines['alcohol']) zs = list(wines['fixed acidity']) data_points = [(x, y, z) for x, y, z in zip(xs, ys, zs)] ss = list(wines['total sulfur dioxide']) colors = ['red' if wt == 'red' else 'yellow' for wt in list(wines['wine_type'])] for data, color, size in zip(data_points, colors, ss):    x, y, z = data    ax.scatter(x, y, z, alpha=0.4, c=color, edgecolors='none', s=size) ax.set_xlabel('Residual Sugar') ax.set_ylabel('Alcohol') ax.set_zlabel('Fixed Acidity')

利用气泡图和色调、深度、大小的概念来可视化 5 维数据。

气泡图灵感来源与上文所述一致。但是,我们还可以看到以二氧化硫总量为指标的点数,发现白葡萄酒的二氧化硫含量高于红葡萄酒。

除了深度之外,我们还可以使用分面和色调来表征这五个数据维度中的多个分类属性。其中表征大小的属性可以是数值表征甚至是类别(但是我们可能要用它的数值表征来表征数据点大小)。由于缺乏类别属性,此处我们不作展示,但是你可以在自己的数据集上试试。

# Visualizing 5-D mix data using bubble charts # leveraging the concepts of hue, size and depth fig = plt.figure(figsize=(8, 6)) ax = fig.add_subplot(111, projection='3d') t = fig.suptitle('Wine Residual Sugar - Alcohol Content - Acidity - Total Sulfur Dioxide - Type', fontsize=14) xs = list(wines['residual sugar']) ys = list(wines['alcohol']) zs = list(wines['fixed acidity']) data_points = [(x, y, z) for x, y, z in zip(xs, ys, zs)] ss = list(wines['total sulfur dioxide']) colors = ['red' if wt == 'red' else 'yellow' for wt in list(wines['wine_type'])] for data, color, size in zip(data_points, colors, ss):    x, y, z = data    ax.scatter(x, y, z, alpha=0.4, c=color, edgecolors='none', s=size) ax.set_xlabel('Residual Sugar') ax.set_ylabel('Alcohol') ax.set_zlabel('Fixed Acidity')

借助色调、分面、大小的概念和气泡图来可视化 5 维数据。

通常还有一个前文介绍的 5 维数据可视化的备选方法。当看到我们先前绘制的图时,很多人可能会对多出来的维度深度困惑。该图重复利用了分面的特性,所以仍可以在 2 维面板上绘制出来且易于说明和绘制。

我们已经领略到多位数据可视化的复杂性!如果还有人想问,为何不增加维度?让我们继续简单探索下!

可视化 6 维数据(6-D)

目前我们画得很开心(我希望是如此!)我们继续在可视化中添加一个数据维度。我们将利用深度、色调、大小和形状及两个常规轴来描述所有 6 个数据维度。

我们将利用散点图和色调、深度、形状、大小的概念来可视化 6 维数据。

# Visualizing 6-D mix data using scatter charts # leveraging the concepts of hue, size, depth and shape fig = plt.figure(figsize=(8, 6)) t = fig.suptitle('Wine Residual Sugar - Alcohol Content - Acidity - Total Sulfur Dioxide - Type - Quality', fontsize=14) ax = fig.add_subplot(111, projection='3d') xs = list(wines['residual sugar']) ys = list(wines['alcohol']) zs = list(wines['fixed acidity']) data_points = [(x, y, z) for x, y, z in zip(xs, ys, zs)] ss = list(wines['total sulfur dioxide']) colors = ['red' if wt == 'red' else 'yellow' for wt in list(wines['wine_type'])] markers = [',' if q == 'high' else 'x' if q == 'medium' else 'o' for q in list(wines['quality_label'])] for data, color, size, mark in zip(data_points, colors, ss, markers):    x, y, z = data    ax.scatter(x, y, z, alpha=0.4, c=color, edgecolors='none', s=size, marker=mark) ax.set_xlabel('Residual Sugar') ax.set_ylabel('Alcohol') ax.set_zlabel('Fixed Acidity')

这可是在一张图上画出 6 维数据!我们用形状表征葡萄酒的质量标注,优质(用方块标记),一般(用 x 标记),差(用圆标记):用色调表示红酒的类型,由深度和数据点大小确定的酸度表征总二氧化硫含量。

这个解释起来可能有点费劲,但是在试图理解多维数据的隐藏信息时,最好结合一些绘图组件将其可视化。

结合形状和 y 轴的表现,我们知道高中档的葡萄酒的酒精含量比低质葡萄酒更高。

结合色调和大小的表现,我们知道白葡萄酒的总二氧化硫含量比红葡萄酒更高。

结合深度和色调的表现,我们知道白葡萄酒的酸度比红葡萄酒更低。

结合色调和 x 轴的表现,我们知道红葡萄酒的残糖比白葡萄酒更低。

结合色调和形状的表现,似乎白葡萄酒的高品质产量高于红葡萄酒。(可能是由于白葡萄酒的样本量较大)

我们也可以用分面属性来代替深度构建 6 维数据可视化效果。

# Visualizing 6-D mix data using scatter charts # leveraging the concepts of hue, facets and size g = sns.FacetGrid(wines, row='wine_type', col="quality", hue='quality_label', size=4) g.map(plt.scatter, "residual sugar", "alcohol", alpha=0.5,   edgecolor='k', linewidth=0.5, s=wines['total sulfur dioxide']*2) fig = g.fig   fig.set_size_inches(18, 8) fig.subplots_adjust(top=0.85, wspace=0.3) fig.suptitle('Wine Type - Sulfur Dioxide - Residual Sugar - Alcohol - Quality Class - Quality Rating', fontsize=14) l = g.add_legend(title='Wine Quality Class')

借助色调、深度、面、大小的概念和散点图来可视化 6 维数据。

因此,在这种情况下,我们利用分面和色调来表征三个分类属性,并使用两个常规轴和大小来表征 6 维数据可视化的三个数值属性。

四、结论

数据可视化与科学一样重要。如果你看到这,我很欣慰你能坚持看完这篇长文。我们的目的不是为了记住所有数据,也不是给出一套固定的数据可视化规则。本文的主要目的是理解并学习高效的数据可视化策略,尤其是当数据维度增大时。希望你以后可以用本文知识可视化你自己的数据集。

https://towardsdatascience.com/the-art-of-effective-visualization-of-multi-dimensional-data-6c7202990c57

< END >

微信扫码关注,了解更多内容



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有