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