文章目录

  • 1.数据预处理概述
  • 2.数据可视化实例
    • 2.1
    • 2.2
  • 2.3
  • 3.数据清洗
    • 3.1缺失值处理
    • 3.2噪声平滑
    • 3.3异常值的检测与处理

1.数据预处理概述

数据预处理的主要作用是为将未经处理的原始数据转换为在数量、结构和格式方面完全适合于对应的数据挖掘任务的干净数据,数据预处理是一种已被证明上述问题的有效方法。
数据预处理主要包括数据清理、数据集成、数据变换、数据归约4种基本过程。
图形显示有助于可视化地审视数据,利于识别噪声和离群点,对数据预处理是相当有用的。

2.数据可视化实例

使用Kaggle的房价预测竞赛的数据集

2.1

首先,将用到的库都包含进来,numpy和pandas用于数据处理,matplotlib和seaborn用于可视化操作。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns #统计建模
from sklearn.preprocessing import StandardScaler
from scipy.stats import norm
from scipy import stats #统计
import warnings
warnings.filterwarnings('ignore')
%matplotlib inline

之后载入数据集

df_train = pd.read_csv('kaggle_house_pred_train.csv')

载入后即可以查看数据列名,也就是数据的不同属性

df_train.columns
Index(['Id', 'MSSubClass', 'MSZoning', 'LotFrontage', 'LotArea', 'Street','Alley', 'LotShape', 'LandContour', 'Utilities', 'LotConfig','LandSlope', 'Neighborhood', 'Condition1', 'Condition2', 'BldgType','HouseStyle', 'OverallQual', 'OverallCond', 'YearBuilt', 'YearRemodAdd','RoofStyle', 'RoofMatl', 'Exterior1st', 'Exterior2nd', 'MasVnrType','MasVnrArea', 'ExterQual', 'ExterCond', 'Foundation', 'BsmtQual','BsmtCond', 'BsmtExposure', 'BsmtFinType1', 'BsmtFinSF1','BsmtFinType2', 'BsmtFinSF2', 'BsmtUnfSF', 'TotalBsmtSF', 'Heating','HeatingQC', 'CentralAir', 'Electrical', '1stFlrSF', '2ndFlrSF','LowQualFinSF', 'GrLivArea', 'BsmtFullBath', 'BsmtHalfBath', 'FullBath','HalfBath', 'BedroomAbvGr', 'KitchenAbvGr', 'KitchenQual','TotRmsAbvGrd', 'Functional', 'Fireplaces', 'FireplaceQu', 'GarageType','GarageYrBlt', 'GarageFinish', 'GarageCars', 'GarageArea', 'GarageQual','GarageCond', 'PavedDrive', 'WoodDeckSF', 'OpenPorchSF','EnclosedPorch', '3SsnPorch', 'ScreenPorch', 'PoolArea', 'PoolQC','Fence', 'MiscFeature', 'MiscVal', 'MoSold', 'YrSold', 'SaleType','SaleCondition', 'SalePrice'],dtype='object')

可以看到一共81个属性,从属性的字面含义与数据存储形式,分析数据类型,可以大致将数据分为numerical(数值型)和categorical(类别型)。例如,SalePrice(商品售价)为典型的数值类型,SaleType(销售类型)为典型的标称属性等。

2.2

接下来,用describe()函数进行数据的快速统计汇总,可以查看数据的总体统计情况(也是箱线图所需数据)

df_train['SalePrice'].describe()
count      1460.000000
mean     180921.195890
std       79442.502883
min       34900.000000
25%      129975.000000
50%      163000.000000
75%      214000.000000
max      755000.000000
Name: SalePrice, dtype: float64

还可以绘制直方图来初步SalePrice(房屋售价)属性的数据分布。横轴为销售价格,纵轴为数据的频道,可以从图中看出房屋售价的大致情况。

sns.distplot(df_train['SalePrice'])

2.3

绘制OverallQual(总体质量)/SalePrice(房屋售价)的箱线图,该图可以显示一组数据的最大值、最小值、中位数及上下四分位数,还有异常值,它比四分位更加全面。

var = 'OverallQual'
data = pd.concat([df_train['SalePrice'],df_train['OverallQual']],axis = 1)
f,ax = plt.subplots(figsize = (8,6)) #subplots 创建一个画像(figure)和一组子图(subplots)
fig = sns.boxplot(x = var,y = 'SalePrice',data = data)
fig.axis (ymin = 0,ymax = 800000)
(-0.5, 9.5, 0.0, 800000.0)


之后,绘制Grlivearea(平方英尺) / SalePrice(售价)的散点图,直观上看,这两个变量可能存在线性正相关的关系。

var = 'GrLivArea'
data = pd.concat([df_train['SalePrice'],df_train[var]],axis = 1)
data.plot.scatter(x = var,y = 'SalePrice',ylim = (0,800000));

3.数据清洗

