如何使用Plotly和Python实现交互式数据可视化?

2021年11月28日07:57:54 发表评论 1,342 次浏览
特色图片

Python 非常适合数据探索和数据分析,这一切都要归功于 numpy、pandas、matplotlib 等令人惊叹的库的支持。在我们的数据探索和数据分析阶段,了解我们正在处理的数据非常重要,因此数据的可视化表示非常重要。

如何使用Plotly实现交互式数据可视化?我们经常使用 Jupyter notebook 处理这些项目,因为它们很棒、快速、简单,并且允许我们与数据进行交互和玩耍。然而,我们能做的事情是有限制的,通常当我们处理图表时,我们使用 matplotlib 或 seaborn 等库,但这些库渲染我们的图表和图形的静态图像。但是很多东西都在细节中丢失了,因此我们需要微调我们的图表来探索我们的数据部分。如果我们可以通过放大与我们的图表进行交互,将上下文信息添加到我们的数据点(如悬停交互),那不是很好吗?这是 Plotly 可以帮助我们的地方。

Python如何实现交互式数据可视化?Plotly 是一个 Python 库,可以制作交互式的、出版质量的图形,如折线图、散点图、面积图、条形图、误差线、箱线图、直方图、热图、子图等等。

但我们已经谈得够多了,让我们开始构建一些图表……


安装依赖

实现交互式数据可视化示例:在我们构建任何东西之前,让我们安装依赖项。我喜欢使用,pipenv但这同样适用于 anaconda 或其他包管理器。

这是我们需要的依赖项列表

  • jupyter:Web 应用程序,可让你创建和共享包含实时代码、方程式……的文档。你知道的!
  • pandas:非常强大的数据分析库,我们将在我们的项目中使用它来处理我们的数据
  • numpy:Python 的科学计算,在我们的项目中用于数学和生成随机数
  • seaborn:基于 matplotlib 的统计数据可视化,我们将使用它来加载库附带的一些示例数据
  • cufflinks:允许与熊猫一起工作
  • plotly:交互式图表库

以下是安装它们的命令:

pipenv install jupyter
pipenv install plotly cufflinks pandas seaborn numpy

入门

Python如何实现交互式数据可视化?首先,我们需要启动我们的 jupyter notebook 并创建一个新文档:

pipenv run jupyter notebook

一旦我们到了那里,我们就可以开始添加一些代码。由于本文不是 Jupyter Notebooks 的教程,我将只关注代码而不是如何使用文档。

让我们开始导入库:

import pandas as pd
import numpy as np
import seaborn as sns
import cufflinks as cf

Plotly 在其他库的帮助下可以在不同的上下文中渲染绘图,例如在 jupyter notebook 上、在 plotly 仪表板上在线等。默认情况下,库在离线模式下工作,这正是我们想要的。但是,我们还需要告诉袖扣我们将对图表使用离线模式。可以通过将以下单元格添加到我们的笔记本中来以编程方式完成此设置:

cf.go_offline()

现在我们准备好获取一些数据并开始绘图。


生成随机数据

我不想过多关注如何加载或检索数据,因此,我们将简单地为图表生成随机数据,在新单元格中,我们可以使用 pandas 和 numpy 来构建 3d 矩阵:

df = pd.DataFrame(np.random.randn(300, 3), columns = ["X", "Y", "Z"])
df.head()

太棒了,使用 numpy 我们可以生成我们的随机数,我们可以将它们加载到 Pandas DataFrame 对象中。让我们看看我们的数据是什么样的:

df.head()

我们得到:

          X              Y             Z
0      0.176117      1.221648      1.201206
1      1.931615      -2.303667     1.914741
2      1.213322      -0.434855     -0.639277
3      0.763220      0.118211      -0.838034
4      0.245442      0.697897      1.169540

那太棒了!是时候绘制一些图表了。


我们的第一个地块

如何使用Plotly实现交互式数据可视化?绘制 DataFrame 的一种便捷方法是使用系列和 DataFrame 上可用的 iplot 方法,由袖扣提供。让我们从所有默认值开始:

df.iplot()
折线图 - 所有默认值
折线图 - 所有默认值

