暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

自动化您的大数据管道

BMC中国 2020-11-26
572
本文将解释如何在Matplotlib中使用对数尺度。

对数尺对于绘制包含极小数字和极大数字的数据非常有用,因为使用对数尺来绘制数据时,您可以轻松查看所有的数字,太小的数字并不会被压缩得太紧。


对数
首先,让我们复习一下高中数学。对数是通过将大数视为10的幂来使之变小的方法。除10之外,还有其他对数底数,例如数学中使用的由常数e=2.718…给出的自然对数。但是,为方便起见,我们将使用以10为底的对数。

简言之:
log10x = y表示10的幂y等于x,即10 ** y = x。因此,因为10**2 = 100,所以log10100=2。

Matplotlib中的对数尺
Matplotlib中的二维图表具有yscale和xscale。刻度表示沿轴的刻度或刻度线。它们可以是以下任意一种:

matplotlib.scale.LinearScale这些只是数字,例如1、2、3。 
matplotlib.scale.LogScale这些是10的幂。您可以使用由数字e给出的任何底数,如2或自然对数值。使用不同的底数将会缩小或扩大绘图元素的间距,令它们更加清晰明了。
matplotlib.scale.SymmetricalLogScalematplotlib.scale.LogitScale这些用于小于1的数,特别是对数为极大负数的极小数。

使用对数尺
让我们绘制一些大公司和一些小公司的收入。

Amazon、Alphabet (Google)和Intel的规模比我们虚拟的Pete’s、Clock和Buckey’s BBQ等小公司大很多倍。这些小公司与Amazon之间的差异是巨大的,因此,每家小公司的图都位于线性标尺的同一垂直线0上。

正如本示例那样,如果未明确设置,Matplotlib将选择轴的比例。底部的小符号le11表示x轴是科学计数法,在本示例中表示收入是10**11的倍数(1000亿美元)。Amazon的收入$232,887,000,000是2.325*(10**11)。而Pete’s的收入$600,000(作为11的幂)是0.000006*(10**11)。这也解释了为什么即使是Pepsi这样的大公司,在下图中也接近于0。
 
因此,在下图中,我们使用对数尺修正了这个问题。请参见下面的代码说明。

在这里,除了包含plt.xscale(“log”)之外,其他一切都是一样的。因为将这些值以10的幂进行显示,因此更加一目了然,无论是Pete’s区区60万美元的收入6*(10**6),还是大约是其10万倍的Amazon收入100,000 (10**5)。


现在,您可以通过收入更加清楚地了解每家公司的规模。
 
解释代码
如果不熟悉数据科学,则可能很难理解其中一些使用了PandasNumPy的代码。具有讽刺意味的是,Pandas的创建目的正是为了简化表类型的数据处理。

第一步是将我们创建的数据作为字典进行提取并将其转换为panda数据框。该数据的索引将是公司名称。我们说orient=’index’,意思是取第一个条目作为索引值。然后为其分配一个列名columns=[‘Revenue’]。公司名称因为不是一个列,而是一个行索引,因此没有列名。


接下来,我们必须将收入字符串转换为数字。否则,它们将由matplotlib作为字母进行排序。


现在,我们要创建一个系列,即只有一列的数据框。这些值将是前一个数据框的索引。这就是我们以数据列Company的方式将公司列出的方法。

接下来,我们将把刚刚创建的系列的值作为另一列添加到dat数据框中。


然后,我们来绘制散点图,给出提供x和y值的数据框。每个数据框都具有相同的形状(7,),您可以使用data[‘Revenue’].shape进行检查。形状有时是很难理解的NumPy概念。它基本上是指数组的维数。在xy图中,它们必须是相同的。


其余的不言自明:


如果您想了更多关于BMC相关信息,请点击阅读全文了解详情
文章转载自BMC中国,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论