2.5 绘制直方图
Python中有不少画图的包。这里我们要演示的是pyplot
,来自matplotlib
(http://matplotlib.sourceforge.net)。
很多Python安装程序中都带有这个包。启动Python解释器,输入以下命令就可以查看是否安装了这个包:
import matplotlib.pyplot as pyplot
pyplot.pie([1,2,3])
pyplot.show()
如果安装了matplotlib
,就应该能看到一个饼图,否则就说明还没有安装。
直方图和概率质量函数通常画成条状图。pyplot
中绘制条状图的函数是bar
。Hist
对象中有一个Render
方法,会返回一个排序后的值列表,以及相应的频数,下面是bar
函数所需的参数:
>>> vals, freqs = hist.Render()
>>> rectangles = pyplot.bar(vals, freqs)
>>> pyplot.show()
我编写了一个myplot.py,提供了绘制直方图的函数、概率质量函数,以及你将要看到的其他对象。它的文档在thinkstats.com/myplot.html上,从thinkstats.com/myplot.py可以下载到代码。或者你喜欢的话,也可以直接用pyplot
,可以在网上找到它的文档。
图2-1是第一胎婴儿和非第一胎婴儿怀孕周期直方图。
图2-1 怀孕周期直方图
直方图很有用,因为它可以非常直观地展现数据的以下特征。
众数
分布中出现次数最多的值叫做众数。在图2-1中,众数显然是在39周,众数是最适合描述典型值的汇总统计量。
形状
以众数为中心,整个分布是不对称的;在右侧下降很快,而在左侧下降比较慢。从医学的角度来看,这是对的。宝宝经常会提前来到这个世界,但却很少有呆在妈妈肚子里超过42周的。此外,分布的右侧到了42周就被截断了,因为到了这个时候医生会采取必要的措施。
异常值
远离众数的值叫做异常值(outlier)。其中有些只是罕见情况,比如30周出生的宝宝。但有些很有可能是汇总或者记录数据的某个环节中的失误导致的。
直方图直观地展示了数据的一些特征,但通常比较两个分布时意义不大。在这个例子中,“第一胎婴儿”的数量要比“非第一胎婴儿”的数量少。因此,直方图中某些明显差异是由样本大小造成的。可以用PMF来解决这个问题。