当前位置: 首页 > news >正文

R语言(数据导入,清洗,可视化,特征工程,建模)

  记录一下痛失的超级轻松的数据分析实习(线上),hr问我有没有相关经历,我说我会用jupyter book进行数据导入,清洗,可视化,特征工程,建模,python学和用的比较多,然后hr问我会不会R,我直接蒙了,它招募里面明明是写python和R会一款即可,我没接触过R啊,自然就实话实说了,结果。。。当然是寄了~

  算了反正个人感觉是和python差不多,但是能记住多少就得看我脑子了,我简单自学一下吧,下一期出python的数据导入,清洗,可视化,特征工程,建模那些,然后做个简单对比吧~

  R语言是一种编程语言和开发环境,主要用于数据分析和统计领域。它提供了丰富的统计分析和数据可视化功能,可以进行数据清洗、数据处理、建模和预测等各种数据分析任务。

1.安装与基础使用

(1)安装
【1】R语言

下载网址:https://cran.r-project.org/

【2】Rstudio

下载网址:https://www.rstudio.com/products/rstudio/

(下滑选择你电脑的版本)点击下载即可~不想那么麻烦的直接用我的安装包吧,给我点个赞就行了,栓Q:百度网盘链接:https://pan.baidu.com/s/1m6KX976JXM47xO7SpcSE8g?pwd=clyy 

【3】简单使用

2.基础语法

【1】变量赋值:使用“<-”或“=”符号将值赋给变量。

例如:x <- 10 或 x = 10。

【2】数据类型:R语言中的主要数据类型有数值(numeric)、字符(character)、逻辑(logical)和因子(factor)等。
  1. 数值(numeric):R语言的数值类型可以表示整数(如1, 2, 3)和浮点数(如1.5, 2.7)。在R中,数值类型使用内置的双精度浮点数表示。

  2. 字符(character):R语言的字符类型用于表示文本数据,如姓名、地址等。用双引号或单引号括起来的文本被当作字符类型。

  3. 逻辑(logical):类似bool,R语言的逻辑类型用于表示逻辑真(TRUE)和逻辑假(FALSE)。逻辑类型常用于条件判断和布尔运算。

  4. 因子(factor):类似于C语言中的枚举类型(enum)。它们都用于表示有限的类别数据,仅允许取特定的值,R语言的因子类型用于表示有限的类别数据。因子是通过将非数值类型的数据转换为离散的、有限的、按照特定顺序的类别来处理。

【3】向量:可以使用c()函数创建向量。

例如:x <- c(1, 2, 3)。

【4】列表:可以使用list()函数创建列表。列表可以包含不同类型的元素。

例如:my_list <- list(1, "apple", TRUE)。

【5】矩阵:可以使用matrix()函数创建矩阵。矩阵是二维的,可以包含相同类型的元素。

例如:my_matrix <- matrix(c(1, 2, 3, 4), nrow = 2, ncol = 2)。

【6】数据框:可以使用data.frame()函数创建数据框。数据框是类似于表格的结构,可以包含不同类型的列。

例如:my_dataframe <- data.frame(name = c("Alice", "Bob"), age = c(25, 30))。

【7】函数:可以使用function()函数创建函数。函数可以接受参数,并返回一个结果。

#R语言
my_function <- function(x, y) {z <- x + yreturn(z)
}
#类似于c语言
int f(x,y){int z;z=x+y;return z;
}
【8】条件语句:可以使用if-else语句进行条件判断。
#R
if (x > 10) {print("x is greater than 10")
} else {print("x is less than or equal to 10")
}
【9】循环语句:可以使用for循环或while循环进行重复操作。
#R
for (i in 1:5) {print(i)
}while (x < 10) {x <- x + 1print(x)
}

3.数据分析

(1)数据导入

【1】CSV文件:使用read.csv()函数导入CSV文件。

data <- read.csv("data.csv")

【2】Excel文件:使用readxl包中的read_excel()函数导入Excel文件。首先需要安装readxl包,然后使用以下代码导入文件。

install.packages("readxl")
library(readxl)data <- read_excel("data.xlsx")

【3】SPSS文件:使用haven包中的read_sav()函数导入SPSS文件。首先需要安装haven包,然后使用以下代码导入文件。

install.packages("haven")
library(haven)data <- read_sav("data.sav")

【4】SQL数据库:使用RODBC包或DBI包与数据库建立连接,并使用SQL查询从数据库中导入数据。首先需要安装对应的包,然后使用以下代码导入数据。此方法需要详细了解SQL语言和数据库连接配置。

