我是靠谱客的博主 执着枫叶,最近开发中收集的这篇文章主要介绍缩尾处理(winsorize)-数据分析、数据处理原理浅析一个例子说清楚怎么用Python实现一个正态分布缩尾处理的例子see also,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 原理浅析
  • 一个例子说清楚怎么用Python实现
  • 一个正态分布缩尾处理的例子
  • see also

原理浅析

和经常听到的“去掉一个最低分去掉一个最高分”操作类似,缩尾处理相当于对数据进行掐头(尾)去尾,然后再按照一定的方法填补被掐掉的数据。需要注意的是,缩尾处理并不是掐掉指定个数的数据,而是按照比例,比方说删掉前10%和后20%的数据。

一个例子说清楚怎么用Python实现

话不多说,直接搬运scipy.stats.mstats.winsorize
一个例子说的清清楚楚,而且还把轮子也搬出来了。Python调个包就能用了

>>> from scipy.stats.mstats import winsorize
>>> import numpy as np
>>> a = np.array([10, 4, 9, 8, 5, 3, 7, 2, 1, 6])
>>> 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)

代码注释:

  • 将一个从1到10的数组的顺序打乱,得到a
  • 掐掉最小的10%的数据,同时用2去替换
  • 掐掉最大的20%的数据,同时用8去替换

一个正态分布缩尾处理的例子

import numpy as np
from scipy.stats.mstats import winsorize
import matplotlib.pyplot as plt

np.random.seed(12345)
data = np.random.standard_normal(12345)
data_winsorize = winsorize(data, limits=[0.025, 0.025])
lower_band = np.percentile(data, 2.49)  # 避开临界点
upper_band = np.percentile(data, 97.51)  # 避开临界点
bins = [min(data), lower_band, -1, 0, 1, upper_band, max(data)]  # 注意区间是左闭右开,所以要避开临界点
plt.hist(
    data,
    # alpha=0.15,
    label='data',
    bins=bins,
    color='b'
)
plt.figure()
plt.hist(
    np.array(data_winsorize),
    # alpha=0.15,
    label='data_winsorize',
    bins=bins,
    color='r'
)
plt.legend()

结果如图所示
请添加图片描述

请添加图片描述

see also

  1. SciPy专栏
  2. 时间序列特征提取
  3. sklearn/scikit-learn孤立森林(IsolationForest)中decision_function和score_samples函数的区别和联系

最后

以上就是执着枫叶为你收集整理的缩尾处理(winsorize)-数据分析、数据处理原理浅析一个例子说清楚怎么用Python实现一个正态分布缩尾处理的例子see also的全部内容,希望文章能够帮你解决缩尾处理(winsorize)-数据分析、数据处理原理浅析一个例子说清楚怎么用Python实现一个正态分布缩尾处理的例子see also所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部