数据可视化的魅力

在全球化的商业活动中,每时每刻都在产生大量的数据。企业从这些数据中提取有用信息,以做出重要的商业决策。探索性数据分析可以帮助他们可视化当前市场状况,预测未来可能的趋势,了解客户对产品的期望,并采取适当的措施改进产品等。

数据可视化解决方案

数据可视化是创建一个视觉上吸引人的数据表示,能够快速讲述一个有趣的故事,同时足够简单,让所有读者都能理解。可以使用Python中的Pandas库通过其内置的绘图函数进行上述数据分析。但如果能够通过缩放或悬停等函数与图表互动,深入挖掘数据,岂不是更好?

交互式图表和仪表板的优势

交互式数据可视化允许用户立即修改图形图表上的元素,而无需更改后台代码。想象一下,正在与一个显示十年产品价格的图表互动。如果有一个滑块或下拉菜单可以选择特定年份或月份的价格,那么作为读者的将能够更快地从图表中获得洞察,而且不需要编辑代码。这正是交互式图表所提供的。

通过交互式图表,可以更好地理解数据背后的故事。这些图表允许放大有趣的变化,发现趋势和变化,以及找到变量之间的相关性和联系。所有这些都使得数据探索过程更有意义。

仪表板简介

仪表板是讲述数据集中故事的视觉工具,允许用户快速理解大局。这些是不同图表的集合,以网格样式布局组合在一起,是故事的一部分。因此,可以说仪表板是呈现有价值洞察的常见方式。

交互式图表库

使用Matplotlib和Seaborn创建的图表是静态图表,即用户不能在不更新代码并重新运行的情况下更新它们。因此,可以使用D3和chart.js等交互式图表库,但它们要求用户具备一些JavaScript知识。

目前,有两个流行的开源库用于构建交互式可视化——Bokeh和Plotly。在本文中,将使用Bokeh进行一个简单的教程。Bokeh是一个开源库,用于交互式可视化,使用HTML和JavaScript渲染图形。它是一个强大的EDA工具,也可以用来构建基于Web的仪表板和应用程序。

Bokeh支持折线图、饼图、条形图和堆叠条形图、直方图和散点图。数据源被转换为JSON文件,成为BokehJS(JavaScript库)的输入,这使得它能够渲染浏览器支持的交互式图表和可视化。

Bokeh库需要基本的JavaScript代码知识,以便编写自定义函数根据用户输入更新图表。对于这篇面向初学者的文章,使用了名为Pandas-Bokeh的库,它更易于新手使用,并且允许通过其对Pandas的后端支持来渲染相同的Bokeh图表。对于高级可视化,总是可以使用Bokeh库来定义自定义可视化。

使用Bokeh构建交互式仪表板

首先,使用pip从PyPI安装库。

pip install pandas_bokeh

接下来,导入pandas和numpy库。记得在pandas_bokeh库之前导入这些。

import numpy as np import pandas as pd import pandas_bokeh

还需要以下命令在笔记本中显示输出图表。

# 在Jupyter/Colab笔记本中嵌入图表 pandas_bokeh.output_notebook()

要在单独的HTML中显示图表,使用此命令:

# 导出图表为HTML pandas_bokeh.output_file(filename)

对于这个面向初学者的教程,使用NumPy库生成一个简单的随机数据集,并使用它来构建仪表板。

假设数据集包含来自4个传感器在12个月期间测量值的样本,每个值都有一个唯一的识别号码和一个与之相关的类别。这意味着总共有6个特征,即‘id’、‘month’、‘sensor_1’、‘sensor_2’、‘sensor_3’和‘category’。为了简单起见,只考虑15个样本或数据行。

要生成这个数据集,使用NumPy库的np.random函数如下。(NumPy官方文档链接:https://numpy.org/doc/stable/reference/random/generator.html)

然后将打印数据集的形状,并查看数据集的前5行。

Python代码示例

# 生成随机数据集 df_random = pd.DataFrame(np.random.rand(15, 6), columns=['id', 'month', 'sensor_1', 'sensor_2', 'sensor_3', 'category']) print(df_random.shape) print(df_random.head())

现在可以在仪表板中绘制图表。为了演示目的,让使用pandas_bokeh库绘制以下图表:

# 折线图 p_line = df_random.groupby(['month']).mean().plot_bokeh(kind="line", y="sensor_2", color='#d01c8b', plot_data_points=True, show_figure=False) # 条形图 p_bar = df_random.groupby(['month']).mean().plot_bokeh(kind="bar", colormap=colors, show_figure=False) # 堆叠条形图 df_sensor = df_random.drop(['month'], axis=1) p_stack = df_sensor.groupby(['category']).mean().plot_bokeh(kind='barh', stacked=True, colormap=colors, show_figure=False) # 散点图 p_scatter = df_random.plot_bokeh(kind="scatter", x="month", y="sensor_2", category="category", colormap=colors, show_figure=False) # 饼图 p_pie = df_random.groupby(['category']).mean().plot_bokeh.pie(y='sensor_1', colormap=colors, show_figure=False) # 直方图 p_hist = df_sensor.plot_bokeh(kind='hist', histogram_type="stacked", bins=6, colormap=colors, show_figure=False)

运行这些命令将生成图表,但由于设置了‘show_figure=False’,它们将不会被显示。因为希望这些图表出现在仪表板中,所以使用了这个选项。

接下来,使用‘pandas_bokeh.plot_grid’命令设置仪表板的网格布局。将前三个图表绘制在第一行,剩下的三个绘制在第二行。

# 使用网格布局制作仪表板 pandas_bokeh.plot_grid([[p_line, p_bar, p_stack], [p_scatter, p_pie, p_hist]], plot_width=400)

仪表板看起来像这样:

(此处应有图片,但由于是文本格式,无法显示)

所有这些图表都是交互式的,允许使用悬停和缩放功能,以及过滤类别。

通过本文,了解了如何在Pandas中直接生成Bokeh交互式图表,并使用Pandas-Bokeh库设置一个简单的仪表板。Pandas-Bokeh库对于具有基本pandas绘图语法理解的初学者来说非常容易使用。这个库肯定可以帮助使可视化更加引人注目,无需学习任何额外的JavaScript代码来生成交互式图表。希望像一样喜欢探索这个库!

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485