install.packages("RODBC")
library(RODBC)conn <- odbcConnect("database_name", uid="username", pwd="password")
data <- sqlQuery(conn, "SELECT * FROM table_name")
odbcClose(conn)
(2)数据清洗

【1】缺失值处理

# 检测缺失值
is.na(data)# 删除包含缺失值的行
clean_data <- na.omit(data)# 创建逻辑向量指示不包含缺失值的行
complete_cases <- complete.cases(data)

【2】重复值处理

# 检测重复值
duplicated(data)# 删除重复的行
clean_data <- unique(data)

【3】数据转换

# 重命名变量
data$new_var <- data$old_var
data$new_var <- NULL # 删除变量# 修改变量类型
data$new_var <- as.numeric(data$old_var)
data$new_var <- as.character(data$old_var)# 创建新变量
data$new_var <- data$var1 + data$var2# 使用dplyr包进行数据转换
library(dplyr)
clean_data <- data %>%select(var1, var2) %>%filter(var1 > 0) %>%mutate(new_var = var1 + var2)

【4】数据排序

# 对数据框按照某一列排序
sorted_data <- data[order(data$var1), ]# 对向量排序
sorted_vector <- sort(vector)
(3)可视化
【1】基本绘图函数:R语言内置了一些基本的绘图函数,如plot()barplot()hist()
# 创建散点图
plot(x, y)# 创建条形图
barplot(heights)# 创建直方图
hist(data)
【2】ggplot2库:ggplot2是R语言中最流行的可视化库之一,提供了一种基于图层(layer)的绘图系统。使用ggplot2,可以创建包括散点图、条形图、线图、箱线图等各种图形。

# 安装ggplot2库
install.packages("ggplot2")# 使用ggplot2创建散点图
library(ggplot2)
ggplot(data, aes(x, y)) +geom_point()# 使用ggplot2创建条形图
ggplot(data, aes(x, y)) +geom_bar()# 使用ggplot2创建线图
ggplot(data, aes(x, y)) +geom_line()
【3】lattice库:lattice是另一个常用的可视化库,提供了一种基于网格(grid)的绘图系统。lattice库可以创建散点图、条形图、线图等,并支持分组、子图和条件绘图等复杂的可视化需求。
# 安装lattice库
install.packages("lattice")# 使用lattice创建散点图
library(lattice)
xyplot(y ~ x, data=data)# 使用lattice创建条形图
barchart(y ~ x, data=data)# 使用lattice创建线图
xyplot(y ~ x, data=data, type="l")
【4】plotly、ggvis、vega-lite等,没搜到教程,改天有空整理一下
(4)特征工程:是指对原始数据进行处理,以提取有用的特征,并为机器学习模型提供更具信息量和表达能力的输入。
1. 数据清洗:对数据进行清洗,包括处理缺失值、处理异常值、去除重复值等。可以使用函数如`na.omit()`处理缺失值,`outliers()`处理异常值,`duplicated()`去除重复值。
2. 特征选择:选择对目标变量有显著影响的特征。可以使用统计方法(如相关性分析、方差分析)或机器学习方法(如随机森林、LASSO回归)。
# 相关性分析
correlation <- cor(data)# 方差分析
anova_result <- aov(target_variable ~ ., data=data)# 随机森林特征重要性排序
library(randomForest)
rf_model <- randomForest(target_variable ~ ., data=data)
importance <- importance(rf_model)
3. 特征编码:将非数值型变量转换为数值形式,以便机器学习模型进行处理。可以使用函数如`factor()`将分类变量转换为因子,`dummyVars()`进行独热编码等。
# 将分类变量转换为因子
data$gender <- factor(data$gender)# 进行独热编码
library(DMwR)
dummy_data <- dummyVars(~., data=data)
encoded_data <- predict(dummy_data, newdata=data)
4. 特征缩放:将数值型特征进行缩放,以确保不同特征之间的量纲一致。常见的方法有标准化(将数据转换为均值为0,标准差为1的分布)和归一化(将数据缩放到0-1的范围内)。
# 标准化
scaled_data <- scale(data)# 归一化
normalized_data <- scale(data, center=FALSE, scale=apply(data, MARGIN=2, FUN=max) - apply(data, MARGIN=2, FUN=min))
5. 特征生成:通过原始特征的组合、变换或提取等方式生成新的特征。可以使用函数如`mutate()`进行特征生成。
# 通过组合生成新特征
library(dplyr)
generated_data <- data %>%mutate(new_feature = feature1 + feature2)# 通过变换生成新特征
generated_data <- data %>%mutate(new_feature = log(feature1))# 通过提取生成新特征
generated_data <- data %>%mutate(new_feature = substr(feature1, 1, 3))
(5)建模

