精华内容
下载资源
问答
  • Python 异常值分析

    2021-03-06 04:11:13
    忽视异常值的存在是十分危险的,不加剔除地把异常值包括进数据的计算分析过程中,对结果产生不良影响;重视异常值出现,分析其产生的原因,常常成为发现问题进而改进决策的契机。异常值是指样本中的个别值,其...

    异常值分析是检验数据是否有录入错误以及含有不合常理的数据。忽视异常值的存在是十分危险的,不加剔除地把异常值包括进数据的计算分析过程中,对结果会产生不良影响;重视异常值的出现,分析其产生的原因,常常成为发现问题进而改进决策的契机。

    异常值是指样本中的个别值,其数值明显偏离其余的观测值。异常值也称为离群点,异常值的分析也称为离群点分析。

    (1)简单统计量分析

    可以先对变量做一个描述性统计,进而查看哪些数据是不合理的。最常用的统计量是最大值和最小值,用来判断这个变量的取值是否超出了合理的范围。如客户年龄的最大值为199岁,则该变量的取值存在异常。

    (2)3原则

    如果数据服从正态分布,在3原则下,异常值被定义为一组测定值中与平均值的偏差超过3倍标准差的值。在正态分布的假设下,距离平均值3之外的值出现的概率为P(|x-|>3)≤0.003,属于极个别的小概率事件。

    如果数据不服从正态分布,也可以用远离平均值的多少倍标准差来描述。

    (3)箱型图分析

    箱型图提供了识别异常值的一个标准:异常值通常被定义为小于QL-1.5IQR或大于QU+1.5IQR的值。QL称为下四分位数,表示全部观察值中有四分之一的数据取值比它小;QU称为上四分位数,表示全部观察值中有四分之一的数据取值比它大;IQR称为四分位数间距,是上四分位数QU与下四分位数QL之差,其间包含了全部观察值的一半。

    箱型图依据实际数据绘制,没有对数据作任何限制性要求(如服从某种特定的分布形式),它只是真实直观地表现数据分布的本来面貌;另一方面,箱型图判断异常值的标准以四分位数和四分位距为基础,四分位数具有一定的鲁棒性:多达25%的数据可以变得任意远而不会很大地扰动四分位数,所以异常值不能对这个标准施加影响。由此可见,箱型图识别异常值的结果比较客观,在识别异常值方面有一定的优越性,如图3-1所示。

    2998d75c34a3

    如下数据:

    日期 2015/2/10 2015/2/11 2015/2/12 2015/2/13 2015/2/14

    销量额 2742.8 3014.3 865 3036.8

    我们对其进行异常值分析

    import pandas as pd

    catering_sale = 'data2.xls' #餐饮数据

    data = pd.read_excel(catering_sale, index_col = u'日期') #读取数据,指定“日期”列为索引列

    import matplotlib.pyplot as plt #导入图像库

    plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签

    plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号

    plt.figure() #建立图像

    p = data.boxplot() #画箱线图,直接使用DataFrame的方法

    x = p['fliers'][0].get_xdata() # 'flies'即为异常值的标签

    y = p['fliers'][0].get_ydata()

    y.sort() #从小到大排序,该方法直接改变原对象

    #用annotate添加注释

    #其中有些相近的点,注解会出现重叠,难以看清,需要一些技巧来控制。

    #以下参数都是经过调试的,需要具体问题具体调试。

    for i in range(len(x)):

    if i>0:

    plt.annotate(y[i], xy = (x[i],y[i]), xytext=(x[i]+0.05 -0.8/(y[i]-y[i-1]),y[i]))

    else:

    plt.annotate(y[i], xy = (x[i],y[i]), xytext=(x[i]+0.08,y[i]))

    plt.show()

    展开全文
  • 数据预处理之异常值(python)

    千次阅读 2021-02-10 11:26:04
    除了缺失值外,异常值也是数据中常有的噪音,但并非异常值都需要被处理,异常值出现的原因有很多,结合实际业务,他们往往可以被分为“真异常”和“假异常”。有时特定业务动作的变化引发“真异常”,此时异常值...

    除了缺失值外,异常值也是数据中常有的噪音,但并非异常值都需要被处理,异常值出现的原因有很多,结合实际业务,他们往往可以被分为“真异常”和“假异常”。

    有时特定业务动作的变化会引发“真异常”,此时异常值反应的是真实情况,如果直接处理掉,可能就错失了信息。与缺失值处理的过程类似,在进行异常分析之前,需要进行数据读取与简单描述统计。

    笔记大纲:

    ~~·数据读取

    ~~·数据概览

    ~~·异常值识别

    ~~·异常值处理

    1、数据读取

    导入excel数据,这里的数据来源于“猴子聊人物”所发布的数据资料。

    百度网盘:https://pan.baidu.com/s/14Ulh_S1JqZUAD02-M_3Zlw

    提取码:wg18

    >>> import pandas as pd

    >>> import numpy as np

    >>> data = pd.read_excel('朝阳医院2018年销售数据.xlsx', header=0, sheetname=0)

    # header表示读取第一行作为列名,sheetname为读取sheet1,你也可以直接用sheet的名字

    2、数据概览

    在进行数据读取之后,我们需要查看数据的基本结构,包含但不限于行列数(名)、数据类型、数据分布等。

    # 查看行列数

    >>> data.shape

    (6578, 7)

    # 查看前10行数据

    >>> data.head(10)

    购药时间 社保卡号 商品编码 商品名称 销售数量 应收金额 实收金额

    0 2018-01-01 星期五 1.616528e+06 236701.0 强力VC银翘片 6.0 82.8 69.00

    1 2018-01-02 星期六 1.616528e+06 236701.0 清热解毒口服液 1.0 28.0 24.64

    2 2018-01-06 星期三 1.260283e+07 236701.0 感康 2.0 16.8 15.00

    3 2018-01-11 星期一 1.007034e+10 236701.0 三九感冒灵 1.0 28.0 28.00

    4 2018-01-15 星期五 1.015543e+08 236701.0 三九感冒灵 8.0 224.0 208.00

    5 2018-01-20 星期三 1.338953e+07 236701.0 三九感冒灵 1.0 28.0 28.00

    6 2018-01-31 星期日 1.014649e+08 236701.0 三九感冒灵 2.0 56.0 56.00

    7 2018-02-17 星期三 1.117733e+07 236701.0 三九感冒灵 5.0 149.0 131.12

    8 2018-02-22 星期一 1.006569e+10 236701.0 三九感冒灵 1.0 29.8 26.22

    9 2018-02-24 星期三 1.338953e+07 236701.0 三九感冒灵 4.0 119.2 104.89

    # 数值型数据的分布情况

    >>> data.describe()

    社保卡号 商品编码 销售数量 应收金额 实收金额

    count 6.575000e+03 6.575000e+03 6575.000000 6575.000000 6575.000000

    mean 6.092179e+09 1.015458e+06 2.385095 50.478935 46.321582

    std 4.889081e+09 5.126518e+05 2.373702 87.607883 80.987682

    min 1.616528e+06 2.367010e+05 -10.000000 -374.000000 -374.000000

    25% 1.014234e+08 8.614560e+05 1.000000 14.000000 12.320000

    50% 1.001650e+10 8.615070e+05 2.000000 28.000000 26.600000

    75% 1.004882e+10 8.689265e+05 2.000000 59.600000 53.000000

    max 1.283612e+10 2.367012e+06 50.000000 2950.000000 2650.000000

    销售数量、应收金额和实收金额存在负数,且金额字段离散程度较大。

    3、异常值识别

    异常值的测量标准有很多,比较常见的是描述性统计法、三西格玛法、箱型图等:

    ①描述性统计:比如在之前的数据概览步骤中,基于描述性统计方法,发现销售数量等字段存在负数,这与基本认知是不符的。

    >>> neg_list = ['销售数量', '应收金额', '实收金额']

    >>> for item in neg_list:

    ... neg_item = data[item]<0

    ... print(item + '小于0的有' + str(neg_item.sum()) + '个')

    ...

    销售数量小于0的有16个

    应收金额小于0的有16个

    实收金额小于0的有16个

    # 此处将小于0的记录删除

    >>> for item in neg_list:

    ... for i in range(0, len(data)):

    ... if data[item][i]<0:

    ... data = data.drop(i)

    ... neg_item = data[item]<0

    ... print(item + '小于0的有' + str(neg_item.sum()) + '个')

    ...

    销售数量小于0的有0个

    应收金额小于0的有0个

    实收金额小于0的有0个

    ②三西格玛:当数据服从正态分布时,99%的数值应该位于距离均值3个标准差之内的距离,P(|x−μ|>3σ)≤0.003,当数值超出这个距离,可以认为它是异常值。

    >>> for item in neg_list:

    ... data[item + '_zscore'] = (data[item] - data[item].mean())/data[item].std()

    ... z_abnormal = abs(data[item + '_zscore'])>3

    ... print(item + '中有' + str(z_abnormal.sum()) + '个异常值')

    ...

    销售数量中有190个异常值

    应收金额中有98个异常值

    实收金额中有106个异常值

    ③箱型图:IQR(差值) = U(上四分位数) - L(下四分位数)

    上界 = U + 1.5IQR

    下界 = L-1.5IQR

    >>> for item in neg_list:

    ... iqr = data[item].quantile(0.75) - data[item].quantile(0.25)

    ... q_abnormal_L = data[item] < data[item].quantile(0.25) - 1.5 * iqr

    ... q_abnormal_U = data[item] > data[item].quantile(0.75) + 1.5 * iqr

    ... print(item + '中有' + str(q_abnormal_L.sum() + q_abnormal_U.sum()) + '个异常值')

    ...

    销售数量中有974个异常值

    应收金额中有513个异常值

    实收金额中有537个异常值

    4、异常值处理

    对于异常值,可以删除、可以不处理,也可以将其当做缺失值,采用缺失值的处理办法。

    对于离散程度过大的字段,也可以采取对数转化、分类数据转化等方法,减轻或消除异常值带来的影响,但同时这也意味着可能损失部分数据信息。

    展开全文
  • 2016-05-12 回答箱线图(boxplot)也称箱须图(box-whisker plot),用于反映一组或多组连续型...“箱”两端的“须”一般最大与最小值,如果资料两端变化较大,两端也可采用p99.5与p0.5、p99与p1或p97.5与p2.5。大...

    2016-05-12 回答

    箱线图(boxplot)也称箱须图(box-whisker plot),用于反映一组或多组连续型定量数据分布的中心位置和散布范围。箱线图的中心位置为

    (第百分之五十位数,p50);中部的“箱”范围为四分位间距(即p75 -

    p25 );“箱”两端的“须”一般为最大值与最小值,如果资料两端值变化较大,两端也可采用p99.5与p0.5、p99与p1或p97.5与p2.5。大家可根据数据的波动情况作出选择。

    例:某研究者分别采用

    10mg、

    20mg 治疗三个随机分组的阻塞性

    病人,每组100 例,治疗两周后测量最大呼气量(forced

    expiratory volume,

    fev)。每组测量后计算获得的p100、p75、p50、p25、p0(即最大值、75%

    、25%

    、最小值**)(见下图),试绘制箱线图。

    三种方案治疗阻塞性

    后的最大呼气量箱线图

    绘制箱线图需要借助于股价图中的“开盘-盘高-盘低-收盘图”,该图形需要将数据按一定的顺序排列。因此绘制箱线图时也需要将数据按p25、p100、p0、p50、p75的顺序排列(p25与p75的顺序可对调)。具体绘制步骤如下:

    ①选取单元格区域a1:d5,单击“图表向导”图标,在弹出的“图表类型”对话框中选中股价图的“开盘-盘高-盘低-收盘图”(第2

    个子图表类型),按下一步键。

    ②在图表

    对话框的数据区域中将“系列产生在”修改为“行”,按下一步键。

    ③在“图表选项”对话框的分类(x)轴下方填入“治疗组”,在数值(y)轴下方填入“最大呼气量(fev)”,按完成键。

    ④在绘图区点击右键,选取“

    →系列→添加”,在“名称”右侧用鼠标选取单元格a6,在“值”右侧用鼠标选取单元格区域b6:d6 按确定键。

    ⑤在

    线上点击右键,“清除”

    线;在绘图区单击右键“清除”背景色。

    ⑥在横坐标上单击右键,选取“

    格式→图案”,右上部主要刻度线类型复选“无”,按确定键。

    ⑦在纵坐标上单击右键,选取“

    格式→数字→数值”,小数位数改为“0”,按确定键。

    ⑧在箱的中心位置p50 系列标志上单击右键,选取“数据系列格式→图案”,在界面右侧数据标记的样式处选取“+”,前景颜色处选黑色,“大小”改为6

    磅,按确定键;在箱线图的顶部p100系列标志上单击右键,选取“数据系列格式→图案”,在界面右侧数据标记的样式处选取长横线“-”,前景颜色处选黑色,“大小”改为6

    磅,按确定键;在箱线图的底部p0系列标志上单击右键,选取“数据系列格式→图案”,在界面右侧数据标记的样式处选取长横线“-”,前景颜色处选黑色,“大小”改为6

    磅,按确定键。

    ⑨适当调整绘图区的大小,调整整个图表区域的字体大小,去除图表区的边框等,可获得上图右侧的箱线图。

    -----------------------------------------------

    注**:这五个值可以在excel中用quartile(array,quart)函数求得。由此处也可知,用excel作箱线图实际上也是一种间接的方式,并不是像spss等软件那样直接生成,从统计的角度来说,更重要的是这种方法不考虑outliers,所以与其他软件作出来的图可能并不一样。

    展开全文
  • pandas 数据清洗与异常值处理

    千次阅读 2021-01-18 23:05:40
    一:检测与处理缺失的操作 创建一个表格 import pandas as pd import numpy as np data = pd.DataFrame({ "goods":["苹果","香蕉","芒果","猕猴桃","榴莲"], "price":[3.5, 2, np.NAN, 3, np.NAN], "num":[np....

    一:检测与处理缺失值的操作

    创建一个表格

    import pandas as pd
    import numpy as np
    
    data = pd.DataFrame({
        "goods":["苹果","香蕉","芒果","猕猴桃","榴莲"],
        "price":[3.5, 2, np.NAN, 3, np.NAN],
        "num":[np.NAN, 41, 20, 12, np.NAN]
    })
    
    1. isnull

    判断元素时空值,如果是空值返回True,不是空值则返回False

    # 判断df中的元素是否为空,返回一个bool类型的df
    print(data.isnull())
    
    # 结果
       goods  price    num
    0  False  False   True
    1  False  False  False
    2  False   True  False
    3  False  False  False
    4  False   True   True
    
    # 计算空值个数
    print(data.isnull().sum())
    
    # 结果
    goods    0
    price    2
    num      2
    dtype: int64
    
    1. notnull

    判断元素不是空值的方法,如果是空值返回False,不是空值返回True

    # 判断df中的元素是否不为空,返回一个bool类型的df
    print(data.notnull())
    
    # 结果
       goods  price    num
    0   True   True  False
    1   True   True   True
    2   True  False   True
    3   True   True   True
    4   True  False  False
    
    # 计算非空值个数
    data.notnull().sum()  # 相当于data.count
    
    # 结果
    goods    5
    price    3
    num      3
    dtype: int64
    
    1. fillna

    填充空值的方法

    格式:fillna({“列索引”:“修改值”,…})

    参数:

    limit,限制修改的个数,默认为None值,修改全部

    inplace,是否在原表上修改,默认为False,不在原表修改,有返回值

    # 填充每一列的第一个空值
    res = data.fillna({"price":4,"num":0},limit=1,inplace=False)
    print(res)
    
    # 结果
      goods  price   num
    0    苹果    3.5   0.0
    1    香蕉    2.0  41.0
    2    芒果    4.0  20.0
    3   猕猴桃    3.0  12.0
    4    榴莲    NaN   NaN
    
    1. dropna

    how:为any时表示有空则删,为all时全为空才删除

    thresh:阈值,当这一行的非空数目小于thresh值时进行删除

    subset:指定字段进行判断后删除

    # 删除含有空值的行
    res2 = data.dropna(axis=0,how="any")
    print(res2)
    
    # 结果
      goods  price   num
    1    香蕉    2.0  41.0
    3   猕猴桃    3.0  12.0
    
    
    # 如果price和num这两列的值都为空时则删除这一行数据
    res2 = data.dropna(subset=["price","num"],axis=0,how="all")
    print(res2)
    
    # 结果
      goods  price   num
    0    苹果    3.5   NaN
    1    香蕉    2.0  41.0
    2    芒果    NaN  20.0
    3   猕猴桃    3.0  12.0
    

    二:处理缺失值方法

    插值法

    • 线性插值:要求x,y之间满足线性关系,即满足y = kx + b

      只能在规定的x范围内插值

      import numpy as np
      from scipy.interpolate import interpld
      
      # y = (x+1) * 2
      x = np.array([0,1,2,3,5])
      y = np.array([2,4,6,8,12])
      Linear1 = interp1d(x,y,kind="linear")
      print(Linear1([4]))  # 此处传入的参数只能在x的范围内
      print(Linear1([4.5]))  # 可传入小数,因为它是先推导表达式,然后传值进行计算的
      
      # 结果
      [10.]
      [11.2]
      
    • 多项插值的方法:利用已知的值,拟合一个多项式(拉格朗日插值,牛顿插值)

      from scipy.interpolate import lagrange
      
      # y1 = 2 * (x1+1)**2,且在5和6的位置上缺失两个值
      x1 = [0,1,2,3,4,7,8,9]
      y1 = [2,8,18,32,50,128,162,200]
      Larg = lagrange(x1,y1)
      print(Larg([5,6]))
      
      # 结果
      [72. 98.]
      

      总结:用非线性函数拟合线性的数据是可以的,但是用线性函数拟合非线性的数据,结果会很差。

    三:检测与处理重复值

    • 记录重复

      # 创建表格
      df = pd.DataFrame({
      	"name":["zs","ls","ww","zs"],
      	"id":[1,2,3,1],
      	"age":[12,15,12,12]
      })
      
      # 当二维表格不传入subset参数时,默认以整行为比较单位
      ret = df.drop_duplicates(subset=["name","age"])
      print(ret)
      
      # 结果
        name  id  age
      0   zs   1   12
      1   ls   2   15
      2   ww   3   12
      
    • 特征重复

      需要是连续型数值,通过相似度的方法判定两列值是否具有某种关系,得到的值的范围为-1~1,越靠近1则表示相关性越强

      参数:

      • method

        ​ pearson:皮尔森相关性系数

        ​ kendall:肯德尔相关性系数

        ​ spearman:斯皮尔曼相关性系数

      # 方法一
      ret = df[["id","age"]].corr(method="kendall")
      print(ret)
      
      
      # 结果
                 id       age
      id   1.000000  0.258199
      age  0.258199  1.000000
      
      
      # 方法二
      ret = df[["id","age"]].corr(method="spearman")
      print(ret)
      
      # 结果
                 id       age
      id   1.000000  0.272166
      age  0.272166  1.000000
      

      注:这个方法只能处理数值型,不能处理类别型。类型型特征之间是无法通过相关系数来计算相似度的。

    • 哑变量处理

      将类别型数据转化为数值型数据

      返回的数据类型是一个df矩阵,类似于一个稀疏矩阵,one-hot编码

      ret = pd.get_dummies(df["name"])
      print(ret)
      
      # 结果
         ls  ww  zs
      0   0   0   1
      1   1   0   0
      2   0   1   0
      3   0   0   1
      

    四:异常值处理

    异常值是指我们的数据中个别数值明显偏离其余数值的数据,也称为离群点

    检测异常值就是检测数据中是否录入错误以及是否有不合理的数据

    • 3σ原则:[拉伊达准则]

      该法则就是假设一组检验数据只有随机误差,对原始数据进行计算处理得到标准差。按照一定的概率确定一个区间,认为误差超过这个区间就属于异常值。3σ原则仅适用于服从正态分布或者近似正态分布的数据。

      μ - 3 σ < x < μ + 3σ,为正常区间数据,此区间的概率值为0.9973

      # 创建表格
      df = pd.DataFrame({
          "name":["zs","ls","ww","zl","aq","xm"],
          "weight":[168,174,181,155,170,172]
          })
      
      # 定义3σ原则表达式
      min_mask = df["weight"] < (df["weight"].mean() - 3 *  df["weight"].std())
      max_mask = df["weight"] > (df["weight"].mean() + 3 * df["weight"].std())
      # 只要满足上诉表达式的任一个就为异常值,所以这里使用位与运算
      mask = min_mask | max_mask
      print(df.loc[mask,"weight"])
      
      # 结果
      # 没有不符合3σ表达式的值,即无异常值
      Series([], Name: weight, dtype: float64)
      
    • 根据项目场景自定义阈值范围

    五:连续数据离散化

    分析一个问题时,某些特征是连续的,比如:年龄

    • 等宽法

      尽力要求区间宽度是一致的,但是落到每个区间内的频数就不能保持一致的,用此方法更多的是关注区间的宽度。最终会得到一个一维数组

      参数:

      bins,表示区间,当bins中传入数值型的时候,表示区间的个数;当bins中传入列表时,为自定义分割的区间

      right=False,改变区间的封闭方向,由右改为左

      labels=[item1,item2,…],使用自定义的分箱名称,这样就不只显示数字了

      precision=n,整数自动分箱时的精度

      方法:

      ret.codes,显示数据在对应的区间索引

      ret.categories,显示分类区间的详细信息

      pd.value_counts(ret),显示各分段的数量

      # 创建表格
      df = df.DataFrame({
      	"name":["zs","ls","ww","zl","xm","lh"],
      	"age":[26,54,33,10,43]
      })
      
      # bins为整数型时,将年龄分为3个区间
      ret = pd.cut(df3["age"],bins = 3)
      
      # 结果
      0     (22.0, 38.0]
      1     (38.0, 54.0]
      2     (22.0, 38.0]
      3    (5.952, 22.0]
      4     (38.0, 54.0]
      5    (5.952, 22.0]
      Name: age, dtype: category
      Categories (3, interval[float64]): [(5.952, 22.0] < (22.0, 38.0] < (38.0, 54.0]]
      	
      
      # 自定义区间
      ret2 = pd.cut(df3["age"],bins=[0,20,40,60])
      print(ret2)
      
      # 结果
      0    (20, 40]
      1    (40, 60]
      2    (20, 40]
      3     (0, 20]
      4    (40, 60]
      5     (0, 20]
      Name: age, dtype: category
      Categories (3, interval[int64]): [(0, 20] < (20, 40] < (40, 60]]
      
    • 等频法

      尽力使得数据能够均匀落到每个区间

      参数:

      q:当q传入数值型时,为区间的个数;当q传入一个列表时,列表中必须为分位数,为自定义区间

      # q为数值型时,表示区间的个数
      ret3 = pd.qcut(df3["age"],q=3)
      print(ret3)
      
      # 结果
      0    (5.999, 29.5]
      1     (29.5, 54.0]
      2     (29.5, 54.0]
      3    (5.999, 29.5]
      4     (29.5, 54.0]
      5    (5.999, 29.5]
      Name: age, dtype: category
      Categories (2, interval[float64]): [(5.999, 29.5] < (29.5, 54.0]]
      
      # q传入一个列表,为自定义区间
      ret4 = pd.qcut(df3["age"],q=[0, 0.3, 1])
      print(ret4)
      
      # 结果
      (21.5, 54.0]     4
      (5.999, 21.5]    2
      Name: age, dtype: int64
      

      等频与等差的区别:

      ​ 传入一个整数型时,等宽会照数组中的最大值和最小值平均分成5份,即分为5个区间,等频是先划分出5个区间并保证区间内的值个数相等,在满足频数的条件下再设置每个区间的开头和结尾值;传入一个列表时,等宽中的列表值即是每个区间的开头和结尾值,而等频中,列表中的值确定的是每个区间的个数,然后根据区间的个数确定每个区间的开头和结尾值。

    六:数据标准化

    当样本数据中属性的量纲差别很大的时候,相似度的计算结果就会完全由数值大的属性支配。

    1. 离差标准化

      x` = (x-min) / (max-min)

      x`的范围:0~1

      缺点

      • 标准化的数据不能取值完全一样。如果取值完全一样,则分母为0,公式不成立。
      • 该方法完全取决于max和min值,当max或min值为异常值的时候,标准化不准确,可能出现趋于0的情况。
      import numpy as np
      import pandas as pd
      
      x = pd.Series([-10, 20, 15, 16, 18, 21, 12])
      def get_transform(x):
      	new_x = (x-x.min()) / (x.max()-x.min())
      	return new_x
      x.transform(get_transform)
      
    2. 标准差标准化

      x` = (x-u) / σ 【u:均值,σ:标准差】

      标准差标准化之后的数据满足:u = 0, σ=1

      x` 范围为:负无穷~正无穷

      import numpy as np
      import pandas as pd
      
      x = pd.Series([-10, 20, 15, 16, 18, 21, 12])
      def get_transform(x):
      	new_x = (x-x.mean()) / x.std()
      	return new_x
      x.transform(get_transform)
      
    3. 小数定标标准化

      x` = x / 10k

      x`的范围通常设定在 -1~1 之间

      k值的确定:k = np.ceil(np.log10(x.abs().max()))

      缺点

      • 当出现异常值时,就会出现较大的误差
      import numpy as np
      import pandas as pd
      
      x = pd.Series([-10, 20, 15, 16, 18, 21, 12])
      def get_transform(x):
      	k = np.ceil(np.log10(x.abs().max()))
      	return x/10**k
      x.transform(get_transform)
      
    展开全文
  • 前言异常值是指样本中的个别值,也称为离群点...3σ)≤0.003,在正太分布假设下,大于3σ的值出现的概率小于0.003,属于小概率事件,故可认定其为异常值异常值分析是检验数据是否有录入错误以及含有不合常理的数据...
  • 在建模时,清理数据样本非常重要,这样做可以确保观察结果充分代表问题。...学完本教程,你将明白:数据集中出现的不太可能的观察值往往就是异常值异常值出现有很多种原因。标准差可用于识别符...
  • type='dict') #画箱线图,直接使用DataFrame的方法 x = p['fliers'][0].get_xdata() # 'flies'即为异常值的标签 y = p['fliers'][0].get_ydata() y.sort() #从小到大排序,该方法直接改变原对象 #用annotate添加注释...
  • serif'] = ['SimHei'] #指定字体黑体 plt.rcParams['axes.unicode_minus'] = False #显示负号 plt.figure() p = data.boxplot(return_type='dict') #画箱式图 x = p['fliers'][0].get_xdata() #fliers为异常值标签...
  • 数据处理之异常值处理

    千次阅读 2021-03-17 19:52:39
    虽然异常值不常出现,但是又对实际项目分析有影响,造成结果的偏差,所以在数据挖掘的过程中不能不重视。 异常值出现的原因 数据集中的异常值可能是由于传感器故障、人工录入错误或异常事件导致。如果忽视这些异常...
  • 如何用SPSS探测及检验异常值一、采用数据探索过程探测异常值SPSS菜单实现程序:主菜单–>“Analyze”–>“DescriptiveStatistics”–>“Explore……”选项–>“Statistics”按钮–>选中“Outliers”...
  • 异常值是指样本中出现的“极端值”,数据值看起来异常大或异常小,其分布明显偏离其余的观测值。异常值分析是检验数据中是否存在不合常理的数据,在数据分析中,既不能忽视异常值的存在,也不能简单地把异常值从数据...
  • 原标题:Python数据处理:异常值处理方法之3σ原则一、3σ原则定义异常值是指样本中的个别值,其数值明显偏离其余的观测值。异常值也称离群点,异常值的分析也称为离群点的分析。在进行机器学习过程中,需要对数据集...
  • pl.figure()#建立图像 p=date.boxplot(return_type=‘dict‘)#画箱线图,直接使用DataFrame的方法 #特别是boxplot 里必须添加需要的类型 x=p[‘fliers‘][0].get_xdata()#‘fliers‘即为异常值标签 y=p[‘fliers‘]...
  • 1一、图纸巨大或有大量冗余数据,导致开图的时候内存耗尽,最终导致CAD软件...如果用的32位CAD,当CAD内存使用超过1.5G,CAD通常直接退出,如果内存占用1.2G以上,也许能打开,但可能在操作图纸的时候仍有可能退...
  • 缺失处理: 造成数据缺失的原因是多方面的,主要可能有以下几种: 有些信息暂时无法获取,致使一部分属性空缺出来。 有些信息因为一些人为因素而丢失了。 有些对象的某个或某些属性是不可用的。如一个未婚者的...
  • 急!!!java用poi导出excel文件,打开导出的文件时报错“文件错误,数据可能丢失”我...2到管理版本,鼠标放在管理版本处,“恢复未保存的工作簿”。也可以直接点击上方“今天没保存时就关闭”,可以直接跳出当...
  • python数据分析实战之异常值处理

    千次阅读 2021-09-17 09:28:44
    异常值处理1、异常值定义2、异常值处理方式3、实战 1、异常值定义 2、异常值处理方式 3、实战
  • 异常值检测与告警一直是工业界非常关注的问题,自动准确地检测出系统的异常值,不仅可以节约大量的人力物力,还能尽早发现系统的异常情况,挽回不必要的损失。个推也非常重视大数据中的异常值检测,例如在运维部门的...
  • 问题:layui上传图片经常出现“请求上传接口出现异常”的提示,PC端没有问题,这个问题出现在移动端,小图片没有问题,稍微大一点的图片(大概超过500K左右)就出现这个问题,困扰我很长时间。下面就来说一下解决的...
  • 为什么会出现这种情况?相信不少网友都不怎么了解,对于这一块还不是太了解的小伙伴,一起随易玩网小编了解一下吧.微信零钱的钱可以用作发红包,可以转账,也可以提现,这个大家都是知道的,现在我要说的是有绑定...
  • 上一篇文章简单学习了什么是数据,这次来看看什么是统计指标,进一步了解更多数据分析相关的基础知识。什么是统计指标体现总体数量特征的概念和数值根据数据分析的目的不同,统计指标也变化“分析招...
  • PySpark时间序列缺失值填充与异常值修复
  • Win键+R,输入 sysdm.cpl 回车--高级--性能--设置--高级--更改--自定义大小--初始大小、最大:2900、5800(2G内存3400、6800,XP则2046、4092;8G及以上则无需太大)--设置,一直“确定”至重启电脑。 3、网卡...
  • win7电脑玩CF为什么老是提示游戏环境异常请重启机器后再试?win7电脑玩CF为什么老是提示游戏环境异常请重启机器后再试? 伴随着win7 64位旗舰版电脑的兼容性越来越好,许多用户也开始放弃了已经退出历史舞台的XP系统,转...
  • png图像有的可能包含透明通道,包含透明通道的png格式图像转换成jpg格式图像时,会出现异常的颜色。非通过直接修改扩展名的方法,读取后又保存的。直接通过修改扩展名的方法读取保存后没有异常,但是本质没改变。 ...
  • R语言-如何处理回归中的异常值点异常观测值一个全面的回归分析要覆盖对异常值的分析,包括离群点、高杠杆值点和强影响点。这些数据点需要更深入的研究,因为它们在一定程度上与其他观测点不同,可能对结果产生较大的...
  • 在大部分的数据分析里面,直接获取的数据都会存在一些问题,比如缺失值,异常值等,在进行深度分析前都需要对这些数据进行预处理。 读取并初步查看数据 读取数据后查看数据特征列, 首先筛选出分析所需要的列,然后...
  • gradient nan可能原因: 梯度爆炸 学习率太大 数据本身有问题 backward时,某些方法造成0在分母上, 如:...# 反向传播时检测是否有异常值,定位code with torch.autograd.detect_anomaly(): loss.backward() ...
  • 前天参加面试的时候被问了一个题:选择什么样的指标...如果数据的异常值、极端异常值比较多,那么尽可能使用中位数;如果没有太明显的异常值,平均数更具有代表性。那这里就引申出一个问题,异常值的识别。异常值(o...
  • 《Python数据分析、挖掘与可视化》教学大纲(参考) =============== 箱线图是一种用来描述数据分布的统计图形,方便观察数据的中位数、中值、四分位数、最大值(或上边缘)、最小值(或下边缘)和异常值等描述性...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 772,534
精华内容 309,013
关键字:

为什么会出现异常值