データ加工の技術
データが蓄積できたら、いよいよ分析で使える形に「加工」する工程です。このページでは、表計算ソフトを使ったフィルタ・ソート・欠損補完・集計・データ変換、正規表現による条件抽出、内部結合・外部結合・自己結合・UNION、そして文字コードの変換という、データ加工の基本技術を整理します。
この分野はExcelなど普段の業務でも触れる操作が多く、DS検定の中でも比較的とっつきやすい部分です。一方で「結合」の種類や正規表現の記法は混乱しやすいので、図や具体例でしっかり整理していきましょう。
1. 表計算ソフトでの基本的なデータ加工
DS検定リテラシーレベルにおけるデータ加工の土台は、Excelなどの表計算ソフトを使った基本操作です。具体的には、フィルタ(条件に合う行だけを表示する)、ソート(並び替え)、欠損補完(空欄になっているデータを埋める)、ランダム抽出(母集団から無作為に一部を取り出す)、集計(合計・平均などをまとめる)、演算(四則演算や関数を使った計算)といった処理が挙げられます。
加えて、データ変換と呼ばれる処理も重要です。たとえば「20260703」という数値を「2026年7月3日」という日時データに変換したり、「東京都」という都道府県名を緯度・経度のジオコード※1に変換したりする作業です。分析目的に応じて、データの「表現形式」そのものを作り替える力が求められます。
- フィルタ:「購入金額が1万円以上」の顧客だけを抽出する
- ソート:売上データを日付の新しい順に並び替える
- 欠損補完:アンケートの年齢欄が空白の行に、平均年齢や「不明」を補って埋める
- ランダム抽出:1万件の会員データから、無作為に100件をサンプルとして抽出する
- データ変換:「20260703」という数値列を日付型に変換する、「大阪府」を緯度経度のジオコードに変換する
表計算ソフトでの加工は地味に見えますが、DS検定では必須項目に指定されています。派手な機械学習の前に、まずこの基本操作を確実にできることが実務でもっとも重視されます。
第4章の「データ前処理」でも欠損値やサンプリングの話をしたよね。ここではそれを実際にExcelでどう操作するか、という実務目線の話になるよ。
2. 正規表現によるデータ抽出
大量のテキストデータの中から、特定のパターンに合致する部分だけを取り出したいとき役立つのが正規表現※2です。正規表現とは、文字列のパターン(型)を記号を使って表現する方法のことで、「メールアドレスの書式になっているか」「電話番号として正しい桁数か」といった判定に使われます。
たとえばメールアドレスは「文字列@文字列.文字列」という共通のパターンを持っています。このパターンを正規表現で書いておけば、大量のデータの中から「メールアドレスの書式を満たしている行」だけを機械的に判定・抽出できます。細かい記号の意味を全部覚える必要はありませんが、「文字列のパターンをルール化して抽出・検証する」という考え方そのものを理解しておくことが試験対策として重要です。
- 会員データベースの「メールアドレス」列を確認し、正規表現で書式が正しいレコードだけを抽出する
- 電話番号の列から、ハイフンの有無や桁数がバラバラなデータを、正規表現で統一フォーマットに一致するかチェックする
- 大量のログテキストから、「エラー」という文字列を含む行だけを正規表現で抽出する
正規表現は「条件に合致する文字列パターンを探す共通言語」です。メールアドレスの妥当性チェックの例がDS検定でも頻出なので、少なくともこの用途はセットで覚えておきましょう。
3. 表計算データの結合 ― 内部結合・外部結合・自己結合・UNION
複数の表(データセット)を1つにまとめる操作を結合※3と呼びます。表計算ソフトでも、VLOOKUP関数やPower Queryなどを使って、SQLのデータベース結合と似た操作を行うことができます。DS検定では、単一条件による4種類の結合パターンを理解しておく必要があります。
内部結合※4(インナージョイン)は、両方の表に共通するキー(照合条件)を持つ行だけを残す結合です。外部結合※5(アウタージョイン)は、一方の表のすべての行を残し、対応する行がなければ空欄で埋める結合です。自己結合※6は、同じ表を自分自身と結合する特殊なケースで、「同じ表の中の別の行同士を比較したい」ときに使います。UNION※7は結合とは少し性質が異なり、列の構成が同じ複数の表を、縦に積み重ねて1つにまとめる処理です。
| 処理 | やること | 具体例 |
|---|---|---|
| 内部結合 | 両方に共通するキーを持つ行だけを残す | 「注文がある顧客」だけを顧客テーブルと注文テーブルから抽出 |
| 外部結合 | 片方の表は全件残し、対応がなければ空欄にする | 「注文の有無にかかわらず全顧客」を一覧化(未購入顧客も表示) |
| 自己結合 | 同じ表を自分自身と結合する | 社員テーブルで「上司の氏名」を同じ社員テーブルから引いてくる |
| UNION | 列構成が同じ表を縦に積み重ねる | 4月の売上表と5月の売上表を1つの表にまとめる |
- 「実際に注文した顧客の一覧」が欲しい → 内部結合(注文がない顧客は除外される)
- 「全顧客のうち、未購入の人も含めて洗い出したい」→ 外部結合(顧客テーブルを軸に、注文がない場合は空欄)
- 「組織図で各社員の上司名を横に並べたい」→ 自己結合(社員テーブルを社員IDと上司IDで結合)
- 「東京支店と大阪支店の売上データを1つの表にまとめたい」→ UNION(縦方向に連結)
結合とUNIONの違いは「横に並べるか(結合)」「縦に積むか(UNION)」で覚えると混同しにくくなります。内部/外部結合の違いは「対応しない行を捨てるか、残すか」がポイントです。
内部結合と外部結合は試験のひっかけポイントの定番。「両方にあるものだけ」か「片方は全部残す」かの違いを、表の図をイメージしながら覚えるのがおすすめだよ。
4. 文字コードの変換
データを異なるシステム間でやり取りするとき、思わぬ落とし穴になりやすいのが文字コード※8の違いです。文字コードとは、コンピュータが文字をどのような数値(バイト列)として表現するかを定めたルールのことです。代表的なものに、日本語でよく使われるShift_JIS、世界共通で広く使われるUTF-8、古くから使われるEUC-JPなどがあります。
変換元のシステムがShift_JISでデータを出力し、変換先のシステムがUTF-8を前提にしている場合、そのまま読み込むと文字化けが発生します。この場合、変換処理の中で文字コードを正しく変換するコードを書く必要があります。プログラミング言語の多くは、ファイルを読み込む際に文字コードを指定できる仕組みを持っており、これを正しく使い分けることが求められます。
- 古い基幹システムがShift_JISでCSVを出力し、Webシステム側はUTF-8を前提にしている → 読み込み時にUTF-8へ変換するコードを書く
- 海外のパートナー企業から届いたファイルの文字コードが不明で文字化けする → 文字コードを判定してから変換処理を行う
- Pythonでファイルを読み込む際、
encoding='shift_jis'のように文字コードを明示して指定する
文字化けの多くは、「読み込み側と書き出し側で文字コードの前提が食い違っている」ことが原因です。エラーが出たら、まず両者の文字コードを確認する習慣をつけましょう。
「文字化けした謎の記号だらけのファイル」を見たことある人も多いはず。あれのほとんどは文字コードの不一致が原因なんだよ。
まとめ
このレッスンでは、データを分析に使える形へ整えるための加工技術を見てきました。最後に振り返っておきましょう。
- 表計算ソフトでの加工 ― フィルタ・ソート・欠損補完・ランダム抽出・集計・演算・データ変換を実行できる(必須項目)
- 正規表現 ― 正規表現を活用し、メールアドレスの書式判定など条件に合致するデータを抽出できる
- 表の結合 ― 単一条件による内部結合・外部結合・自己結合、UNION処理ができる(必須項目)
- 文字コード変換 ― 変換元と変換先の文字コードが異なる場合の変換処理のコードを書ける
次のレッスンでは、こうして加工したデータを他のシステムやチームに届ける「データ共有と連携」を扱います。CSV/JSON出力、DB連携、API、BIツールでの活用まで見ていきましょう。
- ジオコード … 住所や地名を、緯度・経度といった地図上の位置情報に変換したデータのこと。↩
- 正規表現 … 文字列のパターン(型)を記号を使って表現し、条件に合致する文字列を検索・抽出・判定する方法のこと。↩
- 結合 … 複数の表を、共通のキー(列)をもとに1つにまとめる操作のこと。SQLではJOINと呼ばれる処理にあたる。↩
- 内部結合(INNER JOIN) … 結合する両方の表に共通するキーを持つ行だけを残す結合方法のこと。↩
- 外部結合(OUTER JOIN) … 一方の表の行をすべて残し、対応する行がない場合は空欄で埋める結合方法のこと。↩
- 自己結合(SELF JOIN) … 同じ表を自分自身と結合する特殊な結合方法のこと。表の中の別の行同士を比較したいときに使う。↩
- UNION … 列の構成(列数・列の意味)が同じ複数の表を、縦方向に積み重ねて1つの表にまとめる処理のこと。結合(横方向に並べる)とは性質が異なる。↩
- 文字コード … コンピュータが文字をどのような数値(バイト列)として扱うかを定めたルールのこと。Shift_JISやUTF-8などの種類がある。↩