1. 线性回归:使用`lm()`函数进行线性回归建模。

model <- lm(target_variable ~ ., data=data)
summary(model)

2. 逻辑回归:使用`glm()`函数进行逻辑回归建模。

model <- glm(target_variable ~ ., data=data, family=binomial)
summary(model)

3. 决策树:使用`rpart()`函数进行决策树建模。

library(rpart)
model <- rpart(target_variable ~ ., data=data)
printcp(model)

4. 随机森林:使用`randomForest()`函数进行随机森林建模。

library(randomForest)
model <- randomForest(target_variable ~ ., data=data)
print(model)

5. 支持向量机:使用`svm()`函数进行支持向量机建模。

library(e1071)
model <- svm(target_variable ~ ., data=data)
summary(model)

6. 朴素贝叶斯:使用`naiveBayes()`函数进行朴素贝叶斯建模。

library(e1071)
model <- naiveBayes(target_variable ~ ., data=data)
summary(model)

7. K近邻(K-Nearest Neighbors):使用`knn()`函数进行K近邻建模。

library(class)
model <- knn(train_data, test_data, target_variable, k=3)

8. 主成分分析(Principal Component Analysis):使用`prcomp()`函数进行主成分分析建模。

model <- prcomp(data, scale.=TRUE)
summary(model)

相关文章:

R语言(数据导入,清洗,可视化,特征工程,建模)

记录一下痛失的超级轻松的数据分析实习&#xff08;线上&#xff09;&#xff0c;hr问我有没有相关经历&#xff0c;我说我会用jupyter book进行数据导入&#xff0c;清洗&#xff0c;可视化&#xff0c;特征工程&#xff0c;建模&#xff0c;python学和用的比较多&#xff0c;…...

springboot 整合 Activiti6

1.添加maven依赖 <dependency><groupId>org.activiti</groupId><artifactId>activiti-spring-boot-starter-basic</artifactId><version>6.0.0</version> </dependency>2.添加配置 spring:activiti:check-process-definitio…...

微信小程序canvas画布实现直线自由缩放、移动功能

目录 实现效果 一、获取画布信息并绘制背景 二、绘制直线...

Cesium数据加载

文章目录 0.引言1.影像加载1.1Bing地图1.2天地图1.3ArcGIS在线地图1.4高德地图1.5OSM影像1.6MapBox影像 2.OGC地图服务2.1WMS2.2WMTS2.3TMS 3.GeoJSON数据加载4.KML数据加载5.TIFF数据加载6.点云数据加载7.地形数据加载7.1在线地形数据加载7.2本地地形数据加载 8.倾斜摄影模型数…...

【C++历练之路】探秘C++三大利器之一——多态

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; 前言&#x1f354;: 在计算机科学的广袤领域中&#xff0c;C多态性是一门令人着迷的技术艺术&#xff0c;它赋予我们的代码更强大的灵活性和可维护性。想象一下&#xff0c;你正在构建一个程序&#xff0c;需要适应不断…...

业务逐字稿

1.WEB端旅游线路发布模块 旅游公司在Web端点击新增旅游线路按钮&#xff0c;浏览器请求发送到Nginx&#xff0c;Nginx反向代理到网关&#xff0c;网关去找微服务&#xff0c;微服务实现具体的旅游线路发布功能 旅游公司工作人员在Web端点击新增旅游线路按钮&#xff0c;浏览器…...

微服务舞台上的“三步曲“:Spring Cloud 服务注册、服务发现与服务调用

在当今软件开发的舞台上&#xff0c;微服务架构已然成为引领潮流的主角。而在这场微服务的大戏中&#xff0c;Spring Cloud 以其强大的工具集成为关键演员&#xff0c;为我们呈现了一个完美的"三步曲"&#xff1a;服务注册、服务发现与服务调用。 第一步&#xff1a…...

中间件

在 Java 开发中&#xff0c;中间件是指位于应用程序和操作系统之间的软件层&#xff0c;它提供了一些通用的功能和服务&#xff0c;帮助简化开发和部署过程&#xff0c;提高系统的可靠性、性能和可扩展性。 常见的 Java 中间件包括&#xff1a; 1.应用服务器&#xff08;Appl…...

