py统计量计算和异常值处理

使用NumPy计算统计量

使用NumPy库中的函数可以计算统计量,也可以使用模块scipy.stats中的函数计算统计量

NumPy库中计算统计量的函数见表

使用Pandas的DataFrame计算统计量

描述统计和统计图

计算数据频数并且画直方图的命令为

hist(x, bins=None, range=None, density=None, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False)

它将区间[min(x),max(x)]等分为bins份,统计在每个左闭右开小区间(最后一个小区间为闭区间)上数据出现的频数并画直方图。

箱线图,经验分布图,

Q-Q图:检验拟合分布,第88页

检验拟合优度

方差分析是用于两个及两个以上总体均值差别的显著性检验。例如,生产某种产品,为了使生产过程稳定,达到优质、高产,需要对影响产品质量的因素进行分析,找出有显著影响的那些因素,方差分析就是鉴别各因素效应的一种有效的统计方法。

回归方程显著性检验代码:http://t.csdn.cn/1IHUI

数据清洗

数据清洗时可以水的字:在数据处理的过程中,一般都需要进行数据的清洗工作,如数据集是否存在重复、是否存在缺失、数据是否具有完整性和一致性、数据中是否存在异常值等。当发现数据中存在如上可能的问题时,都需要有针对性地处理,本节介绍如何识别和处理重复观测、缺失值和异常值。

重复观测是指观测行存在重复的现象,重复观测的存在会影响数据分析和挖掘结果的准确性,所以在数据分析和建模之前需要进行观测的重复性检验,如果存在重复观测,还需要进行重复项的删除。

在搜集数据过程中,可能会存在重复观测的出现,例如通过网络爬虫,就比较容易产生重复数据。

检测数据集的记录是否存在重复,Pandas中使用duplicated方法,该方法返回的是数据行每一行的检验结果,即每一行返回一个bool值。使用drop_duplicates方法移除重复值。

重复值检测示例

#程序文件Pex4_26.py

import pandas as pd

a=pd.read_excel("Pdata4_26_1.xlsx")

print("是否存在重复观测:",any(a.duplicated()))  #输出:True

a.drop_duplicates(inplace=True)  #inplace=True时,直接删除a中的重复数据

f=pd.ExcelWriter('Pdata4_26_2.xlsx')  #创建文件对象

a.to_excel(f)  #把a写入新Excel文件中

f.save()       #保存文件,数据才真正写入Excel文件

数据缺失在大部分数据分析应用中都很常见,Pandas使用浮点值NaN表示浮点或非浮点数组中的缺失数据,Python内置的None值也会被当作缺失值处理。Pandas中使用方法isnull检测是否为缺失值,检测对象的每个元素返回一个bool值。

缺失值检测示例。

#程序文件Pex4_27.py

from numpy import NaN

from pandas import Series

data=Series([10.0, None, 20, NaN, 30])

print(data.isnull())  #输出每个元素的检测结果

print("是否存在缺失值:", any(data.isnull()))  #输出:True

可以看出,data数据中的第2个和第4个元素都被视为缺失值。

缺失值的处理可以采用三种方法,分别是过滤法、填充法插值法过滤法又称删除法,是指当缺失的观测比例非常低时(如5%以内),直接删除存在缺失的观测;或者当某些变量的缺失比例非常高时(如85%以上),直接删除这些缺失的变量。填充法又称替换法,是指用某种常数直接替换那些缺失值,例如,对连续变量而言,可以使用均值或中位数替换;对于离散变量,可以使用众数替换。插值法是指根据其他非缺失的变量或观测来预测缺失值,常见的插值法有线性插值法、 近邻插值法、拉格朗日插值法等。

数据过滤dropna方法的语法格式如下:

dropna(axis=0, how='any', thresh=None)

其中:

(1)axis=0表示删除行(记录);axis=1表示删除列(变量)。

(2)how参数可选值为any或all,all表示删除全有NaN的行。

(3)thresh为整数类型,表示删除的条件,如thresh=3,表示一行中至少有3个非NaN值时,才将其保留。

#程序文件Pex4_28.py

from pandas import read_excel

a=read_excel("Pdata2_33.xlsx",usecols=range(1,4))

b1=a.dropna()  #删除所有的缺失值

b2=a.dropna(axis=1, thresh=9)  #删除有效数据个数小于9的列

b3=a.drop('用户B', axis=1)      #删除用户B的数据

print(b1,'\n---------------\n',b2,'\n---------------\n',b3)

当数据中出现缺失值时,还可以用其他的数值进行填充。常用的方法是fillna,其基本语法格式为

fillna(value=None, method=None, axis=None, inplace=False)

其中value值除了基本类型外,还可以使用字典,这样可以实现对不同的列填充不同的值。method表示采用的填补数据的方法,默认是None。

#程序文件Pex4_29.py

from pandas import read_excel

a=read_excel("Pdata4_29.xlsx")

b1=a.fillna(0)  #用0填补所有的缺失值

b2=a.fillna(method='ffill')  #用前一行的值填补缺失值

b3=a.fillna(method='bfill')  #用后一行的值填补,最后一行缺失值不处理

b4=a.fillna(value={'gender':a.gender.mode()[0],   #性别使用众数替换

'age':a.age.mean(),          #年龄使用均值替换

 'income':a.income.median()}) #收入使用中位数替换

当出现缺失值时,也可以使用插值法对缺失值进行插补,插值的数学原理在第7章介绍。其中的插值方法可以使用:'linear','nearest','zero','slinear','quadratic','cubic','spline','barycentric','polynomial'。

#程序文件Pex4_30.py

from pandas import read_excel

import numpy as np

a=read_excel("Pdata4_29.xlsx")

b=a.fillna(value={'gender':a.gender.mode()[0],   #性别使用众数替换

'age':a.age.interpolate(method='polynomial', order=2),

#年龄使用二次多项式插值替换

                   'income':a.income.interpolate()}) #收入使用线性插值替换

异常值(Outlier)是指那些远离正常值的观测,即“不合群”观测。异常值的出现会对模型的创建和预测产生严重的后果。当然异常值也不一定都是坏事,有些情况下,通过寻找异常值就能够给业务带来良好的发展,如销毁“钓鱼”网站,关闭“薅羊毛”用户的权限等。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值