数据清洗

一、清洗数据

题目描述:

​ 利用申请号将申请表中的信息和授权表中的信息匹配起来,形成一张新的表,这张表要对应申请和授权两方面的信息。至于申请未授权,以及授权无申请信息的,酌情处理用于分析,无限制条件。

思路:

​ 一共两张表,申请号是两者的共同信息。我们可以参考之前所做过的一次作业,利用merge()函数,进行合并取交集即可。分布思路如下:

  • 读取数据

    • ​ 使用 readxl 包中的 read_excel() 函数,将数据读取到内存,之后使用 dplyr 包中的 left_join() 函数,采用左结合的方式,可以得到和助教一样的数据。

  • 处理数据

    • ​ 我们可以发现,合并之后的数据,出现了一些重复列:比如主分类号,日期,区属等信息,我们显然希望信息尽可能的完整,即 NA 值尽可能的较少。所以,我们建立在以下原则进行处理:对于重复的列,计算并比较两者中 缺省值数量,以缺省值较少的那个作为基准,之后进行比较,用另一列进行补充,或者相对完整列。删除掉另外一多于列并更改列名称即可。

  • 具体代码如下:

    • 读取数据

      • library("readxl")
        library("dplyr")
        DataSheet1 <- readxl::read_xlsx("D:\\Hwk_Of_DataScience\\DataForExercise5.xlsx"
                                        ,col_names = TRUE,col_types = NULL,sheet = 1,na = "NA",skip = 0)
        DataSheet2 <- readxl::read_xlsx("D:\\Hwk_Of_DataScience\\DataForExercise5.xlsx"
                                        ,col_names = TRUE,col_types = NULL,sheet = 2,na = "NA",skip = 0)
        new.sheet1 <- DataSheet1
        new.sheet2 <- DataSheet2
        new.fixed <- dplyr::left_join(new.sheet1,new.sheet2,by = "申请号")
        #去重
        new.fixed <- dplyr::distinct(new.fixed)
        
    • 处理数据

      • #比较各列
        > sum(is.na(new.fixed$主分类号.y))
        [1] 0
        > sum(is.na("地址.x"))
        [1] 0
        > sum(is.na("专利类型.x" ))
        [1] 0
        > sum(is.na( "区属.x" ))
        [1] 0
        > sum(is.na("月份.x"))
        [1] 0
        > sum(is.na("辖市.x"))
        [1] 0
        > sum(is.na("申请日.x" ))
        [1] 0
        > sum(is.na("邮编.x"))
        [1] 0
        #更该名称,删除列
        names(new.fixed)[names(new.fixed) == "主分类号.y"] = "主分类号"
        names(new.fixed)[names(new.fixed) == "地址.x"] = "地址"
        names(new.fixed)[names(new.fixed) == "申请日.x"] = "申请日"
        names(new.fixed)[names(new.fixed) == "辖市.x"] = "辖市"
        names(new.fixed)[names(new.fixed) == "月份.x"  ] = "月份"
        names(new.fixed)[names(new.fixed) ==  "区属.x" ] = "区属"
        names(new.fixed)[names(new.fixed) == "专利类型.x"] = "专利类型"
        new.fixed <- new.fixed[ , -which(colnames(new.fixed) %in% c("申请日.y" ,"辖市.y","主分类号.x",
                                                       "月份.y", "区属.y" ,"专利类型.y" ))]
        
      • 输出结果:

    • 将数据写入一个新的Excel文件

      • sheets <- list("sheet1" = DataSheet1,"sheet2" = DataSheet2,"sheet3" = new.fixed)
        openxlsx::write.xlsx(sheets,"D:\\Hwk_Of_DataScience\\DataForExercise5AfterCleaned.xlsx")
        
posted @ 2020-12-02 20:41  关河梦断  阅读(150)  评论(0)    收藏  举报