4D毫米波雷达——ADCNet 原始雷达数据 目标检测与可行驶区域分割

前言 本文介绍使用4D毫米波雷达&#xff0c;基于原始雷达数据&#xff0c;实现目标检测与可行驶区域分割&#xff0c;它是来自2023-12的论文。 会讲解论文整体思路、输入分析、模型框架、设计理念、损失函数等&#xff0c;还有结合代码进行分析。 论文地址&#xff1a;ADCNe…...

「优选算法刷题」:提莫攻击

一、题目 在《英雄联盟》的世界中&#xff0c;有一个叫 “提莫” 的英雄。他的攻击可以让敌方英雄艾希&#xff08;编者注&#xff1a;寒冰射手&#xff09;进入中毒状态。 当提莫攻击艾希&#xff0c;艾希的中毒状态正好持续 duration 秒。 正式地讲&#xff0c;提莫在 t 发…...

260:vue+openlayers 通过webgl方式加载矢量图层

第260个 点击查看专栏目录 本示例介绍如何在vue+openlayers中通过webgl方式加载矢量图层。在做这个示例的时候,采用vite的方式而非webpack的方式。这里的基础设置需要改变一下。 ol的版本7.5.2或者更高。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果 文…...

Android 8.1 相关修改

一些常用修改&#xff0c;做个记录&#xff0c;为了节约时间和防止踩坑。 一、修改默认中文 修改位置&#xff1a; build\make\target\product\full_base.mk 修改内容&#xff1a; # Put en_US first in the list, so make it default. PRODUCT_LOCALES : zh_…...

EG-2121CA (晶体振荡器 低抖动表面声波(SAW)振荡器)

在当今高度数字化的时代&#xff0c;稳定的信号传输显得尤为重要。若要实现信号的稳定传输&#xff0c;晶体振荡器必不可少。EG-2121CA&#xff0c;它是一款低抖动表面声波&#xff08;SAW&#xff09;振荡器设计的产品&#xff0c;凭借其出色的频率范围、稳定的电源电压和可靠…...

Django知识随笔

目录 1.如何再ajax中传输post数据&#xff1f; 2.在form表单中使用jquery序列化&#xff0c;input框过多。 1.如何再ajax中传输post数据&#xff1f; 在ajax传递的那个网址&#xff0c;会调用你路由的视图函数&#xff0c;在视图函数上面加一句 csrf_exempt 。写上之后会有提…...

Facebook 广告帐户:多账号运营如何防止封号?

Facebook目前是全球最受欢迎的社交媒体平台之一&#xff0c;拥有超过27亿活跃用户。因此&#xff0c;它已成为个人和企业向全球受众宣传其产品和服务的重要平台。 然而&#xff0c;Facebook 制定了广告商必须遵守的严格政策和准则&#xff0c;以确保其广告的质量和相关性&…...

酷开会员 | 用酷开系统点亮多彩休闲时刻

现代人的休闲方式多种多样&#xff0c;随着科技的发展和生活水平的提高&#xff0c;人们有了更多的选择。而电视&#xff0c;作为一个休闲娱乐的载体&#xff0c;在生活中扮演着重要的角色。 以前&#xff0c;电视是家家户户休闲娱乐的重要组成部分&#xff0c;现在&#xff0…...

分配土地(100%用例)C卷(JavaPythonC++Node.jsC语言)

从前有个村庄,村民们喜欢在各种田地上插上小旗子,旗子上标识了各种不同的数字。某天集体村民决定将覆盖相同数字的最小矩阵形的土地的分配给为村里做出巨大贡献的村民,请问,此次分配士地,做出贡献的村民中最大会分配多大面积? 输入描述: 第一行输入m和n,m代表村子的土…...

电源的纹波

【电源的“纹波”到底是什么&#xff1f;-哔哩哔哩】 https://b23.tv/28IIbtU 严谨的说&#xff0c;只有中间这种是纹波。 两类电源 线性电源通过自动调节内部电阻&#xff0c;修改输出电压&#xff0c;可以降低输入电压的波动。开关电源的原理&#xff0c;就会产生纹波。纹波…...

85.网游逆向分析与插件开发-物品使用-物品使用的逆向分析与C++代码的封装

内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;项目需求与需求拆解-CSDN博客 码云地址&#xff08;ui显示角色数据 分支&#xff09;&#xff1a;https://gitee.com/dye_your_fingers/sro_-ex.git 码云版本号&#xff1a;453dd83d54140d2e1ee65c9…...

