0Pricing
R Academy · レッスン

read_csv()によるCSVファイルの読み込み

列型の推測、スキップ、エンコーディングのオプションを指定して区切りファイルを読み込みます。

「read_csv()によるCSVファイルの読み込み」はCoddyKit上の無料R Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはR Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 R Academyコースには全4レッスンが含まれています。

Base Rではなくreadrを使う理由

Base Rにはread.csv()がありますが、readrパッケージのread_csv()はより高速で、データフレームではなくtibbleを返します。また、デフォルトの型推測が改善されており、検出した列の型について分かりやすいメッセージを表示します。

library(readr)

# read_csv() vs read.csv():
# 1. Returns a tibble (prints nicely, faster subsetting)
# 2. Does NOT convert strings to factors by default
# 3. Shows column specification message
# 4. Faster for large files

# Example with a simple inline CSV:
df <- read_csv('name,score,grade
Alice,85,B
Bob,92,A
Carol,78,C')

print(df)
print(class(df))

ファイルパスから read_csv() を使用する

最も一般的な使い方は、ファイルパスの文字列をread_csv()に渡す方法です。この関数は区切り文字としてカンマを自動的に認識し、最初の行をヘッダーとして読み込み、最初の1000行から列の型を推測します。

library(readr)

# Reading from a file path (illustrative — file not present)
# df <- read_csv('data/sales_2024.csv')

# Reading from a URL also works:
# df <- read_csv('https://example.com/data.csv')

# Using a literal inline string for demonstration:
df <- read_csv('region,q1,q2,q3
East,100,120,115
West,200,195,210
North,80,85,90')

print(df)

col_types — 列の型を指定する

col_typesを使うと、readrによる型推測を上書きできます。列ごとに1文字を指定する簡潔な文字列(c=character、d=double、i=integer、l=logical、D=date、_=skip)またはcols()による指定を渡します。

library(readr)

df <- read_csv('id,date,amount,active
1,2024-01-15,99.99,TRUE
2,2024-02-20,149.50,FALSE
3,2024-03-10,75.00,TRUE',
# Compact: integer, Date, double, logical
col_types = 'iDdl')

print(df)
cat('\nColumn types:\n')
print(sapply(df, class))

明示的な型指定のための cols()

より細かく制御するには、cols()を使って各列の型を指定します。コレクター関数として、col_double()、col_character()、col_integer()、col_date(format=)、col_skip()、col_guess()を使用できます。

library(readr)

df <- read_csv('id,name,score,date
1,Alice,85.5,2024-01-15
2,Bob,92.0,2024-02-20
3,Carol,78.3,2024-03-10',
col_types = cols(
  id = col_integer(),
  name = col_character(),
  score = col_double(),
  date = col_date(format = '%Y-%m-%d')
))

print(df)
print(class(df$date))

skip と n_max 引数

skip=nは読み込み前に最初のn行をスキップします(メタデータやコメントのヘッダーがある場合に便利です)。n_max=nは最大n行のデータを読み込みます。大きなファイルのプレビューや、最初のチャンクだけの読み込みに適しています。

library(readr)

# File with metadata in first 2 lines
# (simulated with literal string)
df <- read_csv('# Generated 2024-01-15
# Source: internal DB
name,score,grade
Alice,85,B
Bob,92,A
Carol,78,C
Dave,88,B',
skip = 2,     # Skip the 2 comment lines
n_max = 3     # Read only 3 data rows
)

print(df)

na 引数 — 欠損値を定義する

デフォルトでは、read_csv()は空文字列とNAを欠損値として扱います。na引数を使うと、NAとして読み込む追加の文字列を指定できます。一般的な例として、'N/A'、'NULL'、'-999'、'.'があります。

library(readr)

df <- read_csv('name,score,city
Alice,85,NYC
Bob,N/A,NULL
Carol,78,.
Dave,-999,Chicago',
na = c('', 'NA', 'N/A', 'NULL', '.', '-999')
)

print(df)
cat('NAs per column:\n')
print(colSums(is.na(df)))

col_names — カスタム列名

ファイルにヘッダー行がない場合は、col_names = FALSEに設定します。readrが列名としてX1、X2などを自動的に付けます。あるいは、col_namesに文字ベクトルを渡して、カスタム名を指定し、ヘッダー行をスキップすることもできます。

library(readr)

# File without headers
df <- read_csv('Alice,85,NYC
Bob,92,LA
Carol,78,Chicago',
col_names = c('name','score','city')
)

print(df)

# auto-names when no header:
df2 <- read_csv('1,2,3
4,5,6', col_names = FALSE)
print(df2)

locale() — 標準とは異なる形式への対応

locale()は、地域固有の形式をreadrが解釈する方法を制御します。対象には小数点記号(ヨーロッパのデータでは',')、日付形式、エンコーディング、桁区切り記号があります。read_csv(locale=...)に渡して使用します。

library(readr)

# European-style CSV: semicolons as delimiters, comma as decimal
# read_csv2() is shorthand for this locale
df <- read_csv2('name;price;qty
Alice;9,99;100
Bob;24,50;50',
locale = locale(decimal_mark=',')
)

print(df)

# For dates in non-ISO format:
parse_date('15/01/2024', format='%d/%m/%Y')

progress と show_col_types

大きなファイルでは、read_csv()が進捗バーを表示します。progress=FALSEに設定すると非表示にできます(スクリプトで便利です)。すでに型を確認済みの場合は、show_col_types=FALSEで列の型に関するメッセージを抑制できます。

library(readr)

# Suppress progress and type messages for production scripts
df <- read_csv(
  'a,b,c
  1,x,TRUE
  2,y,FALSE',
  show_col_types = FALSE,
  progress = FALSE
)

print(df)

problems() — パース失敗を診断する

readrが想定された型に一致しない値に遭遇すると、その値をNAに置き換え、警告を記録します。problems(df)を呼び出すと、問題が発生した行と列、および元の値を正確に確認できます。

library(readr)

# Intentional type mismatch: 'N/A' in numeric column
df <- suppressWarnings(read_csv(
  'id,score
  1,85
  2,N/A
  3,92',
  col_types = cols(score = col_double())
))

print(df)
print(problems(df))

map() で複数のファイルを読み込む

readrとpurrr::map()を組み合わせると、複数のCSVファイルを読み込み、行方向に結合する処理を1ステップで実行できます。別々のファイルに保存された月次または四半期ごとのデータを処理する際に不可欠なパターンです。

library(readr)
library(purrr)
library(dplyr)

# Simulated: read and bind multiple CSV files
files <- c('q1.csv', 'q2.csv', 'q3.csv')

# In practice:
# all_data <- map_df(files, read_csv, show_col_types=FALSE)

# Demonstration with inline data:
q1 <- read_csv('month,sales\nJan,100\nFeb,120', show_col_types=FALSE)
q2 <- read_csv('month,sales\nApr,130\nMay,145', show_col_types=FALSE)

bind_rows(list(q1=q1, q2=q2), .id='quarter')

確認問題

'N/A'と'-99'という値を欠損値(NA)として扱うようにread_csv()へ伝えるには、どうすればよいですか?

まとめ:readrで read_csv() を使う

readrでCSVファイルを読み込む際の要点:

  • read_csv('file.csv') — CSVを読み込み、tibbleを返し、列の型を推測します
  • col_types = 'idcl'またはcols(x=col_double()) — 型を明示的に指定します
  • skip=n — ヘッダーやメタデータの行をスキップします。n_max=n — 読み込む行数を制限します
  • na = c('N/A','NULL') — 追加の文字列をNAとして扱います
  • locale(decimal_mark=',') — ヨーロッパ形式の数値に対応します
  • show_col_types=FALSE — スクリプトで型情報の表示を抑制します
  • problems(df) — パース失敗を確認します
  • 複数のファイルにはmap_df(files, read_csv)を組み合わせます
library(readr)

# Production-ready read_csv() call
df <- read_csv(
  'name,score,city,active
  Alice,85,NYC,TRUE
  Bob,N/A,LA,FALSE
  Carol,78,NULL,TRUE',
  col_types = cols(
    name = col_character(),
    score = col_double(),
    city = col_character(),
    active = col_logical()
  ),
  na = c('', 'NA', 'N/A', 'NULL'),
  show_col_types = FALSE
)

print(df)

よくある質問

「read_csv()によるCSVファイルの読み込み」レッスンは無料ですか?

はい。「read_csv()によるCSVファイルの読み込み」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、R Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 R Academyコースには全4レッスンが含まれています。

「read_csv()によるCSVファイルの読み込み」で何を学びますか?

列型の推測、スキップ、エンコーディングのオプションを指定して区切りファイルを読み込みます。 ブラウザで直接実行するハンズオンコードでR Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

R Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのR Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「read_csv()によるCSVファイルの読み込み」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このR Academyレッスンでコードを書いて実行できますか?

はい。すべてのR Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. read_csv()によるCSVファイルの読み込み
  2. TSVと固定幅ファイルの解析
  3. readxlによるExcelファイルの読み込み
  4. 複数形式へのデータ出力
← R Academyに戻る