数据清洗一般包括以下几个任务:填充缺失值、平滑噪声数据、识别或删除异常值并解决不一致性、最后转换成标准化数据格式、清除异常数据、纠正错误、清除重复数据等。

3.1缺失值处理

数据的缺失主要包括属性的缺失和属性中,某些值的缺失,两者都会造成分析结果的不准确。
1.忽略元组
2.人工填充缺失值
3.自动填充缺失值

  • 全局常数
  • 属性的中心度量(均值或中位数)
    对于正常的(对称的)数据分布而言,可以使用均值来填充。
  • 最可能的值
    在填充缺失值时,还可以用回归、贝叶斯形式化方法的基本推理的工具或决策树归纳来确定缺失值最可能的取值。
    例:使用随机生成的数据集作为样例
    1.导入所需库
import pandas as pd
import numpy as np
from sklearn.impute import SimpleImputer

可以看到数据结构DataFrame中缺失值的存在是用NaN来表示的

df = pd.DataFrame(np.random.randn(6,4),columns = list('abcd')) #随机生成数据
df.iloc[4,3] = np.nan #iloc选择行和列
df.loc[3] = np.nan #loc选择行
df


3.
在处理缺失值的过程中,经常需要统计各个属性的缺失值百分比,然后再选择缺失值处理的方案

total = df.isnull().sum().sort_values(ascending = False)
percent = (df.isnull().sum() / df.isnull().count()).sort_values(ascending = False)
missing_data = pd.concat([total,percent],axis = 1,keys = ['Total','Percent'])
missing_data


可以看到在该数据集中,a,b,c,d4个属性的缺失百分比分别为33%、16.6%、16.6%、16.6%。
4.
对于元组缺失多个值或全部缺失时,可以简单将该元组忽略,比如第三行,在此使用DataFrame中的dropna()函数来删除第3行的全部缺失数据。

df_cleaned = df.dropna(how='all')
df_cleaned


5.
接下来进行填充,使用Imputer类进行缺失值填充,这里采用列均值来填充缺失值。

imp = SimpleImputer(missing_values = np.nan,strategy = 'mean')
imp.fit(df)
df_cleaned_1 = imp.transform(df_cleaned)
df_cleaned_1


(axis:默认为axis=0
axis = 0:按列处理
axis = 1:按行处理)

3.2噪声平滑

噪声平滑是被测量的变量的随机误差或方差,包括错误的值或偏离期望的离群点,可以使用基本的数据统计描述技术和数据可视化方法来识别可能代表噪声的离群点。
1.分箱法:分箱法通过考察数据的“近邻”(即周围的值)来平滑有序数据值,是一种局部平滑的方法。所谓“分箱”指的就是将数据划分为几个含有相同个数数据的数据段,之后将箱中每一个值用某个值来替换,从而达到平滑数据、消除噪声的目的。
“箱的宽度”来表示每个箱值的取值区间
1.用箱均值平滑:箱中每一个值被箱中的平均值替换
2.用箱中位数平滑:箱中每一个值被箱中的中位值替换
3.用箱边界平滑:箱中的最小值和最大值同样被视为边界,箱中的每一个值被最近的边界值替换。
宽度越大,平滑效果越明显。
2.回归法:用一个函数拟合数据来平滑数据。使用回归,找到适合数据的数学方程式,能够剔除一些数据中的异常点,所以能够帮助消除噪声。
3.离群点分析:通过如聚类来检测离群点。
许多噪声平滑的方法也适用于数据离散化(一种数据变化形式)和数据归约。

3.3异常值的检测与处理

由于系统误差、人为误差或者固有数据的变异,使得某些数据与总体的行为特征、结构或相关性等不一样,这部分数据称为异常值。
对于异常值的常见处理方法:
1.删除含有异常值的记录:是否要删除异常值可根据实际情况考虑。
2.将异常值视为缺失值,交给缺失值处理方法来处理
3.用平均值来修正
4.不处理
使用随机生成的取值范围在0~10000的100个数据来进行异常值分析。
1.
首先生成数据集,之后进行正态性检验。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import stats
data = pd.Series(np.random.randn(10000)*100) #随机生成数据
u = data.mean() #计算均值
std = data.std()
stats.kstest(data,'norm',(u,std))
print('均值为:%.3f,标准差为:%.3f'%(u,std))


2.绘制数据密度曲线


3.根据3原则,异常值共有36个,剔除异常值之后的数据为data_c

ax2 = fig.add_subplot(2,1,2)
error = data[np.abs(data -u) >3*std]
data_c = data[np.abs(data -u) <=3*std]
len(error)


4.使用箱型图查看数据分布

6.计算分位差

q1 = s['25%']
q3 = s['75%']
iqr = q3 - q1
mi = q1 - 1.5 * iqr
ma = q3 + 1.5 * iqr
print('分位差为:%.3f,下限为:%.3f,上限为:%.3f'%(iqr,mi,ma))

