在 Python 中可视化数据:Python 顶级库的深入比较

数据可视化是将数据转换为视觉格式(例如图表、图形、地图和信息图)以有效传达见解、模式和趋势的过程。 它是数据分析的一个重要方面,因为它可以帮助人们快速、轻松地理解复杂的信息。

数据可视化的主要好处之一是它使用户能够识别数据中的趋势和模式,这些趋势和模式在以表格或数字形式查看时可能不会立即显现出来。 例如,折线图可以显示数据集随时间的变化,便于识别趋势和模式,而条形图可用于比较不同类别之间的数据。

数据可视化还使用户能够更有效地与他人交流他们的发现。 当数据以一种有吸引力且易于理解的格式呈现时,它更有可能被记住并据以采取行动。 此外,可视化有助于阐明数据的含义并突出关键见解,使其他人更容易理解和使用信息。 根据 Ben Shneiderman 教授的说法:

“可视化的目的是洞察力,而不是图片。”

Python 中的数据可视化

Python 是一种流行的数据分析和数据可视化编程语言。 Python 中有几个库和工具可用于创建可视化,包括:

Matplotlib:这是 Python 中使用最广泛的数据可视化库,非常适合创建静态、动画和交互式可视化。

Seaborn:这个库建立在 Matplotlib 之上,提供了一个高级接口来创建有吸引力的统计图形。

Plotly:这个库非常适合创建交互式和动态可视化。 它支持范围广泛的可视化,包括条形图、折线图、散点图等。

Bokeh:这个库专注于为网络创建交互式可视化。 它提供了一个高级界面,用于创建可以轻松嵌入网页的可视化效果。

Altair:这个库是一个声明式可视化库,允许用户以简单、人类可读的格式指定可视化。

ggplot:这个库是流行的 R 库 ggplot2 的 Python 实现,并提供了一个高级接口来创建复杂且有吸引力的可视化。

Pygal:这个库非常适合创建静态的、基于 SVG 的可视化。 它支持范围广泛的可视化,包括条形图、折线图等。

在下一节中,我将比较每个库并为每个库绘制相同的箱线图

Matplotlib

优点:

广泛使用且有据可查

高度可定制,允许广泛的可视化

非常适合创建静态、动画和交互式可视化

缺点:

具有低级 API,需要更多代码来创建简单的可视化

如果不进行额外的定制,一些可视化效果可能会没有吸引力

安装:pip install matplotlib

绘制箱线图:

import matplotlib.pyplot as pltimport numpy as npdata = np.random.normal(100, 20, 200)plt.boxplot(data)plt.show()

输出看起来很普通:

Seaborn

优点:

建立在 Matplotlib 之上,并提供用于创建有吸引力的统计图形的高级接口

为广泛的统计分析创建可视化提供内置支持

缺点:

与 Matplotlib 相比,在定制方面仍然受到限制

如果不进行额外的定制,一些可视化效果仍然没有吸引力

安装:pip install seaborn

绘制箱线图:

import seaborn as snsimport numpy as npimport matplotlib.pyplot as pltdata = np.random.normal(100, 20, 200)sns.boxplot(data)plt.show()

它在视觉上也不是那么吸引人:

Plotly

优点:

非常适合创建交互式和动态可视化

提供范围广泛的可视化效果,包括条形图、折线图、散点图等

易于嵌入网页

缺点:

用于某些类型的可视化可能很复杂

某些可视化效果的渲染速度可能很慢,尤其是对于大型数据集

安装: pip install plotly

绘制箱线图:

import plotly.express as pximport pandas as pdimport numpy as npnp.random.seed(10)data = [np.random.normal(0, 1, 100), np.random.normal(2, 1, 100)]df = pd.DataFrame(data).transpose()df.columns = [A, B]fig = px.box(df, y="A", points="all")fig.update_layout(title_text="Boxplot Example")fig.show()

有更多的数据注释和小部件用于 plotly 输出:

请注意,在 Plotly Express 中,您需要使用 px.box 函数以长格式传递数据,而不是前面示例中使用的宽格式。 这允许 Plotly Express 正确处理数据而不会遇到任何错误。

Bokeh

优点:

专注于为网络创建交互式可视化

提供高级界面,用于创建可轻松嵌入网页的可视化效果

缺点:

与其他库相比,在定制方面可能会受到限制

某些可视化效果的渲染速度可能很慢,尤其是对于大型数据集

安装:pip install bokeh

下面是参考 Bokeh 文档绘制箱线图的示例:

