使用Plotly和Python进行交互式数据可视化
Python是数据探索和数据分析的好帮手,这都要归功于numpy、pandas、matplotlib等神奇库的支持。在我们的数据探索和数据分析阶段,理解我们正在处理的数据是非常重要的,为此,数据的可视化表示可能是非常重要的。
对我们来说,使用Jupyter笔记本来完成这些项目是很常见的,因为它们很好,很快速,很简单,而且它们允许我们与我们的数据进行互动和游戏。然而,我们能做的事情是有限制的,通常我们在处理图表时,会使用matplotlib或seaborn等库,但这些库会呈现出我们的图表和图形的静态图像。但是,很多东西会在细节中丢失,因此我们需要对我们的图表进行微调,以探索我们数据的各个部分。如果我们可以通过缩放来与我们的图表互动,为我们的数据点添加上下文信息,如悬停互动,那不是很好吗?这里就是Plotly可以帮助我们的地方。
Plotly是一个Python库,可以制作交互式的、具有出版质量的图表,如线图、散点图、面积图、条形图、误差条、箱形图、直方图、热图、子图,以及更多更多。
但我们谈得够多了,让我们开始制作一些图表......
安装依赖项
在我们构建任何东西之前,让我们先安装依赖性。我喜欢使用pipenv
,但同样适用于Anaconda或其他软件包管理器。
下面是我们需要的依赖项的列表:
- jupyter。网络应用程序,允许你创建和分享包含实时代码的文档,方程式....,你知道的!
- pandas。非常强大的数据分析库,我们将在我们的项目中使用它来处理我们的数据
- numpy。Python的科学计算,在我们的项目中用于数学和生成随机数
- seaborn。基于matplotlib的统计数据可视化,我们将使用它来加载库中的一些样本数据。
- cufflinks。允许 plotly 与 pandas 一起工作
- plotly。交互式图表库
以下是安装它们的命令:
pipenv install jupyter
pipenv install plotly cufflinks pandas seaborn numpy
复制代码
入门
为了开始,我们需要启动我们的 jupyter 笔记本并创建一个新的文档:
pipenv run jupyter notebook
复制代码
一旦我们在那里,我们可以开始添加一些代码。由于这篇文章不是一个关于Jupyter笔记本的教程,我将只关注代码,而不是如何使用文档的问题。
让我们开始导入库:
import pandas as pd
import numpy as np
import seaborn as sns
import cufflinks as cf
复制代码
Plotly在其他库的帮助下可以在不同的背景下呈现图,例如在jupyter笔记本上,在plotly仪表盘上在线,等等。默认情况下,该库在离线模式下工作,这正是我们想要的。然而,我们还需要告诉cufflinks,我们将对图表使用离线模式。这个设置可以通过在我们的笔记本上添加以下单元格来以编程方式完成:
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
复制代码
这很好!是时候绘制一些图表了。
我们的第一张图
绘制DataFrame的一个方便的方法是使用Series和DataFrames上可用的iplot方法,这是cufflinks的功劳。让我们从所有的默认值开始。
df.iplot()
复制代码
折线图 - 所有默认值
简单来看,它和其他图表一样,但是如果你把鼠标悬停在图表上,你就会看到一些神奇的东西。在屏幕右上方悬停时,会出现一个工具栏,允许你进行缩放、平移和其他操作。该图表还允许你通过在图表上画出一个区域来放大,或者简单地在每个数据点上看到一个工具提示,上面有附加信息,如数值。
我们上面的图表当然比静态图表好,但是仍然不是很好。让我们试着用散点图来呈现同样的图表。
df.iplot(mode = "markers")
复制代码
标记图
不是很糟糕,但也不是很好,这些点太大了,让我们调整一下它们的大小。
df.iplot(mode = "markers", size = 5)
复制代码
标记图--自定义数据点大小
好多了!接下来,让我们试试不同的东西。
柱状图
让我们暂时忘记我们随机生成的数据集,让我们从seaborn库中加载一个流行的数据集来渲染一些其他的图表类型。
titanic = sns.load_dataset("titanic")
titanic.head()
复制代码
我们将要处理的数据集叫做 "泰坦尼克号",它包含了关于在那个悲惨的日子里在泰坦尼克号上旅行的人所发生的事情的信息。
这个数据集中的一个特殊变量是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")
复制代码
带有太阳能主题的条形图
黑暗模式,是我的最爱之一,但请检查一下,让我知道哪一个是你的最爱。
表面图表
到目前为止,我们渲染了惊人的2D图表,但plotly也支持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
复制代码
现在,让我们用 "表面 "的方式把它放到一个三维图表上:
df.iplot(kind = "surface")
复制代码
表面图
看起来真不错!而且色彩鲜艳,让我们改变一下色阶,让它在视觉上更吸引人:
df.iplot(kind = "surface", colorscale = "rdylbu")
复制代码
带有自定义色标的表面图
真漂亮但这还不算完,你试过在笔记本上与图表互动吗?你甚至可以旋转它!
总结
Plotly是一个伟大的图表替代品,用于你的数据探索和分析。正如所见,它提供的交互式仪表盘可以帮助你更好地识别你的异常值,并通过导航来更好地了解你的数据。我可能不会对每一个数据集都使用 plotly,但它是一个非常有趣的库,我们应该了解一下。
谢谢你的阅读!