35
39

More than 5 years have passed since last update.

Rで大量データを読み込む~read.csvとfreadを比較~

Last updated at Posted at 2016-06-02

導入

fread() はRで用いる関数で、.csv, .tsv などのテキストファイルから2次元のテーブル形式にデータを読み込みます。
同系統の関数read.table, read.csvより読み込み速度が早いメリットがあります。
data.table というパッケージに同梱されているので、インストール未完の場合は、先にインストールしましょう。

R
install.packages("data.table")
library(data.table)

大量データの読み込み

  • 大量データを読み込むときはdata.tableのfread関数を使うのがおすすめ
  • 試しに270万レコードを読み込ませた

read.csv()の場合59.15秒

R
temp8 <- read.csv(`2410689.csv`, encoding=`UTF-8`, stringsAsFactors=F, sep=`,`)

fread()の場合6.39秒

R
library(data.table)
temp7 <- fread(`2410689.csv`, stringsAsFactors=FALSE, encoding=`UTF-8`, sep=`,`)

data.tableとdata.frameの違い

  • data.tableパッケージは大規模データを高速に処理できるようにR組み込みのdata.frameクラスを拡張したもの
  • data.frame()関数と同じようにdata.table()関数によりdata.tableオブジェクトを作成できる
  • fread()関数によってディスクから大規模データを高速に読み込むことができる
  • read.table()などよりも自由度は落ちるが、処理速度は遥かに高速

注意点

  • data.table型でdata.frame型と同じ処理をしても出来ない場合がある

data.frame型

temp <- read.csv(`Spdata.csv`, stringsAsFactors=FALSE, sep=`,`)
temp2 <- temp[, (colnames(temp)%in%c(`Date`, `Rank`))]
names(temp2)
## [1] `Date` `Rank`
head(temp2)
## 1  1日    5
## 2  1日    5
## 3  1日    5
## 4  1日    5
## 5  1日    5
## 6  1日    5

data.table型

library(data.table)
temp <- fread(`Spdata.csv`, stringsAsFactors=FALSE, sep=`,`)
temp2 <- temp[, (colnames(temp)%in%c(`Date`, `Rank`))]
names(temp2)
## NULL
head(temp2)
## [1]  TRUE  TRUE FALSE FALSE

fread関数でdata.frame型で読み込みたいときは。。。

  • data.table = FALSE を入れると大丈夫!!
library(data.table)
temp <- fread(`Spdata.csv`, stringsAsFactors=FALSE, sep=`,`, data.table = FALSE)
temp2 <- temp[, (colnames(temp)%in%c(`Date`, `Rank`))]
## [1] `Date` `Rank`
head(temp2)
##   Date    Rank
## 1  1日    5
## 2  1日    5
## 3  1日    5
## 4  1日    5
## 5  1日    5
## 6  1日    5

参考

http://statsbeginner.hatenablog.com/entry/2014/09/06/170214
http://kohske.github.io/ESTRELA/201410/index.html

35
39
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
35
39