看书标记【R语言数据分析与挖掘实战】4

2023-11-18

第四章 数据预处理

4.1 数据清洗

缺失值处理:使用is.na()判断缺失值是否存在,complete.cases()可以识别样本数据是否完整从而判断缺失情况。删除法(na.omit()函数移除所有含有缺失数据的行,data[ ,-p]删除p列)、替换法(均值、中位数、众数替换)、插补法(用lm()回归预测补缺,用mice函数包进行多重插补,思想是生成数据组的随机数),插值有很多方法主要有拉格朗日法和牛顿法,之前在非参数统计中有看到许多。

# 设置工作空间
# 把“数据及程序”文件夹拷贝到F盘下,再用setwd设置工作空间
setwd("F:/数据及程序/chapter4/示例程序")
# 读取销售数据文件,提取标题行
inputfile <- read.csv('./data/catering_sale.csv', header = TRUE) 

# 变换变量名
inputfile <- data.frame(sales = inputfile$'销量', date = inputfile$'日期')

# 数据截取
inputfile <- inputfile[5:16, ]

# 缺失数据的识别
is.na(inputfile)  # 判断是否存在缺失
n <- sum(is.na(inputfile))  # 输出缺失值个数

# 异常值识别
par(mfrow = c(1, 2))  # 将绘图窗口划为1行两列,同时显示两图
dotchart(inputfile$sales)  # 绘制单变量散点图
boxplot(inputfile$sales, horizontal = TRUE)  # 绘制水平箱形图

# 异常数据处理
inputfile$sales[5] = NA  # 将异常值处理成缺失值
fix(inputfile)  # 表格形式呈现数据

# 缺失值的处理
inputfile$date <- as.numeric(inputfile$date)  # 将日期转换成数值型变量
sub <- which(is.na(inputfile$sales))  # 识别缺失值所在行数
inputfile1 <- inputfile[-sub, ]  # 将数据集分成完整数据和缺失数据两部分
inputfile2 <- inputfile[sub, ]

# 行删除法处理缺失,结果转存
result1 <- inputfile1

# 均值替换法处理缺失,结果转存
avg_sales <- mean(inputfile1$sales)  # 求变量未缺失部分的均值
inputfile2$sales <- rep(avg_sales,n)  # 用均值替换缺失
result2 <- rbind(inputfile1, inputfile2)  # 并入完成插补的数据

# 回归插补法处理缺失,结果转存
model <- lm(sales ~ date, data = inputfile1)  # 回归模型拟合
inputfile2$sales <- predict(model, inputfile2)  # 模型预测
result3 <- rbind(inputfile1, inputfile2)

# 多重插补法处理缺失,结果转存
library(lattice)  # 调入函数包
library(MASS)
library(nnet)
library(mice)  # 前三个包是mice的基础
imp <- mice(inputfile, m = 4)  # 4重插补,即生成4个无缺失数据集
fit <- with(imp,lm(sales ~ date, data = inputfile))  # 选择插补模型
pooled <- pool(fit)
summary(pooled)
result4 <- complete(imp, action = 3)  # 选择第三个插补数据集作为结果

4.2 数据集成

将多个数据集合并,R中用merge()函数实现。

4.3 数据变换

