使用Pandas处理连续数据

连续数据是存储为数字(整数或浮点数)的数据。
目录
《Pandas1.x实例精解》新书抢先看!
【第1篇】利用Pandas操作DataFrame的列与行
【第2篇】Pandas如何对DataFrame排序和统计
【第3篇】Pandas如何使用DataFrame方法链
【第4篇】Pandas如何比较缺失值以及转置方向?
【第5篇】DataFrame如何玩转多样性数据
【第6篇】如何进行探索性数据分析?
【第7篇】使用Pandas处理分类数据
扫码关注《Python学研大本营》,加入读者群,分享更多精彩

连 续 数 据

笔者对连续数据的广义定义是存储为数字(整数或浮点数)的数据。在分类数据和连续数据之间存在一些灰色区域。例如,年级就可以表示为数字(忽略幼儿园,或使用0表示)。在这种情况下,年级列既可以是分类的,也可以是连续的,因此,本节和5.4节“分类数据”中的技术都可以应用。

本节将检查燃油经济性数据集中的连续列。在city08列中,列出了城市道路条件下以较低速度驾驶汽车时预期的每加仑英里数。

实战操作

(1)选择数字列(通常是int64或float64)。

>>> fueleco.select_dtypes("number")

(2)使用.sample方法查看部分值。

>>> fueleco.city08.sample(5, random_state=42)
4217 11
1736 21
36029 16
37631 16
1668 17
Name: city08, dtype: int64

(3)确定缺失值的数量和百分比。

>>> fueleco.city08.isna().sum() 
>>> fueleco.city08.isna().mean() * 100 
0.0

(4)获取摘要统计信息。

>>> fueleco.city08.describe()
Name: city08, dtype: float64

(5)使用Pandas绘制直方图。

>>> import matplotlib.pyplot as plt
>>> fig, ax = plt.subplots(figsize=(10, 8))
>>> fueleco.city08.hist(ax=ax)
>>> fig.savefig(
...  "c5-conthistpan.png", dpi=300
... )

其输出结果如图5-3所示。


图5-3 Pandas直方图

(6)图5-3看起来很偏斜,因此可以增加直方图中箱子(bin)的数量,以查看偏斜是否隐藏了行为(因为偏斜会使箱子更宽)。

>>> import matplotlib.pyplot as plt
>>> fig, ax = plt.subplots(figsize=(10, 8))
>>> fueleco.city08.hist(ax=ax, bins=30)
>>> fig.savefig(
...  "c5-conthistpanbins.png", dpi=300
... )

其输出结果如图5-4所示。

图5-4 修改之后的Pandas直方图

(7)使用Seaborn创建一个分布图,其中包括直方图、核密度估计(kernel density estimation,KDE)和rug图。

>>> fig, ax = plt.subplots(figsize=(10, 8))
>>> sns.distplot(fueleco.city08, rug=True, ax=ax)
>>> fig.savefig(
...  "c5-conthistsns.png", dpi=300
... )

其输出结果如图5-5所示。

图5-5 Seaborn直方图

提示:

  • 直方图显示的是箱子。
  • KDE显示的是密度曲线。
  • rug图可以标示数据分布情况。元素出现一次,就会绘制一个小竖杠。因此,从rug的疏密可以看出元素的疏密。

原理解释

分析人员应该对数字代表的意义有良好的感觉,而研究数据的样本将使你找到这种感觉,知道某些值代表的意义。另外,我们还需要知道缺失值的情况。回想一下,当我们对列执行操作时,Pandas将忽略缺失值。

.describe方法提供的摘要统计信息非常有用,这可能是我们最喜欢的检查连续值的方法。一定要检查最小值和最大值,这对于理解数字的意义很有帮助。例如,如果在miles per gallon(每加仑英里数)这一列中的最小值出现了负值,那就很奇怪。

分位数向我们表明了数据的偏斜度。由于分位数是数据趋势的可靠指标,因此它们不受异常值的影响。

还需要注意的另一件事是无穷值,无论是正无穷还是负无穷。在我们的示例中没有出现无穷值,如果有这些值,那么它可能会导致某些数学运算或绘图失败。如果数据中包含无穷值,则需要考虑如何对这些值进行处理。Pandas的常见做法是对无穷值进行修剪和删除。

我们是绘图功能的忠实拥护者,Pandas和Seaborn都使可视化连续数据的分布变得非常容易。俗话说“一图胜千言”,这样的俗话用在数据分析领域真是再恰当不过了。

扩展知识

Seaborn库有许多汇总连续数据的选项。除distplot函数外,还有一些用于创建箱形图(box plot)、增强箱形图(boxen plot)和小提琴图(violin plot)的函数。

R语言是用于统计分析、绘图的语言和操作环境。R语言创建了一个称为字母值图(letter value plot)的图,Seaborn的作者复制了该图,但是将名称更改为增强箱形图。在增强箱形图中,它的中值(median value)是黑色线。中值以50表示,从50~0和100各划分一半,从而划分出四分位数线。箱子从上到下展示的是上四分位数(75分位数,这是箱子的上边线)、中位数(median,即箱子中间的线)和下四分位数(25分位数,这是箱子的下边线),上四分位数和下四分位数之间的距离称为四分位距(inter quartile range, IQR),也就是25~75分位数的范围。最高的块显示的就是25~75分位数的范围。在下边缘的下一个箱子是从25到该值的一半(也就是12.5),所以显示的就是12.5~25分位数。重复此模式,下一个箱子就是6.25~12.5分位数,以此类推。

小提琴图基本上是一个直方图,其另一侧翻转了一个副本。如果你有双模型直方图,则该直方图看起来像小提琴,这也是它名称的由来。

>>> fig, axs = plt.subplots(nrows=3, figsize=(10, 8))
>>> sns.boxplot(fueleco.city08, ax=axs[0])
>>> sns.violinplot(fueleco.city08, ax=axs[1])
>>> sns.boxenplot(fueleco.city08, ax=axs[2])