数据科学导论课件第四章数据整理案例_第1页
数据科学导论课件第四章数据整理案例_第2页
数据科学导论课件第四章数据整理案例_第3页
数据科学导论课件第四章数据整理案例_第4页
数据科学导论课件第四章数据整理案例_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1数据科学导论 第四章 数据整理和清理案例1数据科学导论 第四章 数据整理和清理案例本章导言整理及清理数据是任何数据科学家必定会遇到的问题. 数据存储格式千差万别,不存在统一的方法.本章通过例子介绍如何进行数据整理和清理. 本章处理后的数据可能在后面章节用到.一般的“教科书数据”往往都不需要多少加工就可以直接使用, 所以本章可作参考或者自学之用. 2本章导言整理及清理数据是任何数据科学家必定会遇到的问题. 23主要内容一 GDP 数据案例二 世界卫生组织案例之一三 世界卫生组织案例之二四 数据中的缺失值五 本章的python代码3主要内容一 GDP 数据案例4一 GDP 数据案例4一 GDP

2、数据案例GDP数据案例例4.1 各国按支出类型分列的本地生产总值支出数据(GDP1.csv), 该数据涉及220 个国家的9 个指标及最长47 年(1970 至2016 年) 的记录, 单位均为美元值.该数据是矩形数据, 有83060 行及4 列.数据共包括220 个国家, 9 个指标及最多47 年的记录, 理论上应该有220*9*47 = 93060 个记录, 但由于不一定所有国家都提供了同样多的指标, 对于每个指标也不一定提供了那么多年, 因此实际上只有83060 条观测值(行).5GDP数据案例例4.1 各国按支出类型分列的本地生产总值支数据相关符号及含义6数据相关符号及含义6整理成“观

3、测值-变量”矩形数据形成每个国家各个时期不同指标的多元时间序列(如: 行代表年份, 每列一个经济指标);形成每年的不同国家各个指标的横截面数据(如: 行代表国家或地区, 每列一个经济指标);形成单项指标的各个时期不同国家的多元时间序列(如: 行代表年份, 每列一个国家).7整理成“观测值-变量”矩形数据形成每个国家各个时期不同指标的形成2016年各国的多指标数据第1步 导入tidyverse包,读入GDP1.csv数据.GDP1=read.csv(GDP1.csv)levels(GDP1,3)=paste0(V,1:9) #简化名字library(tidyverse)tb=as.tibble(

4、GDP1)8形成2016年各国的多指标数据第1步 导入tidyverse形成2016年各国的多指标数据第2步 整理GDP1.csv数据.tb2016 % #选中2016之后去掉Year列spread(key = Item, value = Value)#转换Item元素为列, Value为值tb% #原始数据 %是程序包purrr 提供的一个“管道” 性质的算子, 可以把一系列操作串起来而不用每次存一个对象.9形成2016年各国的多指标数据第2步 整理GDP1.csv数形成2016年各国的多指标数据subset(Year=2016)% #选择2016年select(-Year)% #选择Yea

5、r之外的变量也可以用下面一行spread(key = Item, value = Value)% #做转换ggplot(., aes(x = V4, y = V5) +geom_point() + geom_smooth() # 选V4, V5作散点图并拟合loess曲线10形成2016年各国的多指标数据subset(Year=20形成日本各个时期不同指标的多元时间序列library(magrittr) #用于调用算子%$%#第一种方法: 固有R函数画图. 前四行产生数据, 最后三行画图tb %subset(Country.or.Area=Japan)% #选定日本select(-Countr

6、y.or.Area)% #选择除国家、地区之外的变量spread(key = Item,value = Value)% #经济指标为列, 时间为行select(-Year)%ts(start=1970,end=2016)% #标为时间序列plot(plot.type=single,col=11:19,lty=1:9)%$% #时间序列图legend(topleft,paste0(V,1:9),col=11:19,lty=1:9,cex=.7) #图例11形成日本各个时期不同指标的多元时间序列library(mag形成日本各个时期不同指标的多元时间序列#第二种方法: ggplot画图. 前两行产

7、生数据, 最后三行画图tb %subset(Country.or.Area=Japan)% #选国家ggplot(aes(x =Year, y = Value) +geom_line(aes(color = Item), size = 1) +theme_minimal()12形成日本各个时期不同指标的多元时间序列#第二种方法: ggp形成各个时期不同国家的多元时间序列只选V6 (GDP)一个经济指标, 先形成以时间为行, 以国家为列的数据(赋值给对象GDP), 然后挑选金砖五国的列(列号: 28; 44; 95; 163; 182), 再用函数ts 转换成时间序列类型, 最后画出图4.3.1

