数据清洗
一、清洗数据
题目描述:
利用申请号将申请表中的信息和授权表中的信息匹配起来,形成一张新的表,这张表要对应申请和授权两方面的信息。至于申请未授权,以及授权无申请信息的,酌情处理用于分析,无限制条件。
思路:
一共两张表,申请号是两者的共同信息。我们可以参考之前所做过的一次作业,利用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")
-
-



浙公网安备 33010602011771号