头歌实践教学平台:数据科学与大数据技术导论(十二)

十二、数据预处理之数据清洗

任务描述

本关任务:完成泰坦尼克号遇难数据的清洗。

相关知识
案例背景

泰坦尼克号遭遇的灾难震惊世界,如何避免灾难甚至预测灾难呢? 要实现首先要做好泰坦尼克号的损失数据统计,才能为数据分析打下基础。

观察数据特点

如图所示的数据集中有一些的缺失值和不合理的数字即离群点。

目标:预测泰坦尼克号上的乘客是幸存还是遇难,每个乘客对应一个乘客Id,用0表示遇难,用1表示幸存。

Spark 生态系统

在实际应用中,大数据处理主要包括以下三个类型:

(1)复杂的批量数据处理:通常时间跨度在数十分钟到数小时之间

(2)基于历史数据的交互式查询:通常时间跨度在数十秒到数分钟之间

(3)基于实时数据流的数据处理:通常时间跨度在数百毫秒到数秒之间

当同时存在以上三种场景时,就需要同时部署三种不同的软件,比如: MapReduce / Impala / Storm 。这样做难免会带来一些问题,不同场景之间输入输出数据无法做到无缝共享,通常需要进行数据格式的转换;不同的软件需要不同的开发和维护团队,带来了较高的使用成本;比较难以对同一个集群中的各个系统进行统一的资源协调和分配。

Spark 的设计遵循"一个软件栈满足不同应用场景"的理念,逐渐形成了一套完整的生态系统,既能够提供内存计算框架,也可以支持 SQL 即席查询、实时流式计算、机器学习和图计算等。Spark 可以部署在资源管理器 YARN 之上,提供一站式的大数据解决方案,因此,Spark 所提供的生态系统足以应对上述三种场景,即同时支持批处理、交互式查询和流数据处理。

Spark 的生态系统主要包含了 Spark Core、Spark SQL、Spark Streaming、Structured Streaming、MLlib 和 GraphX 等组件。

Spark 生态系统

Spark 生态系统组件的应用场景:

应用场景 时间跨度 其他框架 Spark 生态系统中的组件

复杂的批量数据处理 小时级 MapReduce、Hive Spark

基于历史数据的交互式查询 分钟级、秒级 Impala、Dremel、Drill Spark SQL

基于实时数据流的数据处理 毫秒、秒级 Storm、S4 Spark Streaming、Structured Streaming

基于历史数据的数据挖掘 - Mahout MLlib

图结构数据的处理 - Pregel、Hama GraphX

Spark 体系架构

Spark 运行架构包括集群资源管理器(Cluster Manager)、运行作业任务的工作节点(Worker Node)、每个应用的任务控制节点(Driver)和每个工作节点上负责具体任务的执行进程(Executor),资源管理器可以自带或 Mesos 或 YARN。

Spark 运行架构

Spark 的数据抽象 RDD

Spark Core 是建立在统一的抽象 RDD 之上,使得 Spark 的各个组件可以无缝进行集成,在同一个应用程序中完成大数据计算任务。一个 RDD 就是一个分布式对象集合,本质上是一个只读的分区记录集合,每个 RDD 可以分成多个分区,每个分区就是一个数据集片段,并且一个 RDD 的不同分区可以被保存到集群中不同的节点上,从而可以在集群中的不同节点上进行并行计算。

RDD 提供了一组丰富的操作以支持常见的数据运算,分为"动作"(Action)和"转换"(Transformation)两种类型,RDD 提供的转换接口都非常简单,都是类似 map、filter、groupBy、join 等粗粒度的数据转换操作,而不是针对某个数

据项的细粒度修改(不适合网页爬虫)。

表面上 RDD 的功能很受限、不够强大,实际上 RDD 已经被实践证明可以高效地表达许多框架的编程模型(比如 MapReduce、SQL、Pregel),Spark 提供了 RDD 的 API,程序员可以通过调用 API 实现对 RDD 的各种操作。

RDD 典型的执行过程如下:

(1)RDD 读入外部数据源进行创建;

(2)RDD 经过一系列的转换(Transformation)操作,每一次都会产生不同的RDD,供给下一个转换操作使用;

(3)最后一个 RDD 经过"动作"操作进行转换,并输出到外部数据源。

理论基础
数据清洗

有上图案例的数据可知,在现实生活中的数据是"脏"的:

不完整的:缺少属性值。 例如,年龄=" "(地市的值)

含嘈杂的噪音,错误或离群。 例如,票价="-10"(错误)

如何处理丢失的数据

1.忽略元组:当每个属性缺少值比例比较大时,它的效果非常差