JVM系列——垃圾收集器

对象存活判断 引用计数法 在对象中添加一个引用计数器&#xff0c;每当有一个地方引用它时&#xff0c;计数器值就加一&#xff1b;当引用失效时&#xff0c;计数器值就减一&#xff1b;任何时刻计数器为零的对象就是不可能再被使用的。 可达性分析算法 通过一系列称为“GC …...

那些年与指针的情仇(二)---二级指针指针与数组的那点事函数指针

关注小庄 顿顿解馋(&#xff61;&#xff65;∀&#xff65;)&#xff89;&#xff9e; 欢迎回到我们的大型纪录片《那些年与指针的爱恨情仇》&#xff0c;在本篇博客中我们将继续了解指针的小秘密&#xff1a;二级指针&#xff0c;指针与数组的关系以及函数指针。请放心食用&a…...

APPCRASH 文件管理器不停重启问题记录 (最后reinstall解决)以及重装后到底会怎样

问题诱因&#xff1a; 时间 2024年1月 &#xff08;严重怀疑&#xff0c;但无法实锤&#xff09; 是我不知道什么时候&#xff08;应该是近期&#xff09;安装了powertoy的预览版&#xff0c;系统不知道什么时候&#xff08;也应该是这两天&#xff09;安装了微软出品的PC man…...

导出excel功能,前端的解决方案

import { utils, writeFileXLSX } from xlsx // 导出excel async exportToExcel() {// 获取要导出的业务数据&#xff08;这里的接口自己改成实际使用的接口&#xff09;const res await getRuleListAPI(this.params)// 表头英文字段key&#xff08;这里的数据改成接口返回的实…...

【lesson24】MySQL索引的理解

文章目录 建立测试表插入多条记录查看插入结果中断一下---为何IO交互要是 Page重谈page理解单个page理解多个page 页目录单页情况多页情况复盘一下InnoDB 在建立索引结构来管理数据的时候&#xff0c;其他数据结构为何不行&#xff1f;B vs B聚簇索引 VS 非聚簇索引 建立测试表…...

Oracle篇—分区索引的重建和管理(第三篇,总共五篇)

☘️博主介绍☘️&#xff1a; ✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux&#xff0c;也在积极的扩展IT方向的其他知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章&#xff0c;并且也会默默的点赞收藏加关注❣…...

前端大厂面试题探索编辑部——第一期

目录 简介 题目 单选题 题解 A选项的Content-Security-Policy http-equiv属性 content属性 B选项的CSRF 使用CSRF Token 验证Referer和Origin头 C选项的HTTP Only D选项的防止SQL注入 输入验证和转义 简介 这个是一个长系列&#xff0c;我会以题目为导向&#xff…...

图扑 HT UI 5.0 全新升级,开箱即用!

为顺应数字时代的不断发展&#xff0c;图扑 HT UI 5.0 在原有功能强大的界面组件库的基础上进行了全面升级&#xff0c;融入了更先进的技术、创新的设计理念以及更加智能的功能。HT UI 5.0 使用户体验更为直观、个性化&#xff0c;并在性能、稳定性和安全性等方面达到新的高度。…...

数据结构----链表介绍、模拟实现链表、链表的使用

文章目录 1. ArrayList存在的问题2. 链表定义2.1 链表的概念及结构2.2 链表的组合类型 3. 链表的实现3.1 单向、不带头、非循环链表的实现3.2 双向、不带头节点、非循环链表的实现 4.LinkedList的使用4.1 什么是LinkedList4.2 LinkedList的使用4.2.1. LinkedList的构造4.2.2. L…...

微信小程序如何控制元素的显示和隐藏

目录 方式一:display 方式二:wx:if 有时在微信小程序元素的显示需要通过特定的条件,比如组件的显示,通常需要在主界面有指定操作。可以通过以下两种方式控制元素的显示和隐藏。 方式一:display 在wxml或者wxss中设置display样式可以控制元素显示情况,元素默认显示,可…...

解决ssh: connect to host github.com port 22: Connection timed out

当连接 GitHub 时无法连接到 22 端口时&#xff0c;可以尝试将端口更换为 443 首先&#xff0c;尝试使用以下命令从 GitHub 克隆仓库&#xff1a; $ git clone gitgithub.com:xxxxx/xxxx.git my-awesome-proj如果出现以下错误信息&#xff1a; Cloning into my-awesome-proj…...