7.根据分位差的上下限筛选出异常值error,剔除异常值之后的数据为data_c

ax2 = fig.add_subplot(2,1,2)
error = data[(data <mi) | (data <= ma)]
print('异常值共%i条'%len(error))

数据预处理概述和数据清洗相关推荐

  1. 数据预处理Part1——数据清洗

    文章目录 一.数据预处理 二.数据清洗 1.缺失值处理 1.1 丢弃缺失值 1.2 补全缺失值 1.3 真值转换 1.4 不处理 1.5 特征选择 2.异常值 2.1 异常值处理 2.2 保留异常数据 ...

  2. [Python从零到壹] 十五.文本挖掘之数据预处理、Jieba工具和文本聚类万字详解

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  3. 数据预处理(三)——数据集成

    主要内容: 数据预处理的必要性 数据清洗 数据集成 数据标准化 数据规约 数据变换与离散化 利用sklearn进行数据预处理 小结 三.数据集成 数据集成是将多个数据源中的数据合并,存放于一个一致的数 ...

  4. 【Python实战】数据预处理(数据清理、集成、变换、归约)

    [Python实战]数据预处理 前言 数据预处理概述 数据清理 异常数据处理 1.异常数据分析 2.异常数据处理方法 缺失值处理 噪声数据处理 数据集成 1.实体识别 2.冗余属性 3.数据不一致 数 ...

  5. 数据预处理(四)——数据标准化

    主要内容: 数据预处理的必要性 数据清洗 数据集成 数据标准化 数据规约 数据变换与离散化 利用sklearn进行数据预处理 小结 四.数据标准化 不同特征之间往往具有不同的量纲,由此造成数值间的差异 ...

  6. 数据预处理与特征工程—12.常见的数据预处理与特征工程手段总结

    文章目录 引言 1.数据预处理 1.1 数据清洗 1.1.1 异常值处理 1.1.2 缺失值处理 1.2 特征预处理 1.2.1 数值型特征无量纲化 1.2.2 连续数值型特征分箱 1.2.2.1 无 ...

  7. 数据探索与数据预处理的实验报告

    数据探索与数据预处理 提示 参考书:张良均<Python数据分析与挖掘实战>等. 数据文件:课本自带数据. 使用软件:Pycharm. 类别:实验. 温馨提示:该实验是跟张良均这本书配合使 ...

  8. 大数据的4v特征、数据预处理

    一.大数据的4v特征 大数据的4v特征主要包含规模性(Volume).多样性(Variety).高速性(Velocity).价值性(Value) 1.规模性(Volume) 大数据中的数据计量单位是P ...

  9. PART 2.2 风控建模前数据预处理清洗

    最重要的事情开始都会讲:建模是始终服务于业务的,没有业务的评分卡就没有灵魂 广义数据预处理包括:数据清洗,数据集成(用户基础数据,外部第三方数据,埋点数据),数据变换(WOE) 类型 重复值 字段问题 ...

最新文章

  1. 在线视频解决方案供应商
  2. python中的作用域以及内置函数globals()-全局变量、locals()-局部变量
  3. java1.6 linux_linux java1.6 安装
  4. Linux(三) 运行级别
  5. 去银行贷款,有中介和没中介的巨大差别
  6. 关于ubuntu 14.04 dpkg 问题
  7. 2021年春季学期期末统一考试 劳动与社会保障法(本) 试题
  8. html中怎么写多选框,如何在HTML中实现“选择所有”复选框?
  9. [论文阅读] AMPNet: Average- and Max-Pool Networks for Salient Object Detection
  10. Knockoutjs之observable和applyBindings的使用
  11. python列表中字典指定value的中文按照首字母拼音排序,数字在后
  12. 2018/9/18单舵轮AGV项目笔记之二
  13. AI带你走进P图新时代
  14. mysql 幻读 mvcc_MVCC 能解决幻读吗?
  15. rm 好凶残,太 TM 吓人了!
  16. 用树莓派控制两盏灯(二)
  17. Android针对IC卡读写的NFC开发
  18. EXT4文件系统学习(六)USB3.0 XHCI内存卡Buffer I/O error问题-未解决
  19. NSIS + QT 制作自定义界面安装包
  20. 1.1 Go语言简介

热门文章

  1. Lipschitz continuous gradient
  2. 前端框架MVC和MVVM的理解
  3. 可控硅BT136典型应用电路
  4. Deep C (and C++) by Olve Maudal and Jon Jagger
  5. windows10安装pyltp
  6. 《Java8实战》第1章 Java 8、9、10 以及 11 的变化
  7. NLP的强大工具——AllenNLP
  8. shell脚本:exit 0 和 exit 1有什么区别?他们和return不同,return是关键字,exit是一个shell函数
  9. IP第十天笔记 - - - BGP
  10. Impala Shell 和 Impala SQL