8、3形成各个时期不同国家的多元时间序列只选V6 (GDP)一个经形成各个时期不同国家的多元时间序列#产生以时间为行, 以国家为列的只有GDP(V6)一个指标的数据GDP=tb %subset(Item=V6)%select(-Item)%spread(key = Country.or.Area,value = Value)#准备选择BRICS国家, 下面重设国家名字(原数据是很长的国家全名)BS=c(Brazil,China,India,Russia,South Africa)GDP,c(28,44,95,163,182)% #只取金砖国家的列ts(start=1970,end=2016)%pl

9、ot(plot.type=single,col=1:5,lty=1:5)%$%legend(topleft,BS,col=1:5,lty=1:5,cex=.7)14形成各个时期不同国家的多元时间序列#产生以时间为行, 以国家15二 世界卫生组织案例之一15二 世界卫生组织案例之一世界卫生组织案例选取 WHO Data 名下Demographic and socioeconomic statistics 组和Risk factors 组的共11个数据集.每个数据集仅表明一些国家或地区少数年份的单一指标. 希望能够选择最近的年份把这些数据文件的内容放到一个数据集中, 形成代表国家或地区的行及代表不

10、同指标的列.16世界卫生组织案例选取 WHO Data 名下Demograp11个数据文件及说明1711个数据文件及说明17数据提取NN=c(D1,D12,D13,D15,D16,D17,D18,D2,D5,D6,D7)Files=paste0(NN,.csv)DF=lapply(Files, read.csv)a=list(a=c(2,5,1,7),b=list(c(1:9,89,-1),New,Happy), LETTERS)a$a2a1418数据提取NN=c(D1,D12,D13,D15数据提取DF=list() #定义一个空list, 下面再往其中赋值for (i in 1:lengt

11、h(Files) DFi=read.csv(Filesi)lapply(DF, names)19数据提取DF=list() #定义一个空list, 下面再往删除多余的行和列U=NULLfor(i in 1:length(DF) U=unique(c(U, unique(as.character(DFi,1)Trash=c(1,2,3,4,footnoteSeqID)U=setdiff(U,Trash) #集合差: 去掉TrashDF=lapply(DF, function(x) xx,1%in% U, ) #只取trash之外的部分DF=lapply(DF, function(x) selec

12、t(x,-Value.Footnotes) #去掉注释列20删除多余的行和列U=NULL20把多个数据合并成一个数据x=DF1for(i in 2:length(NN) x=merge.data.frame(x,DFi,by=Country.or.Area)write.csv(x,DP.csv,s = FALSE) #把合并的结果数据存成csv文件21把多个数据合并成一个数据x=DF12122三 世界卫生组织案例之二22三 世界卫生组织案例之二世界卫生组织案例之二选择10 个数据, 这些数据在网站上的名字及含义如下表23世界卫生组织案例之二选择10 个数据, 这些数据在网站上的

13、名输入并识别数据library(stringr)RFiles=c( R1.csv , R10.csv, R11.csv, R13.csv, R14.csv, R15.csv, R2.csv, R6.csv, R8.csv, R9.csv)RN=str_sub(RFiles,1,-5) #选取没有扩展名.csv的字符串: #第1到倒数第5个(-5)RS=lapply(RFiles, function(x) read.csv(x,na.strings = -)24输入并识别数据library(stringr)24删除多余的行和列library(tidyverse)Trash=c(1,footnot

14、eSeqID,10,11,2,3,4,5,6,7,8,9)%!in% - function(x,y)!(%in%(x,y) #等价于!(x%in%y)RS=lapply(RS, function(x) xx,1%!in% Trash, )#只取Trash之外的行RS=lapply(RS, function(x) select(x,-Value.Footnotes) #去掉注释列25删除多余的行和列library(tidyverse)25合并数据IA=c(2,3,6,7) #没有性别或区域的4个变量RNIA=R10 R11 R15 R2IG=c(1,4,5,8) #3个GENDER, 将转换成1

15、2个变量RNIG=R1 R13 R14 R6IR=c(9:10) #2个RESIDENCE.AREA(不考虑总和Total),#IR将转换成4个变量RNIR=R8 R9S=c(Female, Male, Both sexes) #标记GENDER的水平R=c(Rural, Urban) #标记RESIDENCE.AREA的水平26合并数据IA=c(2,3,6,7) #没有性别或区域的4个变其他问题levels(RR$R2)2=str_sub(levels(RR$R2)2,2,4) #去掉第二个水平中的%as.character%as.numeric()return(Z)27其他问题levels

16、(RR$R2)2=str_sub(l28四 数据中的缺失值28四 数据中的缺失值缺失值的审视与标记缺失值已经标明的情况数据中往往有缺失值, 首先假定缺失值是用字符NA标记的, 这是R 系统可以自动识别的标准记号. 对于这种数据对象, 可以使用程序包mice9的函数md.pattern (对应于英文missing data pattern) 可以得到一个数据的缺失值的基本情况. library(mice)md.pattern(DRmix,26:32)29缺失值的审视与标记缺失值已经标明的情况29缺失值的审视与标记缺失值未标明的情况如果原始数据没有注明有没有缺失值, 人们不可能在读入文件时猜测哪些

17、值会缺失, 这时就利用“手工” 程序和逻辑判断来“捕捉” 缺失值.如原始数据已经说明缺失值的标记, 则在读入时就可以自动标出缺失值. 比如, 例4.4的缺失值来自文件R6.csv, 而且缺失值是用- 标记的, 在读入该数据时加入一个选项na.strings=- 来自动把- 标为NA. 请读者比较下面的运算(对R6.csv 最后两个变量的汇总):30缺失值的审视与标记缺失值未标明的情况30缺失值的审视与标记31缺失值的审视与标记31删除缺失值的方法及问题默认删除 x=c(3,7,4.5,6,21,NA,-5) mean(x)1 NA mean(x,na.rm=TRUE)1 6.083333除了n

18、a.rm 选项之外, 还有一些选项如na.action = na.exclude 和na.action = na.omit 之类如同删除一样.32删除缺失值的方法及问题默认删除32删除缺失值的方法及问题直接删除相关的行或列library(tidyverse)DRmix=read_csv(DRmix.csv) #以tibble形式Total=DRmix,-1%dim()%prod()%print() #数据数目总数#删除相应缺失行后剩余数目: Row_omit=DRmix,1%na.omit()%dim()%prod()%print()1 430933删除缺失值的方法及问题直接删除相关的行或列3

19、3删除缺失值的方法及问题#删除3个缺失列后剩余数目: Col_omit=DRmix,-1%select(-R6M,-R6F,-R6B)%dim()%prod()%print()1 4788 Total-Row_omit #删除相应缺失行后实际删除的数目1 992 Total-Col_omit #删除相应3个缺失列后实际删除的数目1 51334删除缺失值的方法及问题#删除3个缺失列后剩余数目:34用认定值或某些准则来填补缺失值用认定的值来填补name=c(Lucy,Barbara,Tom,Zina,John,Janet)hight=c(1.6,1.7,NA,1.75,NA,1.8)gender=

20、c(Female,Female,Male,NA,Male,Female)(z=data.frame(name,hight,gender)z$hightis.na(z$hight)=c(1.85,1.9)z$genderis.na(z$gender)=Female; z35用认定值或某些准则来填补缺失值用认定的值来填补35用认定值或某些准则来填补缺失值用相应列的均值、中位数来填补下面用程序包Hmisc12的函数impute来实现对缺失值的填补 library(Hmisc) x=c(3,7,NA,21,NA,10000) impute(x,fun=mean) #用均值填补1 2 3 4 5 63.

21、00 7.00 2507.75* 21.00 2507.75* 10000.00 impute(x,median) #用中位数填补36用认定值或某些准则来填补缺失值用相应列的均值、中位数来填补3利用可预测模型来填补缺失值w=read.table(dermatology.data,sep=,header = FALSE,na.strings = ?)for (i in (1:ncol(w)-34)w,i=factor(w,i)library(VIM)aggr_plot - aggr(w, col=c(navyblue,red), numbers=TRUE, sortVars=TRUE,cex.axis=.25, gap=3, ylab=c(Histogram of missing data,Pattern)37利用可预测模型来填补缺失值w=read.table(derK 最近邻方法填补library(VIM)library(laeken)getwd()w=read.table(dermatology.data,sep=,he

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论