
データ分析の成果は、分析手法そのものよりも、その前段にあるデータクリーニングの質に大きく左右されます。煩雑になりがちな前処理も、Rとtidyverseを使えば一連のコードとして整理できるのが大きな特長です。本記事では、Rでのデータクリーニングの考え方から具体的な手順、つまずきやすい失敗パターンまでを体系的に解説していきます。
Excelの手作業による修正は、件数が増えるほど再現が難しく、どこをどう直したのかを後から追えなくなりがちです。一方でRによる処理は、加工の手順がそのままスクリプトとして残るため、修正の履歴がコードとして可視化されます。属人化を避け、チームで安定してデータを運用したい現場ほど、Rでのクリーニングが効いてくるはずです。
これからRで前処理を始める方も、すでにExcelやSQLで運用している方も、自社のデータ整備の進め方を見直すヒントとして本記事をご活用いただけます。手を動かしながら読み進めることで、コードを書く勘所が早くつかめます。まずは身近なCSVファイル1つから、Rでのデータクリーニングを試してみてください。
目次
Rにおけるデータクリーニングとは
はじめに、そもそもデータクリーニングとは何を指すのか、そしてなぜRという言語がその作業に向いているのかを整理します。ここではクリーニングの定義とRで取り組むメリット、ExcelやSQLとの使い分け、前処理を支える主要パッケージという3つの観点から、Rでの前処理の全体像をつかんでいきましょう。
データクリーニングの定義とRで行うメリット
データクリーニングとは、収集したままの「汚れた」データを、分析に使える正確で一貫した状態へ整える作業全般を指します。具体的には、欠損値の処理、表記ゆれの統一、重複行の除去、列の型変換、外れ値の確認などが含まれます。実務では、分析プロジェクト全体の作業時間のうち、この前処理が大きな割合を占めることも珍しくありません。
Rでクリーニングを行う最大のメリットは、すべての加工処理を「再現可能なコード」として残せる点にあります。元データさえあれば、同じスクリプトを実行するだけで誰でも同一の結果を得られますし、処理内容のレビューや引き継ぎも容易になります。手作業のExcelでは見えにくい「どの値をどう変えたのか」が、Rでは一行ずつ明文化されるのです。
データクレンジングとは?意味と代表手法を解説!
Excel・SQLではなくRで行うべきケース
Excelは手軽で視認性に優れ、SQLは大規模データベースからの抽出や集計に強みがあります。一方でRは、複雑な変換ロジックを伴う前処理や、統計処理・可視化までを一気通貫で行いたい場面で力を発揮します。それぞれに得意領域があるため、データの規模と処理の複雑さに応じて選び分けることが肝心です。
おおまかな使い分けの目安を、次の表に整理しました。実際の現場では、SQLで一次抽出したデータをRで仕上げるといった併用も一般的です。
観点 | Excel | SQL | R |
|---|---|---|---|
得意な規模 | 数千行まで | 大規模テーブル | 中〜大規模 |
再現性 | 低い(手作業) | 高い(クエリ) | 高い(スクリプト) |
複雑な変換 | 苦手 | やや苦手 | 得意 |
可視化・統計 | 簡易的 | 不可 | 得意 |
手作業の修正が積み重なって担当者しか中身を把握できなくなっているなら、Rへの移行を検討する好機です。再現性と拡張性を求めるほど、Rの優位性がはっきりしてきます。
R言語とは?Rの利点/弱点、Pythonとの違い、特徴を一気に解説
前処理で使う主要パッケージ:tidyverse・dplyr・tidyr・stringr
Rの前処理は、関連パッケージ群をまとめたtidyverseを読み込むことから始まります。tidyverseには、読み込み・加工・整形・文字列処理といった工程ごとに役割の異なるパッケージが含まれており、library(tidyverse)の一行でまとめて利用できるのが基本です。
各パッケージの役割を理解しておくと、どの処理にどの関数を使えばよいかが直感的に判断できるようになります。代表的な構成は次のとおりです。
- dplyr:行の絞り込み・列の選択・集計など、データ加工の中心を担う
- tidyr:縦持ち・横持ちの変換や、整然データへの整形を担当する
- readr:read_csv()などによる高速で型に配慮した読み込みを提供する
- stringr:表記ゆれの統一や不要な空白の除去など文字列処理に使う
R(R言語)|インストール方法とワークフローをわかりやすく解説
Rでのデータクリーニングで解決できること
続いて、Rで前処理を行うことで実務上どんな課題が解決するのかを具体的に見ていきます。再現性の確保、大量データの効率的な整形、後続の分析工程へのスムーズな接続という3つの価値は、いずれもExcelの手作業では得がたいものです。
再現性のあるクリーニング処理をコードとして残せる
Rで書いた前処理スクリプトは、いわば「データ加工の設計図」です。どの列をどんなルールで整えたのかがコードに明記されるため、第三者がレビューしても処理の意図を正確にたどれます。月次レポートのように同じ加工を繰り返す業務では、この再現性がそのまま作業時間の削減につながります。
また、元データが更新されても、スクリプトを再実行するだけで最新の整形結果が得られるのも利点です。手作業のやり直しが発生しないため、ヒューマンエラーの混入も抑えられるでしょう。データ品質を継続的に保つうえで、この仕組みは大きな支えになります。
データ品質とは?品質評価項目や品質を向上させるための実務的対策を解説
大量・複雑なデータを一括で効率的に整形できる
Excelでは行数が数万を超えると動作が重くなり、手作業での修正も現実的ではなくなります。Rであれば、数十万行規模のデータでも同じコードで一括処理でき、列単位・条件単位の変換をまとめて適用できる点が強みです。
さらに、複数の条件分岐を伴う変換や、複数ファイルへの同一処理の適用も、関数とパイプを組み合わせることで簡潔に書けます。手作業では膨大だった作業が、数行のコードに置き換わるのです。
分析・可視化・機械学習へスムーズに接続できる
Rの強みは、前処理から分析・可視化・モデリングまでを同じ環境で完結できる点にあります。クリーニング済みのデータをそのままggplot2でグラフ化したり、統計モデルや機械学習の入力に渡したりと、工程間でデータを移し替える手間がかかりません。
前処理と分析が地続きであることは、試行錯誤のスピードを大きく高めてくれます。「整形してみて、可視化して気づき、また整形し直す」というサイクルを、ファイルを行き来せずに回せるのは実務上の大きな利点です。
Rでのデータクリーニングの進め方【7ステップ】
ここからは、実際にRで前処理を進める手順を7つのステップに分けて解説します。読み込みから現状把握、不要データの除去、型変換、欠損値処理、外れ値・重複への対応、そして整然データへの整形と結合まで、上から順にたどれば一通りのクリーニングが完成する流れになっています。
- STEP1:データの読み込み
- STEP2:データ構造の確認
- STEP3:不要な行・列の削除と列名の変更
- STEP4:列の型変換と表記ゆれの統一
- STEP5:欠損値の確認・除去・補完
- STEP6:外れ値・重複データの検出と処理
- STEP7:整然データへの整形とデータの結合
STEP1.データの読み込み:read_csvと文字コード・列型の指定
最初の工程はデータの読み込みです。readrのread_csv()を使うと、CSVを高速に読み込めるうえ、各列の型を自動で推定してくれます。日本語を含むファイルでは、locale = locale(encoding = "Shift_JIS")のように文字コードを明示すると、文字化けを未然に防げます。
読み込みの段階では、列の型を自動推定に任せきりにせず、必要に応じて明示的に指定するのが安全です。郵便番号やIDのように先頭の0が意味を持つ列は、数値ではなく文字型として読み込むことで、情報の欠落を避けられるのです。
STEP2.データ構造の確認:glimpse・summary・skimによる現状把握
読み込んだら、すぐに加工へ進む前にデータの全体像を把握します。glimpse()は列名・型・先頭の値を一覧で示し、summary()は数値列の分布や欠損の有無を要約してくれるので便利です。skimrパッケージのskim()を使えば、欠損率や基本統計量をより詳しく確認できます。
この段階で「数値のはずの列が文字型になっていないか」「欠損がどの列に集中しているか」を見ておくと、後工程の手戻りが減ります。現状把握を丁寧に行うことが、結果的に最短ルートになるのです。
STEP3.不要な行・列の削除と列名の変更
実データには、集計用の小計行や注釈行、分析に使わない列がしばしば紛れ込んでいます。dplyrのfilter()で不要な行を除き、select()で必要な列だけを残すことで、扱いやすい形に絞り込めるのです。
列名は、日本語や空白を含むものを英数字の分かりやすい名前へ統一しておくと、その後の処理が格段に書きやすくなるので便利です。rename()やjanitorパッケージのclean_names()を使えば、表記の揺れた列名を一括で整えられます。
STEP4.列の型変換と表記ゆれの統一
数値として扱いたい列が文字型になっている場合は、as.numeric()やmutate()で型を変換します。日付列もas.Date()やlubridateで適切な日付型に直しておくと、期間の計算や並べ替えが正しく行えます。
表記ゆれの統一も重要な工程です。「株式会社」と「(株)」、全角と半角、大文字と小文字といった揺れは、stringrのstr_replace_all()やstr_to_lower()で機械的にそろえられます。表記をそろえておくことで、後の集計や結合での取りこぼしを防げます。
量的変数と質的変数の違いをわかりやすく解説
STEP5.欠損値(NA)の確認・除去・補完
Rでは欠損値がNAとして表現されます。is.na()やsummary()で欠損の分布を確認したうえで、対応方針を決めましょう。欠損がごく一部であればdrop_na()で行ごと除去し、分析上欠かせない列であれば補完を検討します。
補完の方法は、平均値や中央値で埋める、前後の値で埋める、ほかの列から推定するなど複数あり、データの性質と分析目的に応じて選ぶ必要があります。安易に0で埋めると分布を歪めてしまうことがあるため、なぜその補完を選ぶのかを必ず説明できる状態にしておきましょう。
STEP6.外れ値・重複データの検出と処理
外れ値は、入力ミスのような明らかな誤りと、現実に起こりうる極端な値とを区別して扱う必要があります。箱ひげ図や四分位範囲を使って候補を洗い出し、一つひとつ妥当性を確認してから除外や補正を判断します。機械的にすべて削除すると、重要な情報まで失いかねません。
重複行は、distinct()で簡単に除去できます。ただし、完全一致だけでなく、表記ゆれによる「見かけ上の別データ」が紛れていることもあるため、キーとなる列をそろえてから重複を判定するのが確実です。
箱ひげ図とは?外れ値の見方やExcelでの作成方法まで徹底解説
STEP7.整然データ(tidy data)への整形とデータの結合
最後に、分析しやすい形である整然データ(tidy data)へ整形します。整然データとは「1行が1観測、1列が1変数、1セルが1値」という原則に沿った形式で、tidyrのpivot_longer()やpivot_wider()で縦横を変換しながら整えていくのが基本です。
複数のデータソースを扱う場合は、共通のキー列をもとにdplyrのleft_join()などで結合します。型や表記をそろえてから結合することで、対応する行が正しく突き合わさり、分析用のデータセットが完成します。
Rでのデータクリーニングを効率化する実践ポイント
一通りの手順を押さえたら、次は日々の作業をより速く・確実にするための工夫を取り入れましょう。ここでは、パイプ演算子による処理の連結、読み込み時の型の扱い方、スクリプト化による再現性の担保という、現場で効果の大きい3つのポイントを紹介します。
パイプ演算子で処理を一連の流れとして記述する
Rの前処理を読みやすくする鍵が、パイプ演算子(%>%)です。パイプを使うと、「読み込み→絞り込み→列変換→整形」といった一連の処理を、上から下へ流れるように記述できます。途中結果を変数に何度も代入する必要がなくなり、コードの見通しが良くなるのも魅力です。
処理を一本の流れとしてつなぐことで、どの順番で何をしているのかが一目で追えるようになります。後から手順を差し替えたり、途中に新しい処理を挿入したりするのも容易です。tidyverseの設計思想とも相性がよく、まず身につけたい書き方だといえます。
初学者のためのRの基本構文
読み込み時は全列を文字型にし、型変換は後工程で行う
数値と文字が混在した列を自動推定に任せると、意図せず列全体が文字型になったり、一部の値が欠損扱いになったりすることがあります。こうしたトラブルを避けるには、読み込み時にあえて全列を文字型として取り込み、中身を確認してから型変換を行う方法が有効です。
いったん文字型でそろえておけば、想定外の値が混ざっていても読み込み自体は失敗しません。中身を点検したうえで、列ごとに適切な型へ変換していけば、データの取りこぼしを防ぎながら安全に処理を進められます。
クリーニング処理をスクリプト化し再現性を担保する
その場限りの手作業ではなく、処理をスクリプトファイルとして保存しておくことが、再現性を保つうえでの基本です。読み込みから整形までを1つのスクリプトにまとめておけば、データが更新されても再実行するだけで同じ結果が得られます。
処理の意図をコメントとして書き添えておくと、後日見返したときや引き継ぎの際に理解が早まります。ファイル名や保存場所のルールもチームで決めておくと、誰がいつ実行しても再現できる体制が整うはずです。
Rでのデータクリーニングでよくある失敗パターン
効率化の工夫とあわせて、初学者がつまずきやすい落とし穴も知っておきましょう。あらかじめ典型的な失敗を把握しておけば、原因の切り分けが早くなり、無用な時間のロスを避けられます。ここでは特に遭遇しやすい4つのパターンを取り上げます。
文字コードの指定漏れで文字化け(Shift_JIS・全角空白)が発生する
日本語を含むCSVでは、文字コードの指定漏れが文字化けの最大の原因です。WindowsのExcelで作られたファイルはShift_JIS(CP932)であることが多く、これをUTF-8として読み込むと文字が崩れてしまいます。read_csv()のlocale引数で正しいエンコーディングを指定しましょう。
また、全角空白が値に紛れていると、見た目は同じでも別の文字列として扱われ、結合や集計で取りこぼしが起きます。str_squish()などで余分な空白を取り除いておくと、こうした見えにくい不具合を防げます。
dplyrのfilterがbase関数をマスクし意図しない挙動になる
tidyverseを読み込むと、dplyrのfilter()やlag()などが、R標準(base)の同名関数を上書き(マスク)することがあります。読み込み時に表示される「masked」というメッセージは、まさにこの状態を知らせるものです。
意図しない関数が呼ばれて挙動がおかしいと感じたら、dplyr::filter()のようにパッケージ名を明示して呼び出すと確実です。どのパッケージの関数を使っているかを意識する習慣が、原因不明のエラーを減らします。
数値列に文字が混在し列全体が文字型として読み込まれる
「1,000」のような桁区切りのカンマや、「-」「N/A」といった欠損を表す文字列が数値列に混ざっていると、その列は丸ごと文字型として読み込まれます。合計や平均を計算しようとしてエラーになる典型的なケースです。
対処としては、読み込み後にカンマや不要な記号をstr_replace_all()で除去し、欠損を表す文字列をNAに置き換えてから数値型へ変換します。原因となる値を特定し、順を追って整えることが解決の近道です。
セル結合や空行が原因でNAや不要な行が生まれる
Excelのセル結合は、Rで読み込むと結合範囲の先頭以外がNAになります。見出しが結合されているとデータの読み取り位置がずれることもあるため、できれば読み込み前に結合を解除しておくのが安全です。
集計の都合で挿入された空行や小計行も、そのままでは不要な行として残ります。filter()で条件を指定して取り除くか、読み込み時にskip引数で読み飛ばすことで、本来必要なデータだけを抽出できます。
Rでのデータクリーニングの実践例
最後に、これまでの手順がどのように組み合わさるのかを、実務に近い3つの例で確認します。政府統計のグラフ化、アンケートデータの整備、複数ソースの結合という、いずれも現場で頻出するシーンを取り上げます。
政府統計(e-Stat)のExcelデータをグラフ化できる形に整える
政府統計ポータルのe-Statで配布されるExcelファイルは、人が読む前提でレイアウトされており、複数段の見出しや結合セル、注釈行が含まれています。そのままでは集計に使えないため、不要な行のスキップ、見出しの再設定、縦持ちへの変換といった前処理が必要です。
読み込み時に余分な行を読み飛ばし、pivot_longer()で年や項目を縦持ちに整えると、ggplot2でそのまま描画できる形になります。配布元の体裁に合わせて整形ルールを一度作っておけば、更新版が出ても同じスクリプトで対応できます。
ggplot2をインストールし美しいグラフを作るまでの基礎知識【入門編】
アンケート調査データの欠損値・表記ゆれを整える
アンケートデータは、自由記述や選択肢の表記ゆれ、未回答による欠損が多く含まれる典型例です。まずは欠損の分布を確認し、設問ごとに「未回答」をどう扱うかの方針を決めます。分析に使う設問では補完を、参考設問では除外をといった具合に、設問の性質に応じて判断するとよいでしょう。
「はい」「Yes」「1」のように同じ意味で表記が異なる回答は、stringrやcase_when()で1つの値にそろえます。表記をそろえてから集計することで、本来同じはずの回答が分散してしまう事態を防げます。
複数ソースのデータを結合し分析用データセットを作る
売上データと顧客マスタ、商品マスタなど、複数のファイルを突き合わせて1つの分析用データセットを作る場面は数多くあります。このとき鍵になるのが、結合キーとなる列の型と表記をあらかじめそろえておくことです。
キーの型が片方は数値、もう片方は文字型のままだと、見た目が同じでも結合に失敗します。左側のデータをすべて残したいならleft_join()を使うなど、結合の種類を目的に合わせて選び、結合後は行数や欠損の増減を必ず確認しましょう。
まとめ
本記事では、Rでのデータクリーニングについて、定義やメリットから7つの手順、効率化のポイント、よくある失敗、実践例までを順に解説しました。Rで前処理を行う最大の価値は、すべての加工をコードとして残し、誰が実行しても同じ結果を再現できる点にあります。まずは身近なデータでread_csv()からglimpse()までを試し、少しずつ手順を増やしていくのがおすすめです。
「これからデータ領域に関する取り組みを実施したいけれど、何から手をつけたらいいかわからない」「データ専門家の知見を取り入れたい」という方は、データ領域の実績豊富な弊社、データビズラボにお気軽にご相談ください。
貴社の課題や状況に合わせて、データの取り組みをご提案させていただきます。







