1 摘要
缩尾处理是在会计学数据分析中经常会用到的一种处理方式。著名的商业化统计分析软件如stat、matlab、spss等都提供了缩尾处理函数,但这些软件都是收费的。本文介绍如何使用开源的、免费的Python库SciPy提供的缩尾处理函数对数据进行缩尾处理。
2 什么是缩尾处理?
将一组数据中超出指定百分位数值的数据使用该指定百分位数保留的临近数值替换,称为缩尾处理。这么定义比较难以理解,下面举个例子说明。 如下一组数据
[9,10,7,2,1,3,5,8,4,6]
对其做下20%的缩尾处理结果为
[9,10,7,3,3,3,5,8,4,6]
其下20%百分位值为2和1,均使用3替换。同理,对其做上30%的缩尾处理结果为
[7,7,7,2,1,3,5,7,4,6]
详细的缩尾处理解释可以参考什么是winsorize处理。
3 使用SciPy进行缩尾处理
SciPy是基于python生态,用于数学、科学、工程等领域计算的开源软件包。可以处理插值、积分、优化、图像处理、常微分方程数值解的求解、信号处理等问题。点击进入SciPy主页。
SciPy由许多执行特定任务的子模块组成,其中scipy.stat模块提供了缩尾处理方法。 使用SciPy进行数据分析需要安装Python及SciPy相关的软件包,由于不同系统环境安装方法略有不同,这里对安装方法不做详细说明,可自行百度。
下面是使用SciPy进行缩尾处理的执行代码,代码中进行了注释说明。
>>> import numpy as np
>>> from scipy.stats.mstats import winsorize
>>> a = np.array([10,4,8,2,1,3,5,7,6,9])
>>> winsorize(a, limits=[0.1,0.2]) # 同时做下10%和上20%的处理
masked_array(data=[8, 4, 8, 2, 2, 3, 5, 7, 6, 8],
mask=False,
fill_value=999999)
>>> winsorize(a, limits=[0.2,0.1])# 同时做下20%,上10%的处理
masked_array(data=[9, 4, 8, 3, 3, 3, 5, 7, 6, 9],
mask=False,
fill_value=999999)
>>> winsorize(a, limits=[0.2,0]) #仅做下20%处理
masked_array(data=[10, 4, 8, 3, 3, 3, 5, 7, 6, 9],
mask=False,
fill_value=999999)