实现交互式数据可视化示例:简单的看,它看起来像任何其他图表,但如果你将鼠标悬停在图表上,你将开始看到一些魔法。悬停在屏幕右上角时会出现一个工具栏,允许你进行缩放、平移和其他操作。该图表还允许你通过在图表上绘制一个区域来放大,或者只是查看每个数据点上的工具提示以及值等附加信息。

我们上面的图表肯定比静态图表好,但仍然不是很好。让我们尝试使用散点图呈现相同的图表。

df.iplot(mode = "markers")
标记图
标记图表

不可怕,但不是很好,点太大了,让我们调整它们的大小:

df.iplot(mode = "markers", size = 5)
标记图表 - 自定义数据点大小
标记图表 - 自定义数据点大小

好多了!接下来,让我们尝试一些不同的东西。

条形图

Python如何实现交互式数据可视化?让我们暂时忘记我们随机生成的数据集,让我们从 seaborn 库中加载一个流行的数据集来呈现其他一些图表类型。

titanic = sns.load_dataset("titanic")
titanic.head()
如何使用Plotly和Python实现交互式数据可视化?

我们将要处理的数据集称为“泰坦尼克号”,其中包含有关在泰坦尼克号那悲惨的日子里旅行的人发生了什么的信息。

这个数据集中的一个特殊变量是survived变量,它包含布尔信息,0代表死亡,1代表事故幸存者。让我们建立一个条形图,看看男人和女人是如何幸存下来的:

titanic.iplot(kind = "bar", x = "sex", y = "survived")
条形图
条形图

趋势很容易看到,但是,如果你只是分享这张图表,就不可能知道我们在说什么,因为它没有图例,也没有标题。所以让我们解决这个问题:

titanic.iplot(kind = "bar", x = "sex", y = "survived", title = "Survivors", xTitle = "Sex", yTitle = "Number of survived")
带标题的条形图
带标题的条形图

现在好多了!

但是如果我们想绘制一个水平条形图呢?足够简单:

titanic.iplot(kind = "barh", x = "sex", y = "survived")
水平条形图
水平条形图

伟大的!让我们探索更多功能


主题

实现交互式数据可视化示例 - 到目前为止,我们的图表看起来很棒,但也许我们想为我们的图表使用不同的颜色模式。幸运的是,我们有一组主题可以用来渲染我们的情节。让我们列出它们并切换到另一个。

上市主题:

cf.getThemes()

它应该输出如下内容:

['ggplot', 'pearl', 'solar', 'space', 'white', 'polar', 'henanigans']

我们可以通过简单地添加以下内容来切换所有未来图表的主题:

cf.set_config_file(theme="solar")

现在,如果我们再次渲染条形图,我们会得到如下结果:

titanic.iplot(kind = "bar", x = "sex", y = "survived")
太阳能主题条形图
太阳能主题条形图

暗模式,我最喜欢的模式之一,但请查看它们并告诉我你最喜欢哪一个。


表面图

如何使用Plotly实现交互式数据可视化?到目前为止,我们渲染了惊人的 2d 图表,但 plotly 也支持 3d 图表。让我们构建一些 3d 图表来获得一些乐趣。下一个图,我们将其设为 3D 曲面图,为此,我们需要使用 Pandas 创建一些数据,如下所示:

df = pd.DataFrame({"A": [100, 200, 300, 200, 100], "B": [100, 200, 300, 200, 100], "C": [100, 200, 300, 200, 100]})
df.head()

你应该得到类似的东西:

        A        B	  C
0      100      100      100
1      200      200      200
2      300      300      300
3      200      200      200
4      100      100      100

现在让我们使用“表面”类型将其放在 3d 图表上。

df.iplot(kind = "surface")
目标图
曲面图

看起来好赞!和多彩,让我们改变色标,使其更具视觉吸引力:

df.iplot(kind = "surface", colorscale = "rdylbu")
具有自定义色标的轮廓图
具有自定义色标的曲面图

美丽的!但不是这样,你是否尝试过与笔记本中的图表进行交互?你甚至可以旋转它!


结论

Python如何实现交互式数据可视化?Plotly 是你数据探索和分析的绝佳图表替代品。正如所见,它提供了交互式仪表板,可以帮助你更好地识别异常值并通过浏览数据更好地了解数据。我可能不会对每个数据集都使用 plotly,但它是一个我们应该知道的非常有趣的库。

谢谢阅读!

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: