R语言- 实验报告 - 数据清洗

一、 实训内容

  1. 能对基本的开发环境进行检验和错误排查,以及对新语言软件进行安装。
  2. 能使用Navicat for MySQL对MySQL数据库进行基本的连接测试,同时,在mysql中新建student数据库。能利用外部SQL脚本文件对数据库进行数据集的导入和初始化。
  3. 熟悉利用eclipse编程工具,新建项目和工具类对mysql数据库进行相应的操作,以及从该项目中导出可执行的jar文件。
  4. 利用R-3.6.1-win.exe运行,导出的可执行的jar文件。并编写一个“数据清洗.r”脚本文件,对C:\ inputdir目录下,导出的studentdata.txt数据文件进行数据清洗操作,包括过滤字段等操作。同时,在C:\outputdir目录下生成已经进行数据清洗的数据文件studentdata.txt 。

二、 实验课题目标

  1. 掌握基本的开发环境的搭建、检验和错误排查能力,熟悉新的开发语言。
  2. 熟悉使用Navicat for MySQL软件对MySQL数据库进行基本的操作。重要的是,能利用外部SQL脚本文件对特定的数据库进行数据集的导入和初始化。
  3. 掌握eclipse编程工具的使用,以及在编程过程中熟悉常用的快捷键,提高编程的效率。掌握如何编写一个常规的Java类程序,对mysql数据库进行进本的数据操作,以及能从Java项目中导出相应可执行的jar文件。
  4. 掌握R语言的基本语法,以及R-3.6.1软件的使用方法。能编写R的脚本程序,对特定目录下的数据集进行基本的数据清洗操作,其中包括:数据过滤,数据框字段名称的替换和重新构造一个数据框等操作。

三、 实验平台

  1. 系统:  Windows 10

   Intel(R) Core(TM)i7-7500U CPU @ 2.70GHz 2.90 GHz

     RAM 8.00GB

  1. 工具:

    R-3.6.1-win.exe  、Navicat for MySQL  、tbl_stuinfo-data.sql 、eclipse

四、 实施步骤

(一)   环境安装和检查

  1. Java开发环境检查

1)         检查JDK环境

首先对实验机器的java -version 和java进行检查,返回的信息皆正常。但是,在进行javac编译指令的检查时,返回了如图4-1的内容,显示的信息表明javac的环境变量没有配置。

图4-1  javac编译指令不可用

2)         配置JDK的环境变量。

重新配置JDK的系统环境变量。右击桌面的计算机图标选择属性,在左边的控制面板中点击“高级系统设置”。在高级选项卡中再点击“环境变量”,选择系统变量中的Path,并删除path中原有的JDK变量。

在环境变量控制面板中,点击“新建”,变量名为:JAVA_HOME  ,变量值为C:\Program Files\Java\jdk1.8.0_91  ,按确定保存。

图4-2 环境变量控制面板

图4-3 配置JAVA_HOME环境变量

再编辑Path ,并在首部追加:%JAVA_HOME%/bin;  内容。

图4-4  Path中添加内容后

重新查看JDK的版本,以及查看编译执行功能是否可用。

图4-5  javac编译功能可用

  1. R语言的安装

1)         安装R-3.6.1-win

双击已经下载好的R-3.6.1-win.exe文件,进行安装R语言。依次点击确定或者下一步,保持默认的安装配置即可。如图4-6,是R-3.6.1安装结束的界面,点击关闭。

图4-6  R-3.6.1安装结束

2)         打开R程序。

图4-7,为R-3.6.1程序首次打开的界面。

图4-7 初次打开R

(二)   数据库数据提供

  1. 建立数据库

1)         连接数据库

使用Navicat for MySQL连接MySQL数据库前,填完基本的连接信息后,点击测试连接到数据库,如图4-8所示,即为连接前的测试。

图4-8 连接测试

在点击两次确认之后,再上机“本地”即可连接到实验所需的MySQL数据库。

图4-9 连接到MySQL数据库

2)         新建数据库

在“本地”上鼠标右键,选择“新建数据库”,在面板中填入如图4-10的内容,再按确定即可。

图4-10 新建数据库

  1. 初始化数据库

双击建立好的数据库“student”,并在该数据库名称上右键,选择“运行SQL文件”。找到外部资源的tbl_stuinfo-data.sql文件,点击开始。

图4-11 运行sql脚本

点击关闭,回到Navicat for MySQL主面板。在按F5键刷新界面,会发现student数据库下多出名称为tbl_stuinfo的数据表,双击打开,检查student库的数据是否乱码。如果是乱码,重新建立数据库。

图4-12 数据库初始化成功

至此,便可关闭Navicat for MySQL软件,但必须保持该数据库在后台正常运行。