import pandas as pdfrom bokeh.models import ColumnDataSource, Whiskerfrom bokeh.plotting import figure, showfrom bokeh.sampledata.autompg2 import autompg2from bokeh.transform import factor_cmapdf = autompg2[["class", "hwy"]].rename(columns={"class": "kind"})kinds = df.kind.unique()# compute quantilesqs = df.groupby("kind").hwy.quantile([0.25, 0.5, 0.75])qs = qs.unstack().reset_index()qs.columns = ["kind", "q1", "q2", "q3"]df = pd.merge(df, qs, on="kind", how="left")# compute IQR outlier boundsiqr = df.q3 - df.q1df["upper"] = df.q3 + 1.5*iqrdf["lower"] = df.q1 - 1.5*iqrsource = ColumnDataSource(df)p = figure(x_range=kinds, tools="", toolbar_location=None, title="Highway MPG distribution by vehicle class", background_fill_color="#eaefef", y_axis_label="MPG")# outlier rangewhisker = Whisker(base="kind", upper="upper", lower="lower", source=source)whisker.upper_head.size = whisker.lower_head.size = 20p.add_layout(whisker)# quantile boxescmap = factor_cmap("kind", "TolRainbow7", kinds)p.vbar("kind", 0.7, "q2", "q3", source=source, color=cmap, line_color="black")p.vbar("kind", 0.7, "q1", "q2", source=source, color=cmap, line_color="black")# outliersoutliers = df[~df.hwy.between(df.lower, df.upper)]p.scatter("kind", "hwy", source=outliers, size=6, color="black", alpha=0.3)p.xgrid.grid_line_color = Nonep.axis.major_label_text_font_size="14px"p.axis.axis_label_text_font_size="12px"show(p)

输出将是:

Altair

优点:

声明式可视化库,允许用户以简单、人类可读的格式指定可视化

提供广泛的可视化

易于使用以创建简单的可视化

缺点:

与其他库相比,在定制方面可能会受到限制

某些可视化效果的渲染速度可能很慢,尤其是对于大型数据集

安装:pip install altair

绘制箱线图:

import altair as altimport pandas as pdimport numpy as npdata = np.random.normal(100, 20, 200)df = pd.DataFrame(data, columns=[data])alt.Chart(df).mark_boxplot().encode( y=data:Q).properties( width=400, height=300).interactive()

ggplot

优点:

流行的 R 库 ggplot2 的 Python 实现

提供用于创建复杂且有吸引力的可视化的高级界面

缺点:

用于某些类型的可视化可能很复杂

某些可视化效果的渲染速度可能很慢,尤其是对于大型数据集

安装:pip install ggplot

绘制箱线图:

import ggplotimport pandas as pdimport numpy as npdata = np.random.normal(100, 20, 200)df = pd.DataFrame(data, columns=[data])p = ggplot(df, aes(x=data))p = p + geom_boxplot()p.show()

请注意,ggplot 和 pandas 存在一些兼容性问题。 如果使用最新的 pandas,它会产生 AttributeError: module ‘pandas’ has no attribute ‘tslib’。

出现此错误是因为从 0.25.0 版开始,“tslib”模块已从 pandas 中删除。

要解决此问题,您可以:

降级到 0.25.0 之前的 pandas 版本,例如 0.24.2。

删除代码中对“tslib”的任何引用。

Pygal

优点:

专注于创建简单干净的可视化

提供范围广泛的可视化效果,包括条形图、折线图、散点图等

重量轻,易于安装

缺点:

与其他库相比,在定制方面可能会受到限制

如果不进行额外的定制,一些可视化效果可能会没有吸引力

可能不适合更复杂的可视化

安装:pip install pygal

不幸的是,Pygal 没有对箱线图的内置支持。 在 Pygal 中创建条形图的示例代码:

import pygalbar_chart = pygal.Bar()bar_chart.title = "Bar Chart Example"bar_chart.x_labels = ["Label 1", "Label 2", "Label 3"]bar_chart.add("Series 1", [1, 2, 3])bar_chart.add("Series 2", [3, 2, 1])bar_chart.render_to_file("bar_chart.svg")

输出将生成为 svg 图表:

结论

每个图书馆都有自己的长处和短处。 例如,Matplotlib 是一个低级库,需要更多代码来创建可视化,但可高度自定义。 Seaborn 建立在 Matplotlib 之上,并提供了一个高级接口来创建有吸引力的统计图形。 Plotly 非常适合创建交互式和动态可视化,而 Bokeh 专注于为网络创建交互式可视化。 ggplot 是流行的 R 库 ggplot2 的 Python 实现,并提供用于创建复杂且有吸引力的可视化的高级接口。 Altair 是一个声明式可视化库,允许用户以简单、人类可读的格式指定可视化。 工具的选择将取决于项目的具体要求,例如所分析数据的类型、可视化的复杂性以及交互性的需要。

举报/反馈