2.手动填写遗漏值:工作量大

3.自动填写

使用属性的平均值填充空缺值

最有可能的值:基于诸如贝叶斯公式或决策树推理

缺失值处理方法

import pandas as pd

import numpy as np

from sklearn.impute import SimpleImputer

import matplotlib.pyplot as plt

data_url = "train.csv"

df = pd.read_csv(data_url)

#使用属性的平均值填充空缺值

imp = SimpleImputer(missing_values = np.nan, strategy = 'mean')

imp.fit(df.iloc:,5:6)

plt.hist(imp.transform(df.iloc:,5:6))

plt.show()

如何处理噪音数据

正态分布检测离群数据:删除离群点

基于正态分布的一元离群点检测 假定数据集由一个正态分布产生,然后,可以由输入数据学习正态分布的参数,并把低概率的点识别为离群点。 在正态分布的假定下,区域包含99.7%的数据,包含95.4%的数据,包含68.3%的数据。视具体情况而定,将其区域外的数据视为离群点。

数值分布在(μ-σ,μ+σ)中的概率为0.6827

数值分布在(μ-2σ,μ+2σ)中的概率为0.9545

数值分布在(μ-3σ,μ+3σ)中的概率为0.9973

箱线图检测离群数据:删除离群点

四分位数

四分位数:Q1(第25百分位),Q3(第75百分位)

四分位数极差:IQR= Q3 - Q1

IQR=Q3−Q1

max=Q3+1.5∗IQR

min=Q1−1.5∗IQR

离群点:通常情况下,一个值高于/低于1.5×IQR

处理噪声数据代码实现

import pandas as pd

import numpy as np

import matplotlib.pyplot as pl

from sklearn.impute import SimpleImputer

data_url = "train.csv"

df = pd.read_csv(data_url)

imp = SimpleImputer(missing_values = np.nan, strategy = 'mean')

imp.fit(df.iloc:,5:6)

pl.boxplot(imp.transform(df.iloc:,5:6))

pl.xlabel('data')

pl.show()

编程要求

根据提示,你需要完成:

缺失值填充

离群点检测

测试说明

平台会对你编写的代码进行测试:

开始你的任务吧,祝你成功!

import numpy as np

import pandas as pd

#读取数据

df=pd.read_csv('/data/workspace/myshixun/step1/train.csv')

begin

#查看列中是否存在空值(any,布尔)

print(df.isnull().any())

#使用SimpleImputer取出缺失值所在列的数值,sklearn当中特征矩阵必须是二维才能传入 使用reshape(-1,1)升维

age=df'Age'.values.reshape(-1,1)

#导入模块

from sklearn.impute import SimpleImputer

#实例化,均值填充

imp_mean=SimpleImputer(missing_values=np.nan,strategy='mean')

imp_mean=imp_mean.fit_transform(age)

#填充好的数据传回到 data'Age'

df_fillna=df

df_fillna'Age'=imp_mean

#检验是否还有空值,打印数量

print(df_fillna'Age'.isnull().sum())

end

#正太分布离群点检测

begin

#计算均值

mu = df_fillna'Age'.mean()

#计算标准差

sigma = df_fillna'Age'.std()

#识别异常值

error = df_fillna(df_fillna\['Age' < mu - 3*sigma) | (df_fillna'Age' > mu + 3*sigma)]

end

print(error)

有任何问题都可以随时关注私信!

相关推荐
资深电气设计19 分钟前
堆垛机变频器项目落地观察:FC360变频驱动方案在中鼎科技堆垛机中的应用成效
大数据·人工智能·科技
qq_3164110337 分钟前
专业的腹腔镜医疗器械物联网APP开发服务商
python
lzhdim42 分钟前
13、JavaScript事件循环机制 - JavaScript学习系列文章
开发语言·前端·javascript·学习·ecmascript
阿童木写作1 小时前
跨境电商翻译利器,批量图片视频翻译+智能抠图工具
python·音视频
zbyyd1 小时前
Linux 多线程:互斥锁 &amp; 信号量
linux·c语言·开发语言·网络
wuyk5552 小时前
从零吃透Modbus通信|第3章:STM32 Modbus RTU主机
服务器·开发语言·网络·数据结构·stm32·单片机·嵌入式硬件
绘梨衣5472 小时前
异步任务队列-学习2
爬虫·python·学习·任务队列
人工智能培训2 小时前
人工智能数据安全下的个人信息保护实践方案
大数据·人工智能·算法·生活
用户8356290780512 小时前
使用 Python 在 Excel 中插入 OLE 对象
后端·python