)
十二、数据预处理之数据清洗任务描述本关任务完成泰坦尼克号遇难数据的清洗。相关知识案例背景泰坦尼克号遭遇的灾难震惊世界如何避免灾难甚至预测灾难呢 要实现首先要做好泰坦尼克号的损失数据统计才能为数据分析打下基础。观察数据特点如图所示的数据集中有一些的缺失值和不合理的数字即离群点。目标预测泰坦尼克号上的乘客是幸存还是遇难每个乘客对应一个乘客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 GraphXSpark 体系架构Spark 运行架构包括集群资源管理器Cluster Manager、运行作业任务的工作节点Worker Node、每个应用的任务控制节点Driver和每个工作节点上负责具体任务的执行进程Executor资源管理器可以自带或 Mesos 或 YARN。Spark 运行架构Spark 的数据抽象 RDDSpark Core 是建立在统一的抽象 RDD 之上使得 Spark 的各个组件可以无缝进行集成在同一个应用程序中完成大数据计算任务。一个 RDD 就是一个分布式对象集合本质上是一个只读的分区记录集合每个 RDD 可以分成多个分区每个分区就是一个数据集片段并且一个 RDD 的不同分区可以被保存到集群中不同的节点上从而可以在集群中的不同节点上进行并行计算。RDD 提供了一组丰富的操作以支持常见的数据运算分为“动作”Action和“转换”Transformation两种类型RDD 提供的转换接口都非常简单都是类似 map、filter、groupBy、join 等粗粒度的数据转换操作而不是针对某个数据项的细粒度修改不适合网页爬虫。表面上 RDD 的功能很受限、不够强大实际上 RDD 已经被实践证明可以高效地表达许多框架的编程模型比如 MapReduce、SQL、PregelSpark 提供了 RDD 的 API程序员可以通过调用 API 实现对 RDD 的各种操作。RDD 典型的执行过程如下1RDD 读入外部数据源进行创建2RDD 经过一系列的转换Transformation操作每一次都会产生不同的RDD供给下一个转换操作使用3最后一个 RDD 经过“动作”操作进行转换并输出到外部数据源。理论基础数据清洗有上图案例的数据可知在现实生活中的数据是“脏”的不完整的缺少属性值。 例如年龄 (地市的值)含嘈杂的噪音错误或离群。 例如票价-10(错误)如何处理丢失的数据1.忽略元组当每个属性缺少值比例比较大时它的效果非常差2.手动填写遗漏值工作量大3.自动填写使用属性的平均值填充空缺值最有可能的值基于诸如贝叶斯公式或决策树推理缺失值处理方法import pandas as pdimport numpy as npfrom sklearn.impute import SimpleImputerimport matplotlib.pyplot as pltdata_url train.csvdf 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 - Q1IQRQ3−Q1maxQ31.5∗IQRminQ1−1.5∗IQR离群点通常情况下一个值高于/低于1.5×IQR处理噪声数据代码实现import pandas as pdimport numpy as npimport matplotlib.pyplot as plfrom sklearn.impute import SimpleImputerdata_url train.csvdf 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 npimport pandas as pd#读取数据dfpd.read_csv(/data/workspace/myshixun/step1/train.csv)##### begin ######查看列中是否存在空值any布尔print(df.isnull().any())#使用SimpleImputer取出缺失值所在列的数值sklearn当中特征矩阵必须是二维才能传入 使用reshape(-1,1)升维agedf[Age].values.reshape(-1,1)#导入模块from sklearn.impute import SimpleImputer#实例化均值填充imp_meanSimpleImputer(missing_valuesnp.nan,strategymean)imp_meanimp_mean.fit_transform(age)#填充好的数据传回到 data[Age]列df_fillnadfdf_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)有任何问题都可以随时关注私信