無料ツールOpenRefineで学ぶ:効率的なデータクリーニング手法
データ分析を進める上で、「データが汚い」という課題に直面することは少なくありません。表記のゆれ、入力ミス、形式の不統一など、データのクオリティが低いと、その後の分析精度に大きく影響してしまいます。データ分析の時間の大部分は、実はこのような「前処理」と呼ばれるデータ整備作業に費やされると言われています。特に無料ツールで分析を始めたいと考えている方にとって、この前処理の効率化は重要な課題となります。
この記事では、無料で使用できる強力なデータ前処理ツール「OpenRefine(オープンリファイン)」に焦点を当てます。OpenRefineを使えば、手作業では時間のかかるデータクリーニング作業を効率的に行うことが可能です。高価な専門ツールやプログラミングスキルがなくても、データの整形や表記ゆれの修正を自動化できる具体的な手法をご紹介します。
OpenRefineとは?無料で使用できるデータ前処理ツール
OpenRefineは、大量のデータセットを整理、整形、拡張するための無料のオープンソースツールです。元々はGoogleによって開発され、「Google Refine」という名称でしたが、現在はオープンソースプロジェクトとしてコミュニティによって開発・維持されています。
なぜ無料・安価で利用できるのか
OpenRefineはオープンソースソフトウェアとして公開されているため、誰でも無料でダウンロードして使用できます。特定のライセンス料や利用料はかかりません。PCにインストールしてローカル環境で使用するため、クラウドサービスの利用料なども発生しません。
OpenRefineの主なメリット
- データクリーニングの効率化: 表記ゆれの修正、重複データの特定、データの整形など、煩雑な作業を自動化・半自動化できます。
- 大量データの扱い: 表計算ソフトで開くのが難しいほどの大容量データも比較的快適に扱うことができます。
- 変更履歴の記録: どのデータをどのように変更したかの履歴がすべて記録されるため、やり直しや手順の確認が容易です。
- GUIによる直感的な操作: コードを書く必要がなく、マウス操作を中心にデータの整形ができます。
- 機能拡張性: 独自の機能を追加するための拡張機能(Extension)も存在します。
OpenRefineのデメリット
- インストールが必要: Webブラウザ上で動作しますが、PCにOpenRefine本体をインストールする必要があります。
- 日本語処理の注意点: 一部の機能で日本語の扱いに関して注意が必要な場合があります(コミュニティによる改善は進んでいます)。
- リアルタイム連携の制限: 外部データベースやAPIとリアルタイムに連携してデータを取得・更新する機能は限定的です。あくまで手元のデータファイルをクレンジングするツールです。
OpenRefineの具体的な使い方
ここでは、OpenRefineの基本的な使い方から、実際のデータクリーニング手法までをステップごとに解説します。
ステップ1:OpenRefineのインストールと起動
- ダウンロード: OpenRefineの公式サイト(https://openrefine.org/)から、ご使用のOS(Windows, macOS, Linux)に合わせたファイルをダウンロードします。
- インストール/展開: ダウンロードしたファイルを実行するか、指定のフォルダに展開します。
- 起動: インストール/展開したフォルダ内の実行ファイル(例:
openrefine.exe
やrefine
スクリプト)を起動します。起動に成功すると、自動的にWebブラウザが開き、OpenRefineのユーザーインターフェースが表示されます。Webブラウザでhttp://127.0.0.1:3333/
またはhttp://localhost:3333/
にアクセスしても表示できます。
ステップ2:データの読み込みとプロジェクト作成
OpenRefineでデータを扱うためには、「プロジェクト」としてデータを読み込む必要があります。
- OpenRefineの画面が表示されたら、「Create Project」タブを選択します。
- 「Get data from」の中から「This Computer」を選び、「Choose Files」ボタンをクリックします。
- クリーニングしたいデータファイル(CSV, TSV, Excel, JSONなど、様々な形式に対応)を選択し、「Open」をクリックします。
- ファイルの読み込み設定画面が表示されます。エンコーディング(文字コード)、区切り文字、ヘッダー行の有無などを適切に設定します。特に日本語データの場合、エンコーディングが「UTF-8」や「Shift-JIS」など、元のファイルに合った設定になっているか確認が重要です。プレビューを見ながら調整してください。
- 画面下部の「Create Project」ボタンをクリックします。これでデータが読み込まれ、新しいプロジェクトが作成されます。
ステップ3:データの概観把握とファセット機能
データがプロジェクトとして読み込まれると、表形式でデータが表示されます。まずはデータの全体像を把握しましょう。ここで役立つのが「ファセット(Facet)」機能です。ファセットは、特定の列に含まれるデータの種類や分布を一覧表示する機能です。
- データが表示されたら、クリーニングしたい列の列名にカーソルを合わせ、表示される下向きの三角形(▼)をクリックします。
- 「Facet」メニューにカーソルを合わせ、「Text facet」(テキストデータの種類を一覧表示)や「Numeric facet」(数値データの分布をグラフ表示)などを選択します。
- 画面左側にファセットパネルが表示され、選択した列に含まれる値とその出現回数が一覧で表示されます。この一覧を見ることで、表記ゆれや入力ミス、異常値などを視覚的に確認できます。
活用例:顧客リストの「都道府県」列
「都道府県」列に対してText facetを作成すると、「東京都」「東京と」「とうきょう都」「Tokyo」といった表記ゆれが一目で確認できます。それぞれの値の横に出現回数が表示されるため、どの表記が最も多いかなども分かります。
ステップ4:表記ゆれの修正(クラスタリング機能)
ファセットで表記ゆれが見つかったら、OpenRefineの強力な「クラスタリング(Cluster)」機能を使ってまとめて修正できます。
- Text facetパネルが表示されている状態で、ファセットパネル上部の「Cluster」ボタンをクリックします。
- クラスタリング手法を選択します。OpenRefineにはいくつかの手法がありますが、最初はデフォルトの「Keying Function」で「fingerprint」などを試すのが一般的です。異なる表記でも似ているものを自動的にグループ化(クラスタリング)してくれます。
- クラスタリング結果が表示されます。左側に「Cluster」としてグループ化された表記が表示され、右側にOpenRefineが提案する代表的な値(「New Cell Value」)が表示されます。
- グループ化された表記の中に同じ意味のものが含まれているか確認します。修正したいグループの「Merge?」にチェックを入れ、「New Cell Value」を正しい表記に修正します。
- 複数のグループを修正する場合は、同様にチェックと修正を行います。
- 修正が終わったら、画面下部の「Merge Selected & Close」ボタンをクリックします。これでチェックを入れたグループの表記が、指定した正しい表記に一括修正されます。
活用例:商品カテゴリの統一
「カテゴリ」列で「食品」「食料品」「食べ物」のような表記ゆれがある場合、クラスタリング機能を使えばこれらを「食品」に統一する、といった作業が簡単に行えます。
ステップ5:データの整形・変換(Transform機能)
特定の書式に統一したり、不要な文字を取り除いたり、計算を行ったりするには「Transform」機能を使用します。OpenRefine独自の式言語である「GREL (General Refine Expression Language)」を使いますが、簡単な処理であれば直感的に操作できます。
- 整形したい列の列名に表示される下向きの三角形(▼)をクリックします。
- 「Edit cells」にカーソルを合わせ、「Transform」を選択します。
- 「Transform」画面が表示されます。ここにGREL式を入力してデータを変換します。入力フィールドの下に「Preview」が表示されるので、式の効果を確認しながら作業できます。
よく使うGREL式の例
- 前後の空白を除去:
value.trim()
(値の文字列の先頭と末尾にある空白文字を削除) - 文字列をすべて大文字にする:
value.toUppercase()
- 文字列をすべて小文字にする:
value.toLowercase()
- 特定の文字列を置換:
value.replace("古い文字列", "新しい文字列")
(例:value.replace("丁目", "-")
) - 特定の文字で分割:
value.split("分割文字")
(例:value.split("-")
で「1-2-3」を ["1", "2", "3"] の配列に変換) - 条件分岐:
if(value == "条件", "真の場合の値", "偽の場合の値")
(例:if(value > 1000, "高", "低")
)
入力フィールドに式を入力し、「OK」をクリックすると、その列のデータが一括で変換されます。
活用例:電話番号の書式統一
「電話番号」列に「03-1234-5678」「0312345678」「(03)1234-5678」といった異なる形式で入力されている場合、不要な記号を削除して「0312345678」の形式に統一する、といった整形がTransform機能で可能です。
ステップ6:重複行の特定と削除
データによっては、完全に同じ内容の行が重複して登録されている場合があります。このような重複行を特定し、削除することも重要です。
- いずれかの列の列名に表示される下向きの三角形(▼)をクリックします。
- 「Edit rows」にカーソルを合わせ、「Remove matching rows」を選択します。
- この機能は、特定の条件に一致する行を削除するものですが、重複行の削除には別の手法を使います。まず、重複を判断するための「キー」となる列(例:顧客ID、商品コードなど)を選択します。
- その列でソート機能を使用します。「Sort」 -> 「Text」や「Numeric」で昇順/降順にソートします。重複データが隣り合うように並びます。
- ソート後、「Edit rows」 -> 「Remove rows」を選択します。これにより、ソートされた状態の重複行をまとめて削除できる場合があります。より確実な方法としては、全ての列を結合した新しい列を作成し、その列でファセットを作成して出現回数が1より大きいものをフィルタリングし、該当行を削除するという方法もあります。
ステップ7:クレンジング結果のエクスポート
データクリーニングが完了したら、整形済みのデータをファイルとして出力します。
- OpenRefineの画面上部にある「Export」ボタンをクリックします。
- 出力したいファイル形式を選択します(CSV, Excel, TSV, JSONなど)。
- ファイル名と保存場所を指定してエクスポートします。
これで、クレンジングされたきれいなデータを、その後の分析や可視化に使用することができます。
よくある疑問や注意点
- 日本語の文字化け: データの読み込み時にエンコーディング設定が正しくないと、日本語が文字化けすることがあります。元のファイルのエンコーディング(Shift-JIS, UTF-8など)を確認し、読み込み設定で正しく指定してください。
- 処理速度: 大容量(数百万行以上)のデータを扱う場合、処理に時間がかかることがあります。PCの性能やデータの複雑さにも依存します。
- GREL式の学習: Transform機能で複雑な処理を行うにはGREL式を学ぶ必要がありますが、基本的な式はシンプルで分かりやすいため、少しずつ慣れていくのが良いでしょう。OpenRefineのWikiやコミュニティで情報が得られます。
- 元データのバックアップ: OpenRefineは元データファイルを直接編集するわけではありませんが、万が一に備え、重要なデータは事前にバックアップを取っておくことを推奨します。
まとめ:OpenRefineでデータ活用の第一歩を踏み出す
データ分析において、データの品質は結果の信頼性に直結します。しかし、前処理は地味で時間のかかる作業です。今回ご紹介したOpenRefineという無料ツールは、この前処理、特にデータクリーニングの負担を大きく軽減してくれます。
表記ゆれの修正、データの整形、重複の削除といった基本的な作業をOpenRefineで効率化することで、分析自体の時間を確保できるようになります。まずは手元にある少量のデータからOpenRefineを試してみて、その操作感や効果を実感してみてください。
OpenRefineでデータをきれいに整形したら、次はGoogle SheetsやGoogle Looker Studio、Tableau Publicといった他の無料ツールを使って、集計や可視化に進むことができます。OpenRefineで磨かれたデータは、これらのツールでの分析や可視化の精度を高め、より信頼性の高い意思決定に繋がるはずです。データ活用の第一歩として、ぜひOpenRefineを試してみてはいかがでしょうか。