(三)   编写数据获取工具

  1. 新建java项目。打开eclipse工具,在Package Explorer面板右键new->Java Project ,新建项目名为:sdms-v2 即可。
  2. 导入jar依赖。在sdms-v2工程名称上右键,选择Build Path -> Add External Archive...  ,找到外部的mysql-connector-java-5.1.7-bin.jar文件,再确认并返回主界面。
  3. 编写程序类

分别在该项目中新建:MainClass、StudentBean、StudentDao、TestConnection和TxtUtil类。

1)         MainClass类

其中MainClass为主类,功能是创建一个dao对象并调用写文件的方法,关键代码如下:


StudentDao dao = new StudentDao();

List<StudentBean> list = dao.findAll();

new TxtUtil().writeToFile(list);

2)         StudentBean类。StudentBean定义学生对象拥有的属性,同时,重写了构造方法。关键代码如下


public StudentBean(Integer stuid, String name, boolean sex, String mobile, Timestamp birthday, String place,

String major, String note) {

super();

this.stuid = stuid;

this.name = name;

this.sex = sex;

this.mobile = mobile;

this.birthday = birthday;

this.place = place;

this.major = major;

this.note = note;

}

3)         StudentDao类。该类定义了一个连接对象、执行sq1命令的对象和结果集对象。在预处理sql语句的同时,执行了sql语句,并把结果交给res进行返回。核心代码如下:


pst = conn.prepareStatement(sql);

res = pst.executeQuery();

while(res.next()){

Integer stuid = res.getInt("stuid");

String name   = res.getString("name");

boolean sex   = res.getBoolean("sex");

String mobile = res.getString("mobile");

Timestamp birthday = res.getTimestamp("birthday");

String place  = res.getString("place");

String major  = res.getString("major");

String note   = res.getString("note");

StudentBean studentBean = new StudentBean(stuid,name,sex,mobile,birthday,place,major,note);

list.add(studentBean);

}

4)         TestConnection类为MySQL数据库连接类。其先加载了驱动程序类,再获取一个连接对象,并返回,最后测试是否连接成功。关键代码如下:


static{

try{

Class.forName("com.mysql.jdbc.Driver");

}catch(Exception ex){

ex.printStackTrace();

}

}

public static Connection getConnection() throws Exception{

Connection conn=DriverManager.getConnection("jdbc:mysql://172.25.6.200:3306/student?useUnicode=true&characterEncoding=UTF8","root","");

return conn;

}

public static void main(String[] args) throws Exception{

Connection c=getConnection();

System.out.println("c="+c);

c.close();

}

5)         TxtUtil类为工具类,作用是把mysql的数据写入到文本文件中,核心的代码如下:


FileWriter fw=null;

BufferedWriter bw=null;

try {

fw=new FileWriter(  new File(OUTFILE)   );

bw=new BufferedWriter(fw);

bw.write(HEADER);

bw.newLine();

for(StudentBean stu:list){

bw.write(stu.getStuid()+FLAG);

bw.write(stu.getName()+FLAG);

bw.write(stu.isSex()?"男" +FLAG:"女"+FLAG);

bw.write(stu.getMobile()+FLAG);

bw.write(stu.getBirthday().toString().substring(0, 10)+FLAG);

bw.write(stu.getPlace()+FLAG);

bw.write(stu.getMajor()+FLAG);

bw.write(stu.getNote());

bw.newLine();

}

bw.flush();

} catch (Exception e) {

e.printStackTrace();

}finally{

try {

if(fw != null){fw.close();}

} catch (Exception e) {

e.printStackTrace();

}}}

上述的项目代码在eclipse中调试无误之后,便可将生成文件的位置设置为C:\ inputdir目录下,生成的数据文件为studentdata.txt  。

  1. 导出jar文件。当上述的代码调试成功之后,以及生成文件的位置和名称设置好之后。在该项目sdms-v2的名称上右键,依次选择Export..->Java结构下的Runnable JAR file 。

图4-13 选择Runnable JAR file

之后,点击Next>  ,将Export destination:位置指定到C:\目录下,保存的文件名为:stu.jar  ,再单击Finish即可。至此编写数据获取工具步骤,结束。

(四)   R语言数据清洗处理

  1. 执行stu.jar工具。

在R x64 3.6.1中使用setwd(“C:\”)命令,将R的工作空间指定到C:\目录下。再使用命令shell.exec("jar stu.jar") ,将mysql数据库student中的数据,在C:\ inputdir目录下,生成的studentdata.txt数据文件。如图4-14,为该文件的样式。

图4-14  studentdata.txt

  1. 编写R脚本文件。

1)         新建程序脚本

