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編程工具進行開發的過程中,積累了一定的快捷方式,這將極大地提高我今后的開發效率。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM