- R語言數(shù)據(jù)可視化之美:專業(yè)圖表繪制指南
- 張杰
- 1543字
- 2019-09-20 14:52:42
1.4.4 數(shù)據(jù)的導(dǎo)入導(dǎo)出
1.?dāng)?shù)據(jù)文件的導(dǎo)入與導(dǎo)出
我們常用外部保存的數(shù)據(jù)文件來繪制圖表。此時,就需要借助可以導(dǎo)入數(shù)據(jù)的函數(shù)導(dǎo)入不同格式的數(shù)據(jù),包括CSV、TXT,以及Excel、SQL、HTML等數(shù)據(jù)文件。有時候,我們也需要將處理好的數(shù)據(jù)從R語言中導(dǎo)出保存。其中,我們在數(shù)據(jù)可視化中使用最多的就是前3種格式的數(shù)據(jù)文件。
(1)CSV格式數(shù)據(jù)的導(dǎo)入與導(dǎo)出
使用read.csv()函數(shù),可以導(dǎo)入CSV格式的數(shù)據(jù),并存儲為數(shù)據(jù)框形式。需要注意是:當(dāng)stringsAsFactors=TRUE時,R會自動將讀入的字符型變量轉(zhuǎn)換成因子,但是這樣很容易導(dǎo)致數(shù)據(jù)只按默認(rèn)字母順序展示。在導(dǎo)入大批量數(shù)據(jù)時,為了提高性能,盡可能分兩步走:
①顯式指定“stringsAsFactors = FALSE”;
②依次將所需要的數(shù)據(jù)列(向量)轉(zhuǎn)換為因子。
mydata<-read.csv("Data.csv", sep=", ", na.strings="NA", stringsAsFactors=FALSE)
使用write.csv()函數(shù),可以將data.frame的數(shù)據(jù)存儲為CSV文件
write.csv(mydata, file = "File.csv")
CSV文件主要有以下3個特點(diǎn)。
①文件結(jié)構(gòu)簡單,基本上和TXT文本的差別不大;
②可以和Excel進(jìn)行轉(zhuǎn)換,這是一個很大的優(yōu)點(diǎn),很容易進(jìn)行查看模式轉(zhuǎn)換,但是其文件的存儲大小比Excel小。
③由于其簡單的存儲方式,一方面可以減少存儲信息的容量,這樣有利于網(wǎng)絡(luò)傳輸以及客戶端的再處理;另一方面,由于是一堆沒有任何說明的數(shù)據(jù),其具備基本的安全性。所以相比TXT和Excel數(shù)據(jù)文件,我們更加推薦使用CSV格式的數(shù)據(jù)文件進(jìn)行導(dǎo)入與導(dǎo)出操作。
(2)TXT格式數(shù)據(jù)的導(dǎo)入與導(dǎo)出
使用read.table()函數(shù)不僅可以導(dǎo)入CSV格式的文件數(shù)據(jù),還可以導(dǎo)入TXT格式的文件數(shù)據(jù),并存儲為數(shù)據(jù)框數(shù)據(jù)。
mydata<-read.table("Data.txt", header = TRUE)
使用write.table()函數(shù)可以將data.frame的數(shù)據(jù)存儲為CSV文件:
write.table(mydata, file = "File.txt")
(3)Excel格式數(shù)據(jù)的導(dǎo)入與導(dǎo)出
使用xlsx包
的read.xlsx()函數(shù)和read.xlsx2()函數(shù)可以導(dǎo)入XLSX格式的數(shù)據(jù)文件。但是更推薦使用CSV格式導(dǎo)入數(shù)據(jù)文件。
mydata<- read.xlsx("Data.xlsx", sheetIndex=1)
也可以使用write.xlsx()函將數(shù)據(jù)文件導(dǎo)出為XLSX格式:
write.xlsx(mydata, "Data.xlsx", sheetName="Sheet Name")
需要注意的是:使用R ggplot2繪圖時,通常使用一維數(shù)據(jù)列表的數(shù)據(jù)框。但是如果有時候?qū)氲臄?shù)據(jù)表格是二維數(shù)據(jù)列表,那么我們需要使用reshape2包的melt()函數(shù)或者tidyr包的gather()函數(shù),可以將二維數(shù)據(jù)列表的數(shù)據(jù)框轉(zhuǎn)換成一維數(shù)據(jù)列表。
一維數(shù)據(jù)列表和二維數(shù)據(jù)列表的區(qū)別
一維數(shù)據(jù)列表就是由字段和記錄組成的表格。一般來說字段在首行,下面每一行是一條記錄。一維數(shù)據(jù)列表通常可以作為數(shù)據(jù)分析的數(shù)據(jù)源,每一行代表完整的一條數(shù)據(jù)記錄,所以可以很方便地進(jìn)行數(shù)據(jù)的錄入、更新、查詢、匹配等,如圖1-4-3所示。
圖1-4-3 一維數(shù)據(jù)列表
二維數(shù)據(jù)列表就是行和列都有字段,它們相交的位置是數(shù)值的表格。這類表格一般是由分類匯總得來的,既有分類,又有匯總,所以是通過一維數(shù)據(jù)列表加工處理過的,通常用于呈現(xiàn)展示,如圖1-4-4所示。
圖1-4-4 二維數(shù)據(jù)列表
一維數(shù)據(jù)列表也常被稱為流水線表格,它和二維數(shù)據(jù)列表做出的數(shù)據(jù)透視表最大的區(qū)別在于“行總計(jì)”。判斷數(shù)據(jù)是一維數(shù)據(jù)列表還是二維數(shù)據(jù)列表的一個最簡單的辦法,就是看其列的內(nèi)容:每一列是否是一個獨(dú)立的參數(shù)。如果每一列都是獨(dú)立的參數(shù)那就是一維數(shù)據(jù)列表,如果每一列都是同類參數(shù)那就是二維數(shù)據(jù)列表。
注意為了后期更好地創(chuàng)建各種類型的數(shù)據(jù)透視表,建議用戶在數(shù)據(jù)錄入時,采用一維數(shù)據(jù)列表形式的進(jìn)行數(shù)據(jù)錄入,避免采用二維數(shù)據(jù)列表的形式對數(shù)據(jù)進(jìn)行錄入。
2.缺失值的處理
有時候,我們導(dǎo)入的數(shù)據(jù)存在缺失值。另外,在統(tǒng)計(jì)與計(jì)算中,缺失值也起著至關(guān)重要的作用。R語言中主要有兩種類型的缺失數(shù)據(jù):NA和NULL。
(1)NA
在R中,使用NA代替缺失數(shù)據(jù)作為向量中的另外一種元素出現(xiàn)。我們可以使用is.na()函數(shù)來檢查向量或數(shù)據(jù)框中的每個元素是否缺失數(shù)據(jù)。我們先構(gòu)造一個含有缺失數(shù)據(jù)的數(shù)據(jù)框,然后講解使用tidyr包實(shí)現(xiàn)常用的缺失數(shù)據(jù)的處理方法,如表1-4-4所示。
表1-4-4 缺失值的處理
(2)NULL
NULL就是沒有任何東西,表示數(shù)據(jù)的空白,而并非數(shù)據(jù)的缺失,也不能成為向量或者數(shù)據(jù)框的一部分。在函數(shù)中,參數(shù)有可能是NULL,返回的結(jié)果也可能是NULL。我們可以使用is.null()函數(shù)判定變量是否為NULL。
- UML和模式應(yīng)用(原書第3版)
- Mastering Concurrency in Go
- 薛定宇教授大講堂(卷Ⅳ):MATLAB最優(yōu)化計(jì)算
- Easy Web Development with WaveMaker
- 深入淺出RxJS
- Python機(jī)器學(xué)習(xí)編程與實(shí)戰(zhàn)
- RabbitMQ Essentials
- Serverless Web Applications with React and Firebase
- 工業(yè)機(jī)器人離線編程
- C語言程序設(shè)計(jì)實(shí)踐
- 程序員的成長課
- C/C++代碼調(diào)試的藝術(shù)(第2版)
- PHP典型模塊與項(xiàng)目實(shí)戰(zhàn)大全
- 少年小魚的魔法之旅:神奇的Python
- Spring MVC Blueprints