scipy.stats.mstats.winsorize¶
-
scipy.stats.mstats.
winsorize
(a, limits=None, inclusive=(True, True), inplace=False, axis=None)[source]¶ Returns a Winsorized version of the input array.
The (limits[0])th lowest values are set to the (limits[0])th percentile, and the (limits[1])th highest values are set to the (1 - limits[1])th percentile. Masked values are skipped.
- Parameters
- asequence
Input array.
- limits{None, tuple of float}, optional
Tuple of the percentages to cut on each side of the array, with respect to the number of unmasked data, as floats between 0. and 1. Noting n the number of unmasked data before trimming, the (n*limits[0])th smallest data and the (n*limits[1])th largest data are masked, and the total number of unmasked data after trimming is n*(1.-sum(limits)) The value of one limit can be set to None to indicate an open interval.
- inclusive{(True, True) tuple}, optional
Tuple indicating whether the number of data being masked on each side should be truncated (True) or rounded (False).
- inplace{False, True}, optional
Whether to winsorize in place (True) or to use a copy (False)
- axis{None, int}, optional
Axis along which to trim. If None, the whole array is trimmed, but its shape is maintained.
Notes
This function is applied to reduce the effect of possibly spurious outliers by limiting the extreme values.
Examples
>>> from scipy.stats.mstats import winsorize
A shuffled array contains integers from 1 to 10.
>>> a = np.array([10, 4, 9, 8, 5, 3, 7, 2, 1, 6])
The 10% of the lowest value (i.e., 1) and the 20% of the highest values (i.e., 9 and 10) are replaced.
>>> winsorize(a, limits=[0.1, 0.2]) masked_array(data=[8, 4, 8, 8, 5, 3, 7, 2, 2, 6], mask=False, fill_value=999999)