打开R x64 3.6.1软件,点击菜单栏的文件->新建程序脚本 。在打开的脚本编辑器中输入相应的脚本内容。之后保存到C:\目录下,为数据清洗.r文件。

2)         脚本内容如下:


inputdir<-"./inputdir"

outputdir<-"./outputdir"

for(filename in dir(inputdir)){

print(filename)

inputpath<-sprintf("%s/%s",inputdir,filename)      data<-read.table(inputpath,header=TRUE,sep=",")

print("读取的文件数据如下:")

cat("-------------------end---------------------\n")

cnames<-colnames(data)

cnames[cnames=="stuid"]<-"编号"

cnames[cnames=="name"]<-"姓名"

cnames[cnames=="sex"]<-"性别"

cnames[cnames=="mobile"]<-"手机号"

cnames[cnames=="birthday"]<-"出生年月日"

cnames[cnames=="place"]<-"籍贯"

cnames[cnames=="major"]<-"专业"

cnames[cnames=="note"]<-"备注"

colnames(data)<-cnames

data<-data[c("姓名","性别","出生年月日","籍贯")]

#print(data,right = FALSE)

data<-data[data$籍贯=="广西桂林",]

print(data,right = FALSE)

outputpath<-sprintf("%s/%s",outputdir,filename)        write.table(data,outputpath,row.names=FALSE,sep=",")

}

  1. 脚本文件功能介绍。如图4-15,详细注释:

图4-15 详细注释-数据处理

  1. 执行脚本并生成数据处理的文件。由于R x64 3.6.1已经将C:\作为当前的工作目录,所以直接在R中运行命令:source("数据清洗.r") 。就可以在C:\outputdir目录下生成已经进行数据清洗的studentdata.txt数据集文件。如图4-16所示:

如图4-16  数据清洗后的studentdata.txt文件

五、 实验成果

当运行在R语言中,运行命令shell.exec("jar stu.jar") ,会将mysql数据库student中的数据,在C:\ inputdir目录下,生成的studentdata.txt数据文件。如图5-1所示:

图5-1 数据清洗前的数据集

当在R中,运行命令:source("数据清洗.r") 。即,运行编写的数据清洗.r脚本文件,会在C:\outputdir目录下自动生成已经进行数据清洗的studentdata.txt文件。

图5-2 数据清洗后的数据集

两相对比之下,可以得出总结:本实验先是利用编写的stu.jar可执行文件,从mysql数据库student中导出数据集studentdata.txt 。再通过在R语言中编写脚本并运行脚本的方式,将数据集studentdata.txt进行数据清洗操作,并生成了新的studentdata.tx数据文件,本实验顺利完成。

六、 实训总结

关于本次实验的经验收获和实验总结,可分总结如下:

  1. 在对实验机器的java -version 和java进行检查时,返回的信息皆正常。但是,唯独javac编译指令对于实验机器而言,无法识别。说明javac编译环境异常,本实验统一对JDK进行环境配置。
  2. 在使用Navicat for MySQL连接MySQL数据库,并新建数据库,以及使用SQL脚本文件进行数据库的数据导入和库的初始化操作过程中,应该格外地注意编码的问题,否则在进行jar文件工程编程时,会发生乱码的现象。
  3. 同时,如果导出的studentdata.txt文件中,部分的数据格式属性的编码与R脚本中设置的不一致,也会发生乱码的现象。并且将会加大错误排查的难度和精力。
  4. 在R x64 3.6.1软件中,切换R语言的工作目录时,需要将C:盘作为工作空间,对于部分权限级别较高的机器而言,将会是无法切换的。这时候,需要以管理员的方式运行R x64 3.6.1软件。
  5. 整体而言,本实验的思路是:先利用编写的stu.jar可执行文件,从mysql数据库student中导出数据集studentdata.txt 。再通过在R语言中编写脚本并运行脚本的方式,将数据集studentdata.txt进行数据清洗操作,并生成了新的studentdata.tx数据文件。
  6. 通过本实验,基本上能对开发环境进行初步的检验和错误排查,同时,能使用Navicat for MySQL对MySQL数据库进行基本的连接测试。以及,在mysql中新建数据库并利用外部SQL脚本文件对数据库进行数据集的导入和初始化。
  7. 在利用eclipse编程工具进行开发的过程中,积累了一定的快捷方式,这将极大地提高我今后的开发效率。

原文地址:https://www.cnblogs.com/Raodi/p/12155285.html

时间: 2024-11-06 19:03:29

R语言- 实验报告 - 数据清洗的相关文章

C语言实验报告(三)