简单函数变换:平方( x ′ = x 2 x'=x^2 x=x2)、开方( x ′ = x x'=\sqrt{x} x=x )、取对数( x ′ = log ⁡ ( x ) x'=\log(x) x=log(x))、差分运算( ▽ f ( x k ) = f ( x k + 1 ) − f ( x k ) \bigtriangledown f(x_k)=f(x_{k+1})-f(x_k) f(xk)=f(xk+1)f(xk))等。
规范化:最小-最大规范化( x ∗ = x − m i n m a x − m i n x*=\frac{x-min}{max-min} x=maxminxmin)、零-均值规范化( x ∗ = x − x ˉ σ x*=\frac{x-\bar x}{\sigma} x=σxxˉ,有离群值时还需要做一定的修正)、小数定标规范化( x ∗ = x 1 0 k x*=\frac{x}{10^k} x=10kx

# 设置工作空间
# 把“数据及程序”文件夹拷贝到F盘下,再用setwd设置工作空间
setwd("F:/数据及程序/chapter4/示例程序")
# 读取数据
data <- read.csv('./data/normalization_data.csv', header = FALSE) 

# 最小-最大规范化
b1 <- (data[, 1] - min(data[, 1])) / (max(data[, 1]) - min(data[, 1]))
b2 <- (data[, 2] - min(data[, 2])) / (max(data[, 2]) - min(data[, 2]))
b3 <- (data[, 3] - min(data[, 3])) / (max(data[, 3]) - min(data[, 3]))
b4 <- (data[, 4] - min(data[, 4])) / (max(data[, 4]) - min(data[, 4]))
data_scatter <- cbind(b1, b2, b3, b4)
# 零-均值规范化
data_zscore <- scale(data)
# 小数定标规范化
i1 <- ceiling(log(max(abs(data[, 1])), 10))  # 小数定标的指数
c1 <- data[, 1] / 10 ^ i1
i2 <- ceiling(log(max(abs(data[, 2])), 10))
c2 <- data[, 2] / 10 ^ i2
i3 <- ceiling(log(max(abs(data[, 3])), 10))
c3 <- data[, 3] / 10 ^ i3
i4 <- ceiling(log(max(abs(data[, 4])), 10))
c4 <- data[, 4] / 10 ^ i4
data_dot <- cbind(c1, c2, c3, c4)

# 打印结果
options(digits = 4)  # 控制输出结果的有效位数
data;data_scatter;data_zscore;data_dot

连续属性离散化:等宽法、等频法、(一维)聚类。

# 设置工作空间
# 把“数据及程序”文件夹拷贝到F盘下,再用setwd设置工作空间
setwd("F:/数据及程序/chapter4/示例程序")
# 读取数据文件,提取标题行
data <- read.csv('./data/discretization_data.csv', header = TRUE) 

# 等宽离散化
v1 <- ceiling(data[, 1] * 10)

# 等频离散化
names(data) <- 'f'  # 变量重命名
attach(data)
seq(0, length(f), length(f) / 6)  # 等频划分为6组
v <- sort(f)  # 按大小排序作为离散化依据
v2 <- rep(0, 930)  # 定义新变量
for (i in 1:930) {
  v2[i] <- ifelse (f[i] <= v[155], 1,
                   ifelse (f[i] <= v[310], 2,
                           ifelse (f[i] <= v[465], 3,
                                   ifelse (f[i] <= v[620], 4, 
                                           ifelse (f[i] <= v[775], 5, 6)))))
} 

detach(data)

# 聚类离散化
result <- kmeans(data, 6)
v3 <- result$cluster

# 图示结果
plot(data[, 1], v1, xlab = '肝气郁结证型系数')
plot(data[, 1], v2, xlab = '肝气郁结证型系数')
plot(data[, 1], v3, xlab = '肝气郁结证型系数')

属性构造:构造中间变量或者虚拟变量。
小波变换:具有多分辨率的特点,在时域频域都有表征信号局部特征的能力。

# 数据生成,信号模拟
N <- 1024; k <- 6  # 参数赋值
x <- ((1:N) - N/2 ) * 2 * pi * k / N
y <- ifelse(x > 0, sin(x), sin(3 * x) )  # 划分低频波动段和高频波动段
signal <- y + rnorm(N) / 10  # 添加扰动项,生成信号变量

# 调用函数包
library(waveslim)

# 对信号z进行小波分解
d <- dwt(signal, n.levels = 4)

# 输出各层小波系数
data.frame(d$d1, d$d2, d$d3, d$d4)

4.4 数据规约

寻找出最小的属性子集并确保新数据子集的概率分布尽可能地接近原来数据集的概率分布。
属性规约:合并属性、向前向后法、决策树归纳、主成分分析。

# 设置工作空间
# 把“数据及程序”文件夹拷贝到F盘下,再用setwd设置工作空间
setwd("F:/数据及程序/chapter4/示例程序")
# 数据读取
inputfile <- read.csv('./data/principal_component.csv', header = FALSE)

# 主成分分析
PCA <- princomp(inputfile, cor = FALSE)
names(PCA)  # 查看输出项

(PCA$sdev) ^ 2  # 主成分特征根
summary(PCA)  # 主成分贡献率
PCA$loadings  # 主成分载荷      
PCA$scores  # 主成分得分

数值规约:直方图、聚类、抽样、参数回归。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

看书标记【R语言数据分析与挖掘实战】4 的相关文章

  • 《Ansible自动化工具篇:Centos操作系统基于ansible工具一键远程离线部署之K8S1.24.12二进制版集群》

    一 部署背景 由于业务系统的特殊性 我们需要针对不同的客户环境部署二进制版K8S集群 由于大都数用户都是专网环境 无法使用外网 为了更便捷 高效的部署 针对业务系统的特性 我这边编写了 基于ansible自动化工具一键远程离线部署进制版K8
  • 办公利器:用Python向钉钉发送消息

    钉钉作为目前最热门的办公软件 在工作中大多数时间都在与他打交道 今天和大家分享一下如何用Python向钉钉发送消息 最终达到每日自动向指定群中发送销售日报 新建群机器人 首先打开群设置 点击智能群助手 选择添加自定义机器人 然后根据提示添加
  • 构造函数分类以及调用

    构造函数语法 类名 1 gt 构造函数 没有返回值也不写void 2 gt 函数名称与类名相同 3 gt 构造函数可以有参数的 因此是可以发生函数重载 4 gt 程序在调用对象时 会自动调用构造函数 无须手动调用 而且只会调用一次 析构函数
  • Servlet开发环境搭建

    Servlet是属于JAVA EE的范畴 是以JAVA SE为基础的 所以我们首先要配置JAVA的环境 不熟悉如何配置JAVA环境的可以参考 JAVA环境变量配置 这里我们的开发工具选择Eclipse Web容器选择Tomcat eclip
  • CentOS 7 vs CentOS 6新特性

    1 CentOS7 简介 CentOS Community Enterprise Operating System 中文意思是 社区企业操作系统 是Linux发行版之一 它是来自于Red Hat Enterprise Linux依照开放源代

随机推荐

  • 修改IP 脚本

    echo off echo echo 1 地税外网 echo 2 地税内网 echo 3 公司 echo 4 自动获取 echo echo 选择你要设置的网络 set p x if x 1 goto a if x 2 goto b if x
  • css中align-self属性是什么

    css中align self属性是什么 1 align self属性定义flex子项单独在侧轴 纵轴 方向上的对齐方式 2 align self多了个auto 默认值 表示继承自flex容器的align items属性值 实例 CSS co
  • 深度学习(二十八)基于多尺度深度网络的单幅图像深度估计

    基于多尺度深度网络的单幅图像深度估计 原文地址 http blog csdn net hjimce article details 50569474 作者 hjimce 一 相关理论 本篇博文主要讲解来自2014年NIPS上的一篇paper
  • 微信收付通V3支付

  • Selenium3+Python3框架之生成测试报告并发送邮件

    coding utf 8 Time 2019 10 18 Author carl dj import os import unittest import time import HTMLTestRunner from email mime
  • 关于Linux重新安装java环境报错

    警告 jdk 8u181 linux x64 rpm 头V3 RSA SHA256 Signature 密钥 ID ec551f03 NOKEY 准备中 100 软件包 jdk1 8 2000 1 8 0 181 fcs x86 64 已经
  • SpringMVC:从入门到精通,7篇系列篇带你全面掌握--六.JSON处理和全局异常处理

    Welcome Huihui s Code World 接下来看看由辉辉所写的关于SpringMVC的相关操作吧 目录 Welcome Huihui s Code World 前言 一 SpringMVC中json数据的处理 1 导入相关依
  • Unity 性能优化总结

    影响性能的因素 造成游戏性能瓶颈的主要原因分成以下几个方面 1 CPU 1 过多的 draw call 2 复杂的脚本或者物理模拟 2 GPU 1 顶点处理 过多的顶点 过多的逐顶点计算 2 片元处理 过多的片元 既可能是由于分辨率造成的
  • bubbo调用Failed to invoke remote method异常解决

    bubbo调用服务异常 com alibaba dubbo rpc RpcException Failed to invoke remote method getPlanFlowInfo provider dubbo 10 20 30 16
  • Tez 简介

    目录 一 Tez简介 二 Tez UI界面 三 Tez 日志 一 Tez简介 1 1 Tez 是支持 DAG 作业的开源计算框架 它可以将多个有依赖的作业转换为一个作业从而大幅提升 DAG 作业的性能 从本质上讲 Tez 组成非常简单 数据
  • asm: 实现打印“Hello, world!“

    使用汇编打印 Hello world 实现打印 Hello world 的汇编代码 代码详细剖析 实现打印 Hello world 的汇编代码 我们来直接贴代码 section text global start start mov edx
  • 【华为OD机试真题 JAVA】可以组成网络的服务器

    JS版 华为OD机试真题 JS 可以组成网络的服务器 标题 可以组成网络的服务器 时间限制 1秒 内存限制 262144K 语言限制 不限 在一个机房中 服务器的位置标识在 n m 的整数矩阵网格中 1 表示单元格上有服务器 0 表示没有
  • UI页面切换按钮随页面切换缩放

    选中按钮放大其余按钮缩小的 效果 using System Collections using System Collections Generic using UnityEngine public class BottomBarBtn M
  • No module named cv2 报错处理

    运行python脚本出现 No module named cv2 这时我们安装下opencv python依赖即可 python3 m pip install opencv python 转载于 https www cnblogs com
  • flutter for循环removeAt(i)数据遇到的问题

    通常都是for循环遍历从前往后顺序 这时候遇到符合条件的通过下标把该数据删掉 for int i 0 i lt 40 i if i 2 removeAt i 删一个数据不会出问题 如果要删多个数据就会有问题了 比如i为0时删了列表第一个 那
  • Windows安装Linux子系统

    win10更新了安装linux子系统的步骤 使之更加方便 只需要在CMD运行命令 wsl install 当然这会涉及很多默认的选项 Windows 命令提示符中输入以下命令 找到可供安装的 Linux 发行版列表 wsl list onl
  • LSPosed 安装教程(LSP框架安装教程)

    1 下载LSPosed模块 CSDN下载 Riru 版 LSPosed Riru Zygisk版 LSPosed Zygisk 或 github下载 LSPosed GitHub 2 打开Magisk 设置 开启 Zygisk 3 打开面具
  • 手把手教你玩转YOLOX--Windows(上)

    旷视开源的YOLOX其性能超越 YOLOv3 YOLOv4 和 YOLOv5 应不少小伙伴的要求 我在这里用手把手教学的方式展示一下YOLOX的搭建 上篇 下一篇将着重介绍YOLOX如何进行模型的训练 进阶篇介绍YOLOX的原理 代码讲解及
  • 卷积原理(卷积,padding填充,步长,多通道卷积)

    1 卷积 卷积可以用于对输入数据进行特征提取 特征提取的过程可以理解为通过卷积对输入特征进行加权运算 提取输入中的重要信息 卷积运算的过程就是通过卷积核扫描输入矩阵的元素 将卷积核和扫描对应的元素相乘再相加 得到一个输出 通过不断地滑动 得
  • 看书标记【R语言数据分析与挖掘实战】4

    第四章 数据预处理 4 1 数据清洗 缺失值处理 使用is na 判断缺失值是否存在 complete cases 可以识别样本数据是否完整从而判断缺失情况 删除法 na omit 函数移除所有含有缺失数据的行 data p 删除p列 替换