- R數據科學實戰:工具詳解與案例分析
- 劉健 鄔書豪
- 1098字
- 2019-08-01 11:34:26
1.2 readr——進階數據讀取
'eadr'包是R語言世界級大神之一Hadley Wickham主導開發的一個數據讀取包。相較于'utils'包里的讀取函數,'readr'包主要擁有三點優勢,具體如下。
1)更快。就平均讀取速度而言,'readr'包里的'read_csv'一般要比'read.csv'快三到十倍不等。
2)默認設置更簡潔。默認情況下,'readr'包會自動解析每列的數據類型,并顯示解析結果,這樣可以更加直觀地看到讀取后的數據類型是否符合預期,而且無須設置'stringAsFactors'。
3)對數據類型的解析更準確。'utils'包中提供的'read.table'函數在甄別一列數據的屬性時,只會對起始5行的觀測值類型進行評估,并以此決定該列全部數據的類型。而'readr'中的函數默認評估1000行的觀測值后再決定數據的類型。
'readr'包中常用的數據讀書取函數包括'read_delim'、'read_fwf'、'read_lines'、'read_log'和'read_table'。其中'read_delim'屬于常見數據讀取'read_csv/read_csv2/read_tsv'的母函數,所以也可以直接調用子函數。
read_delim
常用分隔符文件的讀取函數'read_csv/read_csv2/read_tsv'分別對應于'utils'中的'read.csv/read.csv2/read.delim'。Hadley與其他成員開發的這個包更像是對'baseR'中與數據讀取有關函數的一個優化,使其更加規范、穩定和可再現。表1-13中列出了readr_delim包參數的英文名稱、功能的中文描述及部分傳參注釋。其中,比較重要的幾個參數依次為'file'它們比較'delim'(如使用'read_csv'等則無須設置)、'skip'、'col_name'和'col_types'。之所以說它們比較重要,是因為筆者發現適當調整參數設置可以讓后續的數據處理事半功倍。
表1-13 數據導入函數'read_delim'參數詳解


參數'file'的重要性不言而喻,無默認值,必須設置。第二位參數'delim'視情況可有可無,在使用具體的子函數'read_csv/read_csv2/read_tsv'時就無須設置。不過使用母函數'read_delim'時是沒有默認值的。
當一個.csv數據中前面有很多空白行時,skip參數可以直接跳過空白行來讀取數據。具體設置非常簡單,skip=3即表示跳過前三行數據,從第四行開始讀取。這個參數并非只用于跳過空白行,也可以用來讀取原始數據的一部分,配合n_max使用可以做到隨心所欲地讀取任一部分數據。
另外一個重要的參數是col_names。對原始數據中的變量名稱不滿意,可以使用該參數自定義變量名稱。這個參數可以理解為將read.table中的參數header和col.names的功能融合在一起,相關內容請參見1.1.3節。
變量屬性對后續計算會有很大影響,所以col_types參數的重要性也不容忽視。雖然Hadley等已經將這個參數的功能優化得非常智能了,但他還是會建議用戶應盡量依據個人需求來定義變量屬性,因為意外總是存在的。
下面的代碼展示了read_csv解析變量屬性正常、讀取正常的情況。運行函數之后,報告會在console中顯示每一列數據都被解析成了何種屬性,因此非常容易甄別哪一列數據類型不是期望的類型。在某些特殊情況下,比如原始文件分隔符號不統一的情況,這時自動解析功能會無法識別某一列或多列變量的屬性,進而顯示parsing failures(剖析失敗)的報告。用戶可以通過problems函數來查看具體的信息,從而確定原始數據中的哪一部分數據出現問題。
> library(readr) > read_csv("RawData/flights.csv") ## Parsed with column specification: ## cols( ## carrier = col_character(), ## flight = col_integer(), ## tailnum = col_character(), ## origin = col_character(), ## dest = col_character(), ## air_time = col_integer() ## )
- 極簡算法史:從數學到機器的故事
- 玩轉Scratch少兒趣味編程
- Drupal 8 Blueprints
- Julia機器學習核心編程:人人可用的高性能科學計算
- Learning ArcGIS Pro
- concrete5 Cookbook
- D3.js 4.x Data Visualization(Third Edition)
- Keras深度學習實戰
- 區塊鏈技術與應用
- Visualforce Developer’s guide
- INSTANT Yii 1.1 Application Development Starter
- 數據科學中的實用統計學(第2版)
- 視窗軟件設計和開發自動化:可視化D++語言
- Flink入門與實戰
- Linux Networking Cookbook