C语言实验报告(三) 实验项目: 4.3.1:if语句的应用 4.3.2:switch-case的应用 4.3.3:switch-case嵌套if语句的应用 4.3.4:switch-case结构嵌套的应用 4.3.5:分析程序 项目实训:计算器的实现 姓名:徐志平 实验地点:家  实验时间:2020.3.28 一.实验目的与要求 1.掌握C语言逻辑值的表示方法(0代表“假”,1代表“真”) 2.学会正确地使用关系表达式和逻辑表达式 3.掌握各种形式的if语句语法和使用方法.if语句中if和el

R语言——实验4-人工神经网络(更新中)

带包实现: rm(list=ls()) setwd("C:/Users/Administrator/Desktop/R语言与数据挖掘作业/实验4-人工神经网络") Data=read.csv("sales_data.csv")[,2:5] library(nnet) colnames(Data)<-c("x1","x2","x3","y") model1=nnet(y~.,data

C语言实验报告三

C语言程序设计实验报告 姓名:林顺显 实验地点:家 实验时间:2020.3.29 实验项目: 4.3.1:if语句的应用 4.3.2:switch-case的应用 4.3.3:switch-case嵌套if语句的应用 4.3.4:switch-case结构嵌套的应用 4.3.5:分析程序 项目实训:计算器的实现 一.实验目的与要求 1.掌握C语言逻辑值的表示方法(0代表"假”,1代表"真").2.学会正确地使用关系表达式和逻辑表达式.3.掌握各种形式的if语句语法和使用方法,

C语言实验报告(四)

C程序设计实验报告 姓名:杨静  实验地点:家  实验时间:2020.04.10 实验项目 1.用for语句实现循环 2.用while循环语句实现循环 3.用do-while语句实现循环 4.用while语句和for语句配合实现循环 5.用for语句嵌套实现循环 一.实验目的与要求 1.熟练地掌握while,do_while及for语句实现循环的方法. 2.了解3种循环语句的区别和转换.各自的适应性.循环嵌套的使用. 3.掌握如何在循环语句种使用break,continue语句,改变程序流程.

C语言实验报告四

C程序设计实验报告 实验项目: 5.3.1-2求数列的前n项和:5.3.2水仙花数:5.3.4十进制转换:5.3.5-1百马百担问题:5.3.5-2求等差数列:5.3.5-3食品分配问题:九九乘法表. 姓名:熊晓东    实验地点:家   实验时间:2020.04.12 一.实验目的与要求 1.熟练地掌握while,do-while及for语句实现循环的方法.2.了解3种循环语句的区别和转换,各自的适应性,循环嵌套的作用.3.掌握如何在循环语句中使用break,continue语句,改变程序流程

c语言实验报告

一.实验题目,设计思路,实现方法 1.实验题目 11-6 方阵循环右移 本题要求编写程序,将给定n×n方阵中的每个元素循环向右移m个位置,即将第0.1.?.n?1列变换为第n?m.n?m+1.?.n?1.0.1.?.n?m?1列. 12-7 输出大写英文字母 本题要求编写程序,顺序输出给定字符串中所出现过的大写英文字母,每个字母只输出一遍:若无大写英文字母则输出"Not Found". 13-4 使用函数的选择法排序 本题要求实现一个用选择法对整数数组进行简单排序的函数. 14-2 删

C语言实验报告(五) 两个正整数的最大公约数

编程实现求两个正整数的最大公约数,要求计算最大公约数用函数fun(int a,int b)实现. #include<stdio.h>void main(){  int n,a,b;  int fun(int a,int b);  printf("please input a,b:");  scanf("%d,%d",&a,&b);  n=fun(a,b);  printf("%d,%d的最大公约数为%d",a,b,n)

C++实验报告

C++语言实验报告 班级:计科1501 学号:1508030130 姓名:刘琦 一.实验目的 1.掌握面向对象编程的基本思想 2.培养解决实际问题的能力 3.熟练掌握VC++6.0调试环境 二.实验题目 分别定义Teacher (教师)类和Cadre (干部)类,采用多重继承方式由这两个类派生出新类Teacher_Cadre (教师兼干部)类.要求: (1)在两个基类中都包含姓名.年龄.性别.地址.电话等数据成员. (2)在Teacher 类中还包含数据成员title(职称),在Cadre 类中

R语言中文社区历史文章整理(类型篇)

R语言中文社区历史文章整理(类型篇) R包: R语言交互式绘制杭州市地图:leafletCN包简介 clickpaste包介绍 igraph包快速上手 jiebaR,从入门到喜欢 Catterplots包,让你绘制不一样的图 今天再来谈谈REmap包 ggplot2你需要知道的都在这... R访问数据库管理系统(通过RODBC包和RMySQL包两种方式) NLP--自然语言处理(三)text2vec包 Rattle:数据挖掘的界面化操作 借助caret包实现特征选择的工作 R语言的高质量图形渲染