栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【Python基础进阶笔记】数据质量

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Python基础进阶笔记】数据质量

数据的质量分析 数据准确性的识别和处理
原因

1)对数据的理解有误,字段含义与理解含义不同

2)指标的统计逻辑差异

3)数据不完整、有缺失或遗漏

影响数据失真,在分析、建模的过程中会让模型出现错误结果,导致输出值不可靠 识别方法
识别方法

1)分析结果与已知的准确数据进行对比

2)相关人员进行核实(业务数据)

解决方案不断修正逻辑直到获取准确数据
数据重复值的识别和处理
原因

1)数据录入时重复录入

2)数据处理时产生了多条数据

影响数据失真,在分析、建模的过程中会让模型出现错误结果,导致输出值不可靠 识别方法
识别方法确定记录的数据主键,统计主键的出现次数
解决方案

1)如两条记录仅某个字段相同,则确定哪一条数据是准确的,删除无效数据

2)如两条完全相同,则删除其中一条

案例应用

#数据来源:阿里天池竞赛
#判断DF的列是否存在重复值 DF[列名].is_unique
data['user_id'].is_unique #False (即存在重复值)
#获得列的唯一值 DF[列名].unique()
data['user_id'].unique()

#查看重复记录的条数 len(DF[列名])-len(DF[列名].unique())
len(data['user_id'])-len(data['user_id'].unique())

去重处理

'''
DF.drop_duplicates(subset=None,keep='first',inplace=False)
subset:作为主键的列名,默认是按照所有的维度来判断是否重复
keep:保留唯一值的方法,默认保留第一条
    first保留第一条
    last保留最后一条
    False删除所有重复值
inplace:是否修改原数据'''

df=pd.DataFrame({'a':['a','b','c','d','a'],'b':['aa','bb','cc','dd','aa']})
df.drop_duplicates(subset=None,keep='first',inplace=False)
数据缺失值的识别和处理
原因

1)部分信息被遗漏

2)属性值不存在

3)数据处理时处理错误

影响数据失真,在分析、建模的过程中会让模型出现错误结果,导致输出值不可靠 识别方法,且有可能丢失大量有用信息 解决方案
解决方案

1)进行数据的重新收集

2)缺失数量较少且缺失字段很重要时,可以直接删除有缺失值的记录。缺失数量较多时,该属性不可用

3)通过补差法补入

'''
查看列是否存在缺失值:
查看某一列(Series)缺失值的数量:df[列名].isnull().sum()
查看整个数据集各列的缺失值数量:df.isnull().sum()'''
data['item_id'].isnull().sum()
data.isnull().sum()
'''
user_id               0
item_id               0
behavior_type         0
user_geohash     718581
item_category         0
time                  0
date                  0
dtype: int64'''
'''
获取存在的缺失值数据:
    按条件筛选:df[df[列名].isnull()]'''
data[data['user_geohash'].isnull()]

缺失值的处理

'''
删除缺失值:
df.drop(axis=0,how='any',subset=None,inplace=False)
axis:默认为0即按照横向处理,当某一条出现NaN时删除该行
    取值为1即按照轴向处理,...删除该列
how:默认为'any',只要存在一个NaN即删除该行/列
    取值为'all',所有的值均为NaN才删除该行/列
subset:需要进行空值判断的列名,如subset=['列名1','列名2']
inplace:在原数据进行修改,默认False为否

如果直接删除整列:del(data['列名'])

填充缺失值:
df.fillna(value=None,method=None,axis=0,inplace=False)
value:替换NaN的值
method参数的取值:{'pad','ffill','backfill','bfill',None},default None
    pad/ffill 用前一个非缺失值去填充该缺失值
    backfill/bfill 用下一个非缺失值去填充该缺失值
    None 默认,指定一个值替换缺失值,当用常数填充时选择为默认'''
数据异常值的识别和处理
解决方案

1)删除:由于录入错误、采集错误导致的少量异常值可直接删除(谨慎)

2)视为缺失值:进行填充等处理

3)保留异常

'''
查看是否存在异常值
df.boxplot(column=None,fontsize=None,rot,grid=True,by=None)
column:需要绘制箱型图的列名,默认为展示全部数字型列的箱型图
fontsize:横坐标字体大小
rot:横坐标字体的旋转角度
grid:背景网格,默认为展示
by:分组绘图的列名,设置后按照by的条件分别绘制箱型图
注:boxplot函数只适用于DataFrame类型的数据'''

#绘图结果直接展示
%matplotlib inline
data.boxplot(column=['quality'])

获取异常值

import numpy as np
'''
分位点获取
np.percentile(a,q,interpolation='linear')
a:需要进行计算的列名
q:取分位点的百分比,0-100的数字。当序列有n个数字,25则表示数字由低到高排序的n*0.25位置的述职
interpolation:当n*q的结果不是整数时,分位数的取值逻辑
当得到的分位位置介于值i到j之间时
    linear 分位数=i+(j-i)*q
    lower 取两个之中较小的值,即i
    higher 取两个之中较大的值,即j
    nearest 取位置更接近n*q的值
    midpoint 取两个值的均值,即(i+j)/2

箱型图异常值的获取
1) 计算上四分位点:Qu=np.percentile(a,q,75,interpolation='midpoint')
2) 计算下四分位点:Ql=np.percentile(a,q,25,interpolation='midpoint')
3) 计算上界:U=Qu+1.5(Qu-Ql)
4) 计算下界:U=Ql-1.5(Qu-Ql)
5) 按照条件筛选异常:df[df>U | df 

其他数据处理示例

# 对日期TRANSACTION_DT列进行处理
c_itcont['TRANSACTION_DT'] = c_itcont['TRANSACTION_DT'] .astype(str)
# 将日期格式改为年月日  7242020	
c_itcont['TRANSACTION_DT'] = [i[3:7]+i[0]+i[1:3] for i in c_itcont['TRANSACTION_DT'] ]

# 计算每个党派的所获得的捐款总额,然后排序,取前十位
c_itcont.groupby("CAND_PTY_AFFILIATION").sum().sort_values("TRANSACTION_AMT",ascending=False).head(10)
# 计算每个总统候选人所获得的捐款总额,然后排序,取前十位
c_itcont.groupby("CAND_NAME").sum().sort_values("TRANSACTION_AMT",ascending=False).head(10)
# 查看不同职业的人捐款的总额,然后排序,取前十位
c_itcont.groupby('OCCUPATION').sum().sort_values("TRANSACTION_AMT",ascending=False).head(10)
# 查看每个职业捐款人的数量
c_itcont['OCCUPATION'].value_counts().head(10)
# 每个州获捐款的总额,然后排序,取前五位
c_itcont.groupby('STATE').sum().sort_values("TRANSACTION_AMT",ascending=False).head(5)
# 查看每个州捐款人的数量
c_itcont['STATE'].value_counts().head(5)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/925938.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号