作者:韩信子 @ShowMeAI
教程地址:http://www.showmeai.tech/tutorials/33
本文地址:http://www.showmeai.tech/article-detail/138
申明:版权所有,转载请分割平台与作者并注明出处
数据分析分外围步骤分为:业务认知与数据摸索、数据预处理、业务认知与数据摸索等三个外围步骤。本文介绍第二个步骤——数据预处理。
不能想当然地认为数据是无效的。
在事实世界中,数据个别都是异构的、有缺失的、有量纲的。有些数据是从多个不同的数据源中获取的,这些异构数据,在各自的零碎中都是正确无误的,只不过很有“共性”。
例如,有的零碎中应用 0 和 1,代表性别;而有些零碎应用 f 和 m 代表性别。
- 在应用数据之前,首先要对数据做规整解决,应用统一的单位、应用对立的文原本形容对象等。
- 有些数据中蕴含大量反复的数据、缺失的数据、或者离群的数据,在开始剖析数据之前,必须好好检查数据是否无效,并对数据做预处理操作。
- 判断离群数值,并对其剖析,有时会导致重大发现的产生。
一、数据规整
1.1 量纲
所谓量纲,简略来说,就是说数据的单位。有些数据是有量纲的,比方身高;而有些数据是没有量纲的,例如,男女比例。不同评估指标往往具备不同的量纲,数据之间的差异可能很大,不进行解决会影响到数据分析的后果。
1.2 数据标准化
为了打消指标之间的量纲和取值范畴差别对数据分析后果的影响,须要对数据进行标准化解决。就是说,把数据依照比例进行缩放,使之落入一个特定的区域,便于进行综合剖析。
1.3 数据归一化
归一化是数据标准化中最简略的形式,目标是把数变为 [0, 1] 之间的小数,把有量纲的数据转换为无穷纲的纯数量。归一化可能防止值域和量纲对数据的影响,便于对数据进行综合剖析。
举例说明
举个简略的例子,在一次考试中,小明的语文问题是 100 分、英语问题是 100 分,单单从这考试成绩来评估,小明的语文和英语学的一样好。然而,如果你晓得语文总分是 150 分,而英语总分只有 120 分,你还认为小明的语文和英语问题是一样的吗?
对小明的问题做简略的归一化:
采纳离差归一化办法,公式是:y = (x-min) / range,这里设 min=0,那么 range = max – min = max,由此推算出小明的语文问题是 4 /6,英语问题是 5 /6。因而,断定小明的英语问题好于语文问题。
还原到实在的场景中,各科的考题难度不尽相同,设班级中语文的最低分数是 min 语文 = 60,英语的最低分数是 min 英语 = 85,推算出小明的语文问题是 0.44 =(100-60)/(150-60),英语问题是 0.43 =(100-85)/(120-85),据此,能够判断小明的英语问题稍差于语文问题。
归一化的使得具备不同值域、不同量纲的数据之间具备可比性,使数据分析的后果更加全面,更靠近事实。
二、数据异样值检测与剖析
异样值在统计学上的全称是疑似异样值,也称作离群点 (outlier),异样值的剖析也称作离群点剖析。
异样值剖析是测验数据中是否存在不合常理的数据,在数据分析中,既不能漠视异样值的存在,也不能简略地把异样值从数据分析中剔除。器重异样值的呈现,剖析其产生的起因,经常成为发现新问题进而改良决策的契机。
在上图中,离群点(outlier)跟其余观测点的偏离十分大。留神,离群点是异样的数据点,然而不肯定是谬误的数据点。
2.1 离群点检测
数据分析的数学根底
(1)描述性分析方法
在数据处理过程中,能够对数据做一个描述性剖析,进而查看哪些数据是不合理的。罕用的统计量是最大值和最小值,用来判断变量的取值是否超出了正当的范畴。例如,客户年龄的最大值是 199,该值存在异样。
(2)Z-Score 办法
[1] 3σ 准则
在介绍 Z -score 办法之前,先理解一下 3σ 准则——如果数据遵从正态分布,在 3σ 准则下,异样值被定义为『一组测定值中,与平均值的偏差超过三倍标准差的值』。
在正态分布下,间隔平均值 3σ 之外的值呈现的概率为 P(|x-μ|>3σ)<=0.003,属于极个别的小概率事件。在 3σ 准则下,如果观测值与平均值的差值超过 3 倍标准差,那么能够将其视为异样值。
[2] Z-Score
如果数据不遵从正态分布,则能够用『与平均值的间隔是标准差的多少倍』来形容,这个倍数就是 Z -scor。
Z-Score 以标准差(σ)为单位,去度量某一原始分数(X)偏离平均数(μ)的间隔。Z-Score 须要依据教训和理论状况来决定,通常把远离标准差 3 倍间隔以上的数据点视为离群点。
Python 代码的实现如下:
import numpy as np
import pandas as pd
def detect_outliers(data,threshold=3):
mean_d = np.mean(data)
std_d = np.std(data)
outliers = []
for y in data_d:
z_score= (y - mean_d)/std_d
if np.abs(z_score) > threshold:
outliers.append(y)
return outliers
(3)IQR 异样检测
四分位点内距(Inter-Quartile Range,IQR),是指在第 75 个百分点与第 25 个百分点的差值,或者说,上四分位数与下四分位数之间的差。
IQR 是统计扩散水平的一个度量,扩散水平通过须要借助箱线图(Box Plot)来察看。通常把小于 Q1-1.5_IQR 或者大于 Q3+1.5_IQR 的数据点视作离群点。
箱线图能够直观地看出数据集的以下重要个性:
- 核心地位 :中位数所在的地位就是数据集的核心,从核心地位向上或向下看,能够看出数据的歪斜水平。
- 分布水平 :箱线图分为多个区间,区间较短时,示意落在该区间的点较集中;
- 对称性 :如果中位数位于箱子的两头地位,那么数据分布较为对称;如果极值离中位数的间隔较大,那么示意数据分布歪斜。
- 离群点 :离群点散布在箱线图的高低边缘之外。
应用 Python 实现,参数 sr 是 Series 类型的变量:
def detect_outliers(sr):
q1 = sr.quantile(0.25)
q3 = sr.quantile(0.75)
iqr = q3-q1 #Interquartile range
fence_low = q1-1.5*iqr
fence_high = q3+1.5*iqr
outliers = sr.loc[(sr < fence_low) | (sr > fence_high)]
return outliers
2.2 异样值解决
在数据处理时,异样值的解决办法,需视具体情况而定。有时,异样值也可能是失常的值,只不过异样的大或小,所以,很多状况下,要先剖析异样值呈现的可能起因,再判断如何解决异样值。解决的异样值的罕用办法有:
- 删除含有异样值的记录。
- 插补,把异样值视为缺失值,应用缺失值的解决办法进行解决,益处是利用现有数据对异样值进行替换,或插补。
- 不解决,间接在含有异样值的数据集上进行数据分析。
三、缺失值的解决
不是所有的数据都是残缺的,有些观测值可能会缺失。对于缺失值,通常的解决形式是删除缺失值所在的数据行、填充缺失值、插补缺失值。
材料与代码下载
本教程系列的代码能够在 ShowMeAI 对应的 github 中下载,可本地 python 环境运行,能拜访 Google 的宝宝也能够间接借助 google colab 一键运行与交互操作学习哦!
本系列教程波及的速查表能够在以下地址下载获取:
- Pandas 速查表
- Matplotlib 速查表
- Seaborn 速查表
拓展参考资料
- Pandas 可视化教程
- Seaborn 官网教程
ShowMeAI 相干文章举荐
- 数据分析介绍
- 数据分析思维
- 数据分析的数学根底
- 业务认知与数据初探
- 数据荡涤与预处理
- 业务剖析与数据挖掘
- 数据分析工具地图
- 统计与数据科学计算工具库 Numpy 介绍
- Numpy 与 1 维数组操作
- Numpy 与 2 维数组操作
- Numpy 与高维数组操作
- 数据分析工具库 Pandas 介绍
- 图解 Pandas 外围操作函数大全
- 图解 Pandas 数据变换高级函数
- Pandas 数据分组与操作
- 数据可视化准则与办法
- 基于 Pandas 的数据可视化
- seaborn 工具与数据可视化
ShowMeAI 系列教程举荐
- 图解 Python 编程:从入门到精通系列教程
- 图解数据分析:从入门到精通系列教程
- 图解 AI 数学根底:从入门到精通系列教程
- 图解大数据技术:从入门到精通系列教程